Amazon S3のアクセス制御について紹介します。
Amazon S3とは
S3はAWSが提供するオブジェクトストレージであり、様々なアクセス制御方法が用意されています。
アクセス制御方法
IAMポリシー
IAMユーザやグループに対して、どのバケットやフォルダに対してどのような操作が可能か定義する。
バケットポリシー
バケットに対して、どのAWSアカウントやIAMがどのような操作が可能か定義する。
バケットやオブジェクトに対して、どのAWSアカウントがどのような操作が可能か定義する。
現在AWSでは非推奨。
S3ブロックパブリックアクセス
バケットやオブジェクトへのパブリックアクセスをブロックする。
デフォルトで有効。
IAMポリシーとバケットポリシーを試す
事前準備1:IAMユーザ作成
バケットにアクセスするためのIAMユーザを作成します。
アクセス権限は未設定です。
事前準備2:バケット作成
バケットを作成して、ファイルを格納します。
ブロックパブリックアクセスはオンで、バケットポリシーは未設定です。
IAMユーザでバケットへアクセス
IAMポリシーもバケットポリシーも未設定なので、バケットへアクセスすることができません。
そこで、IAMポリシー「AmazonS3FullAccess」を付与してみます。
バケットとその配下のオブジェクトにアクセスすることができました。
バケットポリシーに以下を追加しても、オブジェクトにアクセスすることができます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<accountID>:user/testuser01" }, "Action": "s3:*", "Resource": [ "arn:aws:s3:::access-controle-test-bucket", "arn:aws:s3:::access-controle-test-bucket/*" ] } ] }
IAMポリシーとバケットポリシーの注意点
前述のようなバケットポリシーで特定ユーザを明示的に許可しても、他のユーザからもアクセスできてしまいます。
そのため、明示的にDenyポリシーも併せて利用するべきです。
IAMポリシーには読み取り専用として使われる、「ReadOnlyAccess」ポリシーというものがあります。
便利なポリシーですが、バケットからオブジェクトをダウンロードすることができてしまいます。
例えば、機密情報をバケットに格納しても、「ReadOnlyAccess」ポリシーがあればデータを持ち出されるリスクがあります。
そのため、以下のようなDenyポリシーも併せて利用するべきです。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:Get*", "Resource": "*" } ] }
Denyポリシーでダウンロードが失敗した例です。
まとめ
今回は、IAMポリシーとバケットポリシーを紹介しました。
データ保管には便利なサービスですが、設定を誤ったために情報漏洩してしまうという事例が起きています。
設定が意図したとおりに動くか、しっかりとテストしておくことが重要です。
今一度、S3のセキュリティを見直してみるとよいかもしれません。