

# Amazon S3 のバケットポリシー
<a name="bucket-policies"></a>

バケットポリシーは、Amazon S3 バケットとその中のオブジェクトへのアクセス許可を付与できるリソースベースのポリシーです。バケット所有者のみが、ポリシーをバケットに関連付けることができます。バケットに添付された許可は、バケット所有者が所有するバケットのすべてのオブジェクトに適用されます。これらの許可は、他の AWS アカウント が所有するオブジェクトには適用されません。

S3 オブジェクト所有権は、Amazon S3 バケットレベルの設定で、バケットにアップロードされたオブジェクトの所有権を制御し、アクセスコントロールリスト (ACL) を有効または無効にするのに使用できます。デフォルトでは、オブジェクト所有権は[バケット所有者の強制] 設定に設定され、すべての ACL は無効になっています。バケット所有者は、バケット内のすべてのオブジェクトを所有し、ポリシーのみを使用してオブジェクトへのアクセスを管理します。

バケットポリシーは、JSON ベースの AWS Identity and Access Management (IAM) ポリシー言語を使用します。バケットポリシーを使用して、バケット内のオブジェクトに対する許可を追加または拒否できます。バケットポリシーは、ポリシーの要素に基づいて、リクエストを許可または拒否します。これらの要素には、リクエスタ、S3 アクション、リソース、およびリクエストの側面または条件 (リクエストの作成に使用された IP アドレスなど) が含まれます。

例えば、次のことを実行するバケットポリシーを作成できます。
+ S3 バケットにオブジェクトをアップロードするためのクロスアカウントアクセス許可を付与するクロスアカウントアクセス許可を付与する
+ バケット所有者であるユーザーが、アップロードされたオブジェクトを完全に管理できるようにする

詳細については、「[Amazon S3 バケットポリシーの例](example-bucket-policies.md)」を参照してください。

**重要**  
バケットポリシーを使用して、[S3 ライフサイクル](object-lifecycle-mgmt.md)ルールによる削除や移行を防ぐことはできません。例えば、バケットポリシーがすべてのプリンシパルのすべてのアクションを拒否する場合でも、S3 ライフサイクル設定は通常どおり機能します。

このセクションのトピックでは、具体例と、S3 コンソールにバケットポリシーを追加する方法について説明します。アイデンティティベースのポリシーについては、「[Amazon S3 のアイデンティティベースのポリシー](security_iam_id-based-policy-examples.md)」を参照してください。バケットポリシー言語の詳細については、「[Amazon S3 のポリシーとアクセス許可](access-policy-language-overview.md)」を参照してください。

S3 リソースタイプ別の S3 API オペレーションへのアクセス許可の詳細については、「[Amazon S3 API オペレーションに必要なアクセス許可](using-with-s3-policy-actions.md)」を参照してください。

**Topics**
+ [Amazon S3 コンソールを使用したバケットポリシーの追加](add-bucket-policy.md)
+ [バケットポリシーを使用した VPC エンドポイントからのアクセスコントロール](example-bucket-policies-vpc-endpoint.md)
+ [Amazon S3 バケットポリシーの例](example-bucket-policies.md)
+ [条件キーを使用したバケットポリシーの例](amazon-s3-policy-keys.md)

# Amazon S3 コンソールを使用したバケットポリシーの追加
<a name="add-bucket-policy"></a>

[AWS Policy Generator](https://aws.amazon.com/blogs/aws/aws-policy-generator/) および Amazon S3 コンソールを使用して、新しいバケットポリシーを追加したり、既存のバケットポリシーを編集したりできます。バケットポリシーはリソースベースの AWS Identity and Access Management (IAM) ポリシーです。バケットポリシーをバケットに追加して、バケットおよびバケット内のオブジェクトに対するアクセス許可を、他の AWS アカウントまたは IAM ユーザーに付与できます。オブジェクトのアクセス許可は、バケット所有者が作成したオブジェクトにのみ適用されます。バケットポリシーの詳細については、「[Amazon S3 用 Identity and Access Management](security-iam.md)」を参照してください。

ポリシーを保存する前に、AWS Identity and Access Management Access Analyzer でセキュリティ警告、エラー、一般的な警告、および提案を解決してください。IAM Access Analyzer は、IAM [ポリシーの文法](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html)および[ベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) に対してポリシーチェックを行います。これらのチェックにより、機能的でセキュリティのベストプラクティスに準拠したポリシーを作成するのに、役立つ結果と実行可能なレコメンデーションが示されます。IAM Access Analyzer を使用したポリシーの検証の詳細については、「*IAM ユーザーガイド*」の「[IAM Access Analyzer のポリシーの検証](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)」を参照してください。IAM Access Analyzer によって返される警告、エラー、および提案のリストを表示するには、「[IAM Access Analyzer ポリシーチェックリファレンス](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-reference-policy-checks.html)」を参照してください。

ポリシーのエラーのトラブルシューティングに関するガイダンスについては、「[Amazon S3 でのアクセス拒否 (403 Forbidden) エラーのトラブルシューティング](troubleshoot-403-errors.md)」を参照してください。

**バケットポリシーを作成または編集するには**

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

1. 左のナビゲーションペインで、**[汎用バケット]** または **[ディレクトリバケット]** を選択します。

1. バケットのリストで、バケットポリシーを作成するバケットの名前、またはバケットポリシーを編集するバケットの名前を選択します。

1. **[アクセス許可]** タブを選択します。

1. **[バケットポリシー]** で **[編集]** を選択します。**[Edit bucket policy]** (バケットポリシーを編集) ページが表示されます。

1. **[Edit bucket policy]** (バケットポリシーを編集) ページで、次の操作を実行します。
   + バケットポリシーの例を表示するには、**[ポリシーの例]** をクリックします。または、「Amazon S3 ユーザーガイド」の「[Amazon S3 バケットポリシーの例](example-bucket-policies.md)」を参照してください。**
   + ポリシーを自動的に生成するか、**Policy]** (ポリシー) セクションで JSON を編集するには、**[Policy Generator]** を選択します。

   **[Policy Generator]** を選択すると、AWS Policy Generator が新しいウィンドウで開きます。

   1. **[Select Type of Policy]** (ポリシーの種類の選択) の **[AWS Policy Generator]** ページで、**[S3 Bucket Policy]** (S3 バケットポリシー)を選択します。

   1. 提供されたフィールドに情報を入力してステートメントを追加し、**ステートメントの追加**を選択します。このステップを、追加するステートメントの数だけ繰り返します。ポリシーステートメントの詳細については、*IAM ユーザーガイド*の [IAM JSON ポリシーのエレメントのリファレンス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)を参照してください。
**注記**  
わかりやすいように、**[バケットポリシーの編集]** ページでは、現在のバケットの **[バケット ARN]** (Amazon リソースネーム) が **[ポリシー]** テキストフィールドの上に表示されます。この ARN をコピーして、**AWSポリシージェネレータ**のステートメントで使用できます。

   1. ステートメントの追加が完了したら、**ポリシーの生成**を選択します。

   1. 生成されたポリシーテキストをコピーし、[**閉じる**] を選択すると、Amazon S3 コンソールの**バケットポリシーの編集**ページに戻ります。

1. **[Policy]** (ポリシー) ボックスで、既存のポリシーを編集するか、AWS Policy Generator からバケットポリシーを貼り付けます。ポリシーを保存する前に、セキュリティ警告、エラー、一般的な警告、および提案を解決してください。
**注記**  
バケットポリシーのサイズは 20 KB に制限されています。

1. (オプション) 新しいポリシーがリソースへのパブリックアクセスおよびクロスアカウントアクセスにどのように影響するかをプレビューするには、**[Preview external access]** (外部アクセスをプレビュー) を選択します。ポリシーを保存する前に、新しい IAM Access Analyzer の結果が導入されているかどうかや、既存の結果を解決するかどうかを確認できます。アクティブなアナライザーが表示されない場合は、**[Go to Access Analyzer]** (Access Analyzer に移動) を選択し、[[IAM Access Analyzer]](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-getting-started.html#access-analyzer-enabling) でアカウントアナライザーを作成します。詳細については、[IAM ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-access-preview.html)の*アクセスのプレビュー*を参照してください。

1. **[Save changes]** (変更の保存) を選択すると、**[Permissions]** (アクセス許可) タブへ戻ります。

# バケットポリシーを使用した VPC エンドポイントからのアクセスコントロール
<a name="example-bucket-policies-vpc-endpoint"></a>

Amazon S3 のバケットポリシーを使用して、特定の仮想プライベートクラウド (VPC) エンドポイントまたは特定の VPC からのバケットへのアクセスを管理できます。このセクションでは、VPC エンドポイントからの Amazon S3 のバケットへのアクセスを管理するために使用できるバケットポリシーの例を示します。VPC エンドポイントの設定方法については、[VPC ユーザーガイド](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)の *VPC エンドポイント*を参照してください。

VPC を使用すると、定義した仮想ネットワーク内で AWS のリソースを起動できます。VPC エンドポイントにより、VPC と他の AWS のサービス 間のプライベート接続を作成できます。このプライベート接続では、インターネットアクセス、仮想プライベートネットワーク (VPN) 接続、NAT インスタンス、または Direct Connect を介した接続は必要ありません。

Amazon S3 の VPC エンドポイントは、Amazon S3 への接続のみを許可する VPC 内の論理エンティティです。VPC エンドポイントはリクエストを Amazon S3 にルーティングし、レスポンスを VPC にルーティングします。VPC エンドポイントはリクエストのルーティング方法のみを変更します。Amazon S3 のパブリックエンドポイントと DNS 名は、VPC エンドポイントでも使用できます。Amazon S3 での VPC エンドポイントの使用の詳細については、「VPC ユーザーガイド」の「[Gateway endpoints](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-gateway.html)」および「[Gateway endpoints for Amazon S3](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html)」を参照してください。**

Amazon S3 の VPC エンドポイントは、Amazon S3 のデータへのアクセスを管理する 2 つの方法を提供します。
+ 特定の VPC エンドポイントを通じて許可されるリクエスト、ユーザー、またはグループを管理できます。このタイプのアクセス管理については、「VPC ユーザーガイド」の「[Controlling access to VPC endpoints using endpoint policies](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html)」を参照してください。**
+ Amazon S3 のバケットポリシーを使用して、バケットへのアクセスを許可する VPC または VPC エンドポイントを管理できます。この種類のバケットポリシーのアクセスコントロールの例については、アクセス制限に関する次のトピックを参照してください。

**Topics**
+ [特定の VPC エンドポイントへのアクセスの制限](#example-bucket-policies-restrict-accesss-vpc-endpoint)
+ [特定の VPC へのアクセスの制限](#example-bucket-policies-restrict-access-vpc)
+ [IPv6 VPC エンドポイントへのアクセスの制限](#example-bucket-policies-ipv6-vpc-endpoint)

**重要**  
このセクションで説明している VPC エンドポイントに Amazon S3 のバケットポリシーを適用すると、バケットへのアクセスが意図せずにブロックされる場合があります。特に VPC エンドポイントからの接続に対するバケットのアクセスを制限することを目的としたバケットのアクセス許可により、バケットへのすべての接続がブロックされる場合があります。この問題を修正する方法については、「**AWS サポート 情報センター」の「[バケットポリシーの VPC または VPC エンドポイント ID が間違っています。ポリシーを修正してバケットに再度アクセスできるようにするにはどうすればよいですか?](https://aws.amazon.com/premiumsupport/knowledge-center/s3-regain-access/)」を参照してください。

## 特定の VPC エンドポイントへのアクセスの制限
<a name="example-bucket-policies-restrict-accesss-vpc-endpoint"></a>

以下に、`awsexamplebucket1` という特定のバケットに対するアクセスを ID が `vpce-1a2b3c4d` の VPC エンドポイントからのみに制限する Amazon S3 のバケットポリシーの例を示します。指定されたエンドポイントが使用されていない場合、ポリシーはバケットに対するすべてのアクセスを拒否します。`aws:SourceVpce` 条件はエンドポイントを指定します。`aws:SourceVpce` 条件では、VPC エンドポイントの ID のみが必要で、VPC エンドポイントのリソースの Amazon リソースネーム (ARN) は必要ありません。ポリシーで条件を使用する方法の詳細については、[条件キーを使用したバケットポリシーの例](amazon-s3-policy-keys.md) を参照してください。

**重要**  
次のポリシーの例を使用する前に、VPC エンドポイントの ID をユースケースに応じた値に置き換えてください。そうしないと、バケットにアクセスできません。
このポリシーは、コンソールリクエストが指定の VPC エンドポイントを経由していない場合、指定先のバケットへのコンソールアクセスを無効にします。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id": "Policy1415115909152",
   "Statement": [
     {
       "Sid": "Access-to-specific-VPCE-only",
       "Principal": "*",
       "Action": "s3:*",
       "Effect": "Deny",
       "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket",
                    "arn:aws:s3:::amzn-s3-demo-bucket/*"],
       "Condition": {
         "StringNotEquals": {
           "aws:SourceVpce": "vpce-0abcdef1234567890"
         }
       }
     }
   ]
}
```

------

## 特定の VPC へのアクセスの制限
<a name="example-bucket-policies-restrict-access-vpc"></a>

`aws:SourceVpc` 条件を使用して、特定の VPC へのアクセスを制限するバケットポリシーを作成できます。これは、同じ VPC で複数の VPC エンドポイントを設定していて、すべてのエンドポイントで Amazon S3 のバケットへのアクセスを管理したい場合に便利です。以下は、VPC `vpc-111bbb22` の外側から `awsexamplebucket1` およびそのオブジェクトへのアクセスを拒否するポリシーの例です。指定された VPC が使用されていない場合、ポリシーはバケットに対するすべてのアクセスを拒否します。このステートメントは、バケットへのアクセス許可を付与しません。アクセス許可を付与するには、別の `Allow` ステートメントを追加する必要があります。`vpc-111bbb22` 条件キーでは、VPC リソースの ARN は不要で、VPC ID のみが必要です。

**重要**  
次のポリシーの例を使用する前に、VPC の ID をユースケースに応じた値に置き換えてください。そうしないと、バケットにアクセスできません。
このポリシーは、コンソールリクエストが指定の VPC を経由していない場合、指定先のバケットへのコンソールアクセスを無効にします。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id": "Policy1415115909153",
   "Statement": [
     {
       "Sid": "Access-to-specific-VPC-only",
       "Principal": "*",
       "Action": "s3:*",
       "Effect": "Deny",
       "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket",
                    "arn:aws:s3:::amzn-s3-demo-bucket/*"],
       "Condition": {
         "StringNotEquals": {
           "aws:SourceVpc": "vpc-1a2b3c4d"
         }
       }
     }
   ]
}
```

------

## IPv6 VPC エンドポイントへのアクセスの制限
<a name="example-bucket-policies-ipv6-vpc-endpoint"></a>

次のポリシー例では、リクエストが指定された VPC エンドポイント (`vpce-0a1b2c3d4e5f6g`) から発信され、ソース IP アドレスが指定された IPv6 CIDR ブロックと一致しない限り、*amzn-s3-demo-bucket* バケットとそのオブジェクトに対するすべての Amazon S3 (`s3:`) アクションを拒否します。

```
{
   "Version": "2012-10-17", 		 	 	 
   "Id": "Policy1415115909154",
   "Statement": [
     {
       "Sid": "AccessSpecificIPv6VPCEOnly",
       "Action": "s3:*",
       "Effect": "Deny",
       "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket",
                    "arn:aws:s3:::amzn-s3-demo-bucket/*"],
       "Condition": {
         "StringNotEquals": {
           "aws:SourceVpc": "vpc-0a1b2c3d4e5f6g4h2"
         },
        "NotIpAddress": {
          "aws:VpcSourceIp": "2001:db8::/32"
        }
       }
     }
   ]
}
```

特定の IP または VPC に基づいてバケットへのアクセスを制限する方法については、AWS re:Post 情報センターの「[特定の VPC エンドポイントまたは IP アドレスのみが Amazon S3 バケットにアクセスできるようにする方法を教えてください](https://repost.aws/knowledge-center/block-s3-traffic-vpc-ip)」を参照してください。

# Amazon S3 バケットポリシーの例
<a name="example-bucket-policies"></a>

Amazon S3 バケットポリシーを使用すると、バケット内のオブジェクトへのアクセスを保護して、適切な権限を持つユーザーだけがアクセスできるようにすることができます。適切な権限を持たない認証済みユーザーが Amazon S3 リソースにアクセスできないようにすることもできます。

このセクションでは、バケットポリシーの一般的なユースケース例を紹介します。これらのサンプルポリシーは、`amzn-s3-demo-bucket` をリソース値として使用します。これらのポリシーをテストするには、`user input placeholders` をお客様の情報 (バケット名など) と置き換えます。

オブジェクトのセットに対するアクセス許可を付与または拒否するために、Amazon リソースネーム (ARN) やその他の値でワイルドカード文字 (`*`) を使用できます。例えば、共通の[プレフィックス](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#keyprefix)で始まるか、`.html` などの特定の拡張子で終わるオブジェクトのグループへのアクセスをコントロールできます。

AWS Identity and Access Management (IAM) ポリシー言語については、「[Amazon S3 のポリシーとアクセス許可](access-policy-language-overview.md)」を参照してください。

S3 リソースタイプ別の S3 API オペレーションへのアクセス許可の詳細については、「[Amazon S3 API オペレーションに必要なアクセス許可](using-with-s3-policy-actions.md)」を参照してください。

**注記**  
Amazon S3 コンソールを使用して許可をテストするときには、コンソールに必要な `s3:ListAllMyBuckets`、`s3:GetBucketLocation`、`s3:ListBucket` を追加で付与する必要があります。コンソールを使用してユーザーにアクセス許可を付与してテストする例の解説については、「[ユーザーポリシーを使用したバケットへのアクセスの制御](walkthrough1.md)」を参照してください。

バケットポリシーを作成するためのその他のリソースには、以下が含まれます。
+ バケットポリシーの作成時に使用できる IAM ポリシーアクション、リソース、および条件キーの完全なリストについては、「サービス認可リファレンス」の「[Actions, resources, and condition keys for Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)」を参照してください。**
+ S3 リソースタイプ別の S3 API オペレーションへのアクセス許可の詳細については、「[Amazon S3 API オペレーションに必要なアクセス許可](using-with-s3-policy-actions.md)」を参照してください。
+ S3 ポリシーの作成に関するガイダンスについては、「[Amazon S3 コンソールを使用したバケットポリシーの追加](add-bucket-policy.md)」を参照してください。
+ ポリシーのエラーのトラブルシューティングを行うには、「[Amazon S3 でのアクセス拒否 (403 Forbidden) エラーのトラブルシューティング](troubleshoot-403-errors.md)」を参照してください。

ポリシーの追加または更新に問題がある場合は、AWS re:Post 情報センターの「[Amazon S3 バケットポリシーを更新しようとする際、『Invalid principal in policy』というエラーが発生する理由を知りたいです](https://repost.aws/knowledge-center/s3-invalid-principal-in-policy-error)」を参照してください。

**Topics**
+ [任意の匿名ユーザーへの読み取り専用アクセス許可の付与](#example-bucket-policies-anonymous-user)
+ [暗号化が必要](#example-bucket-policies-encryption)
+ [定型の ACL を使ったバケットの管理](#example-bucket-policies-public-access)
+ [オブジェクトタグ付けによるオブジェクトアクセスの管理](#example-bucket-policies-object-tags)
+ [グローバル条件キーによるオブジェクトアクセスの管理](#example-bucket-policies-global-condition-keys)
+ [HTTP または HTTPS リクエストに基づくアクセス管理](#example-bucket-policies-HTTP-HTTPS)
+ [特定のフォルダへのユーザーアクセスの管理](#example-bucket-policies-folders)
+ [アクセスログへのアクセス管理](#example-bucket-policies-access-logs)
+ [Amazon CloudFront の OAI へのアクセス管理](#example-bucket-policies-cloudfront)
+ [Amazon S3 ストレージレンズへのアクセス管理](#example-bucket-policies-lens)
+ [S3 インベントリ、S3 分析、および S3 インベントリレポートの権限管理](#example-bucket-policies-s3-inventory)
+ [MFA が必要](#example-bucket-policies-MFA)
+ [ユーザーによるオブジェクトの削除を禁止する](#using-with-s3-actions-related-to-bucket-subresources)

## 任意の匿名ユーザーへの読み取り専用アクセス許可の付与
<a name="example-bucket-policies-anonymous-user"></a>

ポリシー設定を使用して、匿名のパブリックユーザーにアクセス許可を付与できます。これは、バケットを静的ウェブサイトとして設定する場合に便利です。匿名のパブリックユーザーにアクセス許可を付与するには、バケットのブロックパブリックアクセス設定を無効にする必要があります。これを行う方法と必要なポリシーの詳細については、「[ウェブサイトアクセスのアクセス許可の設定](WebsiteAccessPermissionsReqd.md)」を参照してください。同じ目的でより制限の厳しいポリシーを設定する方法については、「AWS 情報センター」の「[Amazon S3 バケットの一部のオブジェクトにパブリック読み取りアクセス権を付与するにはどうすればよいですか?](https://repost.aws/knowledge-center/read-access-objects-s3-bucket)」を参照してください。

デフォルトでは、Amazon S3 はアカウントとバケットへのパブリックアクセスをブロックします。バケットを使用して静的ウェブサイトをホストする場合は、以下のステップを使用して、パブリックアクセスブロック設定を編集できます。

**警告**  
このステップを完了する前に「[Amazon S3 ストレージへのパブリックアクセスのブロック](access-control-block-public-access.md)」を読んで、パブリックアクセスを許可することに伴うリスクを理解し、了承してください。パブリックアクセスブロック設定をオフにしてバケットをパブリックにすると、インターネット上のだれでもバケットにアクセスできるようになります。バケットへのすべてのパブリックアクセスをブロックすることをお勧めします。

1. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) で Amazon S3 コンソールを開きます。

1. 静的ウェブサイトとして設定されたバケットの名前を選択します。

1. [**Permissions (アクセス許可)**] を選択します。

1. **[ブロックパブリックアクセス (バケット設定)]** で **[編集]** を選択します。

1. [**Block *all* public access (すべてのパブリックアクセスをブロックする)**] をクリアし、[**Save changes (変更の保存)**] を選択します。  
![\[バケットのブロックパブリックアクセス設定を示す Amazon S3 コンソール。\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/edit-public-access-clear.png)

   Amazon S3 で、バケットのブロックパブリックアクセス設定がオフになります。パブリックな静的ウェブサイトを作成するには、バケットポリシーを追加する前に、アカウントの[ブロックパブリックアクセス設定を編集する](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/block-public-access-account.html)必要があります。アカウントのブロックパブリックアクセス設定が現在有効になっている場合は、**[ブロックパブリックアクセス (バケット設定)]** の下にメモが表示されます。

## 暗号化が必要
<a name="example-bucket-policies-encryption"></a>

次の例に示すように、AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS) を要求できます。

### バケットに書き込まれるすべてのオブジェクトに SSE-KMS が必要
<a name="example-bucket-policies-encryption-1"></a>

次のポリシー例では、バケットに書き込まれるすべてのオブジェクトを、AWS Key Management Service (AWS KMS) キーを使用したサーバー側の暗号化 (SSE-KMS) を使用して暗号化することを要求しています。オブジェクトが SSE-KMS で暗号化されていない場合、リクエストは拒否されます。

------
#### [ JSON ]

****  

```
{
"Version":"2012-10-17",		 	 	 
"Id": "PutObjPolicy",
"Statement": [{
  "Sid": "DenyObjectsThatAreNotSSEKMS",
  "Principal": "*",
  "Effect": "Deny",
  "Action": "s3:PutObject",
  "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
  "Condition": {
    "Null": {
      "s3:x-amz-server-side-encryption-aws-kms-key-id": "true"
    }
  }
}]
}
```

------

### バケットに書き込まれるすべてのオブジェクトに特定の AWS KMS key を使用する SSE-KMS が必要
<a name="example-bucket-policies-encryption-2"></a>

次のポリシー例では、特定の KMS キー ID を使用して SSE-KMS で暗号化されていないオブジェクトはバケットに書き込まれません。オブジェクトがリクエストごとのヘッダーまたはバケットのデフォルト暗号化を使用して SSE-KMS で暗号化されている場合でも、特定の KMS キーで暗号化されていないオブジェクトはバケットに書き込めません。この例で使用している KMS キー ARN を必ずお客様の KMS キー ARN に置き換えてください。

------
#### [ JSON ]

****  

```
{
"Version":"2012-10-17",		 	 	 
"Id": "PutObjPolicy",
"Statement": [{
  "Sid": "DenyObjectsThatAreNotSSEKMSWithSpecificKey",
  "Principal": "*",
  "Effect": "Deny",
  "Action": "s3:PutObject",
  "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
  "Condition": {
    "ArnNotEqualsIfExists": {
      "s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-1:111122223333:key/01234567-89ab-cdef-0123-456789abcdef"
    }
  }
}]
}
```

------

## 定型の ACL を使ったバケットの管理
<a name="example-bucket-policies-public-access"></a>

### オブジェクトをアップロードしたり、パブリックアクセス用のオブジェクト ACL を設定したりする権限を複数のアカウントに付与する
<a name="example-bucket-policies-acl-1"></a>

以下のユーザーポリシーの例は、複数の AWS アカウント に `s3:PutObject` アクセス許可および `s3:PutObjectAcl` アクセス許可を付与します。また、このポリシーの例では、これらのオペレーションのリクエストには必ず `public-read` という[既定のアクセスコントロールリスト (ACL)](acl-overview.md#canned-acl) を含めることが求められています。詳細については、「[Amazon S3 のポリシーアクション](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-actions)」および「[Amazon S3 のポリシー条件キー](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-conditionkeys)」を参照してください。

**警告**  
`public-read` という既定の ACL を使用すると、バケット内のオブジェクトを世界中の誰でも見ることができます。Amazon S3 のバケットへの匿名アクセスを許可したり、パブリックアクセスブロック設定を無効にしたりする場合は注意が必要です。匿名アクセスを付与すると、世界中のすべてのユーザーがバケットにアクセスできます。[静的なウェブサイトのホスティング](WebsiteHosting.md)などで特に必要な場合を除いて、Amazon S3 のバケットへの匿名アクセスは許可しないことをお勧めします。静的ウェブサイトホスティングのパブリックアクセスをブロックする設定を有効にする場合は、「[チュートリアル: Amazon S3 での静的ウェブサイトの設定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/HostingWebsiteOnS3Setup.html)」を参照してください。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AddPublicReadCannedAcl",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:root",
                    "arn:aws:iam::444455556666:root"
                ]
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": [
                        "public-read"
                    ]
                }
            }
        }
    ]
}
```

------

### バケット所有者はフルコントロール権限を持ちながら、オブジェクトをアップロードするためのクロスアカウントアクセス許可を付与する
<a name="example-bucket-policies-acl-2"></a>

以下の例は、アップロードされたオブジェクトを完全に制御しながら、別の AWS アカウント がバケットにオブジェクトをアップロードできるようにする方法を示しています。このポリシーでは、特定の AWS アカウント (*`111122223333`*) に、アップロード時に `bucket-owner-full-control` の既定 ACL が含まれている場合にのみ、オブジェクトをアップロードする機能が付与されます。ポリシーの `StringEquals` 条件は、要件を表現する `s3:x-amz-acl` 条件キーを指定します。詳細については、「[Amazon S3 のポリシー条件キー](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-conditionkeys)」を参照してください。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
     {
       "Sid":"PolicyForAllowUploadWithACL",
       "Effect":"Allow",
       "Principal":{"AWS":"111122223333"},
       "Action":"s3:PutObject",
       "Resource":"arn:aws:s3:::amzn-s3-demo-bucket/*",
       "Condition": {
         "StringEquals": {"s3:x-amz-acl":"bucket-owner-full-control"}
       }
     }
   ]
}
```

------

## オブジェクトタグ付けによるオブジェクトアクセスの管理
<a name="example-bucket-policies-object-tags"></a>

### 特定のタグキーと値を持つオブジェクトの読み取り権限のみをユーザーに許可する
<a name="example-bucket-policies-tagging-1"></a>

以下のアクセス許可ポリシーでは、`environment: production` タグキーと値を持つオブジェクトのみを読み取れるように制限しています。このポリシーは `s3:ExistingObjectTag` 条件キーを使用してタグキーと値を指定します。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Principal":{
            "AWS":"arn:aws:iam::111122223333:role/JohnDoe"
         },
         "Effect":"Allow",
         "Action":[
            "s3:GetObject",
            "s3:GetObjectVersion"
         ],
         "Resource":"arn:aws:s3:::amzn-s3-demo-bucket/*",
         "Condition":{
            "StringEquals":{
               "s3:ExistingObjectTag/environment":"production"
            }
         }
      }
   ]
}
```

------

### ユーザーが追加できるオブジェクトタグキーを制限する
<a name="example-bucket-policies-tagging-2"></a>

次のポリシーの例では、`s3:PutObjectTagging` アクションを実行するアクセス許可をユーザーに付与します (ユーザーが既存のオブジェクトにタグを追加することができます)。この条件は `s3:RequestObjectTagKeys` 条件キーを使用して、`Owner` や `CreationDate` などの許可されたタグキーを指定します。詳細については、「*IAM ユーザーガイド*」の「[複数のキーの値をテストする条件の作成](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_multi-value-conditions.html)」を参照してください。

このポリシーは、リクエストで指定されたすべてのタグキーが承認されたタグキーであることを保証します。条件の `ForAnyValue` 修飾子によって、指定したキーの少なくとも 1 つがリクエストに存在することが保証されます。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
  "Statement": [
    {"Principal":{"AWS":[
            "arn:aws:iam::111122223333:role/JohnDoe"
         ]
       },
 "Effect": "Allow",
      "Action": [
        "s3:PutObjectTagging"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/*"
      ],
      "Condition": {"ForAnyValue:StringEquals": {"s3:RequestObjectTagKeys": [
            "Owner",
            "CreationDate"
          ]
        }
      }
    }
  ]
}
```

------

### ユーザーにオブジェクトタグの追加を許可する場合は特定のタグキーと値が必要
<a name="example-bucket-policies-tagging-3"></a>

次のポリシーの例では、`s3:PutObjectTagging` アクションを実行するアクセス許可をユーザーに付与します (ユーザーが既存のオブジェクトにタグを追加することができます)。この条件により、値が `X` に設定された特定のタグキー (`Project` など) をユーザーが含めることが求められます。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
  "Statement": [
    {"Principal":{"AWS":[
       "arn:aws:iam::111122223333:user/JohnDoe"
         ]
       },
      "Effect": "Allow",
      "Action": [
        "s3:PutObjectTagging"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/*"
      ],
      "Condition": {"StringEquals": {"s3:RequestObjectTag/Project": "X"
        }
      }
    }
  ]
}
```

------

### 特定のオブジェクトタグキーと値を持つオブジェクトのみを追加することをユーザーに許可する
<a name="example-bucket-policies-tagging-4"></a>

次のポリシーの例では、`s3:PutObject` アクションを実行する権限をユーザーに付与して、ユーザーがバケットにオブジェクトを追加できるようにします。ただし、`Condition` ステートメントは、アップロードされたオブジェクトで使用できるタグキーと値を制限します。この例では、ユーザーがバケットに追加できるのは、値が `Finance` に設定された特定のタグキー (`Department`) を持つオブジェクトだけです。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Principal":{
            "AWS":[
                 "arn:aws:iam::111122223333:user/JohnDoe"
         ]
        },
        "Effect": "Allow",
        "Action": [
            "s3:PutObject"
        ],
        "Resource": [
            "arn:aws:s3:::amzn-s3-demo-bucket/*"
        ],
        "Condition": {
            "StringEquals": {
                "s3:RequestObjectTag/Department": "Finance"
            }
        }
    }]
}
```

------

## グローバル条件キーによるオブジェクトアクセスの管理
<a name="example-bucket-policies-global-condition-keys"></a>

[グローバル条件キー](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html)は、`aws` プレフィックスが付いた条件キーです。AWS のサービス のサービスは、グローバル条件キーをサポートするか、サービスプレフィックスを含むサービス固有のキーを提供できます。JSON ポリシーの `Condition` 要素を使用して、リクエストのキーを、ポリシーで指定したキー値と比較できます。

### Amazon S3 サーバーアクセスログ配信のみに制限する
<a name="example-bucket-policies-global-condition-keys-1"></a>

次の例のバケットポリシーでは、[https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) グローバル条件キーを使用して、サービス間リクエストを行っているリソースの [Amazon リソースネーム (ARN)](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns) を、ポリシーで指定した ARN と比較します。`aws:SourceArn` 条件キーを使用して、サービス間のトランザクション中に Amazon S3 サービスが[混乱した代理](https://docs.aws.amazon.com//IAM/latest/UserGuide/confused-deputy.html)として使用されるのを防ぐことができます。Amazon S3 バケットにオブジェクトを追加できるのは Amazon S3 サービスのみです。

この例のバケットポリシーは、ロギングサービスプリンシパル (`s3:PutObject`) にのみ `logging.s3.amazonaws.com` 許可を付与します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowPutObjectS3ServerAccessLogsPolicy",
            "Principal": {
                "Service": "logging.s3.amazonaws.com"
            },
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket-logs/*",
            "Condition": {
                "StringEquals": {
                "aws:SourceAccount": "111122223333"
                },
                "ArnLike": {
                "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-source-bucket1"
                }
            }
        },
        {
            "Sid": "RestrictToS3ServerAccessLogs",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket-logs/*",
            "Condition": {
                "ForAllValues:StringNotEquals": {
                    "aws:PrincipalServiceNamesList": "logging.s3.amazonaws.com"
                }
            }
        }
    ]
}
```

------

### 自分の組織にのみアクセスを許可
<a name="example-bucket-policies-global-condition-keys-2"></a>

リソースにアクセスするすべての [IAM プリンシパル](https://docs.aws.amazon.com//IAM/latest/UserGuide/intro-structure.html#intro-structure-principal)が組織内の AWS アカウント (AWS Organizations管理アカウントを含む) からのアクセスのみに制限する場合は、`aws:PrincipalOrgID` グローバル条件キーを使用できます。

このタイプのアクセスを許可または制限するには、`aws:PrincipalOrgID` 条件を定義し、[バケットポリシーの組織 ID](https://docs.aws.amazon.com//organizations/latest/userguide/orgs_manage_org_details.html) に値を設定します。組織 ID は、バケットへのアクセスを制御するために使用されます。`aws:PrincipalOrgID` 条件を使用すると、バケットポリシーのアクセス許可は、組織に追加されるすべての新しいアカウントにも適用されます。

以下は、組織内の特定の IAM プリンシパルにバケットへの直接アクセス許可を付与できるリソースベースのバケットポリシーの例です。バケットポリシーに `aws:PrincipalOrgID` グローバル条件キーを追加すると、リソースにアクセスするにはプリンシパルアカウントが組織内に存在する必要があります。アクセスを許可するときに誤って間違ったアカウントを指定した場合でも、[aws:PrincipalOrgID グローバル条件キー](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid)は追加の保護手段として機能します。このグローバルキーをポリシーで使用すると、指定した組織以外のすべてのプリンシパルが、Amazon S3 バケットにアクセスできないようにします。リソースへのアクセス権を取得できるのは、リストにある組織のアカウントのプリンシパルだけです。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "AllowGetObject",
        "Principal": {
            "AWS": "*"
        },
        "Effect": "Allow",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
        "Condition": {
            "StringEquals": {
                "aws:PrincipalOrgID": ["o-aa111bb222"]
            }
        }
    }]
}
```

------

## HTTP または HTTPS リクエストに基づくアクセス管理
<a name="example-bucket-policies-HTTP-HTTPS"></a>

### HTTPS リクエストのみにアクセスを制限
<a name="example-bucket-policies-use-case-HTTP-HTTPS-1"></a>

潜在的な攻撃者がネットワークトラフィックを操作するのを防ぎたい場合は、HTTPS (TLS) を使用して暗号化された接続のみを許可し、HTTP リクエストによるバケットへのアクセスを制限できます。リクエストが HTTP か HTTPS かを判断するには、S3 バケットポリシーの [https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-securetransport](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-securetransport) グローバル条件キーを使用します。`aws:SecureTransport` 条件キーは、リクエストが HTTP を使用して送信されたかどうかをチェックします。

リクエストが `true` を返した場合、リクエストは HTTPS 経由の送信です。リクエストが `false` を返した場合、リクエストは HTTP 経由の送信です。その後、目的のリクエストスキームに基づいてバケットへのアクセスを許可または拒否することができます。

次の例で、バケットポリシーは HTTP リクエストを明示的に拒否しています。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "RestrictToTLSRequestsOnly",
        "Action": "s3:*",
        "Effect": "Deny",
        "Resource": [
            "arn:aws:s3:::amzn-s3-demo-bucket",
            "arn:aws:s3:::amzn-s3-demo-bucket/*"
        ],
        "Condition": {
            "Bool": {
                "aws:SecureTransport": "false"
            }
        },
        "Principal": "*"
    }]
}
```

------

### 特定の HTTP Referer へのアクセスの制限
<a name="example-bucket-policies-HTTP-HTTPS-2"></a>

`amzn-s3-demo-bucket` というバケットに格納されている写真や動画へのリンクがある *`www.example.com`* または *`example.com`* というドメイン名のウェブサイトがあるとします。デフォルトでは、Amazon S3 のすべてのリソースはプライベートであるため、リソースを作成した AWS アカウント のみがアクセスできます。

これらのオブジェクトへのウェブサイトの読み取りアクセスを許可するには、`s3:GetObject` アクセス許可を条件付きで付与するバケットポリシーを追加する方法があります。条件としては、`GET` リクエストが特定のウェブページから発生する必要があることを指定します。次のポリシーでは、`aws:Referer` 条件キー付きの `StringLike` 条件を使用してリクエストを制限します。

使用するブラウザのリクエストに HTTP `referer` ヘッダーが含まれていることを確認します。

**警告**  
`aws:Referer` 条件キーを使用するときには、十分な注意が必要です。一般に知られている HTTP 参照子のヘッダー値を含めるのは危険です。認可されていない当事者は、変更されたブラウザまたはカスタムブラウザを使用して任意の `aws:Referer` 値を提供することができます。したがって、無許可の当事者が AWS リクエストを直接作成できないよう、`aws:Referer` を使用しないでください。  
この `aws:Referer` 条件キーは、Amazon S3 に保存されているコンテンツなどのデジタルコンテンツが、無許可のサードパーティーサイトで参照されないよう保護する目的でのみ、お客様に提供されています。詳細については、「[IAM ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-referer)」の「*aws:Referer*」を参照してください。

## 特定のフォルダへのユーザーアクセスの管理
<a name="example-bucket-policies-folders"></a>

### 特定のフォルダへのアクセス許可をユーザーに付与
<a name="example-bucket-policies-folders-1"></a>

特定のフォルダへのアクセスをユーザーに許可しようとしているとします。IAM ユーザーと S3 バケットが同じ AWS アカウント に属している場合は、IAM ポリシーを使用してユーザーに特定のバケットフォルダへのアクセス許可を付与できます。このアプローチを使用すると、バケットポリシーを更新してアクセスを付与する必要はありません。複数のユーザーが切り替えることができる IAM ロールに IAM ポリシーを追加できます。

IAM ID と S3 バケットの AWS アカウント が異なる場合は、IAM ポリシーとバケットポリシーの両方でクロスアカウントアクセスを許可する必要があります。クロスアカウントアクセスを付与する方法の詳細については、「[バケット所有者がクロスアカウントのバケットのアクセス許可を付与する](https://docs.aws.amazon.com//AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html)」を参照してください。

次のバケットポリシーの例では、自分のフォルダ (`home/JohnDoe/`) のみに`JohnDoe` のフルコンソールアクセスを許可しています。`home` フォルダを作成し、ユーザーに適切なアクセス許可を付与することで、複数のユーザーが 1 つのバケットを共有できます。このポリシーは、次の 3 つの `Allow` ステートメントで構成されています。
+ `AllowRootAndHomeListingOfCompanyBucket`: ユーザー (`JohnDoe`) が `amzn-s3-demo-bucket` バケットのルートレベルと `home` フォルダ内のオブジェクトを一覧表示できるようにします。このステートメントにより、ユーザーはコンソールを使用してプレフィックス `home/` を検索することもできます。
+ `AllowListingOfUserFolder`: ユーザー (`JohnDoe`) が `home/JohnDoe/` フォルダとサブフォルダ内のすべてのオブジェクトを一覧表示できるようにします。
+ `AllowAllS3ActionsInUserFolder`: `Read`、`Write`、`Delete` 権限を付与することで、ユーザーが Amazon S3 のすべてのアクションを実行できるようにします。権限はバケット所有者のホームフォルダに限定されます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowRootAndHomeListingOfCompanyBucket",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:user/JohnDoe"
                ]
            },
            "Effect": "Allow",
            "Action": ["s3:ListBucket"],
            "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket"],
            "Condition": {
                "StringEquals": {
                    "s3:prefix": ["", "home/", "home/JohnDoe"],
                    "s3:delimiter": ["/"]
                }
            }
        },
        {
            "Sid": "AllowListingOfUserFolder",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:user/JohnDoe"
                ]
            },
            "Action": ["s3:ListBucket"],
            "Effect": "Allow",
            "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket"],
            "Condition": {
                "StringLike": {
                    "s3:prefix": ["home/JohnDoe/*"]
                }
            }
        },
        {
            "Sid": "AllowAllS3ActionsInUserFolder",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:user/JohnDoe"
                ]
            },
            "Action": ["s3:*"],
            "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket/home/JohnDoe/*"]
        }
    ]
}
```

------

## アクセスログへのアクセス管理
<a name="example-bucket-policies-access-logs"></a>

### アクセスログを有効にするためのアクセス権限を Application Load Balancer に付与
<a name="example-bucket-policies-access-logs-1"></a>

Application Load Balancer のアクセスログを有効にする場合は、ロードバランサーが[ログを保存する](https://docs.aws.amazon.com//elasticloadbalancing/latest/application/enable-access-logging.html#access-log-create-bucket) S3 バケットの名前を指定する必要があります。このバケットは、バケットにアクセスログを書き込む許可を Elastic Load Balancing に付与する[アタッチされたポリシー](https://docs.aws.amazon.com//elasticloadbalancing/latest/application/enable-access-logging.html#attach-bucket-policy)が必要です。

次の例では、バケットポリシーにより、バケットにアクセスログを書き込む許可を Elastic Load Balancing (ELB) に付与しています。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/AWSLogs/111122223333/*"
        }
    ]
}
```

------

**注記**  
必ず、`elb-account-id` を、ご利用の AWS リージョン における Elastic Load Balancing の AWS アカウント ID に置き換えてください。Elastic Load Balancing リージョンのリストについては、「*Elastic Load Balancing ユーザーガイド*」の「[Attach a policy to your Amazon S3 bucket](https://docs.aws.amazon.com//elasticloadbalancing/latest/classic/enable-access-logs.html#attach-bucket-policy)」を参照してください。

ご利用の AWS リージョン がサポートされている Elastic Load Balancing リージョンのリストに表示されない場合は、次のポリシーを使用して、指定されたログ配信サービスにアクセス許可を付与します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
       "Principal": {
         "Service": "logdelivery.elasticloadbalancing.amazonaws.com"
          },
      "Effect": "Allow",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/AWSLogs/111122223333/*"
    }
  ]
}
```

------

次に、必ず [Elastic Load Balancing のアクセスログ](https://docs.aws.amazon.com//elasticloadbalancing/latest/application/enable-access-logging.html#enable-access-logs)を有効にして設定してください。テストファイルを作成することで、[バケットのアクセス許可を確認](https://docs.aws.amazon.com//elasticloadbalancing/latest/application/enable-access-logging.html#verify-bucket-permissions)できます。

## Amazon CloudFront の OAI へのアクセス管理
<a name="example-bucket-policies-cloudfront"></a>

### Amazon CloudFront の OAI へのアクセス許可の付与
<a name="example-bucket-policies-cloudfront-1"></a>

次のバケットポリシーの例は、CloudFront のオリジンアクセスアイデンティティ (OAI) に S3 のバケット内のすべてのオブジェクトを取得 (読み取り) するアクセス許可を付与します。CloudFront の OAI を使用すると、バケット内のオブジェクトへの CloudFront からのアクセスは許可して、Amazon S3 からの直接アクセスは許可しないようにすることができます。詳細については、「*Amazon CloudFront デベロッパーガイド*」の「[オリジンアクセスアイデンティティを使用して Amazon S3 コンテンツへのアクセスを制限する](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html)」を参照してください。

次のポリシーは、OAI の ID をポリシーの `Principal` として使用します。S3 のバケットポリシーを使用して CloudFront の OAI にアクセス許可を付与する方法の詳細については、「*Amazon CloudFront デベロッパーガイド*」の「[オリジンアクセスアイデンティティ (OAI) からオリジンアクセスコントロール (OAC) への移行](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html#migrate-from-oai-to-oac)」を参照してください。

この例を使用するには:
+ `EH1HDMB1FH2TC` を OAI の ID に置き換えます。OAI の ID を確認するには、CloudFront コンソールの[オリジンアクセスアイデンティティページ](https://console.aws.amazon.com/cloudfront/home?region=us-east-1#oai:)を参照するか、CloudFront API の [https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListCloudFrontOriginAccessIdentities.html](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListCloudFrontOriginAccessIdentities.html) を使用します。
+ `amzn-s3-demo-bucket` をバケットの名前に置き換えます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
        }
    ]
}
```

------

## Amazon S3 ストレージレンズへのアクセス管理
<a name="example-bucket-policies-lens"></a>

### Amazon S3 ストレージレンズへのアクセス許可の付与
<a name="example-bucket-policies-lens-1"></a>

S3 ストレージレンズはメトリクスを集約し、Amazon S3 コンソールの **[Buckets]** (バケット) ページの **[Account snapshot]** (アカウントスナップショット) セクションにこの情報を表示します。S3 ストレージレンズは、インサイトと傾向を可視化したり、外れ値にフラグ付けしたり、ストレージコストの最適化やデータ保護のベストプラクティスの適用に関するレコメンデーション事項を受け取ったりするために使用できるインタラクティブダッシュボードも提供します。ダッシュボードには、組織、アカウント、AWS リージョン、ストレージクラス、バケット、プレフィックス、またはストレージレンズのグループレベルでインサイトを生成して可視化できる、ドリルダウンオプションが用意されています。毎日のメトリクスレポートを CSV または Parquet 形式で汎用 S3 バケットに送信したり、メトリクスを AWS マネージド S3 テーブルバケットに直接エクスポートしたりすることもできます。

S3 ストレージレンズは、収集したストレージ使用量のメトリクスをさらなる分析のため Amazon S3 バケット内にエクスポートできます。S3 ストレージレンズがメトリクスのエクスポートを配置するバケットは、*送信先バケット*として知られています。S3 Storage Lens のメトリクスエクスポートを設定するとき、ターゲットバケットにバケットポリシーを作成する必要があります。詳細については、「[Amazon S3 ストレージレンズを使用してストレージのアクティビティと使用状況をモニタリングする](storage_lens.md)」を参照してください。

次のバケットポリシーの例では、Amazon S3 が送信先バケットにオブジェクトを書き込む (`PUT` リクエスト) ためのアクセス許可が付与されます。S3 Storage Lens メトリクスのエクスポートを設定するときには、このようなバケットポリシーを送信先バケットに使用します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3StorageLensExamplePolicy",
            "Effect": "Allow",
            "Principal": {
                "Service": "storage-lens.s3.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-destination-bucket/destination-prefix/StorageLens/111122223333/*"
            ],
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control",
                    "aws:SourceAccount": "111122223333",
                    "aws:SourceArn": "arn:aws:s3:region-code:111122223333:storage-lens/storage-lens-dashboard-configuration-id"
                }
            }
        }
    ]
}
```

------

S3 ストレージレンズの組織レベルのメトリクスエクスポートを設定するときには、前述のバケットポリシーの `Resource` ステートメントに次の変更を加えます。

```
1. "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/destination-prefix/StorageLens/your-organization-id/*",
```

## S3 インベントリ、S3 分析、および S3 インベントリレポートの権限管理
<a name="example-bucket-policies-s3-inventory"></a>

### S3 インベントリおよび S3 分析に対するアクセス許可の付与
<a name="example-bucket-policies-s3-inventory-1"></a>

S3 インベントリでは、バケット内のオブジェクトのリストが作成され、S3 分析のエクスポートでは、分析に使用されるデータの出力ファイルが作成されます。インベントリによってオブジェクトがリストされるバケットは、*ソースバケット*と呼ばれます。インベントリファイルと、分析エクスポートファイルが書き込まれるバケットは、*送信先バケット*と呼ばれます。インベントリまたは分析のエクスポートを設定する場合、ターゲットバケットにバケットポリシーを作成する必要があります。詳細については、「[S3 インベントリを使用したデータのカタログ化と分析](storage-inventory.md)」および「[Amazon S3 分析 – ストレージクラス分析](analytics-storage-class.md)」を参照してください。

次のバケットポリシーの例では、ソースバケットのアカウントからターゲットバケットにオブジェクトを書き込む (`PUT` リクエスト) ための Amazon S3 のアクセス許可が付与されます。このようなバケットポリシーは、S3 インベントリと S3 分析エクスポートをセットアップするときに、宛先バケットで使用します。

------
#### [ JSON ]

****  

```
{  
      "Version":"2012-10-17",		 	 	 
      "Statement": [
        {
            "Sid": "InventoryAndAnalyticsExamplePolicy",
            "Effect": "Allow",
            "Principal": {
                "Service": "s3.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": [
            "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
            ],
            "Condition": {
                "ArnLike": {
                "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-source-bucket"
                },
                "StringEquals": {
                    "aws:SourceAccount": "111122223333",
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        }
    ]
}
```

------

### S3 インベントリレポート設定の作成を制御する
<a name="example-bucket-policies-s3-inventory-2"></a>

[S3 インベントリを使用したデータのカタログ化と分析](storage-inventory.md) は、S3 バケット内のオブジェクトのリストと、各オブジェクトのメタデータを作成します。`s3:PutInventoryConfiguration` アクセス許可により、ユーザーはデフォルトで使用可能なすべてのオブジェクトメタデータフィールドを含むインベント設定を作成し、インベントリを保存する宛先バケットを指定できます。宛先バケット内のオブジェクトへの読み取りアクセスを持つユーザーは、インベントリレポートで使用可能なすべてのオブジェクトメタデータフィールドにアクセスできます。S3 Inventory で使用できるメタデータフィールドの詳細については、「[Amazon S3 インベントリのリスト](storage-inventory.md#storage-inventory-contents)」を参照してください。

S3 インベントリレポートをユーザーが設定できないようにするには、ユーザーから `s3:PutInventoryConfiguration` アクセス許可を削除します。

S3 インベントリレポート設定の一部のオブジェクトメタデータフィールドはオプションです。つまり、デフォルトで使用できますが、ユーザーに`s3:PutInventoryConfiguration` アクセス許可を付与すると制限できます。`s3:InventoryAccessibleOptionalFields` 条件キーを使用して、ユーザーがこれらのオプションのメタデータフィールドをレポートに含めることができるかどうかを制御できます。S3 インベントリで使用できるオプションのメタデータフィールドのリストについては、「*Amazon Simple Storage Service API リファレンス*」の「[https://docs.aws.amazon.com//AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html#API_PutBucketInventoryConfiguration_RequestBody](https://docs.aws.amazon.com//AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html#API_PutBucketInventoryConfiguration_RequestBody)」を参照してください。

特定のオプションのメタデータフィールドを使用してインベントリ設定を作成するアクセス許可をユーザーに付与するには、`s3:InventoryAccessibleOptionalFields` 条件キーを使用してバケットポリシーの条件を絞り込みます。

次のポリシー例では、インベントリ設定を条件付きで作成するアクセス許可をユーザー (`Ana`) に付与します。ポリシーの `ForAllValues:StringEquals`条件は、 `s3:InventoryAccessibleOptionalFields`条件キーを使用して、許可される 2 つのオプションのメタデータフィールド、つまり `Size` と `StorageClass` を指定します。したがって、`Ana` がインベントリ設定を作成するとき、含めることができるオプションのメタデータフィールドは `Size` と `StorageClass` のみです。

------
#### [ JSON ]

****  

```
{
	"Id": "InventoryConfigPolicy",
	"Version":"2012-10-17",		 	 	 
	"Statement": [{
			"Sid": "AllowInventoryCreationConditionally",
			"Effect": "Allow",			
			"Principal": {
				"AWS": "arn:aws:iam::111122223333:user/Ana"
			},			
			"Action": 
				"s3:PutInventoryConfiguration",
			"Resource": 
				"arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET",
			"Condition": {
				"ForAllValues:StringEquals": {
					"s3:InventoryAccessibleOptionalFields": [
					   "Size",
					   "StorageClass"
					   ]
				  }
				}
			}
	]
}
```

------

特定のオプションのメタデータフィールドを含む S3 インベントリレポートをユーザーが設定できないようにするには、レプリケート元バケットのバケットポリシーに明示的な `Deny` ステートメントを追加します。次のバケットポリシーの例では、オプションの `ObjectAccessControlList` または `ObjectOwner` メタデータフィールドを含むインベントリ設定をソースバケット `amzn-s3-demo-source-bucket` に作成することをユーザー `Ana` に拒否します。ユーザー`Ana` は、他のオプションのメタデータフィールドを使用してインベントリ設定を作成できます。

```
 1. {
 2. 	"Id": "InventoryConfigSomeFields",
 3. 	"Version": "2012-10-17",		 	 	 
 4. 	"Statement": [{
 5. 			"Sid": "AllowInventoryCreation",
 6. 			"Effect": "Allow",
 7. 			"Principal": {
 8. 				"AWS": "arn:aws:iam::111122223333:user/Ana"
 9. 			},
10. 			"Action": "s3:PutInventoryConfiguration",			
11. 			"Resource": 
12. 				"arn:aws:s3:::amzn-s3-demo-source-bucket",
13. 
14. 		},
15. 		{
16. 			"Sid": "DenyCertainInventoryFieldCreation",
17. 			"Effect": "Deny",
18. 			"Principal": {
19. 				"AWS": "arn:aws:iam::111122223333:user/Ana"
20. 			},
21. 			"Action": "s3:PutInventoryConfiguration",	
22. 			"Resource": 
23. 			  "arn:aws:s3:::amzn-s3-demo-source-bucket",			
24. 			"Condition": {
25. 				"ForAnyValue:StringEquals": {
26. 					"s3:InventoryAccessibleOptionalFields": [
27. 					   "ObjectOwner",
28. 					   "ObjectAccessControlList"
29. 					   ]
30. 				  }
31. 				}
32. 			}
33. 	]
34. }
```

**注記**  
バケットポリシーで `s3:InventoryAccessibleOptionalFields` 条件キーを使用しても、既存のインベントリ設定に基づくインベントリレポートのデリバリーには影響しません。

**重要**  
前の例に示すように、`Allow` 効果で `ForAllValues` を、または `Deny` 効果で `ForAnyValue` を使用することをお勧めします。  
これらの組み合わせは過度に制限され、インベントリ設定の削除がブロックされる可能性があるため、`Deny` 効果で `ForAllValues` または `Allow` 効果で `ForAnyValue` を使用しないでください。  
`ForAllValues` および `ForAnyValue` 条件セット演算子の詳細については、「*IAM ユーザーガイド*」「[複数値のコンテキストキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-single-vs-multi-valued-context-keys.html#reference_policies_condition-multi-valued-context-keys)」を参照してください。

## MFA が必要
<a name="example-bucket-policies-MFA"></a>

Amazon S3 は、多エレメント認証 (MFA) で保護された API へのアクセスをサポートしています。この機能により、Amazon S3 のリソースへのアクセスに MFA を強制的に適用することができます。多エレメント認証により、AWS 環境に適用できるセキュリティのレベルが高まります。MFA は、有効な MFA コードを入力して MFA デバイスを物理的に所有していることを証明することがユーザーに要求されるセキュリティ機能です。詳細については、[AWS 多エレメント認証](https://aws.amazon.com/mfa/) を参照してください。Amazon S3 のリソースにアクセスするすべてのリクエストに対して MFA を要求することができます。

MFA の要件を適用するには、バケットポリシーで `aws:MultiFactorAuthAge` 条件キーを使用します。IAM ユーザーは、AWS Security Token Service (AWS STS) により発行される一時的な認証情報を使用して、Amazon S3 のリソースにアクセスできます。AWS STS リクエスト時に、MFA コードを指定します。

Amazon S3 が多要素認証のリクエストを受け取ると、`aws:MultiFactorAuthAge` 条件キーに一時的な認証情報が作成されてからの時間の数値 (秒) が示されます。リクエストで提供された一時的な認証情報が MFA デバイスを使用して作成されていない場合、このキー値は null (不在) になります。次の例に示すように、バケットポリシーに、この値を確認する条件を追加できます。

このポリシー例は、リクエストが MFA を使用して認証されていない場合、`amzn-s3-demo-bucket` バケットの *`/taxdocuments`* フォルダに対するすべての Amazon S3 オペレーションを拒否します。MFA の詳細については、[IAM ユーザーガイドAWSの ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa.html)* での多エレメント認証 (MFA) の使用* を参照してください。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "123",
    "Statement": [
      {
        "Sid": "",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/taxdocuments/*",
        "Condition": { "Null": { "aws:MultiFactorAuthAge": true }}
      }
    ]
 }
```

------

`aws:MultiFactorAuthAge` 条件キー値が null で、リクエスト内の一時的なセキュリティ認証情報が MFA デバイスを使用せずに作成されたことを示している場合、`Condition` ブロック内の `Null` 条件の評価は `true` になります。

次のバケットポリシーは、前述のバケットポリシーの拡張です。次のポリシーには、2 つのポリシーステートメントが含まれています。1 つのステートメントは、バケット (`s3:GetObject`) の `amzn-s3-demo-bucket` アクセス許可を全員に付与します。もう 1 つのステートメントは、MFA を要求することにより、バケットの `amzn-s3-demo-bucket/taxdocuments` フォルダへのアクセスを制限します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "123",
    "Statement": [
      {
        "Sid": "DenyInsecureConnections",
        "Effect": "Deny",
        "Principal": {
            "AWS": "arn:aws:iam::111122223333:root"
        },
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/taxdocuments/*",
        "Condition": { "Null": { "aws:MultiFactorAuthAge": true } }
      },
      {
        "Sid": "AllowGetObject",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::111122223333:root"
        },
        "Action": ["s3:GetObject"],
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
      }
    ]
 }
```

------

オプションで、`aws:MultiFactorAuthAge` キーの有効期間を制限する数値条件を使用することができます。`aws:MultiFactorAuthAge` キーで指定する期間は、リクエストの認証に使われる一時的セキュリティ認証情報の寿命とは無関係です。

例えば、次のバケットポリシーでは、MFA 認証を要求するほかに、一時セッションが作成されてからの時間もチェックします。このポリシーは、`aws:MultiFactorAuthAge` キーの値が、一時セッションが 1 時間 (3,600 秒) 以上前に作成されたことを示す場合に、すべてのオペレーションを拒否します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "123",
    "Statement": [
      {
        "Sid": "",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/taxdocuments/*",
        "Condition": {"Null": {"aws:MultiFactorAuthAge": true }}
      },
      {
        "Sid": "",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/taxdocuments/*",
        "Condition": {"NumericGreaterThan": {"aws:MultiFactorAuthAge": 3600 }}
       },
       {
         "Sid": "",
         "Effect": "Allow",
         "Principal": "*",
         "Action": ["s3:GetObject"],
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
       }
    ]
 }
```

------

## ユーザーによるオブジェクトの削除を禁止する
<a name="using-with-s3-actions-related-to-bucket-subresources"></a>

デフォルトでは、ユーザーには一切のアクセス許可がありません。ただし、ポリシーを作成する際に、意図しないアクセス許可をユーザーに付与する可能性があります。このようなアクセス許可の抜け穴を防ぐには、明示的な拒否を追加して、より厳格なアクセスポリシーを記述する必要があります。

ユーザーまたはアカウントによるオブジェクトの削除を明示的に防ぐには、バケットポリシーに `s3:DeleteObject`、`s3:DeleteObjectVersion`、および `s3:PutLifecycleConfiguration` のアクションのアクセス許可を追加する必要があります。オブジェクトの削除は、明示的に `DELETE Object` API オペレーションを呼び出すか、有効期限が過ぎたオブジェクトを Amazon S3 が削除できるようにオブジェクトのライフサイクルを設定 (「[オブジェクトのライフサイクルの管理](object-lifecycle-mgmt.md)」を参照) することで可能であるため、これらすべてのアクションが必要です。

次の例は、ユーザー `MaryMajor` の `DELETE Object` アクセス許可を明示的に拒否します。明示的な `Deny` ステートメントは、付与されている他のどのアクセス許可よりも常に優先されます。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "statement1",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:user/MaryMajor"
      },
      "Action": [
        "s3:GetObjectVersion",
        "s3:GetBucketAcl"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket1",
	 	"arn:aws:s3:::amzn-s3-demo-bucket1/*"
      ]
    },
    {
      "Sid": "statement2",
      "Effect": "Deny",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:user/MaryMajor"
      },
      "Action": [
        "s3:DeleteObject",
        "s3:DeleteObjectVersion",
        "s3:PutLifecycleConfiguration"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket1",
	    "arn:aws:s3:::amzn-s3-demo-bucket1/*"
      ]
    }
  ]
}
```

------

# 条件キーを使用したバケットポリシーの例
<a name="amazon-s3-policy-keys"></a>

アクセスポリシー言語を使用して、アクセス許可を付与するときに条件を指定できます。オプションの `Condition` 要素、または `Condition` ブロックを使用して、ポリシーが有効になるときの条件を指定できます。

オブジェクトおよびバケットオペレーションに Amazon S3 条件キーを使用するポリシーについては、次の例を参照してください。条件キーの詳細については、[Amazon S3 のポリシー条件キー](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-conditionkeys) を参照してください。Amazon S3 アクションの完全なリストとポリシーで指定できるリソースについては、「サービス認可リファレンス」の「[Actions, resources, and condition keys for Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)」を参照してください。**

S3 リソースタイプ別の S3 API オペレーションへのアクセス許可の詳細については、「[Amazon S3 API オペレーションに必要なアクセス許可](using-with-s3-policy-actions.md)」を参照してください。

## 例: オブジェクトオペレーションで使用できる Amazon S3 の条件キー
<a name="object-keys-in-amazon-s3-policies"></a>

以下の例は、オブジェクトオペレーションに Amazon S3 固有の条件キーを使用する方法を示しています。Amazon S3 アクションの完全なリストとポリシーで指定できるリソースについては、「サービス認可リファレンス」の「[Actions, resources, and condition keys for Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)」を参照してください。**

S3 リソースタイプ別の S3 API オペレーションへのアクセス許可の詳細については、「[Amazon S3 API オペレーションに必要なアクセス許可](using-with-s3-policy-actions.md)」を参照してください。

ここでは、[PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html) オペレーションで条件キーを使用するポリシーの例をいくつか示します。PutObject オペレーションでは、アクセスコントロールリスト (ACL) に固有のヘッダーを使用して、ACL に基づいてアクセス許可を付与することができます。これらの条件キーを使用することで、条件を設定し、ユーザーがオブジェクトをアップロードする場合に特定のアクセス許可を要求することができます。また、PutObjectAcl オペレーションを使用して ACL に基づいてアクセス許可を付与することもできます。詳細については、[Amazon S3 Amazon Simple Storage Service API リファレンス](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectAcl.html)の *PutObjectAcl* を参照してください。ACL の詳細については、[アクセスコントロールリスト (ACL) の概要](acl-overview.md) を参照してください。

**Topics**
+ [例 1: サーバー側の暗号化を使用してオブジェクトを保存するよう要求する `s3:PutObject` のアクセス許可を付与する](#putobject-require-sse-2)
+ [例 2: 制限されているコピー元からオブジェクトをコピーする `s3:PutObject` のアクセス許可を付与する](#putobject-limit-copy-source-3)
+ [例 3: オブジェクトの特定のバージョンに対するアクセス許可を付与する](#getobjectversion-limit-access-to-specific-version-3)
+ [例 4: オブジェクトタグに基づくアクセス許可の付与](#example-object-tagging-access-control)
+ [例 5: バケット所有者の AWS アカウント ID によるアクセスの制限](#example-object-resource-account)
+ [例 6: 最小の TLS バージョンの要求](#example-object-tls-version)
+ [例 7: `Deny` ステートメントから特定のプリンシパルを除外する](#example-exclude-principal-from-deny-statement)
+ [例 8: オブジェクトキー名または ETags に基づいた、クライアントへの条件付きオブジェクトアップロードの強制](#example-conditional-writes-enforce)

### 例 1: サーバー側の暗号化を使用してオブジェクトを保存するよう要求する `s3:PutObject` のアクセス許可を付与する
<a name="putobject-require-sse-2"></a>

アカウント A がバケットの所有者であるとします。アカウント管理者がアカウント A のユーザーの Jane にオブジェクトをアップロードするアクセス許可を付与するとします。ただし、Jane が必ず Amazon S3 マネージドキーを使用したサーバー側の暗号化 (SSE-S3) をリクエストすることを条件とします。この場合、アカウント A の管理者は、以下のように `s3:x-amz-server-side-encryption` 条件キーを使用することで、この要件を指定できます。次の `Condition` ブロックのキーと値のペアは、暗号化タイプとして `s3:x-amz-server-side-encryption` 条件キーと SSE-S3 (`AES256`) を指定します。

```
"Condition": {
     "StringNotEquals": {
         "s3:x-amz-server-side-encryption": "AES256"
     }}
```

AWS CLI を使用してこのアクセス許可をテストする場合、次の例に示すように、`--server-side-encryption` パラメータを使用して必要な暗号化を追加する必要があります。このコマンド例を実行するには、`user input placeholders` をユーザー自身の情報に置き換えます。

```
aws s3api put-object --bucket amzn-s3-demo-bucket --key HappyFace.jpg --body c:\HappyFace.jpg --server-side-encryption "AES256" --profile AccountAadmin
```

### 例 2: 制限されているコピー元からオブジェクトをコピーする `s3:PutObject` のアクセス許可を付与する
<a name="putobject-limit-copy-source-3"></a>

`PUT` のオブジェクトリクエストでは、ソースオブジェクトを指定すると、リクエストはコピーオペレーションです (「[https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html)」を参照)。バケット所有者は、これに対応して、ソースに制限が付いているオブジェクトをコピーするためのアクセス許可をユーザーに付与できます。以下に例を示します。
+ 指定したソースバケット (例: `amzn-s3-demo-source-bucket`) からのみオブジェクトをコピーすることを許可します。
+ 指定したソースバケットから、キー名のプレフィックスが *`public/`* など特定のプレフィックス (例: `amzn-s3-demo-source-bucket/public/*`) で始まるオブジェクトのみコピーすることを許可します。
+ ソースバケット (例: `amzn-s3-demo-source-bucket/example.jpg`) から特定のオブジェクトのみをコピーすることを許可します。

次のバケットポリシーでは、ユーザー (`Dave`) に `s3:PutObject` のアクセス許可が付与されます。このポリシーでは、リクエストに `s3:x-amz-copy-source` ヘッダーを含め、ヘッダーの値でキー名のプレフィックスに `/amzn-s3-demo-source-bucket/public/*` を指定している場合にのみ、オブジェクトをコピーできます。このポリシーの例を実行するには、`user input placeholders` をユーザー自身の情報に置き換えます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
       {
            "Sid": "cross-account permission to user in your own account",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/Dave"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-source-bucket/*"
        },
        {
            "Sid": "Deny your user permission to upload object if copy source is not /bucket/prefix",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/Dave"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-source-bucket/*",
            "Condition": {
                "StringNotLike": {
                    "s3:x-amz-copy-source": "amzn-s3-demo-source-bucket/public/*"
                }
            }
        }
    ]
}
```

------

**AWS CLI でポリシーをテストする**  
AWS CLI の `copy-object` コマンドを使用して、アクセス許可をテストできます。`--copy-source` パラメータを追加してソースを指定します。キー名のプレフィックスは、ポリシーで許可されているプレフィックスと一致する必要があります。`--profile` パラメータを使用して、ユーザー Dave の認証情報を指定します。AWS CLI の設定の詳細については、「Amazon S3 API リファレンス」の「[Developing with Amazon S3 using the AWS CLI](https://docs.aws.amazon.com/AmazonS3/latest/API/setup-aws-cli.html)」を参照してください。**

```
aws s3api copy-object --bucket amzn-s3-demo-source-bucket --key HappyFace.jpg 
--copy-source amzn-s3-demo-source-bucket/public/PublicHappyFace1.jpg --profile AccountADave
```

**特定のオブジェクトのみをコピーするアクセス許可を付与する**  
前述のポリシーでは、`StringNotLike` 条件を使用しています。次に示すとおり、特定のオブジェクトのみをコピーするアクセス許可を付与するには、条件を `StringNotLike` から `StringNotEquals` に変更し、オブジェクトキーを正確に指定する必要があります。このコマンド例を実行するには、`user input placeholders` をユーザー自身の情報に置き換えます。

```
"Condition": {
       "StringNotEquals": {
           "s3:x-amz-copy-source": "amzn-s3-demo-source-bucket/public/PublicHappyFace1.jpg"
       }
}
```

### 例 3: オブジェクトの特定のバージョンに対するアクセス許可を付与する
<a name="getobjectversion-limit-access-to-specific-version-3"></a>

アカウント A が、バージョニングが有効なバケットを所有しているとします。このバケットには、`HappyFace.jpg` オブジェクトのバージョンが複数含まれています。アカウント A の管理者は、ユーザー `Dave` にオブジェクトの特定のバージョンのみを取得できるアクセス許可を付与したいと考えています。この場合、アカウント管理者は、次に示すように、条件を付けてユーザー `Dave` に `s3:GetObjectVersion` のアクセス許可を付与できます。`Condition` ブロックのキーと値のペアは、`s3:VersionId` 条件キーを指定します。この場合、指定したバージョニングが有効なバケットからオブジェクトを取得するには、`Dave` は正確なオブジェクトバージョン ID を知る必要があります。このポリシーの例を実行するには、`user input placeholders` をユーザー自身の情報に置き換えます。

詳細については、「**Amazon Simple Storage Service API リファレンス」の「[https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)」を参照してください。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "statement1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/Dave"
            },
            "Action": "s3:GetObjectVersion",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/HappyFace.jpg"
        },
        {
            "Sid": "statement2",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/Dave"
            },
            "Action": "s3:GetObjectVersion",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/HappyFace.jpg",
            "Condition": {
                "StringNotEquals": {
                    "s3:VersionId": "AaaHbAQitwiL_h47_44lRO2DDfLlBO5e"
                }
            }
        }
    ]
}
```

------

**AWS CLI でポリシーをテストする**  
このこのポリシーでアクセス許可をテストするには、AWS CLI `get-object` コマンドを実行するときに、特定のオブジェクトバージョンを指定して取得する`--version-id` パラメータを使用します。コマンドは、特定のオブジェクトバージョンを取得し、`OutputFile.jpg` ファイルに保存します。

```
aws s3api get-object --bucket amzn-s3-demo-bucket --key HappyFace.jpg OutputFile.jpg --version-id AaaHbAQitwiL_h47_44lRO2DDfLlBO5e --profile AccountADave
```

### 例 4: オブジェクトタグに基づくアクセス許可の付与
<a name="example-object-tagging-access-control"></a>

Amazon S3 のオペレーションでオブジェクトのタグの条件キーを使用する方法の例については、「[タグ付けとアクセスコントロールポリシー](tagging-and-policies.md)」を参照してください。

### 例 5: バケット所有者の AWS アカウント ID によるアクセスの制限
<a name="example-object-resource-account"></a>

`aws:ResourceAccount` または `s3:ResourceAccount` の条件キーのいずれかを使用して、特定の AWS アカウント ID が所有する Amazon S3 バケットへのユーザー、ロール、またはアプリケーションのアクセスを制限する IAM または仮想プライベートクラウド (VPC) エンドポイントポリシーを記述できます。これらの条件キーを使用すると、VPC 内のクライアントによる、ユーザーが所有していないバケットへのアクセスを制限できます。

ただし、一部の AWS サービスは AWS マネージドバケットへのアクセスに依存していることに注意してください。したがって、IAM ポリシーで `aws:ResourceAccount` キーまたは `s3:ResourceAccount` キーを使用することは、これらのリソースへのアクセスにも影響する可能性があります。詳細については、以下のリソースを参照してください。
+ [AWS アカウント ガイド](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html#bucket-policies-s3)の*指定された AWS PrivateLink のバケットへのアクセスの制限*
+ *Amazon ECR ガイド*の [Amazon ECR が使用するバケットへのアクセスを制限する](https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html#ecr-minimum-s3-perms)
+ *AWS Systems Manager ガイド*の [AWS が管理する Amazon S3 バケットに必要なアクセスを System Manager に提供する](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent-minimum-s3-permissions.html)

`aws:ResourceAccount` および `s3:ResourceAccount` 条件キーの詳細と使用方法を示す例については、「AWS ストレージブログ」の「[Limit access to Amazon S3 buckets owned by specific AWS アカウント](https://aws.amazon.com/blogs/storage/limit-access-to-amazon-s3-buckets-owned-by-specific-aws-accounts/)」を参照してください。**

### 例 6: 最小の TLS バージョンの要求
<a name="example-object-tls-version"></a>

`s3:TlsVersion` 条件キーを使用して、クライアントが使用する TLS バージョンに基づいて Amazon S3 バケットへのユーザーまたはアプリケーションのアクセスを制限する IAM ポリシー、仮想プライベートクラウドエンドポイント (VPCE) ポリシー、またはバケットポリシーを作成できます。この条件キーを使用して、最小の TLS バージョンを必要とするポリシーを記述できます。

**注記**  
AWS のサービスがユーザーに代わって他の AWS のサービスを呼び出す場合 (サービス間呼び出し)、`s3:TlsVersion`、`aws:SecureTransport`、`aws:SourceIp`、および `aws:VpcSourceIp` など、特定のネットワーク固有の認可コンテキストが編集されます。ポリシーで `Deny` ステートメントとともにこれらの条件キーを使用すると、AWS サービスプリンシパルが意図せずブロックされる可能性があります。セキュリティ要件を維持しながら AWS のサービスが適切に動作できるようにするには、値が `false` の `aws:PrincipalIsAWSService` 条件キーを追加して、`Deny` ステートメントからサービスプリンシパルを除外します。例えば、次のようになります。  

```
{
  "Effect": "Deny",
  "Action": "s3:*",
  "Resource": "*",
  "Condition": {
    "Bool": {
      "aws:SecureTransport": "false",
      "aws:PrincipalIsAWSService": "false"
    }
  }
}
```
このポリシーは、HTTPS が使用されていない場合に (`aws:SecureTransport` が false)、AWS 以外のサービスプリンシパルに対してのみ S3 オペレーションへのアクセスを拒否します。これにより、条件付き制限が AWS サービスプリンシパルを除くすべてのプリンシパルに適用されます。

**Example**  
このバケットポリシーの例では、1.2 より前の TLS バージョン (1.1 や 1.0 など) のクライアントによる `PutObject` リクエストを拒否します。**このポリシーの例を実行するには、`user input placeholders` をユーザー自身の情報に置き換えます。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:PutObject",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket1",
                "arn:aws:s3:::amzn-s3-demo-bucket1/*"
            ],
            "Condition": {
                "NumericLessThan": {
                    "s3:TlsVersion": 1.2
                }
            }
        }
    ]
}
```

**Example**  
このバケットポリシー例では、1.1 よりも高い TLS バージョン (1.2、1.3 以降など) のクライアントによる `PutObject` リクエストを許可します。**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:PutObject",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket1",
                "arn:aws:s3:::amzn-s3-demo-bucket1/*"
            ],
            "Condition": {
                "NumericGreaterThan": {
                    "s3:TlsVersion": 1.1
                }
            }
        }
    ]
}
```

### 例 7: `Deny` ステートメントから特定のプリンシパルを除外する
<a name="example-exclude-principal-from-deny-statement"></a>

次のバケットポリシーは、アカウント番号 *`123456789012`* を持つプリンシパルを除き、`amzn-s3-demo-bucket` への `s3:GetObject` アクセスを拒否します。このポリシーの例を実行するには、`user input placeholders` をユーザー自身の情報に置き換えます。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyAccessFromPrincipalNotInSpecificAccount",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:GetObject",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/*"
      ],
      "Condition": {
        "StringNotEquals": {
          "aws:PrincipalAccount": [
            "123456789012"
          ]
        }
      }
    }
  ]
}
```

------

### 例 8: オブジェクトキー名または ETags に基づいた、クライアントへの条件付きオブジェクトアップロードの強制
<a name="example-conditional-writes-enforce"></a>

条件付き書き込みでは、`WRITE` リクエストにヘッダーを追加して、S3 オペレーションに前提条件を指定できます。このヘッダーを使用して、条件が満たされないと S3 オペレーションが失敗する条件を指定します。例えば、オブジェクトアップロード時に、バケットに同じキー名を持つオブジェクトが存在しないことを検証することで、既存のデータの上書きを防ぐことができます。または、オブジェクトを書き込む前に、Amazon S3 でオブジェクトのエンティティタグ (ETag) をチェックすることもできます。

バケットポリシーの条件を使用して条件付き書き込みを適用するバケットポリシーの例については、「[Amazon S3 バケットに条件付き書き込みを強制する](conditional-writes-enforce.md)」を参照してください。

## 例: バケットオペレーションで使用できる Amazon S3 の条件キー
<a name="bucket-keys-in-amazon-s3-policies"></a>

以下のポリシーの例では、バケットオペレーションに Amazon S3 固有の条件キーを使用する方法を示します。

**Topics**
+ [例 1: IP アドレスに対する条件付きの `s3:GetObject` アクセス許可の付与](#AvailableKeys-iamV2)
+ [例 2: 特定のプレフィックスを持つバケット内のオブジェクト一覧の取得](#condition-key-bucket-ops-2)
+ [例 3: キーの最大数の設定](#example-numeric-condition-operators)

### 例 1: IP アドレスに対する条件付きの `s3:GetObject` アクセス許可の付与
<a name="AvailableKeys-iamV2"></a>

リクエストが特定の範囲の IP アドレス (例: `192.0.2.*`) から発信された場合は、そのアドレスが除外する IP アドレス (例: `192.0.2.188`) でない限り、`s3:GetObject` アクションを使用するアクセス許可を認証したユーザーに付与できます。`Condition` ブロックでは、`IpAddress` と `NotIpAddress` は条件であり、それぞれの条件に評価されるキーと値のペアが指定されています。この例の両方のキーと値のペアは、`aws:SourceIp` AWS 全体キーを使用しています。このポリシーの例を実行するには、`user input placeholders` をユーザー自身の情報に置き換えます。

**注記**  
`Condition` ブロックで指定されている `IPAddress` と `NotIpAddress` のキー値は、RFC 4632 で説明されているように、CIDR 表記を使用しています。詳細については、[http://www.rfc−editor.org/rfc/rfc4632.txt](http://www.rfc-editor.org/rfc/rfc4632.txt) を参照してください。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "statement1",
            "Effect": "Allow",
            "Principal": "*",
            "Action":"s3:GetObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition" : {
                "IpAddress" : {
                    "aws:SourceIp": "192.0.2.0/24" 
                },
                "NotIpAddress" : {
                    "aws:SourceIp": "192.0.2.188/32" 
                } 
            } 
        } 
    ]
}
```

------

Amazon S3 のポリシーでは、他の AWS 全体の条件キーを使用することもできます。例えば、VPC エンドポイントのバケットポリシーで `aws:SourceVpce` 条件キーや `aws:SourceVpc` 条件キーを指定できます。具体的な例については、「[バケットポリシーを使用した VPC エンドポイントからのアクセスコントロール](example-bucket-policies-vpc-endpoint.md)」を参照してください。

**注記**  
一部の AWS グローバル条件キーでは、特定のリソースタイプのみがサポートされます。そのため、使用するグローバル条件キーとリソースタイプを Amazon S3 がサポートしているかどうか、または代わりに Amazon S3 固有の条件キーを使用する必要があるかどうかを確認してください。Amazon S3 に対してサポートされているリソースタイプと条件キーの完全なリストについては、サービス認可リファレンスの「[Actions, resources, and condition keys for Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)」を参照してください。**  
S3 リソースタイプ別の S3 API オペレーションへのアクセス許可の詳細については、「[Amazon S3 API オペレーションに必要なアクセス許可](using-with-s3-policy-actions.md)」を参照してください。

### 例 2: 特定のプレフィックスを持つバケット内のオブジェクト一覧の取得
<a name="condition-key-bucket-ops-2"></a>

`s3:prefix` 条件キーを使用して、[https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html) API オペレーションを、特定のプレフィックスを持つキー名に制限できます。バケット所有者であれば、条件キーを使用して、ユーザーがバケット内の特定のプレフィックスの内容を一覧表示することを制限できます。`s3:prefix` 条件キーは、バケットのオブジェクトがキー名プレフィックスによって整理されている場合に便利です。

Amazon S3 コンソールでは、キー名のプレフィックスを使用して、フォルダの概念を示します。フォルダの概念をサポートしているはコンソールのみです。Amazon S3 API では、バケットとオブジェクトのみがサポートされています。例えば、キー名が *`public/object1.jpg`* および *`public/object2.jpg`* である 2 つのオブジェクトがある場合、コンソールには *`public`* フォルダ以下のオブジェクトが表示されます。Amazon S3 API では、これらはプレフィックスを持つオブジェクトとして扱われ、フォルダ内のオブジェクトとしては扱われません。プレフィックスと区切り文字を使用してアクセス許可をフィルタリングする方法の詳細については、[ユーザーポリシーを使用したバケットへのアクセスの制御](walkthrough1.md) を参照してください。

次のシナリオでは、バケット所有者とユーザーが属する親アカウントは同一です。したがって、バケット所有者は、アクセス許可を付与するためにバケットポリシーまたはユーザーポリシーのどちらも使用できます。`ListObjectsV2` API オペレーションを使用できる条件キーの詳細については、「[https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html)」を参照してください。

**注記**  
バケットがバージョニングに対応している場合、バケット内のオブジェクトのリストを表示するには、以下のポリシーで、`s3:ListBucket` のアクセス許可ではなく `s3:ListBucketVersions` のアクセス許可を付与する必要があります。`s3:ListBucketVersions` アクセス許可は、`s3:prefix` 条件キーもサポートしています。

**ユーザーポリシー**  
次のユーザーポリシーは、`s3:ListBucket` のアクセス許可 (「[https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html)」を参照) に、`projects` の値を持つリクエストでプレフィックスを指定する必要がある `Condition` ステートメントを付与します。このポリシーの例を実行するには、`user input placeholders` をユーザー自身の情報に置き換えます。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"statement1",
         "Effect":"Allow",
         "Action": "s3:ListBucket",
         "Resource":"arn:aws:s3:::amzn-s3-demo-bucket",
         "Condition" : {
             "StringEquals" : {
                 "s3:prefix": "projects" 
             }
          } 
       },
      {
         "Sid":"statement2",
         "Effect":"Deny",
         "Action": "s3:ListBucket",
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
         "Condition" : {
             "StringNotEquals" : {
                 "s3:prefix": "projects" 
             }
          } 
       }         
    ]
}
```

------

`Condition` ステートメントは、プレフィックスが `projects` のオブジェクトキーのみを一覧表示するようにユーザーを制限します。明示的な`Deny` ステートメントを追加すると、ユーザーに付与されている他のアクセス許可にかかわらず、他のプレフィックスが付いたキーのリストを求めるユーザーは拒否されます。例えば、以前のユーザーポリシーの更新やバケットポリシーにより、オブジェクトキーのリストを表示するアクセス許可がユーザーに制限なく付与される場合があります。明示的な `Deny` ステートメントは常に `Allow` ステートメントを上書きするため、ユーザーが `projects` プレフィックスを持つキー以外のキーを一覧表示しようとすると、リクエストは拒否されます。

**バケットポリシー**  
次の例に示すとおり、上記のユーザーポリシーに `Principal` 要素を追加して、ユーザーを指定する場合は、バケットポリシーを使用できます。このポリシーの例を実行するには、`user input placeholders` をユーザー自身の情報に置き換えます。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"statement1",
         "Effect":"Allow",
         "Principal": {
            "AWS": "arn:aws:iam::123456789012:user/bucket-owner"
         },  
         "Action":  "s3:ListBucket",
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
         "Condition" : {
             "StringEquals" : {
                 "s3:prefix": "projects" 
             }
          } 
       },
      {
         "Sid":"statement2",
         "Effect":"Deny",
         "Principal": {
            "AWS": "arn:aws:iam::123456789012:user/bucket-owner"
         },  
         "Action": "s3:ListBucket",
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
         "Condition" : {
             "StringNotEquals" : {
                 "s3:prefix": "projects"  
             }
          } 
       }         
    ]
}
```

------

**AWS CLI でポリシーをテストする**  
このポリシーは、次の `list-object` AWS CLI コマンドを使用してテストできます。このコマンドでは、`--profile` パラメータを使用してユーザーの認証情報を指定します。AWS CLI のセットアップと使用の詳細については、「Amazon S3 API リファレンス」の「[Developing with Amazon S3 using the AWS CLI](https://docs.aws.amazon.com/AmazonS3/latest/API/setup-aws-cli.html)」を参照してください。**

```
aws s3api list-objects --bucket amzn-s3-demo-bucket --prefix projects --profile AccountA
```

### 例 3: キーの最大数の設定
<a name="example-numeric-condition-operators"></a>

`s3:max-keys` 条件キーを使用すると、リクエスタが [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html) または [https://docs.aws.amazon.com//AmazonS3/latest/API/API_ListObjectVersions.html](https://docs.aws.amazon.com//AmazonS3/latest/API/API_ListObjectVersions.html) リクエストで返すことができるキーの最大数を設定できます。デフォルトでは、API オペレーションは最大 1,000 個のキーを返します。`s3:max-keys` で使用できる数値条件演算子の一覧とその例については、[IAM ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Numeric)の*数値条件演算子* を参照してください。