如何在 AWS 账户之间共享 AWS Secrets Manager 密钥?

2 分钟阅读
0

我想与其他 AWS 账户共享我的 AWS Secrets Manager 密钥。

概述

在此示例中,Security_Account 用户管理账户 A 中的凭证,Dev_Account 用户由账户 B 中的开发人员使用。AWS Identity and Access Management(IAM)用户或应用程序在您的 Dev_Account 的 Amazon Elastic Compute Cloud(Amazon EC2)实例中运行。此用户或应用程序会检索 Security_Account 用户账户中的密钥。

密钥使用基于资源的策略,允许您将权限策略附加到密钥。使用此策略来允许 Dev_Account 中的 IAM 实体访问 Security_Account 中的密钥。

Security_Account(账户 A)中名为 DevSecret 的密钥使用 AWS Key Management Service(AWS KMS)密钥 DevSecretKMS 进行加密。然后,会与 Dev_Account(账户 B)共享该密钥。

注意: 您不能对账户使用 AWS KMS 默认密钥。AWS KMS 默认密钥由在 AWS Key Management Service 上运行的某个 AWS 服务代表您创建、管理和使用。AWS KMS 默认密钥在您的 AWS 账户和 AWS 区域中具有唯一性。只有创建 AWS 托管式密钥的服务才能使用它。有关更多信息,请参阅 AWS KMS 密钥

解决方法

配置 Security_Account(账户 A)

在您的密钥所在区域的 Security_Account(账户 A)中执行以下步骤。

1.    如果没有密钥,请按照创建密钥的说明进行操作。在密钥的 AWS KMS 密钥 ID 参数中指定 Amazon 资源名称(ARN)。

2.    如果您有使用别名的现有密钥,请按照修改密钥的说明进行操作。在密钥的 AWS KMS 密钥 ID 参数中指定 AWS KMS 密钥 ARN。

注意: 您必须使用完整的 AWS KMS 密钥 ARN 才能从其他 AWS 账户访问密钥。

3.    在 AWS KMS 密钥的密钥策略中授予权限。在默认设置中,Secrets Manager 会加密密钥。检索这些密钥的身份需要具有解密权限。由于 DevSecret 是使用 DevSecretKMS 加密的,因此您必须更改密钥策略。为此,请添加以下权限

注意: 请将 your-region 替换为您的 AWS 区域

{  "Sid": "AllowUseOfTheKey",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::Dev_Account:user/SecretsUser"
  },
  "Action": [
    "kms:Decrypt"
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ViaService": "secretsmanager.your-region.amazonaws.com"
    },
    "StringLike": {
      "kms:EncryptionContext:SecretARN": "arn:aws:secretsmanager:your-region:Security_Account:secret:DevSecret-??????"
    }
  }
}

此策略授予 Dev_Account(账户 B)中的 SecretsUser 在 Security_Account(账户 A)中使用 DevSecretKMS 的权限。

4.    授予 IAM 实体访问密钥的权限。从 Security_Account 中,附加一个基于资源的策略,向 SecretsUser 授予检索 DevSecret 的权限。

注意: 将主体 ARN 替换为您的 IAM 用户或角色的 ARN。

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

配置 Dev_Account(账户 B)

在 Dev_Account(账户 B)中完成以下步骤。

1.    将权限附加到要检索密钥的 IAM 身份。使用类似于以下内容的策略:

注意: 请将 your-region 替换为您的 AWS 区域

{  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowGetSecretValue",
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue"
      ],
      "Resource": [
        "arn:aws:secretsmanager:your-region:Security_Account:secret:DevSecret-??????"
      ]
    },
    {
      "Sid": "AllowKMSDecrypt",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt"
      ],
      "Resource": [
        "arn:aws:kms:your-region:Security_Account:key/DevSecretKMS_id"
      ]
    }
  ]
}

要让 Dev_Account 中的 IAM 用户 SecretsUser 检索密钥,SecretsUser 必须拥有 secretsmanager:GetSecretValue 的权限。SecretsUser 必须具有 AWS decrypt 权限,因为 DevSecret 使用 DevSecretKey 加密。

2.    以 SecretsUser 身份(与以下类似)检索密钥:

$ aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:your-region:Security_Account:secret:DevSecret --version-stage AWSCURRENT --region your-region

注意:your-region 替换为密钥所在的 AWS 区域。

将这些说明用于所有 IAM 实体。例如,对于 Amazon EC2 实例配置文件或角色,应在资源策略中替换或添加 ARN。然后,编辑附加到该 IAM 实体的权限。

相关信息

如何通过附加基于资源的策略来跨 AWS 账户访问密钥

如何解决访问加密的 AWS Secrets Manager 密钥时遇到的问题?

不同账户中的用户对 AWS Secrets Manager 密钥的权限

AWS 官方
AWS 官方已更新 9 个月前