我想与其他 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 密钥的权限