우리는 두 회사 간에 파일을 공유하기 위해 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
S3 권한은 다음과 같은 권한이 있기 때문에 약간 복잡합니다.버킷 권한걱정할 것도 있지만 각각물체업로드하는 콘텐츠에는 자체 권한이 있습니다.
당신의버킷 정책위의 경우 두 회사 모두 개체를 업로드할 수 있으며 보시다시피 작동합니다. 그러나 외부 회사가 개체를 업로드하는 경우 이는 기본 권한입니다.작성자만 읽을 수 있도록 허용, 즉 외부 회사에 의해. 들어 있다고 해도당신의기본적으로 버킷너다른 사람이 업로드한 경우에는 읽을 수 없습니다. 그것은 다소 반직관적입니다.
해결 방법은 업로드된 개체에 두 계정 모두에서 읽기를 허용하는 ACL이 있는지 확인하는 것입니다.
s3:PutObjectAcl
또한 이 기능이 작동하려면 버킷 정책 권한 목록에 추가해야 합니다 .
마찬가지로 명령줄에서 업로드하는 경우 를 사용하여 업로드한 후 객체 acl을 수정할 수 있습니다 aws s3api put-object-acl
.
도움이 되었기를 바랍니다 :)