【问题标题】:S3 cross account access involving 3 accountsS3跨账户访问涉及3个账户
【发布时间】:2018-12-20 15:25:41
【问题描述】:

我有 2 个 AWS 账户(accountAaccountB)。 A 拥有名为 bucketA 的 s3 存储桶。 BucketA 配置为我们的 CloudFront 分配之一的日志存储桶。因此,bucketA 中的对象属于 awsdatafeed 帐户。此存储桶中示例对象的 ACL 为:

{
    "Owner": {
        "DisplayName": "awsdatafeeds",
        "ID": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    "Grants": [
        {
            "Grantee": {
                "DisplayName": "awsdatafeeds",
                "ID": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                "Type": "CanonicalUser"
            },
            "Permission": "FULL_CONTROL"
        },
        {
            "Grantee": {
                "DisplayName": "accountA",
                "ID": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                "Type": "CanonicalUser"
            },
            "Permission": "FULL_CONTROL"
        }
    ]
}

现在,我希望 accountB 中的 IAM 用户能够访问此 S3 存储桶中的对象。所以,我按照https://docs.aws.amazon.com/AmazonS3/latest/dev/example-walkthroughs-managing-access-example2.html中的说明进行操作

我在 bucketA 中添加了以下 Bucket Policy:

{
    "Version": "2012-10-17",
    "Id": "Policy1531389545571",
    "Statement": [
        {
            "Sid": "Bucket Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::accountB:root"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucketA",
                "arn:aws:s3:::bucketA/*"
            ]
        }
    ]
}

现在,在 accountB 中,我向用户添加了以下 IAM 策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucketA",
                "arn:aws:s3:::bucketA/*"
            ]
        }
    ]
}

现在,使用 AccountB 中的 IAM 用户的凭证,我可以列出存储桶 A 中的对象并创建新对象。但是,当我尝试获取属于 bucketA(其所有者是 awsdatafeeds 帐户)中的现有对象时,我收到以下错误:

fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden

如何从 AccountB 访问这些日志文件?

【问题讨论】:

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


    【解决方案1】:

    如您所见,此场景中有三个帐户,而不是示例 2 中的两个帐户。请参阅示例 4 中的此评论:

    存储桶拥有者账户可以将权限委派给自己账户中的用户(请参阅示例 3:存储桶拥有者授予其用户对它不拥有的对象的权限),但它不能将权限委派给其他 AWS 账户,因为跨账户委派是不支持。

    https://docs.aws.amazon.com/AmazonS3/latest/dev/example-walkthroughs-managing-access-example4.html

    你提议的是两级授权,这不受支持。

    拥有存储桶的帐户可以将对象复制到自己的顶部,从而获得对象的所有权并使示例 2 工作......或者拥有存储桶的帐户可以创建一个角色,那么两个帐户都可以允许外部用户担任该角色,该角色有权访问存储桶。

    假定角色就像“身份斗篷”,当角色凭据用于后续请求时,隐藏了扮演该角色的实体的原始身份(同时在最初假定该角色的位置留下痕迹),所以以这种方式使用角色不会被视为跨账户委派,应该按预期工作。

    【讨论】:

      猜你喜欢
      • 2021-06-21
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      • 2021-03-14
      • 2023-03-17
      相关资源
      最近更新 更多