使用AWS KMS密钥解密其他账户文件及跨账户权限问题咨询
使用账户A的KMS密钥解密账户B S3对象 & 切换角色后S3访问问题解决
一、解密账户B S3中用账户A KMS密钥加密的文件
跨账户KMS解密需要同时配置KMS密钥策略和S3权限:
更新账户A的KMS密钥策略
确保密钥策略中允许需要解密的身份(你在账户A的用户/切换后的角色)执行kms:Decrypt操作。示例策略片段:{ "Sid": "AllowCrossAccountDecrypt", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT-A-ID:user/your-username" }, "Action": "kms:Decrypt", "Resource": "*" }若用切换后的角色解密,将
Principal替换为该角色的ARN即可。配置账户B的S3权限
要么在S3存储桶策略中添加允许你(或切换后的角色)执行s3:GetObject的语句,要么确保对象ACL授予你读取权限。存储桶策略示例:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT-A-ID:user/your-username" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::bucket-name/*" } ] }执行解密操作
- CLI方式:直接拉取对象,AWS会自动调用KMS解密:
aws s3 cp s3://bucket-name/encrypted-object ./local-file --profile account-a - 控制台/SDK:权限配置到位后,控制台下载或SDK获取对象时会自动完成解密流程。
- CLI方式:直接拉取对象,AWS会自动调用KMS解密:
二、切换账户A角色后无法访问账户B S3存储桶
核心原因是切换后的角色未被账户B的S3资源授权,按以下步骤排查修复:
检查切换后角色的权限策略
确保角色的权限策略包含针对账户B存储桶的必要S3操作权限,示例:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListBucket", "s3:GetObject"], "Resource": ["arn:aws:s3:::bucket-name", "arn:aws:s3:::bucket-name/*"] } ] }更新账户B的S3存储桶策略
明确允许切换后角色的ARN访问目标存储桶,示例:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT-A-ID:role/your-switched-role" }, "Action": ["s3:ListBucket", "s3:GetObject"], "Resource": ["arn:aws:s3:::bucket-name", "arn:aws:s3:::bucket-name/*"] } ] }验证角色信任关系
确认切换后的角色的信任关系允许你的原始身份(账户A的用户/角色)执行角色切换,信任关系示例:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT-A-ID:user/your-username" }, "Action": "sts:AssumeRole" } ] }
相关官方文档
- 《AWS KMS 跨账户密钥使用指南》
- 《Amazon S3 跨账户访问配置》
- 《AWS IAM 角色切换权限管理》
内容的提问来源于stack exchange,提问作者Herman Shynder
相关产品推荐
相关产品推荐

