S3のブロックパブリックアクセス設定について分かりやすく説明する
s3のセキュリティ設定について、国内外で前から問題になっているんですね。
ソリューションアーキテクトの資格取得に向けて、ハンズオンをしていたところ、s3の「アクセス権限」の設定の中の特にブロックパブリックアクセスの設定について、分かりにくかったので書き残します。
設定箇所
新規に作成する場合、全ての設定値はデフォルトで有効になっており、パブリックアクセスをすべてブロックするようになっています。
①新しいアクセスコントロールリスト (ACL) を介して許可されたバケットとオブジェクトへのパブリックアクセスをブロックする
機能:ACLの新規作成、設定変更でパブリックアクセス可能な設定にしない
既存のACLの設定は何も変わりません。ACLでパブリックアクセスを許可していればアクセスできますし、無許可にしていればアクセスできません。
新規にバケットを作成する際、もしくは新規にオブジェクトをバケットにアップロードする際にパブリックアクセスが可能な状態で設定されることを防ぎます。
また新規だけではなく、既存のACLの設定を変更して、パブリックアクセスが可能な状態にすることをできなくします。
②任意のアクセスコントロールリスト (ACL) を介して許可されたバケットとオブジェクトへのパブリックアクセスをブロックする
機能:パブリックアクセスをすべてブロックする
既存のACLでパブリックアクセスが可能となっている設定を無視して、すべてのバケット、またオブジェクトに対して、パブリックアクセスができないようにします。なお既存のACLの設定自体は変更されないため、チェックを外して機能を無効にすると、これまで通りACLに従って、アクセス可能な状態となります。
③新しいパブリックバケットポリシーを介して許可されたバケットとオブジェクトへのパブリックアクセスをブロックする
①はACLでしたが、それのバケットポリシー版です。バケットに含む全オブジェクトもバケットポリシーの対象になります。
④任意のパブリックバケットポリシーを介して、バケットとオブジェクトへのパブリックアクセスとクロスアカウントアクセスをブロックする
②のバケットポリシー版です。クロスアカウントの設定をしていてもアクセスがすべてブロックされるようになるので、注意が必要です。まあクロスアカウントで設定してる人もそんなにいないと思いますが。それ何?って人は無視するレベルでいいです。
①を有効にして、②を無効にした場合
新規に作成するバケットやアップロードするオブジェクトに対して、パブリックアクセスを許可すること、また既存のバケットやオブジェクトに対して、パブリックアクセス無許可な状態から許可する状態に設定変更することはできません。
しかし、既にパブリックアクセスが可能となっている既存のバケットやオブジェクトに対しては、変わらずアクセスが可能です。
①を無効にして、②を有効にした場合
既にパブリックアクセスが可能となっていようが、いまいが関係なく、既存のバケットやオブジェクトに対してはアクセスができなくなります。
そして新規にパブリックアクセスが可能なバケットやオブジェクトを作れます。しかし、作成した時点でパブリックアクセス可能な設定は残りますが、②の機能により設定内容に関係なく、パブリックアクセスはブロックされます。
全部有効にした場合
パブリックアクセスを許可する設定は変更されず残った状態となりますが(チェックを外して、機能をOFFにすると再びアクセスが可能な状態に!)、全部有効にした場合、パブリックアクセスをすべてブロックすることになります。
そのためs3のバケット、またバケット内のオブジェクトにアクセスできるのは、AWS サービスとバケット所有者のアカウント内の承認されたユーザーのみに制限されます。