首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >S3跨帐户桶权限

S3跨帐户桶权限
EN

Server Fault用户
提问于 2017-12-13 20:03:13
回答 1查看 4K关注 0票数 3

与本文中描述的0类似,我工作的公司使用一个bastion帐户来存储IAM用户和其他AWS帐户,以分离不同的运行环境(prod、dev等)。之所以这么做很重要,是因为我们有多个AWS帐户,而且在某些独特的情况下,这些AWS帐户需要访问一个S3存储桶。

使其能够正确工作的一种方法是设置一个桶策略,允许从特定的S3帐户的VPC访问存储桶。

  1. data-warehouse { "Sid":“从-dev-vpce访问”、“效果”:“允许”、“主体”:"*“、”操作“:"s3:*”、“资源”:“arn:aws:S3::数据仓库”,“arn:aws:S3:data-仓库/*”、“条件”:{ "StringEquals":{“StringEquals:sourceVpce”:"vpce-d95b05b0“}
  2. 角色EMRRole { "AllowRoleToListBucket“、”效果“:”允许“、”操作“:"s3:ListBucket”、“资源”:“arn:aws:S3::数据仓库”, }、{ "Sid":"AllowRoleToGetBucketObjects“、”效果“:”允许“、”操作“:“S3:GetObject”,“S3:GetObjectVersion”、”资源“:”arn:aws:s3::数据仓库/*“}

不幸的是,直到我为每个对象显式地设置了ACL以允许我访问的AWS帐户的所有者对该对象进行完全控制之前,这是行不通的。如果我不这么做,我就会得到:

代码语言:javascript
复制
fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden

我在上面运行的实例(EMR)具有正确的角色:

代码语言:javascript
复制
[hadoop@ip-10-137-221-91 tmp]$  aws sts get-caller-identity
{
    "Account": "1234567890",
    "UserId": "AROAIGVIL6ZDI6SR87KXO:i-0eaf8a5ca52876835",
    "Arn": "arn:aws:sts::1234567890:assumed-role/EMRRole/i-0eaf8a5ca52876835"
}

data-warehouse桶中的对象的ACL如下所示:

代码语言:javascript
复制
aws s3api get-object-acl --bucket=data-warehouse --key=content_category/build=2017-11-23/part0000.gz.parquet
{
    "Owner": {
        "DisplayName": "aws+dev",
        "ID": "YXJzdGFyc3RhcnRzadc6frYXJzdGFyc3RhcnN0"
    },
    "Grants": [
        {
            "Grantee": {
                "Type": "CanonicalUser",
                "DisplayName": "aws+dev",
                "ID": "YXJzdGFyc3RhcnRzadc6frYXJzdGFyc3RhcnN0"
            },
            "Permission": "FULL_CONTROL"
        }
    ]
}

在上面的ACL中,dev AWS帐户将能够读取对象,但是另一个AWS帐户,比如prod,将无法读取对象,直到它们被添加为“授权”。

我的问题是:是否有一种方法可以从多个AWS帐户读取/写入对象到S3桶,而不必在每个单独的对象上设置ACL?

注意:我们使用spark使用s3a向s3a写入。

0

EN

回答 1

Server Fault用户

发布于 2018-11-30 16:48:31

虽然我还没有找到一种在每个对象的基础上设置ACL的方法,但是有一种方法可以强制使用Bucket策略在上传时正确地设置ACL。此示例策略演示如何允许AWS帐户将对象上载到桶中,并要求授予桶所有者对所有上载对象的完全控制权:

代码语言:javascript
复制
{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "AllowSourceAccount0123456789ToPutObjects",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::0123456789:root"
        },
        "Action": "s3:PutObject",
        "Resource": "arn:aws:s3:::data-warehouse/*"
    },
    {
        "Sid": "RequireAllUploadedObjectsToAssignFullControlToBucketOwner",
        "Effect": "Deny",
        "Principal": {
            "AWS": "*"
        },
        "Action": "s3:PutObject",
        "Resource": "arn:aws:s3:::data-warehouse/*",
        "Condition": {
            "StringNotEquals": {
                "s3:x-amz-acl": "bucket-owner-full-control"
            }
        }
    }
]

}

关键是显式拒绝检查x-amz-acl: bucket-owner-full-control头(由Michael在注释中提到),并在未设置任何上传时失败。当使用AWS CLI上传文件时,这需要设置--acl桶所有者-全控制标志。

示例:

代码语言:javascript
复制
aws s3 cp example-file.txt s3://data-warehouse/example-file.txt --profile aws-profile-name --acl bucket-owner-full-control

希望AWS能够提供一种方法,在某个时候更优雅地处理ACL。

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/888001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档