确定对密钥的访问权限 - AWS Secrets Manager
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

确定对密钥的访问权限

要确定有权访问 AWS Secrets Manager 中的密钥的用户的全部范围,您必须检查密钥策略(如果存在)以及附加到 IAM 用户和组或 IAM 角色的所有 AWS Identity and Access Management (IAM) 策略。为了确定一个密钥可能被使用的范围,或者为了帮助您满足合规性或审计要求,您可能需要这样做。以下主题帮助您生成当前具有密钥访问权限的 AWS 委托人和身份的完整列表。

了解策略评估

在授予密钥的访问权限时,Secrets Manager 评估附加到密钥的密钥策略,以及附加到发送请求的 IAM 用户或角色的所有 IAM 策略。为此,Secrets Manager 使用类似于 IAM 用户指南确定是允许还是拒绝请求中所述的过程。

例如,假设您具有两个密钥和三个用户,它们均位于同一 AWS 账户中。密钥和用户有以下策略:

  • 密钥 1 没有密钥策略。

  • 密钥 2 有一个允许访问用户委托人 Ana 和 Carlos 的密钥策略。

  • Ana 没有引用密钥 1 或密钥 2 的 IAM 策略。

  • Bob 的 IAM 策略允许对所有密钥执行所有 Secrets Manager 操作。

  • Carlos 的 IAM 策略拒绝对所有密钥执行所有 Secrets Manager 操作。

Secrets Manager 确定以下访问权限:

  • Ana 只能访问密钥 2。她没有将策略附加到其用户,但密钥 2 为其显式授予访问权限。

  • Bob 可以访问密钥 1 和密钥 2,因为 Bob 的 IAM 策略允许访问账户中的所有密钥,并且没有显式“拒绝”覆盖访问权限。

  • Carlos 无法访问密钥 1 或密钥 2,因为 Secrets Manager 拒绝其 IAM 策略中的所有操作。Carlos 的 IAM 策略中的显式拒绝覆盖附加到密钥 2 的密钥策略中的显式“允许”。

Secrets Manager 从密钥或身份中添加“允许”访问的所有策略语句。对于重叠的操作和资源,任何显式拒绝将覆盖任何允许。

检查资源策略

您可以使用 GetResourcePolicy 操作并检查 ResourcePolicy 响应元素,以查看附加到密钥的密钥策略文档。

检查资源策略文档,并记下每个策略语句 Principal 元素中指定的所有委托人。Principal 元素中的 IAM 用户、IAM 角色和 AWS 账户均有权访问该密钥。

示例策略语句 1

{ "Sid": "Allow users or roles in account 123456789012 who are delegated access by that account's administrator to have read access to the secret", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::123456789012:root"}, "Action": [ "secretsmanager:List*", "secretsmanager:Describe*", "secretsmanager:Get*" ], "Resource": "*" }

在上述策略语句中,&region-arn;iam::111122223333:root 指的是 AWS 账户 111122223333,并允许该账户的管理员为该账户中的任何用户或角色授予访问权限。

您还必须在作为委托人列出的所有 AWS 账户中检查所有 IAM 策略,以确定这些策略是否允许访问该密钥。

示例策略语句 2

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:*", "Principal": {"AWS": "arn:aws:iam::123456789012:user/anaya"}, "Resource": "*" } ] }

在上述策略语句中,&region-arn;iam::111122223333:user/anaya 指的是 AWS 账户 111122223333 中名为 Anaya 的 IAM 用户。该用户可以执行所有 Secrets Manager 操作。

示例策略语句 3

{ "Sid": "Allow an app associated with an &IAM; role to only read the current version of a secret", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::123456789012:role/EncryptionApp" }, "Action": ["secretsmanager:GetSecretValue"], "Condition": { "ForAnyValue:StringEquals": {"secretsmanager:VersionStage": "AWSCURRENT" } }, "Resource": "*" }

在上述策略语句中,&region-arn;iam::123456789012:role/EncryptionApp 指的是 AWS 账户 123456789012 中名为 EncryptionApp 的 IAM 角色。担任该角色的委托人可以执行策略语句中列出的一个操作。该操作获取密钥的当前版本的详细信息。

要了解您可以在密钥策略文档中指定委托人的所有不同方法,请参阅 IAM 用户指南 中的指定委托人

要了解有关 Secrets Manager 密钥策略的更多信息,请参阅基于资源的策略

检查 IAM 策略

除了密钥策略,您还可以将 IAM 策略与密钥策略结合使用来允许访问密钥。有关 IAM 策略和密钥策略如何协同工作的更多信息,请参阅了解策略评估

要确定当前有权通过 IAM 策略访问密钥的身份,您可以使用基于浏览器的 IAM 策略模拟器工具,也可以将请求发送到 IAM 策略模拟器 API。

检查策略的效果

请按照以下选项卡之一中的步骤进行操作:

Using the web-based Policy Simulator

可以使用 IAM 策略模拟器帮助您了解哪些委托人可以通过 IAM 策略访问一个密钥。

  1. 登录 AWS 管理控制台,然后打开 IAM 策略模拟器 (https://policysim.aws.amazon.com/)。

  2. 用户、组和角色窗格中,选择具有您要模拟的策略的用户、组或角色。

  3. (可选)清除要从模拟中忽略的任何策略旁边的复选框。要模拟所有策略,则将所有策略保持选中状态。

  4. 策略模拟器窗格中,执行以下操作:

    1. 对于选择服务,请选择 AWS Secrets Manager

    2. 要模拟特定 Secrets Manager 操作,请针对选择操作选择要模拟的操作。要模拟所有 Secrets Manager 操作,请选择全选

  5. (可选) 默认情况下,策略模拟器会模拟对所有密钥的访问。要模拟访问特定密钥,请选择模拟设置,然后键入要模拟的密钥的 Amazon 资源名称 (ARN)。

  6. 选择 Run Simulation

您可以在结果部分查看模拟的结果。对 AWS 账户中的每个 IAM 用户、组和角色重复步骤 2 到 6。

Using the Policy Simulator CLI or SDK operations

您可以使用 IAM API 以编程方式检查 IAM 策略。以下步骤提供了如何执行该操作的一般概述:

  1. 对于在密钥策略中作为委托人列出的每个 AWS 账户(即,使用以下格式列出的每个根用户账户"Principal": {"AWS": "arn:aws:iam::accountnumber:root"}),请使用 IAM API 中的 ListUsersListRoles 操作以检索该账户中的每个 IAM 用户和角色的列表。

  2. 对于列表中的每个 IAM 用户和角色,请使用 IAM API 中的 SimulatePrincipalPolicy 操作并发送以下参数:

    • 对于 PolicySourceArn,指定列表中用户或角色的 ARN。只能为每个 SimulatePrincipalPolicy API 请求指定一个 PolicySourceArn。因此,您必须多次调用此 API,针对列表中的每个 IAM 用户和角色调用一次该 API。

    • 对于 ActionNames 列表,指定要模拟的每个 Secrets Manager API 操作。要模拟所有 Secrets Manager API 操作,请使用 secretsmanager:*。要测试单独的 Secrets Manager API 操作,可在每个 API 操作之前添加“secretsmanager:”—,例如“secretsmanager:ListSecrets”。要获取所有 Secrets Manager API 操作的完整列表,请参阅 AWS Key Management Service API 参考 中的操作

    • (可选)要确定 IAM 用户或角色是否有权访问特定的密钥,请使用 ResourceArns 参数指定密钥的 ARN 列表。要确定 IAM 用户或角色是否有权访问任何密钥,请勿使用 ResourceArns 参数。

IAM 通过以下评估决策来响应每个 SimulatePrincipalPolicy API 请求:allowedexplicitDenyimplicitDeny。对于包含评估决策 allowed 的每个响应,响应还包含允许的特定 Secrets Manager API 操作的名称以及评估中使用的密钥的 ARN(如果适用)。