为密钥管理基于资源的策略 - AWS Secrets Manager
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为密钥管理基于资源的策略

本节介绍了如何在密钥中附加、检索和删除基于资源的策略。

账户拥有所有 AWS 资源,包括您存储在 AWS Secrets Manager 中的密钥。AWS 包含用于创建或访问资源的基于资源的策略。AWS账户管理员可以通过将基于资源的策略直接附加到访问资源所需的资源、密钥或 AWS 身份、用户、组和角色,来控制对 IAM 资源的访问。

有关 AWS Identity and Access Management 的更多信息,请参阅 的 IAM 策略和权限部分。IAM 用户指南

您可以在以后检索基于资源的策略以进行检查,并在不再需要时删除基于资源的策略。

使用 Secrets Manager 控制台或 GetResourcePolicyPutResourcePolicyDeleteResourcePolicy APIs 检索、附加或删除密钥的基于资源的策略。在控制台中附加 JSON 格式的基于资源的策略时,Secrets Manager 使用 Zelkova(自动推理引擎)和 API ValidateResourcePolicy 来验证该策略是否未授予广泛的 IAM 委托人访问您的密钥。或者,您也可以从 CLI 或开发工具包中使用 PutResourcePolicy 参数调用 BlockPublicPolicy API。

为视为可接受的基于资源的策略,基于资源的策略必须仅授予对以下一个或多个固定值的访问权限:

  • aws:SourceArn

  • aws:SourceVpc

  • aws:SourceVpce

  • aws:SourceAccount

有关更多信息,请参阅 Amazon S3 文档

AWS 在以下产品中使用 Zelkova 和 Secrets Manager 提供类似的体验:

  • AWS Config

  • Amazon S3

  • AWS Trusted Advisor

  • Amazon Macie

  • Amazon GuardDuty

如果您的策略未创建可广泛访问的密钥,则 Secrets Manager 控制台将使用 PutResourcePolicy API 来附加策略。如果您确实创建一个允许范围广泛的 IAM 委托人访问密钥的基于资源的策略,则 Secrets Manager 控制台会显示一条错误消息并阻止您附加该策略。

您仍然可以使用 CLI 和 API 命令添加、修改、检索和删除基于资源的策略。

将基于资源的策略附加到密钥

将基于资源的策略附加到密钥

有关构建基于资源的策略的详细信息,请参阅管理 Secrets Manager 密钥的访问权限的概述使用 Secrets Manager 的基于资源的策略

使用以下步骤将基于资源的策略附加到密钥。

Using the Secrets Manager Console

您可以使用 Secrets Manager 控制台将基于资源的策略附加到密钥或修改密钥。该策略必须格式化为 JSON 结构化文本。

要将策略添加到现有密钥,请使用以下步骤:

  1. 选择要添加或修改基于资源的策略的密钥。

  2. 向下滚动到 Resource Permissions (optional) (资源权限(可选)) 部分,然后选择 Edit permissions (编辑权限)。在代码字段中输入 JSON 格式的策略。

  3. 选择 Save (保存)

Secrets Manager 在保存过程中验证策略。

以下 JSON 代码示例显示了可接受的基于资源的策略:

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::123456789012:user/admin" }, "Action":"secretsmanager:GetSecretValue", "Resource":"arn:aws:secretsmanager:us-east-1:123456789012:secret:consolesecret-m4qxfJ" } ] }

如果 Secrets Manager 检测到无效的基于资源的策略,Secrets Manager 将根据遇到的错误类型返回错误消息。

  • 锁定 JSON

    Your requested changes will not allow you to manage this secret in the future.
    { "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Deny", "Principal" : "*", "Action" : "secretsmanager:*", "Resource" : "*" } ] }
  • 通用访问 JSON

    This resource policy grants broad access to your secret. Secrets Manager does not allow creating and applying such policies in the console.
    { "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Principal" : "*", "Action" : "secretsmanager:*", "Resource" : "*" } ] }
  • 语法错误 JSON

    This resource policy contains a syntax error.
    { "Version" : "2012-10-17", "Statement" : [ { "Effect" : "AllowSomething", "Principal" : "*", "Action" : "secretsmanager:*", "Resource" : "*" } ] }
  • 委托人策略 JSON 无效

    This resource policy contains an unsupported principal.
    { "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::123456789012:user/invaliduser" }, "Action" : "secretsmanager:GetSecretValue", "Resource" : "*" } ] }
  • 服务委托人 JSON 无效

    This resource policy contains an invalid service principal.
    { "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::123456789012:user/iam-user", "Service": [ "invalidservice.amazonaws.com" ] }, "Action" : "secretsmanager:GetSecretValue", "Resource" : "*" } ] }

Secrets Manager 在单个输出中显示多个错误。

Using the AWS CLI or AWS SDK operations

您可以使用以下命令附加或修改用于向指定密钥授予或拒绝访问权限的策略文档。策略文档必须格式化为 JSON 结构化文本。有关更多信息,请参阅 使用 Secrets Manager 的基于资源的策略。我们建议您将策略文档存储为文本文件,然后在命令参数中引用该文件。

以下示例 CLI 命令附加或替换当前附加到密钥的基于资源的策略。Secrets Manager 从文件 secretpolicy.json 检索策略文档。

$ aws secretsmanager put-resource-policy --secret-id production/MyAwesomeAppSecret --resource-policy file://secretpolicy.json { "ARN": "arn:aws-cn:secretsmanager:us-west-2:123456789012:secret:production/MyAwesomeAppSecret-a1b2c3", "Name": "MyAwesomeAppSecret" }

使用可选参数 --block-public-policy 会返回错误,因为 Secrets Manager 不允许此类型的策略。Secrets Manager 返回以下响应: “调用 PutResourcePolicy 操作时出现错误 (BlockPublicPolicyException): 您无法附加允许广泛访问密钥的基于资源的策略。”

从密钥检索基于资源的策略

检索附加到密钥的权限策略

使用以下步骤检索附加到密钥的基于资源的策略的文本。

Using the Secrets Manager Console

要检索密钥的基于资源的策略,请使用以下步骤:

  1. 从您的可用密钥列表中选择密钥。

  2. 向下滚动到 Resource Permissions (optional)

  3. 要更改文本,请选择 Edit Permissions

  4. 选择 Save (保存) 以保存对基于资源的策略的任何更改。

Using the AWS CLI or AWS SDK operations

您可以使用以下命令检索当前附加到指定密钥的策略文档。

以下示例 CLI 命令检索当前附加到密钥的基于资源的权限策略的文本。

$ aws secretsmanager get-resource-policy --secret-id production/MyAwesomeAppSecret { "ARN": "arn:aws-cn:secretsmanager:us-west-2:123456789012:secret:production/MyAwesomeAppSecret-a1b2c3", "Name": "MyAwesomeAppSecret", "ResourcePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws-cn:iam::111122223333:root\",\"arn:aws-cn:iam::444455556666:root\"},\"Action\":[\"secretsmanager:GetSecret\",\"secretsmanager:GetSecretValue\"],\"Resource\":\"*\"}}" }

从密钥删除基于资源的策略

删除附加到密钥的基于资源的策略

可以使用以下步骤删除当前附加到指定密钥的基于资源的策略。

Using the Secrets Manager Console
  1. 从您的已配置密钥列表中选择密钥。

  2. 向下滚动到 Resource Permissions (optional)

  3. 选择 Edit permissions (编辑权限)

  4. 删除策略文本,然后选择 Save (保存)

    Secrets Manager 返回一条消息,指示从密钥中成功删除您的资源策略。

Using the AWS CLI or AWS SDK operations

您可以使用以下命令删除当前附加到指定密钥的基于资源的策略。

以下示例 CLI 命令删除当前附加到密钥的基于资源的权限策略。

$ aws secretsmanager delete-resource-policy --secret-id production/MyAwesomeAppSecret { "ARN": "arn:aws-cn:secretsmanager:us-west-2:123456789012:secret:production/MyAwesomeAppSecret-a1b2c3", "Name": "production/MyAwesomeAppSecret" }