【问题标题】:PutObject access denied for a cross account setup跨账户设置的 PutObject 访问被拒绝
【发布时间】:2019-10-18 22:29:10
【问题描述】:

我正在两个 AWS 账户之间设置跨账户,我希望账户 B 能够将文件/日志推送到账户 A。我有一个 S3 存储桶,使用 KMS 加密 位于帐户 A 中。

账户 A 中的存储桶包含附加策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::00000000:role/some-role-in-account-B"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3::some-bucket-in-account-A",
                "arn:aws:s3:::some-bucket-in-account-A/*"
            ]
        }
    ]
}

帐户 B 中,我创建了一个角色 (some-role-in-account-B) 并附有以下政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::some-bucket-in-account-A",
                "arn:aws:s3:::some-bucket-in-account-A/*"
            ]
        }
    ]
}

我在帐户 B 中有一个实例,我在其中附加了 some-role-in-account-B 角色。

从实例运行这些:aws s3 ls s3://some-bucket-in-account-A 工作正常。但是,aws s3 cp some-random-file s3://some-bucket-in-account-A 失败并出现错误:An error occurred (AccessDenied) when calling the PutObject operation: Access Denied。有谁知道我可能会错过什么?

【问题讨论】:

  • 我很好奇,既然bucket资源策略中已经提供了你需要的所有权限,你是否需要在账户B角色中实际分配权限?这与解决您的问题(KMS 密钥权限)无关,但我想知道角色 B 中的权限是否是多余的。
  • 根据来自 AWS aws.amazon.com/premiumsupport/knowledge-center/… 的这篇博客,似乎需要它。如果没有 tho,我还没有测试过

标签: amazon-web-services amazon-s3 amazon-ec2 amazon-iam


【解决方案1】:

您需要授予账户 B 中的角色访问 KMS 密钥的权限。更多信息请看这里:https://aws.amazon.com/premiumsupport/knowledge-center/cross-account-access-denied-error-s3/

请注意,我认为您不需要将文章中引用的所有权限授予角色,您只需要授予以下内容:

  • kms:加密
  • kms:GenerateDataKey
  • kms:重新加密*

【讨论】:

  • 谢谢,刚刚意识到我错过了!此外,要添加到 @Ashaman 评论,我必须将额外的 --sse aws:kms 添加到 aws s3 cp 命令中,这样就可以了。
猜你喜欢
  • 1970-01-01
  • 2012-09-11
  • 2017-08-04
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 2020-06-30
  • 2020-01-23
  • 2016-08-11
相关资源
最近更新 更多