S3 のパブリックアクセスブロックの 4 つの各設定項目について
S3 のパブリックアクセスブロックの 4 つの各設定項目の挙動を確認してみた背景
以下の画面は Amazon S3 のパブリックアクセスブロックの設定画面です。
各設定に関して日本語で書かれていますが、わかりづらく、挙動の想像がつかないので、実際に各設定の挙動を確認してみた。
S3 のパブリックアクセスブロックの 4 つの各設定項目
新しいアクセスコントロールリスト (ACL) を介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックする ( BlockPublicAcls )
BlockPublicAcls
についてドキュメントでは以下のように記載しています。
Amazon S3 ストレージへのパブリックアクセスのブロック - Amazon Simple Storage Service
このオプションを TRUE に設定すると、次のように動作します。
・ 指定されたアクセスコントロールリスト (ACL) がパブリックの場合、PUT Bucket acl 呼び出しと PUT Object acl 呼び出しは失敗します。
・ リクエストにパブリック ACL が含まれていると、PUT Object 呼び出しは失敗します。
・ この設定がアカウントに適用されている場合、リクエストにパブリック ACL が含まれていると PUT Bucket の呼び出しは失敗します。
とりあえず PUT Object (アップロード) ができなくなるようです。
検証準備します。
BlockPublicAcls
をオフの状態でオブジェクト A にオブジェクト ACL でパブリックアクセスを許可します。
この設定により、オブジェクト A にオブジェクト URL で外部からアクセスが可能になります。
BlockPublicAcls
をオンにします。
検証 1: オブジェクト A のオブジェクト URL にアクセスする
オブジェクト A が正常に表示されました。
どうやら既存のオブジェクトには影響がなし。
検証 2: オブジェクト B をプライベート設定でアップロードする
以下のようにプライベート設定でのアップロードは成功しました。
検証 3: オブジェクト B をパブリック設定でアップロードする
以下のようにパブリック設定でのアップロードはエラーが発生しました。
どうやら新規のオブジェクトをパブリック設定でのアップロードを防ぐようです。
任意のアクセスコントロールリスト (ACL) を介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックする ( IgnorePublicAcls )
IgnorePublicAcls
についてドキュメントでは以下のように記載しています。
Amazon S3 ストレージへのパブリックアクセスのブロック - Amazon Simple Storage Service
このオプションを TRUE に設定すると、Amazon S3 はバケットとそれに含まれるオブジェクトのすべてのパブリック ACL を無視します。この設定を使用すると、パブリック ACL を含む PUT Object 呼び出しを許可しながら、ACL によって許可されたパブリックアクセスを安全にブロックできます (BlockPublicAcls はパブリック ACL を含む PUT Object 呼び出しを拒否します)。この設定を有効にしても、既存の ACL の永続性には影響せず、新しいパブリック ACL の設定も妨げられません。
とりあえず全てのオブジェクトのパブリック設定が無視されるようです。
検証準備します。
IgnorePublicAcls
をオフの状態でオブジェクト A にオブジェクト ACL でパブリックアクセスを許可します。
この設定により、オブジェクト A にオブジェクト URL で外部からアクセスが可能になります。
IgnorePublicAcls
をオンにします。
検証 1: オブジェクト A のアクセス許可を確認
パブリックアクセスの許可が上書きされ、パブリックアクセスできなくなっています。
検証 2: IgnorePublicAcls をオフにしてオブジェクト A のアクセス許可を確認
パブリックアクセスの許可が IgnorePublicAcls
をオンによる上書き前の設定に戻りました。
新しいパブリックバケットポリシーまたはアクセスポイントポリシーを介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックする ( BlockPublicPolicy )
BlockPublicPolicy
についてドキュメントでは以下のように記載しています。
Amazon S3 ストレージへのパブリックアクセスのブロック - Amazon Simple Storage Service
バケットに対してこのオプションを TRUE に設定すると、Amazon S3 は、指定されたバケットポリシーでパブリックアクセスが許可されている場合に、PUT バケットポリシーの呼び出しを拒否します。また、指定されたポリシーでパブリックアクセスが許可されている場合に、バケットのすべてのアクセスポイントで PUT アクセスポイントポリシーの呼び出しを拒否します。アクセスポイントに対してこのオプションを TRUE に設定すると、Amazon S3 は、指定されたポリシー (アクセスポイントまたは基になるバケットのいずれかのポリシー) がパブリックである場合に、アクセスポイントを経由した PUT アクセスポイントポリシーと PUT バケットポリシーの呼び出しを拒否します。
この設定により、バケットやバケット内のオブジェクトをパブリックに共有することを許可することなく、アクセスポイントとバケットポリシーを管理することをユーザーに許可できます。この設定を有効にしても、既存のアクセスポイントやバケットポリシーには影響しません。
とりあえずバケットポリシーの更新( PUT )を拒否するようになるようです。
検証準備します。
BlockPublicPolicy
をオフにしてバケットポリシーの設定を空にしておきます。
検証 1: バケットポリシーを更新する
BlockPublicPolicy
をオンにしてバケットポリシーに以下のようなパブリックアクセス許可のポリシーを適用しようとするとエラーになりました。
{
"Version": "2012-10-17",
"Id": "ExamplePolicy01",
"Statement": [
{
"Sid": "ExampleStatement01",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": ["s3:GetObject", "s3:GetBucketLocation", "s3:ListBucket"],
"Resource": [
"arn:aws:s3:::public-access-1234/*",
"arn:aws:s3:::public-access-1234"
]
}
]
}
任意のパブリックバケットポリシーまたはアクセスポイントポリシーを介したバケットとオブジェクトへのパブリックアクセスとクロスアカウントアクセスをブロックする ( RestrictPublicBuckets )
RestrictPublicBuckets
についてドキュメントでは以下のように記載しています。
Amazon S3 ストレージへのパブリックアクセスのブロック - Amazon Simple Storage Service
このオプションを TRUE に設定すると、パブリックポリシーを持つアクセスポイントやバケットへのアクセスは、バケット所有者のアカウント内の AWS のサービスプリンシパルと承認されたユーザーのみに制限されます。この設定は、アカウント内のユーザーにアクセスポイントやバケットの管理を許可しながら、アクセスポイントやバケットへのすべてのクロスアカウントアクセス (AWS のサービスプリンシパルによるアクセスを除く) をブロックします。
この設定を有効にしても、既存のアクセスポイントポリシーやバケットポリシーには影響しません。ただし、Amazon S3 は、特定のアカウントへのパブリックではない委任を含むパブリックアクセスポイントポリシーやパブリックバケットポリシーから派生したパブリックアクセスやクロスアカウントアクセスをブロックします。
とりあえず既存のアクセスポイントポリシーやバケットポリシーを無視して、アクセスをブロックするようです。
検証準備します。
オブジェクト A を以下のようにプライベート設定でアップロードします。
オブジェクト A のアクセス許可は以下のようになっていると思います。
次に、RestrictPublicBuckets
をオフにしてバケットポリシーに以下のようなパブリックアクセス許可のポリシーを適用しておきます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ExampleStatement01",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": ["s3:GetObject", "s3:GetBucketLocation", "s3:ListBucket"],
"Resource": [
"arn:aws:s3:::public-access-1234/*",
"arn:aws:s3:::public-access-1234"
]
}
]
}
この設定により、オブジェクト A にオブジェクト URL で外部からアクセスが可能になります。
検証 1: RestrictPublicBuckets をオンにして、オブジェクト A のオブジェクト URL にアクセスする
RestrictPublicBuckets
をオンにします。
オブジェクト A にオブジェクト URL で外部からアクセスができなくなりました。
マネジメントコンソール上でも、バケットポリシーに「このバケットに対してブロックパブリックアクセス設定が有効になっているため、パブリックアクセスがブロックされています」と表示されています。
個人開発したサービス
個人開発したサービス
目次
- S3 のパブリックアクセスブロックの 4 つの各設定項目の挙動を確認してみた背景
- S3 のパブリックアクセスブロックの 4 つの各設定項目
- 新しいアクセスコントロールリスト (ACL) を介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックする ( BlockPublicAcls )
- 任意のアクセスコントロールリスト (ACL) を介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックする ( IgnorePublicAcls )
- 新しいパブリックバケットポリシーまたはアクセスポイントポリシーを介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックする ( BlockPublicPolicy )
- 任意のパブリックバケットポリシーまたはアクセスポイントポリシーを介したバケットとオブジェクトへのパブリックアクセスとクロスアカウントアクセスをブロックする ( RestrictPublicBuckets )
個人開発したサービス