🪣

S3 バケットポリシーについてメモ

2024/03/20に公開

S3のバケットポリシーについて理解を深めるためにメモ

バケットポリシーとは

S3のバケットにアップロードしたオブジェクトのアクセス制御を行う。

こういうやつ

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::vue-todo-list-pwe/*"
        }
    ]
}

バケットの「アクセス許可」タブから設定可能

初期設定

バケット作成時は、バケットポリシーは何も設定されていない。
自分で作成する時は、1からJSONを書く必要はなく、編集から項目を選択することで自動挿入してくれる。

新しいステートメントを追加

ステートメントとは

聞き慣れない言葉かもしれない。
ステートメントとは、IAMポリシーのひとつ。
各ステートメントは、アクション(実行される操作)、リソース(対象となるAWSリソース)、効果(許可または拒否)、および条件(アクセスを制限するためのオプション)などの要素から構成される。

ステートメントは配列で、複数指定することができる。

初期値

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "Statement1",
			"Principal": {},
			"Effect": "Allow",
			"Action": []
		}
	]
}

Sid: 識別子(省略可能)

Sidは、ステートメントに付与される識別子。
これにより、ポリシー内の各ステートメントをユニークに識別することができる。

Sidは省略可能であり、主に可読性や管理のために使用される。

同じIAMポリシー内でのみユニークであればOK

Principal: 対象ユーザー

誰に対して、アクセス制御するのか、対象ユーザーを設定する。

AWSアカウントに許可を与える

"Principal":{"AWS":"arn:aws:iam::AccountIDWithoutHyphens:root"}

複数指定

"Principal":{
    "AWS": [
        "arn:aws:iam::AccountID1WithoutHyphens:root",
        "arn:aws:iam::AccountID2WithoutHyphens:root"
    ]
}

全員許可

"Principal":"*"
//または
"Principal":{"AWS":"*"}

Effect: 許可 or 拒否の設定

許可

 "Effect": "Allow",

拒否

"Effect": "Deny",

Action: アクション

右サイドメニュー「アクションを追加」から、使用したいアクションを選択すると自動で追加される。

https://docs.aws.amazon.com/ja_jp/service-authorization/latest/reference/list_amazons3.html

Resource: リソース

設定したポリシーをどのオブジェクトに適用させるか、範囲を指定することができる。

example-bucket という名前のバケット配下の全てのオブジェクトに対して適用させる。

"Resource": "arn:aws:s3:::example-bucket/*",

Condition: 条件(省略可能)

アクセス許可を付与するときの条件を指定することができる。

AWS全体の条件(グローバル条件キー)

aws: prefix をつける

"Condition" : {
                "IpAddress" : {
                    "aws:SourceIp": "192.0.2.0/24" 
                },
                "NotIpAddress" : {
                    "aws:SourceIp": "192.0.2.188/32" 
                } 
            } 

S3固有の条件

s3: prefix をつける

"Condition": {
                "StringEquals": {
                    "s3:x-amz-acl":["public-read"]
                }
            }

Discussion