2 つの会社間でファイルを共有するために、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
。
お役に立てれば幸いです :)