AWS S3のバケットポリシーを設定するサンプル

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コマンドは失敗します。

関連の記事

AWS IAMユーザを作成するサンプル

△上に戻る