遇到“AWS跨账号S3 PutObject被AWS托管密钥加密的访问被拒绝问题”的解决方法主要涉及以下几个步骤:
sts:AssumeRole权限的IAM角色。然后,为该角色关联适当的策略,以允许访问目标账号的S3存储桶。以下是一个示例的IAM策略,假设源账号中的IAM角色名为CrossAccountRole,目标账号中的S3存储桶名为destination-bucket:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowPutObject",
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::destination-bucket/*"
}
]
}
检查AWS密钥管理服务(AWS KMS):确保目标账号中使用的S3存储桶启用了AWS KMS加密,并且加密使用的密钥正确配置。如果加密使用的是AWS托管密钥(AWS Managed Key),则确保源账号中的IAM角色有足够的权限来使用该密钥。
确保正确配置权限:在源账号的IAM角色策略中,需要为AWS KMS提供访问权限。例如,以下是一个允许IAM角色访问AWS KMS的策略示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowKMSAccess",
"Effect": "Allow",
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:GenerateDataKey*"
],
"Resource": "*"
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCrossAccountAccess",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::SOURCE_ACCOUNT_ID:role/CrossAccountRole"
},
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::destination-bucket/*"
}
]
}
确保将SOURCE_ACCOUNT_ID替换为源账号的ID和角色名。
以上是解决“AWS跨账号S3 PutObject被AWS托管密钥加密的访问被拒绝问题”的一般步骤和示例代码。具体解决方法可能因您的环境和配置而有所不同,您需要根据实际情况进行适当调整。如果问题仍然存在,建议参考AWS文档或向AWS支持寻求进一步帮助。