AWS S3へのIAMポリシーとバケットポリシーのまとめ表

目次

S3へのIAMポリシーとバケットポリシーのまとめ表

No. IAMポリシー S3バケット
ポリシー
判断ロジック 結果
1 Allow Allow 両者一致 アクセス許可
2 Allow Deny 明示的な拒否が優先 アクセス拒否
3(※) Allow バケットポリシー無 明示的な許可あり アクセス許可
4 Deny Allow 明示的な拒否が優先 アクセス拒否
5 Deny Deny 両者一致 アクセス拒否
6 Deny バケットポリシー無 明示的な拒否が優先 アクセス拒否
7(※) IAMポリシー無/
匿名アクセス
Allow 明示的な許可あり アクセス許可
8 IAMポリシー無/
匿名アクセス
Deny 明示的な拒否が優先 アクセス拒否
9 IAMポリシー無/
匿名アクセス
バケットポリシー無 明示的に許可がないと拒否 アクセス拒否

※No.3と7は、同一アカウント内でのみ成立します。
クロスアカウントでは、外部アカウントのプリンシパルからのリクエストは、両側がそれぞれに許可する必要があります。

No.7の匿名アクセスが可能になるのは、明示的にパブリック設定がされている時のみ。Block Public SettingsがONの場合はアクセスできません。

匿名アクセス:認証情報(AWSアカウント・IAMユーザー・ロールなど)を一切提示せずにAWSリソースへアクセスすること

 

IAMポリシーの仕様

  • デフォルト拒否: 何も許可されていない状態からスタート
  • 明示的な許可が必要: Allowがないと操作不可
  • 明示的な拒否が最優先: どんなAllowがあっても、Denyがあれば拒否される

 

S3バケットポリシーの評価方法

上から順に評価するわけではありません。
すべてのステートメントを評価します。Denyがあれば拒否されます。

 

S3バケットポリシーが空の場合

バケットポリシーが空(何も許可がない)の時点で、匿名アクセスは拒否されます。

どのポリシーも明示的にアクションを許可していなければ、リクエストはデフォルトで拒否されます(暗黙の拒否)。

 

ブロックパブリックアクセスが効いてくるのは

バケットポリシーに匿名アクセスを許可する記述(パブリック設定)が入っているケースです。

このとき、ブロックパブリックアクセスがONだと、その許可を上書きして匿名アクセスを止めます。

EC2からS3へのアクセスとアカウント内外の関係

EC2からS3へアクセスする場合で

同一のアカウント内でのアクセスの場合 IAMポリシーまたはS3バケットポリシーのどちらかで許可されていればアクセスできます(※)。
基本は、IAMポリシーに操作の許可を与えバケットポリシーの許可は不要です。
異なるアカウントでのアクセスの場合 IAMポリシーとS3バケットポリシーの両方で許可されている必要があります。

※S3バケットポリシーに記載する場合、S3バケットポリシーにアクセスするIAMロールの記載は必要です。

許可されていない場合でEC2からS3へaws lsコマンドでアクセスした場合以下のアクセスできないというメッセージが出ます。

An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied

関連の記事

AWS IAMポリシーとS3バケットポリシーの関係

△上に戻る