내부 계정과 혼합 된 AWS S3 버킷 교차 계정 정책
우리는 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/*"
]
}
]
}
답변
S3 권한은 걱정할 버킷 권한 뿐 아니라 업로드하는 각 객체 에도 자체 권한이 있기 때문에 약간 복잡합니다 .
위 의 버킷 정책은 두 회사가 모두 객체를 업로드하도록 허용하며 보시는 바와 같이 작동합니다. 그러나 외부 회사가 개체를 업로드 할 때 기본 권한 은 작성자 , 즉 외부 회사의 읽기만 허용 합니다. 이 글은 경우에도 귀하 기본적으로 버킷 당신은 그것을 다른 사람이 업로드 된 경우를 읽을 수 없습니다. 그것은 다소 반 직관적입니다.
해결책은 업로드 된 객체에 두 계정 모두에서 읽기를 허용하는 ACL이 있는지 확인하는 것입니다.

s3:PutObjectAcl
이 작업을 수행하려면 버킷 정책 권한 목록에 추가 해야합니다.
마찬가지로 명령 줄에서 업로드하는 경우 업로드 후 aws s3api put-object-acl
.
희망 :)