教程: 访问 AWS Secrets Manager 账户之间的密钥 - AWS Secrets Manager
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

教程: 访问 AWS Secrets Manager 账户之间的密钥

您可以使用 AWS Secrets Manager 在密钥的整个生命周期内轮换、管理和检索密钥,例如数据库凭证和 API 密钥。此外,您可以通过将基于资源的策略附加到密钥来跨 AWS 账户使用这些密钥。例如,您可以管理一个 AWS 账户中的密钥,并授予其他 AWS 账户中的员工或应用程序使用这些密钥的权限。同样,您可以与业务合作伙伴 (如托管服务提供商 (MSP)) 共享密钥,而无需通过电子邮件和手写备注等渠道传输密钥。基于资源的策略还使您能够控制谁可以管理密钥的权限。例如,您可以授予员工管理特定密钥的权限。

默认情况下,IAM 委托人(用户和角色)无权访问密钥。除了附加到您的账户中的 IAM 委托人的策略之外,您还可以使用基于资源的策略来控制 AWS 账户内或跨账户的访问。当您授予对密钥的访问权限时,IAM 委托人还需要访问用于加密密钥的加密密钥。因此,要启用跨账户访问,您必须授予 权限以访问密钥以及用于加密密钥的加密密钥。

本教程演示了向一个 AWS 账户中的员工授予使用另一个账户中的密钥的权限。使用 AWS Secrets Manager 控制台,您可以向 PRODUCTION 账户、应用程序账户中的 IAM 角色授予权限,以及从您的 CENTRAL_SECURITY 账户(管理密钥的账户)检索密钥。使用占位符 MY_TEST_SECRET 表示现有密钥,使用占位符 MY_CMK 表示用于加密 MY_TEST_SECRET 的自定义主密钥 (CMK),使用占位符 PRODUCTION_SECRET_ROLE 表示用于授予访问权限的 IAM 角色。此过程需要四个步骤:

  1. 创建基于资源的策略并将其添加到 CENTRAL_SECURITY 账户中的密钥。

  2. CENTRAL_SECURITY中更新 CMK 的密钥策略

  3. 授予 IAM 角色在 PRODUCTION 账户中检索此密钥的权限。

  4. 通过在 PRODUCTION 账户中检索密钥来验证访问权限。

步骤 1: 为 CENTRAL_SECURITY 账户创建并附加资源策略

  1. 登录到 AWS Secrets Manager 控制台 (https://console.amazonaws.cn/secretsmanager/)。

  2. 选择 MY_TEST_SECRET

  3. Resource Permissions(optional) (资源权限(可选)) 部分中选择 Edit Permissions (编辑权限)

  4. 剪切以下策略并将其粘贴到 JSON 字段中:

    { "Version" : "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::PRODUCTION:role/PRODUCTION_SECRET_ROLE"}, "Action": "secretsmanager:GetSecretValue", "Resource": "*", "Condition": {"ForAnyValue:StringEquals": {"secretsmanager:VersionStage": "AWSCURRENT"}} } ] }
  5. 选择 Save (保存)

您已成功更新此密钥的权限。

步骤 2: 更新您的 CENTRAL_SECURITY 账户中的密钥策略

Secrets Manager默认情况下, 会加密密钥,并允许您在要使用 解密密钥时检索密钥MY_CMK

  1. https://console.amazonaws.cn/kms 使用 CENTRAL_SECURITY 账户。

  2. 选择 MY_CMK

  3. Key policy (密钥策略) 旁边,选择 Edit (编辑)

  4. 剪切以下代码并将其粘贴到现有策略中:

    "Sid": "AllowUseOfTheKey", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::PRODUCTION:role/PRODUCTION_SECRET_ROLE"}, "Action": [ "kms:Decrypt", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-east-2:CENTRAL_SECURITY:key/MY_CMK" }

    这增加了将 DecryptDescribeKey 命令用于 MY_CMK 的功能。

步骤 3: 向 Production IAM 角色授予检索密钥的权限

以 IAM 管理员身份在 PRODUCTION 账户中执行后续步骤。要从 CENTRAL_SECURITY 账户检索密钥,跨账户角色还需要 IAM 权限才能检索密钥并使用中央安全 CMK 解密密钥。

  1. 使用 https://console.amazonaws.cn/iam/ 账户登录 IAM 控制台 Production

  2. 从左侧导航窗格中,选择 Roles (角色)

  3. 选择 Production (生产) 角色。

  4. 权限选项卡上,选择添加内联策略

  5. 选择 JSON 选项卡,然后粘贴以下策略:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": " arn:aws:secretsmanager:us-east-1:CENTRAL_SECURITY:secret:SECURITY_SECRET" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-east-1:CENTRAL_SECURITY:key/SECURITY_CMK" } ] }

    您需要将 CENTRAL_SECURITY 替换为您的安全账户 ID、将 SECURITY_SECRET 替换为密钥 ID,并将 SECURITY_CMK 替换为您的安全 CMK 的 CMK ID。

  6. 选择查看策略

  7. 将策略命名为 Central_Security_Security-Secret-Access 并选择 Create Policy (创建策略)

步骤 4: 测试从 SECURITY_SECRET 账户对 PRODUCTION 的访问

  1. 使用 PRODUCTION_ROLE 凭证运行 get-secret-value 命令。

  2. 返回的输出应该类似于以下示例:

    $aws secretsmanager get-secret-value --secret-id SECURITY_SECRET --version-stage AWSCURRENT { “ARN”: “arn:aws:secretsmanager:us-east-1:CENTRAL_SECURITY:secret:SECURITY_SECRET”, “Name”: “SECURITY_SECRET”, “SecretString”: “TheSecretString”, “CreatedDate”: 123456789, “VersionId”: “64c4250d-0b81-42e0-9a0c-e189d3c9aea8”, “VersionsStages”: [ “AWSCURRENT” ] }

您还可以通过选择密钥,然后选择 Resource Permissions (optional) (资源权限(可选)) 来验证 控制台中的资源策略。