【影響調査】S3のパブリックアクセスブロック設定をまとめてみた。

おつかれさまです。あきお(@akio_furutimes)です。

プロジェクトでS3のパブリックアクセスブロックの設定を変更しました。

変更内容としては、パブリックアクセスブロックに全てチェックを付けること

一見簡単のように見えますが、詳細がまとまった記事が少なく、どこに影響があるかわからなかったです。試行錯誤しながら、いろいろ試してみた結果を備忘録としてまとめていきます。

S3 パブリックアクセスブロック

パブリックアクセスブロックは、バケットやオブジェクトが公に公開されることを防ぎます。

設定項目は4つあり、これがどう影響してくるかわかりませんでした

公式ドキュメントには全ての項目にチェックを付けることで、バケットやオブジェクトのセキュリティが向上すると書いてあります。

新規で作成するバケットに関しては、全てのチェックがデフォルトでついているので、AWSが推奨する設定だと思われます。

公式ドキュメントを読んでもわからなかったので、1つ1つ設定をしてみました。

新しいACLを介して付与(略)

この設定にチェックを付けると、パブリックアクセスを付与したオブジェクトのアップロードができなくなります。

反映後、S3にファイルをアップロードしてみました。ACLにはpublic-readを付与しています。

aws s3 cp ./test2.txt s3://furutimes-test-publicaccessblock/ --acl public-read
----------
upload failed:
An error occurred (AccessDenied) when calling the PutObject operation: Access Denied

結果は、ファイルのアップロードが失敗して、Access Deniedのエラーが発生します。

この設定をする際には、バケットを使用しているプログラムで、ACLにpublicが付与されていないか確認が必要です。

任意のACLを介して付与(略)

この設定にチェックを付けると、パブリックアクセスを付与したバケットとオブジェクトから、パブリックアクセスの権限がなくなります。

設定前は赤枠の部分にオブジェクトの読み取りありが、はいと書かれています

設定すると、”-“になりパブリックアクセスの権限がなくなりました。

チェックを外すことで設定は元に戻せます。この設定は外部から読み取るときに影響があると思われます。

新しいパブリックバケットポリシー(略)

この設定にチェックを付けると、新規にバケットポリシーを作成するときに、パブリックアクセスの登録がブロックされました。

既に作成済みのバケットは対象外になります。

パブリックアクセスの登録ってどういうのかというと、次のポリシーが1つも設定されていないときです。

ちなみに設定されていても、ワイルドカード(*)だとブロックされます。

  • aws:SourceIp
  • aws:PrincipalOrgID
  • aws:SourceArn
  • aws:SourceVpc
  • aws:SourceVpce
  • aws:SourceOwner
  • aws:SourceAccount
  • s3:x-amz-server-side-encryption-aws-kms-key-id
  • aws:userid
  • s3:DataAccessPointArn

実際にバケットポリシーで説明するとこのようになります。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Principal": "*",
			"Action": "s3:PubObject",
			"Resource": "arn:aws:s3:::furutimes-test-publicaccessblock/*"
		}
	]
}

このバケットポリシーには上記のポリシーが1つもないので、登録できずエラーになります

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Principal": "*",
			"Action": "s3:PubObject",
			"Resource": "arn:aws:s3:::furutimes-test-publicaccessblock/*",
			"Condition": {
				"StringEquals": {
					"aws:SourceVpc": "vpc-051c4e17cvv203519"
				}
			}
		}
	]
}

このバケットポリシーには、上記ポリシーにあるaws:SourceVpcが含まれているので登録可能です。

“aws:SourceVpc”: “*”

このようにワイルドカードを使ってしまうと登録できずエラーになります。

任意のパブリックバケットポリシー(略)

この設定にチェックを付けると、バケット所有者アカウント内のAWSサービスと承認されたユーザのみにアクセスが制限されます。

クロスアカウントアクセスはブロックされるため、設定の際は注意が必要です。

具体例を上げてみます。

このように、静的WebサイトをホストしてHello Worldを表示されるページがあります。

設定を反映した場合、外部ユーザはサイトにアクセスできなくなるため、ページの閲覧ができなくなります。

外部公開しているページがある場合などは、S3を使わない方法を検討する必要があります。

まとめ

S3にパブリックアクセスブロックの1つ1つの設定を反映した時の影響をまとめてみました。

2020年6月時点の設定内容なので、仕様変更があるかもしれません。

あきお
参考にする際は、十分に注意してくださいね。

それでは、おつかれさまでした。

AWS公式ページ
AWS公式ページ
S3パブリックアクセスブロックについて