내부 계정과 혼합 된 AWS S3 버킷 교차 계정 정책

Aug 21 2020

우리는 s3 버킷을 사용하여 두 회사간에 파일을 공유합니다. 프라이빗 S3 버킷을 생성했으며이 버킷을 사용하는 애플리케이션 전용 사용자가 있습니다 (aws_key 및 aws_secret 사용). 우리는 getObject에 대한 액세스 권한이 없다는 것을 알아 냈지만 성공적으로 버킷에 PutObject를 넣었습니다.

또한이 버킷에 대한 권한이있는 역할을 생성하고이를 application_user에게 할당했지만 문제가 해결되지 않았습니다.

따라서 주요 목표는 외부 계정 및 내부 IAM 사용자로부터 동일한 S3 버킷에 대한 읽기, 나열, 액세스 권한을 부여하는 것입니다. 지금이 정책을 통해 외부 회사가 액세스 할 수 있음을 지적하겠습니다. 외부 AWS 계정에 대한 액세스 권한이 없습니다.

아래는 s3에 대한 리소스 정책입니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SharedS3Bucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::199999999999:root",    <--- external account 
                    "arn:aws:iam::111111111111:user/application_user" <-- our application user
                ]
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketAcl",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:DeleteObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::shared-bucket",
                "arn:aws:s3:::shared-bucket/*"
            ]
        }
    ]
}

답변

1 MLu Aug 26 2020 at 07:39

S3 권한은 걱정할 버킷 권한 뿐 아니라 업로드하는 각 객체 에도 자체 권한이 있기 때문에 약간 복잡합니다 .

위 의 버킷 정책은 두 회사가 모두 객체를 업로드하도록 허용하며 보시는 바와 같이 작동합니다. 그러나 외부 회사가 개체를 업로드 할 때 기본 권한 은 작성자 , 즉 외부 회사의 읽기만 허용 합니다. 이 글은 경우에도 귀하 기본적으로 버킷 당신은 그것을 다른 사람이 업로드 된 경우를 읽을 수 없습니다. 그것은 다소 반 직관적입니다.

해결책은 업로드 된 객체에 두 계정 모두에서 읽기를 허용하는 ACL이 있는지 확인하는 것입니다.

s3:PutObjectAcl이 작업을 수행하려면 버킷 정책 권한 목록에 추가 해야합니다.

마찬가지로 명령 줄에서 업로드하는 경우 업로드 후 aws s3api put-object-acl.

희망 :)