AWSのS3のバケットポリシーを設定するサンプルです。
目次
AWS | S3のバケットポリシーを設定する |
バケットポリシーを編集する | |
EC2からS3のバケットポリシーを確認する |
S3のバケットポリシーを設定する
・EC2からS3へアクセスする場合で、同一のアカウント内でのアクセスの場合、IAMポリシーまたはS3バケットポリシーのどちらかで許可されていればアクセスできます。
どちらもない場合でEC2からS3へaws lsコマンドのでアクセスした場合以下のメッセージが出ます。
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
・EC2からS3へアクセスする場合で、異なるアカウントでのアクセスの場合、IAMポリシーとS3バケットポリシーの両方で許可されている必要があります。
バケットポリシーを編集する
1.S3のバケットの一覧から対象のバケットを選択します。
2.アクセス許可をクリックします。
3.「ブロックパブリックアクセス」は「すべてブロック」のままです。
4.バケットポリシーで編集ボタンをクリックします。
5.パケットポリシーを編集します。EC2からS3にアクセスする想定です。
{
"Version": "2012-10-17",
"Id": "S3-test-Policy-111",
"Statement": [
{
"Sid": "S3-test",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111111111111:role/test-role-2022"
},
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::test-s3-data-2022",
"arn:aws:s3:::test-s3-data-2022/*"
]
}
]
}
8行目のPrincipalは、誰がという意味になります。
9行目は、アカウント111111111111のtest-role-2022がという意味です。test-role-2022は、EC2に追加したロールです。※ロールにはS3へのアクセス権がない状態です。
13行目のListBucketは、バケット内のオブジェクト一覧を取得します。
15行目以降は、アクセスする対象です。
16行目は、13行目のs3:ListBucketで必要な書き方です。
17行目は、12行目の"s3:GetObject"で必要な書き方です。
17行目が無い場合、Action does not apply to any resource(s) in statementというエラーが表示されます。
s3:ListBucket | バケット内のオブジェクト一覧を取得する |
s3:GetObject | オブジェクトを取得する |
s3:PutObject | オブジェクトを追加する |
s3:DeleteObject | オブジェクトを削除する |
EC2からS3のバケットポリシーを確認する
EC2からS3へアクセスする場合で、同一のアカウント内でのアクセスの場合で
EC2にロールをつけますが、ロールにはS3へのアクセス権がない状態です。
1.EC2でawsコマンドを入力しアクセスできることが確認できました。
[ec2-user@ip-10-0-10-4 ~]$ aws s3 ls test-s3-data-2022
2023-01-26 00:31:58 7 aaa.txt
2022-07-14 01:36:42 774 aws-test1.png
2023-03-29 13:51:05 0 win1.txt
[ec2-user@ip-10-0-10-4 ~]$
2.上記バケットポリシーの9行目でEC2に追加していないロールを指定すると失敗します。
(test-role-2022ではない別のロールを指定)
[ec2-user@ip-10-0-10-4 ~]$ aws s3 ls test-s3-data-2022
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
[ec2-user@ip-10-0-10-4 ~]$
3.ロールをもとに戻し、バケットポリシー内のs3:ListBucketを削除してもaws s3 lsコマンドは失敗します。
関連の記事