

# Amazon S3 用 Identity and Access Management
<a name="security-iam"></a>

AWS Identity and Access Management (IAM) は、管理者が AWS リソースへのアクセスを安全に制御するために役立つ AWS のサービス です。IAM 管理者は、誰が**認証 (サインイン) され、Amazon S3 リソースを使用する**認可を受ける (許可がある) ことができるかを制御します。IAM は、追加費用なしで使用できる AWS のサービスです。

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

**注記**  
Amazon S3 Express One Zone ストレージクラスをディレクトリバケットで使用する方法の詳細については、「[S3 Express One Zone](directory-bucket-high-performance.md#s3-express-one-zone)」と「[ディレクトリバケットの使用](directory-buckets-overview.md)」を参照してください。

**Topics**
+ [対象者](#security_iam_audience)
+ [アイデンティティによる認証](#security_iam_authentication)
+ [ポリシーを使用したアクセス権の管理](#security_iam_access-manage)
+ [Amazon S3 での IAM の機能](security_iam_service-with-iam.md)
+ [Amazon S3 がリクエストを許可する仕組み](how-s3-evaluates-access-control.md)
+ [Amazon S3 API オペレーションに必要なアクセス許可](using-with-s3-policy-actions.md)
+ [Amazon S3 のポリシーとアクセス許可](access-policy-language-overview.md)
+ [Amazon S3 のバケットポリシー](bucket-policies.md)
+ [Amazon S3 のアイデンティティベースのポリシー](security_iam_id-based-policy-examples.md)
+ [チュートリアル: ポリシーを使用した Amazon S3 リソースへのアクセスの管理](example-walkthroughs-managing-access.md)
+ [Amazon S3 ストレージレンズでのサービスにリンクされたロールの使用](using-service-linked-roles.md)
+ [Amazon S3 アイデンティティとアクセスのトラブルシューティング](security_iam_troubleshoot.md)
+ [AWSAmazon S3 の マネージドポリシー](security-iam-awsmanpol.md)

## 対象者
<a name="security_iam_audience"></a>

AWS Identity and Access Management (IAM) の使用方法は、ロールによって異なります。
+ **サービスユーザー** - 機能にアクセスできない場合は、管理者にアクセス許可をリクエストします (「[Amazon S3 アイデンティティとアクセスのトラブルシューティング](security_iam_troubleshoot.md)」を参照)。
+ **サービス管理者** - ユーザーアクセスを決定し、アクセス許可リクエストを送信します (「[Amazon S3 での IAM の機能](security_iam_service-with-iam.md)」を参照)
+ **IAM 管理者** - アクセスを管理するためのポリシーを作成します (「[Amazon S3 のアイデンティティベースのポリシー](security_iam_id-based-policy-examples.md)」を参照)

## アイデンティティによる認証
<a name="security_iam_authentication"></a>

認証とは、アイデンティティ認証情報を使用して AWS にサインインする方法です。ユーザーは、IAM ユーザー の AWS アカウントのルートユーザー として、または IAM ロールを引き受けることによって、認証される 必要があります。

AWS IAM アイデンティティセンター (IAM アイデンティティセンター)、シングルサインオン認証、Google/Facebook 認証情報などの ID ソースからの認証情報を使用して、フェデレーテッドアイデンティティとしてサインインできます。サインインの詳細については、「*AWS サインイン ユーザーガイド*」の「[AWS アカウントにサインインする方法](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)」を参照してください。

プログラムによるアクセスの場合、AWS はリクエストに暗号で署名するための SDK と CLI を提供します。詳細については、「*IAM ユーザーガイド*」の「[API リクエストに対する AWS 署名バージョン 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)」を参照してください。

### AWS アカウント のルートユーザー
<a name="security_iam_authentication-rootuser"></a>

 AWS アカウントを作成すると、すべての AWS のサービスとリソースに対する完全なアクセス権を持つ AWS アカウント *ルートユーザー*と呼ばれる 1 つのサインイン ID を使用して開始します。日常的なタスクには、ルートユーザーを使用しないことを強くお勧めします。ルートユーザー認証情報を必要とするタスクについては、「*IAM ユーザーガイド*」の「[ルートユーザー認証情報が必要なタスク](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)」を参照してください。

### フェデレーテッドアイデンティティ
<a name="security_iam_authentication-federated"></a>

ベストプラクティスでは、人間のユーザーが一時的な認証情報を使用して AWS のサービス にアクセスする際、アイデンティティプロバイダーとのフェデレーションを使用することが求められます。

*フェデレーテッドアイデンティティ*は、エンタープライズディレクトリ、ウェブ ID プロバイダー、Directory Service のユーザーであり、ID ソースからの認証情報を使用して AWS のサービス にアクセスするユーザーです。フェデレーテッドアイデンティティは、一時的な認証情報を提供するロールを引き受けます。

アクセスを一元管理する場合は、AWS IAM アイデンティティセンター をお勧めします。詳細については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[IAM アイデンティティセンターとは](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)」を参照してください。

### IAM ユーザーとグループ
<a name="security_iam_authentication-iamuser"></a>

*[IAM ユーザー](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)*は、特定の個人やアプリケーションに対する特定のアクセス許可を持つアイデンティティです。長期認証情報を持つ IAM ユーザーの代わりに一時的な認証情報を使用することをお勧めします。詳細は「*IAM ユーザーガイド*」の「[人間のユーザーが一時的な認証情報を使用して AWS にアクセスするには ID プロバイダーとのフェデレーションの使用が必要です](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)」を参照してください。

[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)は、IAM ユーザーの集合を指定し、大量のユーザーに対するアクセス許可の管理を容易にします。詳細については、「*IAM ユーザーガイド*」の「[IAM ユーザーに関するユースケース](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html)」を参照してください。

### IAM ロール
<a name="security_iam_authentication-iamrole"></a>

*[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)*は、特定のアクセス許可を持つアイデンティであり、一時的な認証情報を提供します。[ユーザーから IAM ロール (コンソール) に切り替える](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)、または AWS CLI や AWS API オペレーションを呼び出すことで、ロールを引き受けることができます。詳細については、「*IAM ユーザーガイド*」の「[ロールを引き受けるための各種方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)」を参照してください。

IAM ロールは、フェデレーションユーザーアクセス、一時的な IAM ユーザーのアクセス許可、クロスアカウントアクセス、クロスサービスアクセス、および Amazon EC2 で実行するアプリケーションに役立ちます。詳細については、*IAM ユーザーガイド* の [IAM でのクロスアカウントリソースアクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) を参照してください。

## ポリシーを使用したアクセス権の管理
<a name="security_iam_access-manage"></a>

AWS でアクセスを制御するには、ポリシーを作成して AWS ID またはリソースにアタッチします。ポリシーは、アイデンティティやリソースとの関連付けに伴うアクセス許可を定義します。AWS は、プリンシパルがリクエストを行うときに、これらのポリシーを評価します。大半のポリシーは JSON ドキュメントとして AWS に保存されます。JSON ポリシードキュメントの詳細については、「*IAM ユーザーガイド*」の「[JSON ポリシー概要](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json)」を参照してください。

管理者は、ポリシーを使用して、どの**プリンシパル**がどの**リソース**に対して、どのような**条件**で**アクション**を実行できるかを定義することで、誰が何にアクセスできるかを指定します。

デフォルトでは、ユーザーやロールにアクセス許可はありません。IAM 管理者は IAM ポリシーを作成してロールに追加し、このロールをユーザーが引き受けられるようにします。IAM ポリシーは、オペレーションの実行方法を問わず、アクセス許可を定義します。

### アイデンティティベースのポリシー
<a name="security_iam_access-manage-id-based-policies"></a>

アイデンティティベースのポリシーは、アイデンティティ (ユーザー、グループ、またはロール) にアタッチできる JSON アクセス許可ポリシードキュメントです。これらのポリシーは、アイデンティティがどのリソースに対してどのような条件下でどのようなアクションを実行できるかを制御します。アイデンティティベースポリシーの作成方法については、*IAM ユーザーガイド* の [カスタマー管理ポリシーでカスタム IAM アクセス許可を定義する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) を参照してください。

アイデンティティベースのポリシーは、*インラインポリシー* (単一の ID に直接埋め込む) または*管理ポリシー* (複数の ID にアタッチされたスタンドアロンポリシー) にすることができます。管理ポリシーとインラインポリシーのいずれかを選択する方法については、「*IAM ユーザーガイド*」の「[管理ポリシーとインラインポリシーのいずれかを選択する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html)」を参照してください。

### リソースベースのポリシー
<a name="security_iam_access-manage-resource-based-policies"></a>

リソースベースのポリシーは、リソースに添付する JSON ポリシードキュメントです。例としては、IAM *ロール信頼ポリシー*や Amazon S3 *バケットポリシー*などがあります。リソースベースのポリシーをサポートするサービスでは、サービス管理者はポリシーを使用して特定のリソースへのアクセスを制御できます。リソースベースのポリシーでは、[プリンシパルを指定する](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)必要があります。

リソースベースのポリシーは、そのサービス内にあるインラインポリシーです。リソースベースのポリシーで IAM の AWS マネージドポリシーを使用することはできません。

### その他のポリシータイプ
<a name="security_iam_access-manage-other-policies"></a>

AWS は、より一般的なポリシータイプで付与された最大数のアクセス許可を設定できる、追加のポリシータイプをサポートしています。
+ **アクセス許可の境界** – アイデンティティベースのポリシーで IAM エンティティに付与することのできるアクセス許可の数の上限を設定します。詳細については、「*IAM ユーザーガイド*」の「[IAM エンティティのアクセス許可境界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)」を参照してください。
+ **サービスコントロールポリシー (SCP)** - AWS Organizations 内の組織または組織単位の最大のアクセス許可を指定します。詳細については、「*AWS Organizations ユーザーガイド*」の「[サービスコントロールポリシー](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)」を参照してください。
+ **リソースコントロールポリシー (RCP)** – は、アカウント内のリソースで利用できる最大数のアクセス許可を定義します。詳細については、「*AWS Organizations ユーザーガイド*」の「[リソースコントロールポリシー (RCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)」を参照してください。
+ **セッションポリシー** – ロールまたはフェデレーションユーザーの一時セッションを作成する際にパラメータとして渡される高度なポリシーです。詳細については、「*IAM ユーザーガイド*」の「[セッションポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)」を参照してください。

### 複数のポリシータイプ
<a name="security_iam_access-manage-multiple-policies"></a>

1 つのリクエストに複数のタイプのポリシーが適用されると、結果として作成されるアクセス許可を理解するのがさらに難しくなります。複数のポリシータイプが関連するとき、リクエストを許可するかどうかを AWS が決定する方法の詳細については、*IAM ユーザーガイド* の [ポリシーの評価ロジック](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html) を参照してください。

# Amazon S3 での IAM の機能
<a name="security_iam_service-with-iam"></a>

IAM を使用して Amazon S3 へのアクセスを管理する前に、Amazon S3 で利用できる IAM 機能について理解しておく必要があります。






**Amazon S3 で使用できる IAM の機能**  

| IAM 機能 | Amazon S3 のサポート | 
| --- | --- | 
|  [アイデンティティベースのポリシー](#security_iam_service-with-iam-id-based-policies)  |   あり  | 
|  [リソースベースのポリシー](#security_iam_service-with-iam-resource-based-policies)  |   はい  | 
|  [ポリシーアクション](#security_iam_service-with-iam-id-based-policies-actions)  |   あり  | 
|  [ポリシーリソース](#security_iam_service-with-iam-id-based-policies-resources)  |   はい  | 
|  [ポリシー条件キー (サービス固有)](#security_iam_service-with-iam-id-based-policies-conditionkeys)  |   はい  | 
|  [ACL](#security_iam_service-with-iam-acls)  |   はい  | 
|  [ABAC (ポリシー内のタグ)](#security_iam_service-with-iam-tags)  |   部分的  | 
|  [一時認証情報](#security_iam_service-with-iam-roles-tempcreds)  |   あり  | 
|  [転送アクセスセッション (FAS)](#security_iam_service-with-iam-principal-permissions)  |   あり  | 
|  [サービスロール](#security_iam_service-with-iam-roles-service)  |   あり  | 
|  [サービスリンクロール](#security_iam_service-with-iam-roles-service-linked)  |   部分的  | 

Amazon S3 およびその他の AWS サービスがほとんどの IAM 機能との連携する方法の詳細については、「IAM ユーザーガイド」の「[IAM と連携する AWS サービス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)」を参照してください。**

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

## Amazon S3 のアイデンティティベースのポリシー
<a name="security_iam_service-with-iam-id-based-policies"></a>

**アイデンティティベースのポリシーのサポート:** あり

アイデンティティベースポリシーは、IAM ユーザー、ユーザーグループ、ロールなど、アイデンティティにアタッチできる JSON 許可ポリシードキュメントです。これらのポリシーは、ユーザーとロールが実行できるアクション、リソース、および条件をコントロールします。アイデンティティベースポリシーの作成方法については、「*IAM ユーザーガイド*」の「[カスタマー管理ポリシーでカスタム IAM アクセス許可を定義する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)」を参照してください。

IAM アイデンティティベースのポリシーでは、許可または拒否するアクションとリソース、およびアクションを許可または拒否する条件を指定できます。JSON ポリシーで使用できるすべての要素について学ぶには、「*IAM ユーザーガイド*」の「[IAM JSON ポリシーの要素のリファレンス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)」を参照してください。

### Amazon S3 のアイデンティティベースのポリシー例
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>

Amazon S3 のアイデンティティベースのポリシー例を確認するには、「[Amazon S3 のアイデンティティベースのポリシー](security_iam_id-based-policy-examples.md)」を参照してください。

## Amazon S3 内のリソースベースのポリシー
<a name="security_iam_service-with-iam-resource-based-policies"></a>

**リソースベースのポリシーのサポート:** あり

リソースベースのポリシーは、リソースに添付する JSON ポリシードキュメントです。リソースベースのポリシーには例として、IAM *ロールの信頼ポリシー*や Amazon S3 *バケットポリシー*があげられます。リソースベースのポリシーをサポートするサービスでは、サービス管理者はポリシーを使用して特定のリソースへのアクセスをコントロールできます。ポリシーがアタッチされているリソースの場合、指定されたプリンシパルがそのリソースに対して実行できるアクションと条件は、ポリシーによって定義されます。リソースベースのポリシーで、[プリンシパルを指定する](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)必要があります。プリンシパルには、アカウント、ユーザー、ロール、フェデレーションユーザー、または AWS のサービス を含めることができます。

クロスアカウントアクセスを有効にするには、全体のアカウント、または別のアカウントの IAM エンティティを、リソースベースのポリシーのプリンシパルとして指定します。詳細については、IAM ユーザーガイド**の[IAM でのクロスアカウントリソースアクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)を参照してください。

Amazon S3 サービスは、*バケットポリシー*、*アクセスポイントポリシー*、および*アクセス許可*をサポートします。
+ バケットポリシーは、Amazon S3 バケットにアタッチされるリソースベースのポリシーです。リソースポリシーは、バケットに対してアクションを実行できるプリンシパルを定義します。
+ アクセスポイントポリシーは、基になるバケットポリシーと組み合わせて評価されるリソースベースのポリシーです。
+ アクセス許可は、Amazon S3 内のデータへのアクセス許可をプレフィックス、バケット、またはオブジェクトごとに定義するための簡略化されたモデルです。S3 Access Grants の詳細については、「[S3 Access Grants でのアクセス管理](access-grants.md)」を参照してください。

### バケットポリシーのプリンシパル
<a name="s3-bucket-user-policy-specifying-principal-intro"></a>

`Principal` エレメントは、リソースへのアクセスを許可または拒否するユーザー、アカウント、サービス、または他のエンティティを指定します。`Principal` を指定する例を以下に示します。詳細については、「*IAM ユーザーガイド*」の「[プリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)」を参照してください。

#### AWS アカウントに許可を付与する
<a name="s3-aws-account-permissions"></a>

AWS アカウントに許可を付与するには、以下の形式を使用してアカウントを指定します。

```
"AWS":"account-ARN"
```

次に例を示します。

```
"Principal":{"AWS":"arn:aws:iam::AccountIDWithoutHyphens:root"}
```

```
"Principal":{"AWS":["arn:aws:iam::AccountID1WithoutHyphens:root","arn:aws:iam::AccountID2WithoutHyphens:root"]}
```

**注記**  
上記の例では、アカウントレベルにアクセス許可を委任する権限をルートユーザーに付与します。ただし、アカウント内の特定のロールとユーザーに対しては、IAM ポリシーが引き続き必要です。

#### IAM ユーザーにアクセス許可を付与する
<a name="s3-aws-user-permissions"></a>

アカウントの IAM ユーザーにアクセス許可を付与するには、`"AWS":"user-ARN"` の名前と値のペアを指定する必要があります。

```
"Principal":{"AWS":"arn:aws:iam::account-number-without-hyphens:user/username"}
```

ステップバイステップの手順を説明する詳細な例については、[例 1: バケット所有者がユーザーにバケットのアクセス許可を付与する](example-walkthroughs-managing-access-example1.md) および [例 3: バケット所有者が自分の所有していないオブジェクトに対するアクセス許可を付与する](example-walkthroughs-managing-access-example3.md) を参照してください。

**注記**  
バケットポリシーを更新した後に IAM ID を削除すると、バケットポリシーのプリンシパル要素には ARN の代わりに一意の ID が表示されます。これらの一意な ID は再利用されることがないため、すべてのポリシーステートメントから一意の ID を持つプリンシパルを安全に削除できます。一意の ID の詳細については、「*IAM ユーザーガイド*」の「[IAM ID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids)」を参照してください。

#### 匿名アクセス許可を付与する
<a name="s3-anonymous-permissions"></a>

**警告**  
Simple Storage Service (Amazon S3) バケットへの匿名アクセスを付与するときは注意が必要です。匿名アクセスを付与すると、世界中のすべてのユーザーがバケットにアクセスできます。種類にかかわらず、S3 バケットへの匿名書き込みアクセスは一切付与しないことを強くお勧めします。

匿名アクセスと呼ばれるアクセス許可を全員に付与するには、`"*"` の値としてワイルドカード (`Principal`) を設定します。例えば、バケットを Web サイトとして設定する場合、以下のように、バケット内のすべてのオブジェクトを公開し、誰でもアクセスできるようにすることができます。

```
"Principal":"*"
```

```
"Principal":{"AWS":"*"}
```

リソースベースのポリシーで、`"Principal": "*"` 効果と共に `Allow` を使用すると、AWS にサインしていなくても、誰でもリソースにアクセスできるようになります。

リソースベースのポリシーで、`Allow` 効果と共に `"Principal" : { "AWS" : "*" }` を使用すると、同じパーティションのどのアカウントのルートユーザー、IAM ユーザー、引き受けたロールのセッション、フェデレーティッドユーザーでも、リソースにアクセスできるようになります。

匿名ユーザーの場合、これら 2 つの方法は同等です。詳細については、「*IAM ユーザーガイド*」の「[すべてのプリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-anonymous)」を参照してください。

ワイルドカードとして使用して、プリンシパルの名前または ARN の一部に一致させることはできません。

**重要**  
AWS アクセスコントロールポリシーでは、プリンシパル "\$1" と \$1"AWS": "\$1"\$1 は同じように動作します。

#### リソースのアクセス許可の制限
<a name="s3-restrict-permissions"></a>

リソースポリシーを使用して、それ以外の場合は IAM プリンシパルで利用できるリソースへのアクセスを制限することもできます。`Deny` ステートメントを使用してアクセスを防止します。

次の例では、安全な転送プロトコルが使用されていない場合はアクセスをブロックします。

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

****  

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

------

このポリシーでは、この方法を使用して特定のアカウントやプリンシパルのみへのアクセスの拒否を試みるのではなく、`"Principal": "*"` を使用して、この制限をすべてのユーザーに適用することがベストプラクティスです。

#### CloudFront の URL を使用したアクセスの要求
<a name="require-cloudfront-urls"></a>

Amazon S3 の URL の代わりに CloudFront の URL を使用することで、ユーザーが Amazon S3 のコンテンツのみにアクセスするように制限することができます。これを行うには、CloudFront オリジンアクセスコントロール (OAC) を作成します。その後、S3 データのアクセス許可を変更します。バケットポリシーでは、次のように CloudFront をプリンシパルとして設定できます。

```
"Principal":{"Service":"cloudfront.amazonaws.com"}
```

ポリシーの `Condition` 要素を使用して、S3 オリジンを含む CloudFront ディストリビューションに代わってリクエストが行われた場合にのみ CloudFront がバケットにアクセスできるようにします。

```
        "Condition": {
           "StringEquals": {
              "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/CloudFront-distribution-ID"
           }
        }
```

CloudFront URL を使用した S3 アクセスの制限の詳細については、「Amazon CloudFront 開発者ガイド」の「[Amazon Simple Storage Service オリジンへのアクセスの制限](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html)」を参照してください。**Amazon CloudFront を使用する場合のセキュリティとプライバシーのメリットの詳細については、「[コンテンツへのセキュアなアクセスとアクセス制限の設定](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/SecurityAndPrivateContent.html)」を参照してください。

### Amazon S3 のリソースベースポリシーの例
<a name="security_iam_service-with-iam-resource-based-policies-examples"></a>
+ Amazon S3 バケットポリシーの例については、「[Amazon S3 のバケットポリシー](bucket-policies.md)」を参照してください。
+ アクセスポイントのポリシーの例については、「[アクセスポイントを使用するための IAM ポリシーの設定](access-points-policies.md)」を参照してください。

## Amazon S3 のポリシーアクション
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

**ポリシーアクションのサポート:** あり

管理者は AWS JSON ポリシーを使用して、だれが何にアクセスできるかを指定できます。つまり、どの**プリンシパル**がどのような**リソース**にどのような**条件**で**アクション**を実行できるかということです。

JSON ポリシーの `Action` 要素にはポリシー内のアクセスを許可または拒否するために使用できるアクションが記述されます。このアクションは関連付けられたオペレーションを実行するためのアクセス許可を付与するポリシーで使用されます。

以下に、S3 API オペレーションと必要なポリシーアクション間のさまざまなタイプのマッピング関係を示します。
+ 同じ名前の 1 対 1 のマッピング。例えば、 `PutBucketPolicy` API オペレーションを使用するには、`s3:PutBucketPolicy` ポリシーアクションが必要です。
+ 異なる名前の 1 対 1 のマッピング。例えば、 `ListObjectsV2` API オペレーションを使用するには、`s3:ListBucket` ポリシーアクションが必要です。
+ 1 対多のマッピング。例えば、`HeadObject` API オペレーションを使用するには、`s3:GetObject` が必要です。また、S3 オブジェクトロックを使用し、オブジェクトのリーガルホールドステータスまたは保持設定を取得したい場合は、`HeadObject` API オペレーションを使用する前に、対応する `s3:GetObjectLegalHold` または `s3:GetObjectRetention` ポリシーアクションも必要です。
+ 1 対多のマッピング。例えば、`ListObjectsV2` または `HeadBucket` API オペレーションを使用するには、`s3:ListBucket` ポリシーアクションが必要です。



ポリシーで使用する Amazon S3 アクションの一覧については、「サービス認可リファレンス」の「[Amazon S3 で定義されるアクション](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-actions-as-permissions)」を参照してください。**Amazon S3 API オペレーションの完全なリストについては、「*Amazon Simple Storage Service API リファレンス*」の「[Amazon S3 API アクション](https://docs.aws.amazon.com//AmazonS3/latest/API/API_Operations.html)」を参照してください。

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

Amazon S3 のポリシーアクションは、アクションの前に次のプレフィックスを使用します。

```
s3
```

単一のステートメントで複数のアクションを指定するには、アクションをカンマで区切ります。

```
"Action": [
      "s3:action1",
      "s3:action2"
         ]
```





### バケットオペレーション
<a name="using-with-s3-actions-related-to-buckets"></a>

バケットオペレーションは、バケットリソースタイプで動作する S3 API オペレーションです。例: `CreateBucket`、`ListObjectsV2`、`PutBucketPolicy`。バケットオペレーションの S3 ポリシーアクションでは、バケットポリシーの `Resource` 要素または IAM アイデンティティベースのポリシーが、次の例形式の S3 バケットタイプの Amazon リソースネーム (ARN) 識別子である必要があります。

```
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
```

次のバケットポリシーは、アカウント `12345678901` のユーザー `Akua` に [https://docs.aws.amazon.com//AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com//AmazonS3/latest/API/API_PutObject.html) API オペレーションを実行し、S3 バケット内のオブジェクトを一覧表示する `s3:ListBucket` アクセス許可を付与します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Allow Akua to list objects in the bucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Akua"
            },
            "Action": [
            "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
        }
    ]
}
```

------
<a name="bucket-operations-ap"></a>
**汎用バケットのアクセスポイントのポリシーでのバケットオペレーション**  
汎用バケットのアクセスポイントポリシーで付与されるアクセス許可は、基になるバケットで同じアクセス許可が許可される場合にのみ有効です。S3 アクセスポイントを使用する場合は、バケットからアクセスポイントにアクセスコントロールを委任するか、アクセスポイントポリシーで同じアクセス許可を基礎となるバケットのポリシーに追加する必要があります。詳細については、「[アクセスポイントを使用するための IAM ポリシーの設定](access-points-policies.md)」を参照してください。アクセスポイントポリシーでは、バケットオペレーションの S3 ポリシーアクションで、次の形式の `Resource` 要素にアクセスポイント ARN を使用する必要があります。

```
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/example-access-point"
```

次のアクセスポイントポリシーは、`example-access-point` という名前の S3 アクセスポイントを介して [https://docs.aws.amazon.com//AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com//AmazonS3/latest/API/API_ListObjectsV2.html) API オペレーションを実行する `s3:ListBucket` アクセス許可をアカウント `12345678901` のユーザー `Akua` に付与します。このアクセス許可により、`Akua` は `example-access-point` に関連付けられているバケット内のオブジェクトを一覧表示できます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowAkuaToListObjectsInBucketThroughAccessPoint",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Akua"
            },
            "Action": [
            "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:us-west-2:111122223333:accesspoint/example-access-point"
        }
    ]
}
```

------

**注記**  
すべてのバケットオペレーションが汎用バケットのアクセスポイントでサポートされているわけではありません。詳細については、「[S3 オペレーションとアクセスポイントの互換性](access-points-service-api-support.md#access-points-operations-support)」を参照してください。
<a name="bucket-operations-ap-directory-buckets"></a>
**ディレクトリバケットのアクセスポイントのポリシーでのバケットオペレーション**  
ディレクトリバケットのアクセスポイントポリシーで付与されるアクセス許可は、基になるバケットで同じアクセス許可が許される場合にのみ有効です。S3 アクセスポイントを使用する場合は、バケットからアクセスポイントにアクセスコントロールを委任するか、アクセスポイントポリシーで同じアクセス許可を基礎となるバケットのポリシーに追加する必要があります。詳細については、「[ディレクトリバケットのアクセスポイントを使用するための IAM ポリシーの設定](access-points-directory-buckets-policies.md)」を参照してください。アクセスポイントポリシーでは、バケットオペレーションの S3 ポリシーアクションで、次の形式の `Resource` 要素にアクセスポイント ARN を使用する必要があります。

```
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/example-access-point--usw2-az1--xa-s3"
```

次のアクセスポイントポリシーは、`example-access-point--usw2-az1--xa-s3` という名前のアクセスポイントを介して [https://docs.aws.amazon.com//AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com//AmazonS3/latest/API/API_ListObjectsV2.html) API オペレーションを実行する `s3:ListBucket` アクセス許可をアカウント `12345678901` のユーザー `Akua` に付与します。このアクセス許可により、`Akua` は `example-access-point--usw2-az1--xa-s3` に関連付けられているバケット内のオブジェクトを一覧表示できます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowAkuaToListObjectsInTheBucketThroughAccessPoint",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Akua"
            },
            "Action": [
            "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3express:us-east-1:111122223333:accesspoint/example-access-point-usw2-az1-xa-s3"
        }
    ]
}
```

------

**注記**  
すべてのバケットオペレーションがディレクトリバケットのアクセスポイントでサポートされているわけではありません。詳細については、「[ディレクトリバケットのアクセスポイントのオブジェクトオペレーション](access-points-directory-buckets-service-api-support.md)」を参照してください。

### オブジェクト操作
<a name="using-with-s3-actions-related-to-objects"></a>

オブジェクトオペレーションは、オブジェクトリソースタイプに基づいて実行される S3 API オペレーションです。例: `GetObject`、`PutObject`、`DeleteObject`。オブジェクトオペレーションの S3 ポリシーアクションでは、ポリシーの `Resource` 要素を次の例の形式で S3 オブジェクト ARN にする必要があります。

```
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
```

```
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/*"
```

**注記**  
前の例に示すように、オブジェクト ARN にはバケット名の後にスラッシュが含まれている必要があります。

以下のバケットポリシーは、アカウント `12345678901` のユーザー `Akua` に `s3:PutObject` の許可を付与します。このアクセス許可により、`Akua` は [https://docs.aws.amazon.com//AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com//AmazonS3/latest/API/API_PutObject.html) API オペレーションを使用して、`amzn-s3-demo-bucket` という名前の S3 バケットにオブジェクトをアップロードできるようになります。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Allow Akua to upload objects",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Akua"
            },
            "Action": [
            "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
        }
    ]
}
```

------
<a name="object-operations-ap"></a>
**アクセスポイントポリシーでのオブジェクトオペレーション**  
S3 アクセスポイントを使用してオブジェクトオペレーションへのアクセスを制御する場合、アクセスポイントポリシーを使用できます。アクセスポイントポリシーを使用するとき、オブジェクトオペレーションの S3 ポリシーアクションで、`arn:aws:s3:region:account-id:accesspoint/access-point-name/object/resource` 形式の `Resource` 要素にアクセスポイント ARN を使用する必要があります。アクセスポイントを使用するオブジェクトオペレーションの場合、アクセスポイント ARN 全体の後に `/object/` 値を `Resource` 要素に含める必要があります。次に例を示します。

```
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/example-access-point/object/*"
```

```
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/example-access-point/object/prefix/*"
```

次のアクセスポイントポリシーは、アカウント `12345678901` のユーザー `Akua` に `s3:GetObject` アクセス許可を付与します。このアクセス許可により、`Akua` は、アクセスポイントに関連付けられているバケット内のすべてのオブジェクトに対して、`example-access-point` という名前のアクセスポイントを介して [https://docs.aws.amazon.com//AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com//AmazonS3/latest/API/API_GetObject.html) API オペレーションを実行できます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Allow Akua to get objects through access point",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Akua"
            },
            "Action": [
            "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:us-east-1:111122223333:accesspoint/example-access-point/object/*"
        }
    ]
}
```

------

**注記**  
すべてのオブジェクトオペレーションがアクセスポイントでサポートされているわけではありません。詳細については、「[S3 オペレーションとアクセスポイントの互換性](access-points-service-api-support.md#access-points-operations-support)」を参照してください。
<a name="object-operations-ap-directory-buckets"></a>
**ディレクトリバケットのアクセスポイントのポリシーでのオブジェクトオペレーション**  
ディレクトリバケットのアクセスポイントを使用してオブジェクトオペレーションへのアクセスを制御する場合、アクセスポイントポリシーを使用できます。アクセスポイントポリシーを使用するとき、オブジェクトオペレーションの S3 ポリシーアクションで、`arn:aws:s3:region:account-id:accesspoint/access-point-name/object/resource` 形式の `Resource` 要素にアクセスポイント ARN を使用する必要があります。アクセスポイントを使用するオブジェクトオペレーションの場合、アクセスポイント ARN 全体の後に `/object/` 値を `Resource` 要素に含める必要があります。次に例を示します。

```
"Resource": "arn:aws:s3express:us-west-2:123456789012:accesspoint/example-access-point--usw2-az1--xa-s3/object/*"
```

```
"Resource": "arn:aws:s3express:us-west-2:123456789012:accesspoint/example-access-point--usw2-az1--xa-s3/object/prefix/*"
```

次のアクセスポイントポリシーは、アカウント `12345678901` のユーザー `Akua` に `s3:GetObject` アクセス許可を付与します。このアクセス許可により、`Akua` は、アクセスポイントに関連付けられているバケット内のすべてのオブジェクトに対して、`example-access-point--usw2-az1--xa-s3` という名前のアクセスポイントを介して [https://docs.aws.amazon.com//AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com//AmazonS3/latest/API/API_GetObject.html) API オペレーションを実行できます。

```
{
    "Version": "2012-10-17", 		 	 	 
    "Statement": [
        {
            "Sid": "Allow Akua to get objects through access point",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::12345678901:user/Akua"
            },
            "Action": "s3express:CreateSession","s3:GetObject"
            "Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/example-access-point--usw2-az1--xa-s3/object/*"
        }
    ]
}
```

**注記**  
すべてのオブジェクトオペレーションがディレクトリバケットのアクセスポイントでサポートされているわけではありません。詳細については、「[ディレクトリバケットのアクセスポイントのオブジェクトオペレーション](access-points-directory-buckets-service-api-support.md)」を参照してください。

### 汎用バケットオペレーションのアクセスポイント
<a name="using-with-s3-actions-related-to-accesspoint"></a>

アクセスポイントオペレーションは、`accesspoint` リソースタイプで動作する S3 API オペレーションです。例: `CreateAccessPoint`、`DeleteAccessPoint`、`GetAccessPointPolicy`。アクセスポイントオペレーションの S3 ポリシーアクションは、バケットポリシーやアクセスポイントポリシーではなく、IAM アイデンティティベースのポリシーでのみ使用できます。アクセスポイントオペレーションでは、`Resource` 要素を次の例の形式のアクセスポイント ARN にする必要があります。

```
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/example-access-point"
```

次の IAM アイデンティティベースのポリシーは、`example-access-point` という名前の S3 アクセスポイントで [https://docs.aws.amazon.com//AmazonS3/latest/API/API_control_GetAccessPointPolicy.html](https://docs.aws.amazon.com//AmazonS3/latest/API/API_control_GetAccessPointPolicy.html) API オペレーションを実行する `s3:GetAccessPointPolicy` アクセス許可を付与します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GrantPermissionToRetrieveTheAccessPointPolicyOfAccessPointExampleAccessPoint",
            "Effect": "Allow",
            "Action": [
            "s3:GetAccessPointPolicy"
            ],
            "Resource": "arn:aws:s3:*:123456789012:accesspoint/example-access-point"
        }
    ]
}
```

------

アクセスポイントを使用してバケットオペレーションへのアクセスを制御する場合は、「[汎用バケットのアクセスポイントのポリシーでのバケットオペレーション](#bucket-operations-ap)」を参照してください。オブジェクトオペレーションへのアクセスを制御するには、「[アクセスポイントポリシーでのオブジェクトオペレーション](#object-operations-ap)」を参照してください。アクセスポイントポリシーの設定方法の詳細については、「[アクセスポイントを使用するための IAM ポリシーの設定](access-points-policies.md)」を参照してください。

### ディレクトリバケットオペレーションのアクセスポイント
<a name="using-with-s3-actions-related-to-accesspoint-directory-buckets"></a>

ディレクトリバケットオペレーションのアクセスポイントは、`accesspoint` リソースタイプで動作する S3 API オペレーションです。例: `CreateAccessPoint`、`DeleteAccessPoint`、`GetAccessPointPolicy`。アクセスポイントオペレーションの S3 ポリシーアクションは、バケットポリシーやアクセスポイントポリシーではなく、IAM アイデンティティベースのポリシーでのみ使用できます。ディレクトリバケットオペレーションのアクセスポイントでは、`Resource` 要素を次の例の形式のアクセスポイント ARN にする必要があります。

```
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/example-access-point--usw2-az1--xa-s3"
```

次の IAM アイデンティティベースのポリシーは、`example-access-point--usw2-az1--xa-s3` という名前のアクセスポイントで [https://docs.aws.amazon.com//AmazonS3/latest/API/API_control_GetAccessPointPolicy.html](https://docs.aws.amazon.com//AmazonS3/latest/API/API_control_GetAccessPointPolicy.html) API オペレーションを実行する `s3express:GetAccessPointPolicy` アクセス許可を付与します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GrantPermissionToRetrieveTheAccessPointPolicyOfAccessPointExampleAccessPointUsw2Az1XaS3",
            "Effect": "Allow",
            "Action": [
            "s3express:CreateSession","s3express:GetAccessPointPolicy"
            ],
            "Resource": "arn:aws:s3:*:111122223333:accesspoint/example-access-point"
        }
    ]
}
```

------

次の IAM アイデンティティベースのポリシーは、ディレクトリバケットのアクセスポイントを作成する `s3express:CreateAccessPoint` アクセス許可を付与します。

```
{
    "Version": "2012-10-17", 		 	 	 
    "Statement": [
        {
            "Sid": "Grant CreateAccessPoint.",
            "Principal": "*",
            "Action": "s3express:CreateSession",
            "s3express:CreateAccessPoint""Effect": "Allow",
            "Resource": "*"
        }
    ]
}
```

次の IAM アイデンティティベースのポリシーは、ディレクトリバケットのアクセスポイントのアクセスポイント範囲を作成する `s3express:PutAccessPointScope` アクセス許可を付与します。

```
{
    "Version": "2012-10-17", 		 	 	 
    "Statement": [
        {
            "Sid": "Grant PutAccessPointScope",
            "Principal": "*",
            "Action": "s3express:CreateSession",
            "s3express:CreateAccessPoint",
            "S3Express:PutAccessPointScope""Effect": "Allow",
            "Resource": "*",
        }
    ]
}
```

ディレクトリバケットのアクセスポイントを使用してバケットオペレーションへのアクセスを制御する場合は、「[ディレクトリバケットのアクセスポイントのポリシーでのバケットオペレーション](#bucket-operations-ap-directory-buckets)」を参照してください。オブジェクトオペレーションへのアクセスを制御するには、「[ディレクトリバケットのアクセスポイントのポリシーでのオブジェクトオペレーション](#object-operations-ap-directory-buckets)」を参照してください。ディレクトリバケットのアクセスポイントポリシーの設定方法の詳細については、「[ディレクトリバケットのアクセスポイントを使用するための IAM ポリシーの設定](access-points-directory-buckets-policies.md)」を参照してください。

### Object Lambda アクセスポイントオペレーション
<a name="using-with-s3-actions-related-to-olap"></a>

Amazon S3 Object Lambda を使用すると、Amazon S3 `GET`、`LIST`、`HEAD` リクエストに独自のコードを追加して、データがアプリケーションに返されるときにそのデータを変更および処理できます。Object Lambda アクセスポイントを介したリクエストは、他のアクセスポイントを介したリクエストと同様に行うことができます。詳細については、「[S3 Object Lambda を使用したオブジェクトの変換](transforming-objects.md)」を参照してください。

Object Lambda アクセスポイントオペレーションのポリシーを設定する方法についての詳細は、「[Object Lambda アクセスポイントの IAM ポリシーの設定](olap-policies.md)」を参照してください。

### マルチリージョンアクセスポイントオペレーション
<a name="using-with-s3-actions-related-to-mrap"></a>

マルチリージョンアクセスポイントを使用すると、複数の AWS リージョン にある S3 バケットからのリクエストをアプリケーションが実行するために使用できるグローバルエンドポイントを作成できます。マルチリージョンアクセスポイントを使用して、単一のリージョンで使用するのと同じシンプルなアーキテクチャでマルチリージョンアプリケーションを構築し、世界中のどこでもこれらのアプリケーションを実行することができます。詳細については、「[マルチリージョンアクセスポイントを使用したマルチリージョントラフィックの管理](MultiRegionAccessPoints.md)」を参照してください。

マルチリージョンアクセスポイントオペレーションのポリシーを設定する方法の詳細については、「[マルチリージョンアクセスポイントポリシーの例](MultiRegionAccessPointPermissions.md#MultiRegionAccessPointPolicyExamples)」を参照してください。

### バッチジョブオペレーション
<a name="using-with-s3-actions-related-to-batchops"></a>

(バッチオペレーション) ジョブオペレーションは、ジョブリソースタイプで動作する S3 API オペレーションです。例えば、`DescribeJob` と `CreateJob` です。ジョブオペレーションの S3 ポリシーアクションは、バケットポリシーではなく、IAM アイデンティティベースのポリシーでのみ使用できます。また、ジョブオペレーションでは、IAM アイデンティティベースのポリシーの `Resource` 要素を次の例の形式の `job` ARN にする必要があります。

```
"Resource": "arn:aws:s3:*:123456789012:job/*"
```

次の IAM アイデンティティベースのポリシーは、`example-job` という名前の S3 バッチオペレーションジョブに対して [DescribeJob](https://docs.aws.amazon.com//AmazonS3/latest/API/API_DescribeJob.html) API オペレーションを実行する `s3:DescribeJob` アクセス許可を付与します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowDescribingBatchOperationJob",
            "Effect": "Allow",
            "Action": [
            "s3:DescribeJob"
            ],
            "Resource": "arn:aws:s3:*:111122223333:job/example-job"
        }
    ]
}
```

------

### S3 Storage Lens 設定オペレーション
<a name="using-with-s3-actions-related-to-lens"></a>

S3 Storage Lens 設定オペレーションの設定方法の詳細については、「[Amazon S3 ストレージレンズアクセス許可の設定](storage_lens_iam_permissions.md)」を参照してください。

### アカウントオペレーション
<a name="using-with-s3-actions-related-to-accounts"></a>

アカウントオペレーションは、アカウントレベルで実行される S3 API オペレーションです。例えば、`GetPublicAccessBlock` (アカウント用) です。アカウントは、Amazon S3 で定義されるリソースタイプではありません。アカウントオペレーションの S3 ポリシーアクションは、バケットポリシーではなく、IAM アイデンティティベースのポリシーでのみ使用できます。また、アカウントオペレーションでは、IAM アイデンティティベースのポリシーの `Resource` 要素が `"*"` である必要があります。

次の IAM アイデンティティベースのポリシーは、アカウントレベルの [https://docs.aws.amazon.com//AmazonS3/latest/API/API_control_GetPublicAccessBlock.html](https://docs.aws.amazon.com//AmazonS3/latest/API/API_control_GetPublicAccessBlock.html) API オペレーションを実行し、アカウントレベルのパブリックアクセスブロック設定を取得するために `s3:GetAccountPublicAccessBlock` アクセス許可を付与します。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"AllowRetrievingTheAccountLevelPublicAccessBlockSettings",
         "Effect":"Allow",
         "Action":[
            "s3:GetAccountPublicAccessBlock" 
         ],
         "Resource":[
            "*"
         ]
       }
    ]
}
```

------

### Amazon S3 のポリシーの例
<a name="security_iam_service-with-policies-examples-actions"></a>
+ Amazon S3 のアイデンティティベースのポリシー例を確認するには、「[Amazon S3 のアイデンティティベースのポリシー](security_iam_id-based-policy-examples.md)」を参照してください。
+ Amazon S3 のリソースベースのポリシー例を確認するには、「[Amazon S3 のバケットポリシー](bucket-policies.md)」および「[アクセスポイントを使用するための IAM ポリシーの設定](access-points-policies.md)」を参照してください。

## Amazon S3 のポリシーリソース
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

**ポリシーリソースのサポート:** あり

管理者は AWS JSON ポリシーを使用して、だれが何にアクセスできるかを指定できます。つまり、どの**プリンシパル**がどの**リソース**に対してどのような**条件下で****アクション**を実行できるかということです。

`Resource` JSON ポリシー要素はアクションが適用されるオブジェクトを指定します。ベストプラクティスとして、[Amazon リソースネーム (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html) を使用してリソースを指定します。リソースレベルの権限をサポートしないアクションの場合は、ステートメントがすべてのリソースに適用されることを示すために、ワイルドカード (\$1) を使用します。

```
"Resource": "*"
```

一部の Amazon S3 API アクションは複数のリソースをサポートします。例えば、`s3:GetObject` は `example-resource-1` と `example-resource-2` にアクセスするため、プリンシパルには両方のリソースにアクセスする許可が必要です。1 つのステートメントで複数のリソースを指定するには、次の例に示すように、ARN をカンマで区切ります。

```
"Resource": [
      "example-resource-1",
      "example-resource-2"
```

Amazon S3 のリソースは、バケット、オブジェクト、アクセスポイント、またはジョブです。ポリシーでは、バケット、オブジェクト、アクセスポイント、またはジョブの Amazon リソースネーム (ARN) を使用してリソースを識別します。

Amazon S3 リソースタイプとその ARN の完全なリストについては、「サービス認可リファレンス」の「[Resources defined by Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-resources-for-iam-policies)」を参照してください。**どのアクションで各リソースの ARN を指定できるかについては、「[Amazon S3 で定義されるアクション](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-actions-as-permissions)」を参照してください。

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

### リソース ARN のワイルドカード文字
<a name="s3-arn-wildcards"></a>

リソース ARN の一部にワイルドカードを使用できます。ARN セグメント (コロンで区切られている部分) でワイルドカード文字 (`*` と `?`) を使用できます。アスタリスク (`*`) は 0 個以上の文字の任意の組み合わせを表し、疑問符 (`?`) は任意の 1 文字を表します。各セグメントで複数の `*` または `?` 文字を使用できます。ただし、ワイルドカード文字はセグメントをまたぐことはできません。
+ 以下の ARN は ARN の `relative-ID` の部分でワイルドカード文字 `*` を使用して、`amzn-s3-demo-bucket` バケット内のすべてのオブジェクトを識別します。

  ```
  1. arn:aws:s3:::amzn-s3-demo-bucket/*
  ```
+ 次の ARN は `*` を使用して、S3 のすべてのバケットとオブジェクトを示しています。

  ```
  arn:aws:s3:::*
  ```
+ 以下の ARN は、`relative-ID` の部分で、`*` および `?` の両方のワイルドカード文字を使用します。この ARN により、*`amzn-s3-demo-example1bucket`*、`amzn-s3-demo-example2bucket`、`amzn-s3-demo-example3bucket` など、バケット内のすべてのオブジェクトを識別します。

  ```
  1. arn:aws:s3:::amzn-s3-demo-example?bucket/*
  ```

### リソース ARN のポリシー変数
<a name="s3-policy-variables"></a>

Amazon S3 の ARN では、ポリシー変数を使用することもできます。あらかじめ定義されているこれらの変数は、ポリシーの評価時に対応する値で置き換えられます。例えば、バケットをフォルダのコレクションとして構成し、ユーザーごとに別のフォルダを使用するとします。フォルダ名はユーザー名と同じです。各ユーザーに自分のフォルダに対するアクセス許可を付与するには、リソース ARN で以下のようにポリシー変数を指定します。

```
arn:aws:s3:::bucket_name/developers/${aws:username}/
```

実行時にポリシーが評価されると、リソース ARN の変数 `${aws:username}` には、リクエストを行うユーザーのユーザー名が挿入されます。





### Amazon S3 のポリシーの例
<a name="security_iam_service-with-policies-examples-resources"></a>
+ Amazon S3 のアイデンティティベースのポリシー例を確認するには、「[Amazon S3 のアイデンティティベースのポリシー](security_iam_id-based-policy-examples.md)」を参照してください。
+ Amazon S3 のリソースベースのポリシー例を確認するには、「[Amazon S3 のバケットポリシー](bucket-policies.md)」および「[アクセスポイントを使用するための IAM ポリシーの設定](access-points-policies.md)」を参照してください。

## Amazon S3 のポリシー条件キー
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

**サービス固有のポリシー条件キーのサポート:** あり

管理者は AWS JSON ポリシーを使用して、だれが何にアクセスできるかを指定できます。つまり、どの**プリンシパル**がどんな**リソース**にどんな**条件**で**アクション**を実行できるかということです。

`Condition` 要素は、定義された基準に基づいてステートメントが実行される時期を指定します。イコールや未満などの[条件演算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)を使用して条件式を作成して、ポリシーの条件とリクエスト内の値を一致させることができます。すべての AWS グローバル条件キーを確認するには、*IAM ユーザーガイド*の[AWS グローバル条件コンテキストキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)を参照してください。

各 Amazon S3 条件キーは、その条件を設定できる API でサポートされている同じ名前のリクエストヘッダーに対応します。Amazon S3 固有の条件キーでは、同じ名前のリクエストヘッダーの動作が指定されます。例えば、アクセス許可 `s3:GetObjectVersion` に対して条件付きのアクセス許可を付与する条件キー `s3:VersionId` は、GET Object リクエストで設定する `versionId` クエリパラメータの動作を定義します。

Amazon S3 の条件キーのリストを確認するには、「サービス認可リファレンス」の「*Condition keys for Amazon S3*」を参照してください。[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-policy-keys](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-policy-keys)どのアクションおよびリソースで条件キーを使用できるかについては、「[Amazon S3 で定義されるアクション](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-actions-as-permissions)」を参照してください。

### 例: オブジェクトのアップロードを特定のストレージクラスのオブジェクトに制限する
<a name="example-storage-class-condition-key"></a>

アカウント ID `123456789012` で表されているアカウント A がバケットを所有しているとします。アカウント A の管理者は、アカウント A のユーザーである *`Dave`* に対して、`STANDARD_IA` ストレージクラスにオブジェクトが保存されている場合にのみ *`Dave`* がバケットにオブジェクトをロードすることを許可するとします。オブジェクトのアップロードを特定のストレージクラスに制限するために、アカウント A の管理者は、次のバケットポリシーの例に示すように `s3:x-amz-storage-class` 条件キーを使用できます。

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

****  

```
{
                 "Version":"2012-10-17",		 	 	 
                 "Statement": [
                   {
                     "Sid": "statement1",
                     "Effect": "Allow",
                     "Principal": {
                       "AWS": "arn:aws:iam::123456789012:user/Dave"
                     },
                     "Action": "s3:PutObject",
                     "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*",
                     "Condition": {
                       "StringEquals": {
                         "s3:x-amz-storage-class": [
                           "STANDARD_IA"
                         ]
                       }
                     }
                   }
                 ]
            }
```

------

この例で、`Condition` ブロックは指定されたキーと値のペア `StringEquals` に適用される `"s3:x-amz-acl":["public-read"]` 条件を指定します。条件の表現に使用できる、事前に定義された一連のキーがあります。この例では、`s3:x-amz-acl` 条件キーを使用しています。この条件では、`public-read` の値が指定された `x-amz-acl` ヘッダーをすべての `PutObject` リクエストに含めることがユーザーに求められます。

### Amazon S3 のポリシーの例
<a name="security_iam_service-with-policies-examples-conditions"></a>
+ Amazon S3 のアイデンティティベースのポリシー例を確認するには、「[Amazon S3 のアイデンティティベースのポリシー](security_iam_id-based-policy-examples.md)」を参照してください。
+ Amazon S3 のリソースベースのポリシー例を確認するには、「[Amazon S3 のバケットポリシー](bucket-policies.md)」および「[アクセスポイントを使用するための IAM ポリシーの設定](access-points-policies.md)」を参照してください。

## Amazon S3 での ACL
<a name="security_iam_service-with-iam-acls"></a>

**ACL のサポート:** あり

Amazon S3 のアクセスコントロールリスト (ACL) は、どの AWS アカウント がリソースへのアクセス許可を持つかをコントロールします。ACL はリソースベースのポリシーに似ていますが、JSON ポリシードキュメント形式は使用しません。

**重要**  
Amazon S3 の最新のユースケースの大部分では ACL を使用する必要がなくなっています。

Amazon S3 での ACL を使用したアクセスコントロールについては、「[ACL によるアクセス管理](acls.md)」を参照してください。

## Amazon S3 での ABAC
<a name="security_iam_service-with-iam-tags"></a>

**ABAC (ポリシー内のタグ) のサポート:** 一部

属性ベースのアクセスコントロール (ABAC) は、タグと呼ばれる属性に基づいてアクセス許可を定義する認可戦略です。IAM エンティティと AWS リソースにタグを付けることで、プリンシパルのタグがリソースタグと一致するときに操作を許可する ABAC ポリシーを設計できます。

タグに基づいてアクセスを管理するには、`aws:ResourceTag/key-name`、`aws:RequestTag/key-name`、または `aws:TagKeys` の条件キーを使用して、ポリシーの[条件要素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)でタグ情報を提供します。

サービスがすべてのリソースタイプに対して 3 つの条件キーすべてをサポートする場合、そのサービスの値は**あり**です。サービスが一部のリソースタイプに対してのみ 3 つの条件キーのすべてをサポートする場合、値は「**部分的**」になります。

ABAC の詳細については、「*IAM ユーザーガイド*」の「[ABAC 認可でアクセス許可を定義する](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)」を参照してください。ABAC をセットアップする手順を説明するチュートリアルについては、「*IAM ユーザーガイド*」の「[属性ベースのアクセスコントロール (ABAC) を使用する](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)」を参照してください。

Amazon S3 で ABAC をサポートするリソースの詳細については、「[属性ベースのアクセス制御 (ABAC) のタグを使用する](https://docs.aws.amazon.com/AmazonS3/latest/userguide/tagging.html#using-tags-for-abac)」を参照してください。

タグに基づいて S3 バッチオペレーションジョブへのアクセスを制限するためのアイデンティティベースのポリシー例を確認するには、「[ジョブタグを使用したバッチオペレーションのアクセス許可の制御](batch-ops-job-tags-examples.md)」を参照してください。

### ABAC とオブジェクトタグ
<a name="s3-object-tags"></a>

ABAC ポリシーでは、オブジェクトは `aws:` タグの代わりに `s3:` タグを使用します。オブジェクトタグに基づいてオブジェクトへのアクセスをコントロールするには、以下のタグを使用してポリシーの [Condition 要素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)でタグ情報を指定します。
+ `s3:ExistingObjectTag/tag-key`
+ `s3:RequestObjectTagKeys`
+ `s3:RequestObjectTag/tag-key`

アクセス許可ポリシーの例など、オブジェクトタグを使用したアクセスコントロールについては、「[タグ付けとアクセスコントロールポリシー](tagging-and-policies.md)」を参照してください。

## Amazon S3 での一時的な認証情報の使用
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

**一時的な認証情報のサポート:** あり

一時的な認証情報は、AWSリソースへの短期的なアクセスを提供し、フェデレーションの使用時またはロールの切り替え時に自動的に作成されます。AWS では、長期的なアクセスキーを使用する代わりに、一時的な認証情報を動的に生成することをお勧めします。詳細については、「*IAM ユーザーガイド*」の「[IAM の一時的な認証情報](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)」および「[IAM と連携する AWS のサービス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)」を参照してください。

## Amazon S3 の転送アクセスセッション
<a name="security_iam_service-with-iam-principal-permissions"></a>

**転送アクセスセッション (FAS) のサポート:** あり

 転送アクセスセッション (FAS) は、AWS のサービス を呼び出すプリンシパルのアクセス許可を AWS のサービス のリクエストと合わせて使用し、ダウンストリームのサービスに対してリクエストを行います。FAS リクエストを行う際のポリシーの詳細については、「[転送アクセスセッション](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)」を参照してください。
+ SSE-KMS を使用してオブジェクトを暗号化した場合、Amazon S3 は FAS を使用してオブジェクトを復号化するための呼び出しを AWS KMS に対して行います。詳細については、「[AWS KMS キーによるサーバー側の暗号化 (SSE-KMS) の使用](UsingKMSEncryption.md)」を参照してください。
+ S3 Access Grants も FAS を使用します。特定の ID の S3 データへのアクセス許可を作成すると、被付与者は S3 Access Grants に一時的な認証情報を要求します。S3 Access Grants は、AWS STS からリクエスタの一時的な認証情報を取得し、その認証情報をリクエスタに提供します。詳細については、「[S3 Access Grants を介して Amazon S3 データへのアクセスをリクエストする](access-grants-credentials.md)」を参照してください。

## Amazon S3 のサービスロール
<a name="security_iam_service-with-iam-roles-service"></a>

**サービスロールのサポート:** あり

 サービスロールとは、サービスがユーザーに代わってアクションを実行するために引き受ける [IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)です。IAM 管理者は、IAM 内からサービスロールを作成、変更、削除できます。詳細については、IAM ユーザーガイド**の [AWS のサービス に許可を委任するロールを作成する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)を参照してください。

**警告**  
サービスロールのアクセス許可を変更すると、Amazon S3 が機能しなくなる可能性があります。サービスロールは、Amazon S3 で指示された場合のみ編集してください。

## Amazon S3 のサービスリンクロール
<a name="security_iam_service-with-iam-roles-service-linked"></a>

**サービスにリンクされたロールをサポート**： 一部

 サービスにリンクされたロールは、AWS のサービス にリンクされているサービスロールの一種です。サービスがロールを引き受け、ユーザーに代わってアクションを実行できるようになります。サービスにリンクされたロールは、AWS アカウント に表示され、サービスによって所有されます。IAM 管理者は、サービスリンクロールのアクセス許可を表示できますが、編集することはできません。

Amazon S3 では、Amazon S3 Storage Lens 用のサービスにリンクされたロールをサポートしています。Amazon S3 でのサービスリンクロールの作成または管理の詳細については、「[Amazon S3 ストレージレンズでのサービスにリンクされたロールの使用](using-service-linked-roles.md)」を参照してください。

**プリンシパルとしての Amazon S3 サービス**


| ポリシー内のサービス名 | S3 機能 | 詳細情報 | 
| --- | --- | --- | 
|  `s3.amazonaws.com`  |  S3 レプリケーション  |  [ライブレプリケーションの設定の概要](replication-how-setup.md)  | 
|  `s3.amazonaws.com`  |  S3 イベント通知  |  [Amazon S3 イベント通知](EventNotifications.md)  | 
|  `s3.amazonaws.com`  |  S3 インベントリ  |  [S3 インベントリを使用したデータのカタログ化と分析](storage-inventory.md)  | 
|  `access-grants.s3.amazonaws.com`  |  S3 Access Grants  |  [ロケーションを登録する](access-grants-location-register.md)  | 
|  `batchoperations.s3.amazonaws.com`  |  S3 バッチオペレーション  |  [バッチオペレーションに対するアクセス許可の付与](batch-ops-iam-role-policies.md)  | 
|  `logging.s3.amazonaws.com`  |  S3 サーバーアクセスのログ記録  |  [Amazon S3 サーバーアクセスログを有効にします。](enable-server-access-logging.md)  | 
|  `storage-lens.s3.amazonaws.com`  |  S3 Storage Lens  |  [データエクスポートで Amazon S3 Storage Lens のメトリクスを確認する](storage_lens_view_metrics_export.md)  | 

# Amazon S3 がリクエストを許可する仕組み
<a name="how-s3-evaluates-access-control"></a>

Amazon S3 は、バケットまたはオブジェクトオペレーションなどのリクエストを受け取ると、まずリクエスタに必要なアクセス許可があることを確認します。Amazon S3 は、関連するすべてのアクセスポリシー、ユーザーポリシー、およびリソースベースのポリシー (バケットポリシー、バケットアクセスコントロールリスト (ACL)、オブジェクト ACL) を評価して、リクエストを許可するかどうかを決めます。

**注記**  
Amazon S3 アクセス許可チェックで有効な許可が見つからなかった場合は、アクセス拒否 (403 Forbidden) アクセス許可拒否エラーが返されます。詳細については、「[Amazon S3 でのアクセス拒否 (403 Forbidden) エラーのトラブルシューティング](https://docs.aws.amazon.com/AmazonS3/latest/userguide/troubleshoot-403-errors.html)」を参照してください。

Amazon S3 は、リクエストを受け取ると、リクエスタが特定のオペレーションを実行するアクセス許可があるかどうかを確認するため、次の操作を順に実行します。

1. 関連するすべてのアクセスポリシー (ユーザーポリシー、バケットポリシー、および ACL) を実行時に評価ターゲットのポリシーのセットに変換します。

1. 作成したポリシーのセットを次の手順で評価します。各ステップで、Amazon S3 は、コンテキストの権限に基づいて、ポリシーのサブセットを特定のコンテキストで評価します。

   1. **ユーザーコンテキスト** – ユーザーコンテキストでは、ユーザーが属する親アカウントにコンテキストの権限があります。

      Amazon S3 は、親アカウントが所有するポリシーのサブセットを評価します。このサブセットには、親がユーザーにアタッチするユーザーポリシーが含まれています。親がリクエスト内のリソース (バケットまたはオブジェクト) も所有している場合、Amazon S3 は、対応するリソースポリシー (バケットポリシー、バケット ACL、オブジェクト ACL) も同時に評価します。

      ユーザーは、オペレーションを実行するための親アカウントからのアクセス許可を持つ必要があります。

      このステップは、リクエストが AWS アカウント内のユーザーによって行われた場合にのみ適用されます。リクエストが AWS アカウントのルートユーザー認証情報を使用して行われている場合、Amazon S3 はこのステップをスキップします。

   1. **バケットコンテキスト** – バケットコンテキストでは、Amazon S3 はバケットを所有する AWS アカウント が所有するポリシーを評価します。

      バケットオペレーションに対するリクエストの場合、リクエスタはバケット所有者からのアクセス許可を持つ必要があります。リクエストがオブジェクトをターゲットにしている場合、Amazon S3 は、バケット所有者が所有するすべてのポリシーを評価して、バケット所有者がオブジェクトへのアクセスを明示的に拒否していないかどうかを確認します。明示的な拒否セットが存在する場合、Amazon S3 はリクエストを許可しません。

   1. **オブジェクトコンテキスト** – オブジェクトに対するリクエストの場合、Amazon S3 はオブジェクトの所有者が所有するポリシーのサブセットを評価します。

Amazon S3 がリクエストを承認する方法を示すいくつかのシナリオの例を次に示します。

**Example - リクエスタが IAM プリンシパルの場合**  
リクエスタが IAM プリンシパルの場合、Amazon S3 は、オペレーションを実行するために必要な許可が、プリンシパルが属する親 AWS アカウントよりプリンシパルに付与されているかどうかを判断する必要があります。さらに、リクエストがバケットオペレーション (バケット内容のリストを取得するリクエストなど) の場合、Amazon S3 は、オペレーションを実行するためのアクセス許可をバケット所有者がリクエスタに付与していることを確認する必要があります。IAM プリンシパルがリソースに対して特定のオペレーションを実行するには、そのプリンシパルが属する親 AWS アカウントと、リソースを所有する AWS アカウントの両方からの許可が必要です。

 

**Example - リクエスタが IAM プリンシパルの場合 - リクエストが、バケット所有者が所有していないオブジェクトに対するオペレーションに関連している場合。**  
バケット所有者が所有していないオブジェクトに対するオペレーションのリクエストの場合は、リクエスタがオブジェクトの所有者からのアクセス許可を持つことの確認に加えて、Amazon S3 はバケットポリシーもチェックして、バケット所有者がオブジェクトに対する明示的な拒否を設定していないことを確認する必要があります。バケット所有者 (請求の支払者) は、オブジェクトの所有者にかかわらず、バケット内のオブジェクトへのアクセスを明示的に拒否できます。また、バケット所有者は、バケット内のすべてのオブジェクトを削除できます。  
デフォルトでは、別の AWS アカウントがオブジェクトを S3 汎用バケットにアップロードすると、そのアカウント (オブジェクトライター) がオブジェクトを所有し、そのオブジェクトにアクセスでき、アクセスコントロールリスト (ACL) を介して他のユーザーにそのオブジェクトへのアクセスを許可できます。オブジェクト所有者を使用してこのデフォルト動作を変更することで、ACL を無効にして、汎用バケット内のすべてのオブジェクトをバケット所有者として自動的に所有できます。その結果、データのアクセスコントロールは、IAM ユーザーポリシー、S3 バケットポリシー、仮想プライベートクラウド (VPC) エンドポイントポリシー、AWS Organizations サービスコントロールポリシー (SCP) などのポリシーに基づいています。詳細については、「[オブジェクトの所有権の制御とバケットの ACL の無効化。](about-object-ownership.md)」を参照してください。

Amazon S3 がアクセスポリシーを評価してバケットオペレーションおよびオブジェクトオペレーションのリクエストを承認または拒否する仕組みについて詳しくは、以下のトピックを参照してください。

**Topics**
+ [Amazon S3 がバケットオペレーションのリクエストを承認する仕組み](access-control-auth-workflow-bucket-operation.md)
+ [Amazon S3 がオブジェクトオペレーションのリクエストを許可する仕組み](access-control-auth-workflow-object-operation.md)

# Amazon S3 がバケットオペレーションのリクエストを承認する仕組み
<a name="access-control-auth-workflow-bucket-operation"></a>

Amazon S3 は、バケットオペレーションのリクエストを受け取ると、関連するすべてのアクセス許可を、実行時に評価する一連のポリシーに変換します。関連するアクセス許可には、リソースベースのアクセス許可 (バケットポリシーやバケットアクセスコントロールリストなど) とユーザーポリシー (リクエストが IAM プリンシパルからの場合) が含まれます。Amazon S3 はその後、作成したポリシーのセットを特定のコンテキスト (ユーザーコンテキストまたはバケットコンテキスト) に従って、一連の手順で評価します。

1. **ユーザーコンテキスト** – リクエスタが IAM プリンシパルの場合、そのプリンシパルは親 AWS アカウント からアクセス許可を付与されている必要があります。このステップで、Amazon S3 は、親アカウント (コンテキストの権限とも呼ばれる) が所有するポリシーのサブセットを評価します。このポリシーのサブセットには、親アカウントがプリンシパルにアタッチするユーザーポリシーが含まれます。親がリクエスト内のリソース(この場合はバケット)も所有している場合、Amazon S3 は、対応するリソースポリシー(バケットポリシーおよびバケット ACL)も同時に評価します。バケットオペレーションのリクエストが出されるたびに、サーバーアクセスログはリクエスタの正規 ID を記録します。詳細については、[サーバーアクセスログによるリクエストのログ記録](ServerLogs.md) を参照してください。

1. **バケットコンテキスト** – リクエスタは、バケット所有者から特定のバケットオペレーションを実行するためのアクセス許可を付与されている必要があります。このステップで、Amazon S3 は、バケットを所有する AWS アカウントが所有するポリシーのサブセットを評価します。

   バケット所有者は、バケットポリシーまたはバケット ACL を使用してアクセス許可を付与できます。バケットを所有している AWS アカウント が IAM プリンシパルの親アカウントでもある場合は、ユーザーポリシーでバケットの許可を設定できます。

 次に示すのは、バケットオペレーションのコンテキストベースの評価を説明するための図です。

![\[バケットオペレーションのコンテキストベースの評価を示す図\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/AccessControlAuthorizationFlowBucketResource.png)


次の例は、評価ロジックを示します。

## 例 1: バケット所有者がリクエストするバケットオペレーション
<a name="example1-policy-eval-logic"></a>

 この例では、バケット所有者が AWS アカウントのルート認証情報を使用してバケットオペレーションへのリクエストを送信します。

![\[バケット所有者がリクエストするバケットオペレーションの説明図\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/example10-policy-eval-logic.png)


 Amazon S3 はコンテキストの評価を次のように実行します。

1.  リクエストは AWS アカウントのルートユーザー認証情報を使用して行われるため、ユーザーコンテキストは評価されません。

1.  バケットコンテキストでは、Amazon S3 はバケットポリシーを調べて、リクエスタがオペレーションを実行するアクセス許可を持つかどうかを判定します。Amazon S3 はリクエストを許可します。

## 例 2: バケット所有者でない AWS アカウントがリクエストしたバケットオペレーション
<a name="example2-policy-eval-logic"></a>

この例では、AWS アカウント 2222−2222−2222 が所有するバケットオペレーションで AWS アカウント 1111−1111−1111 のルートユーザー認証情報を使用してリクエストが行われます。このリクエストに IAM ユーザーは関与していません。

![\[バケット所有者以外の AWS アカウント がリクエストするバケットオペレーションの説明図\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/example20-policy-eval-logic.png)


この例では、Amazon S3 は次のようにコンテキストを評価します。

1. リクエストは AWS アカウントのルートユーザー認証情報を使用して行われるため、ユーザーコンテキストは評価されません。

1. バケットコンテキストでは、Amazon S3 はバケットポリシーを調べます。バケット所有者 (AWS アカウント 2222−2222−2222) が、リクエストされたオペレーションを AWS アカウント 1111−1111−1111 に許可していない場合は、Amazon S3 はリクエストを拒否します。それ以外の場合、Amazon S3 はリクエストを許可し、オペレーションを実行します。

## 例 3: 親 AWS アカウントがバケット所有者でもある IAM プリンシパルがリクエストしたバケットオペレーション
<a name="example3-policy-eval-logic"></a>

 この例では、リクエストを送信したユーザーが AWS アカウント 1111−1111−1111 の IAM ユーザー Jill であり、このアカウントがバケット所有者でもあります。

![\[IAM プリンシパルとバケット所有者がリクエストするバケットオペレーションの説明図\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/example30-policy-eval-logic.png)


 Amazon S3 は次のコンテキスト評価を実行します。

1.  リクエストは IAM プリンシパルからであるため、ユーザーコンテキストで、Amazon S3 は親 AWS アカウントに属するすべてのポリシーを評価して、Jill がオペレーションを実行する許可を持っているかどうかを判定します。

    この例では、プリンシパルが属する親 AWS アカウント 1111−1111−1111 は、バケット所有者でもあります。その結果、Amazon S3 は、ユーザーポリシーに加えて、バケットポリシーとバケット ACL も同じコンテキストで評価します。これらが同じアカウントに属するからです。

1. Amazon S3 はバケットポリシーとバケット ACL をユーザーコンテキストの一部として評価したので、バケットコンテキストは評価しません。

## 例 4: 親 AWS アカウントがバケット所有者でない IAM プリンシパルがリクエストしたバケットオペレーション
<a name="example4-policy-eval-logic"></a>

この例では、リクエストを送信したのが 1111−1111−1111 を親 AWS アカウント とする IAM ユーザー Jill であり、バケット所有者は別の AWS アカウント 2222−2222−2222 です。

![\[バケット所有者以外の IAM プリンシパルがリクエストするバケットオペレーションの説明図\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/example40-policy-eval-logic.png)


Jill には、親 AWS アカウントとバケット所有者の両方からの許可が必要です。Amazon S3 は次のようにコンテキストを評価します。

1. リクエストは IAM プリンシパルからであるため、Amazon S3 は、アカウントが作成したポリシーを参照してユーザーコンテキストを評価し、Jill に必要なアクセス許可があることを検証します。Jill にアクセス許可がある場合、Amazon S3 はバケットコンテキストの評価に進みます。Jill にアクセス許可がない場合、Amazon S3 はリクエストを拒否します。

1.  バケットコンテキストでは、Amazon S3 はバケット所有者の 2222−2222−2222 がリクエストされたオペレーションを実行するアクセス許可を Jill (またはその親 AWS アカウント) に付与していることを確認します。アクセス許可がある場合、Amazon S3 はリクエストを許可し、オペレーションを実行します。アクセス許可がない場合、Amazon S3 はリクエストを拒否します。

# Amazon S3 がオブジェクトオペレーションのリクエストを許可する仕組み
<a name="access-control-auth-workflow-object-operation"></a>

Amazon S3 は、オブジェクトオペレーションのリクエストを受け取ると、関連するすべての許可 、リソースベースの許可 (オブジェクトアクセスコントロールリスト (ACL)、バケットポリシー、バケット (ACL) と IAM ユーザーポリシー) を実行時に評価する一連のポリシーに変換します。その後、作成したポリシーのセットを一連の手順で評価します。各ステップでは、ポリシーのサブセットが、ユーザーコンテキスト、バケットコンテキスト、オブジェクトコンテキストの 3 つの固有のコンテキストで評価されます。

1. **ユーザーコンテキスト** – リクエスタが IAM プリンシパルの場合、そのプリンシパルは親 AWS アカウント からアクセス許可を付与されている必要があります。このステップで、Amazon S3 は、親アカウント (コンテキストの権限とも呼ばれる) が所有するポリシーのサブセットを評価します。このポリシーのサブセットには、親がプリンシパルにアタッチするユーザーポリシーが含まれます。親がリクエスト内のリソース (バケットまたはオブジェクト) も所有している場合、Amazon S3 は、対応するリソースポリシー (バケットポリシー、バケット ACL、オブジェクト ACL) も同時に評価します。
**注記**  
親 AWS アカウントがリソース (バケットまたはオブジェクト) を所有している場合、親アカウントは、ユーザーポリシーまたはリソースポリシーを使用して、リソースの許可を IAM プリンシパルに付与できます。

1. **バケットコンテキスト** – このコンテキストでは、Amazon S3 はバケットを所有する AWS アカウント が所有するポリシーを評価します。

   リクエスト内のオブジェクトを所有する AWS アカウント がバケット所有者と同じでない場合、Amazon S3 はポリシーをチェックして、バケット所有者がオブジェクトへのアクセスを明示的に拒否しているかどうかをチェックします。オブジェクトに対する明示的な拒否セットが存在する場合、Amazon S3 はリクエストを許可しません。

1. **オブジェクトコンテキスト** – リクエスタは、オブジェクト所有者から特定のオブジェクトオペレーションを実行するためのアクセス許可を付与されている必要があります。このステップで、Amazon S3 はオブジェクト ACL を評価します。
**注記**  
バケットとオブジェクトの所有者が同じ場合、オブジェクトへのアクセスは、バケットコンテキストで評価されるバケットポリシーで許可することができます。所有者が異なる場合、オブジェクトの所有者はオブジェクト ACL を使用してアクセス許可を付与する必要があります。オブジェクトを所有する AWS アカウントが IAM プリンシパルの親アカウントでもある場合は、ユーザーコンテキストで評価されるユーザーポリシーでオブジェクトのアクセス許可を設定できます。これらのアクセスポリシーの各オプションの詳細については、[チュートリアル: ポリシーを使用した Amazon S3 リソースへのアクセスの管理](example-walkthroughs-managing-access.md) を参照してください。  
バケット所有者がバケット内のすべてのオブジェクトを所有し、バケットポリシーまたは IAM ベースのポリシーを使用してこれらのオブジェクトへのアクセスを管理する場合は、オブジェクト所有権にバケット所有者強制設定を適用できます。この設定では、バケット所有者として、バケット内のすべてのオブジェクトを自動的に所有し、完全に制御できます。バケットとオブジェクト ACL は編集できず、アクセスと見なされなくなります。詳細については、[オブジェクトの所有権の制御とバケットの ACL の無効化。](about-object-ownership.md) を参照してください。

 次に示すのは、オブジェクトオペレーションに対するコンテキストベースの評価の説明です。

![\[オブジェクトオペレーションのコンテキストベースの評価を示す図\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/AccessControlAuthorizationFlowObjectResource.png)


## オブジェクトオペレーションのリクエストの例
<a name="access-control-auth-workflow-object-operation-example1"></a>

この例では、親 AWS アカウント が 1111−1111−1111 である IAM ユーザー Jill が、`GetObject` 2222−2222−2222 が所有するバケットにある、AWS アカウント 3333−3333−3333 が所有するオブジェクトに対するオブジェクトオペレーションのリクエスト (AWS アカウント など) を送信します。

![\[オブジェクトオペレーションのリクエストを示す図\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/example50-policy-eval-logic.png)


Jill には、親 AWS アカウント、バケット所有者、およびオブジェクト所有者からの許可が必要です。Amazon S3 は次のようにコンテキストを評価します。

1. リクエストは IAM プリンシパルからであるため、Amazon S3 は、ユーザーコンテキストを評価して、親 AWS アカウント 1111−1111−1111 がリクエストされたオペレーションを実行するアクセス許可を Jill に付与していることを検証します。アクセス許可がある場合、Amazon S3 はバケットコンテキストを評価します。アクセス許可がない場合、Amazon S3 はリクエストを拒否します。

1. バケットコンテキストでは、バケット所有者の AWS アカウント 2222−2222−2222 がコンテキストの権限です。Amazon S3 は、バケットポリシーを評価して、バケット所有者がオブジェクトへのアクセスを Jill に対して明示的に拒否しているかどうかを判定します。

1. オブジェクトコンテキストでは、コンテキストの権限はオブジェクト所有者の AWS アカウント 3333−3333−3333 です。Amazon S3 は、オブジェクト ACL を評価して、Jill がオブジェクトにアクセスするアクセス許可を持つかどうかを判定します。アクセス許可がある場合、Amazon S3 はリクエストを許可します。

# Amazon S3 API オペレーションに必要なアクセス許可
<a name="using-with-s3-policy-actions"></a>

**注記**  
このページでは、汎用バケットの Amazon S3 ポリシーアクションについて説明します。ディレクトリバケットの Amazon S3 ポリシーアクションの詳細については、「[ディレクトリバケットのアクション](s3-express-security-iam.md#s3-express-security-iam-actions)」を参照してください。

S3 API オペレーションを実行するには、適切なアクセス許可が必要です。このページでは、S3 API オペレーションを必要なアクセス許可にマッピングします。S3 API オペレーションを実行するアクセス許可を付与するには、有効なポリシー (S3 バケットポリシーや IAM アイデンティティベースのポリシーなど) を作成し、ポリシーの `Action` 要素で対応するアクションを指定する必要があります。これらのアクションはポリシーアクションと呼ばれます。すべての S3 API オペレーションが 1 つのアクセス許可 (1 つのポリシーアクション) で表されるわけではなく、さまざまな API オペレーションには複数のアクセス許可 (複数のポリシーアクション) が必要です。

ポリシーを作成するときは、対応する Amazon S3 ポリシーアクションに必要な正しいリソースタイプに基づいて、`Resource` 要素を指定する必要があります。このページでは、アクセス許可をリソースタイプ別に S3 API オペレーションに分類します。リソースタイプの詳細については、「*サービス認可リファレンス*」の「[Resource types defined by Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-resources-for-iam-policies)」を参照してください。Amazon S3 ポリシーアクションの完全なリストとポリシーで使用する条件キーについては、「サービス認可リファレンス」の「[Actions, resources, and condition keys for Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)」を参照してください。**Amazon S3 API オペレーションの完全なリストについては、「*Amazon Simple Storage Service API リファレンス*」の「[Amazon S3 API アクション](https://docs.aws.amazon.com//AmazonS3/latest/API/API_Operations.html)」を参照してください。

S3 で HTTP `403 Forbidden` エラーに対処する方法の詳細については、「[Amazon S3 でのアクセス拒否 (403 Forbidden) エラーのトラブルシューティング](troubleshoot-403-errors.md)」を参照してください。S3 で使用する IAM 機能の詳細については、「[Amazon S3 での IAM の機能](security_iam_service-with-iam.md)」を参照してください。S3 セキュリティのベストプラクティスに関する詳細は、「[Amazon S3 のセキュリティのベストプラクティス](security-best-practices.md)」を参照してください。

**Topics**
+ [バケットオペレーションとアクセス許可](#using-with-s3-policy-actions-related-to-buckets)
+ [オブジェクトオペレーションとアクセス許可](#using-with-s3-policy-actions-related-to-objects)
+ [汎用バケットオペレーションのアクセスポイントとアクセス許可](#using-with-s3-policy-actions-related-to-accesspoint)
+ [Object Lambda アクセスポイントのオペレーションとアクセス許可](#using-with-s3-policy-actions-related-to-olap)
+ [マルチリージョンアクセスポイントとアクセス許可](#using-with-s3-policy-actions-related-to-mrap)
+ [バッチジョブのオペレーションとアクセス許可](#using-with-s3-policy-actions-related-to-batchops)
+ [S3 ストレージレンズ設定オペレーションとアクセス許可](#using-with-s3-policy-actions-related-to-lens)
+ [S3 ストレージレンズグループのオペレーションとアクセス許可](#using-with-s3-policy-actions-related-to-lens-groups)
+ [S3 Access Grants インスタンスのオペレーションとアクセス許可](#using-with-s3-policy-actions-related-to-s3ag-instances)
+ [S3 Access Grants ロケーションのオペレーションとアクセス許可](#using-with-s3-policy-actions-related-to-s3ag-locations)
+ [S3 Access Grants の許可付与オペレーションとアクセス許可](#using-with-s3-policy-actions-related-to-s3ag-grants)
+ [API オペレーションとアクセス許可](#using-with-s3-policy-actions-related-to-accounts)

## バケットオペレーションとアクセス許可
<a name="using-with-s3-policy-actions-related-to-buckets"></a>

バケットオペレーションは、バケットリソースタイプで動作する S3 API オペレーションです。バケットポリシーまたは IAM アイデンティティベースのポリシーでバケットオペレーションに S3 ポリシーアクションを指定する必要があります。

ポリシーでは、`Resource` 要素はバケットの Amazon リソースネーム (ARN) である必要があります。`Resource` 要素形式とポリシーの例の詳細については、「[バケットオペレーション](security_iam_service-with-iam.md#using-with-s3-actions-related-to-buckets)」を参照してください。

**注記**  
アクセスポイントポリシーのバケットオペレーションにアクセス許可を付与する場合は、次の点に注意してください。  
アクセスポイントポリシーのバケットオペレーションで付与されるアクセス許可は、基になるバケットで同じアクセス許可が許される場合にのみ有効です。アクセスポイントを使用する場合は、バケットからアクセスポイントにアクセスコントロールを委任するか、アクセスポイントポリシーで同じアクセス許可を基礎となるバケットのポリシーに追加する必要があります。
バケットオペレーションにアクセス許可を付与するアクセスポイントポリシーでは、`Resource` 要素は `accesspoint` ARN である必要があります。`Resource` 要素形式とポリシーの例の詳細については、「[汎用バケットのアクセスポイントのポリシーでのバケットオペレーション](security_iam_service-with-iam.md#bucket-operations-ap)」を参照してください。アクセスポイントポリシーの詳細については、「[アクセスポイントを使用するための IAM ポリシーの設定](access-points-policies.md)」を参照してください。
すべてのバケットオペレーションがアクセスポイントでサポートされているわけではありません。詳細については、「[S3 オペレーションとアクセスポイントの互換性](access-points-service-api-support.md#access-points-operations-support)」を参照してください。

以下は、バケットオペレーションと必要なポリシーアクションのマッピングです。


| API オペレーション | ポリシーアクション | ポリシーアクションの説明 | 
| --- | --- | --- | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html)  |  (必須) `s3:CreateBucket`  |  新しい S3 バケットを作成するのに必要です。  | 
|    |  (条件付きで必須) `s3:PutBucketAcl`  |  アクセスコントロールリスト (ACL) を使用して、`CreateBucket` リクエスト時にバケットに対してアクセス許可を指定する場合に必要です。  | 
|    |  (条件付きで必須) `s3:PutBucketObjectLockConfiguration`、`s3:PutBucketVersioning`  |  バケットの作成時に Object Lock を有効にする場合は必須です。  | 
|    |  (条件付きで必須) `s3:PutBucketOwnershipControls`  |  バケットの作成時に S3 オブジェクトの所有権を指定する場合は必須です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataConfiguration.html) (V2 API オペレーション。IAM ポリシーアクション名は、V1 および V2 API オペレーションで同じです。)  |  (必須) `s3:CreateBucketMetadataTableConfiguration`、`s3tables:CreateTableBucket`、`s3tables:CreateNamespace`、`s3tables:CreateTable`、`s3tables:GetTable`、`s3tables:PutTablePolicy`、`s3tables:PutTableEncryption`、`kms:DescribeKey`  |  汎用バケットでメタデータテーブル設定を作成するために必要です。 AWS マネージドテーブルバケットとメタデータテーブル設定で指定されたメタデータテーブルを作成するには、指定された `s3tables` アクセス許可が必要です。 AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS) を使用してメタデータテーブルを暗号化する場合は、KMS キーポリシーに追加のアクセス許可が必要です。詳細については、「[メタデータテーブルを設定するためのアクセス許可の設定](metadata-tables-permissions.md)」を参照してください。 メタデータテーブルをクエリできるように AWS マネージドテーブルバケットを AWS 分析サービスと統合する場合は、追加のアクセス許可が必要です。詳細については、「[Integrating Amazon S3 Tables with AWS analytics services](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html)」を参照してください。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataTableConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataTableConfiguration.html) (V1 API オペレーション)  |  (必須) `s3:CreateBucketMetadataTableConfiguration`、`s3tables:CreateNamespace`、`s3tables:CreateTable`、`s3tables:GetTable`、`s3tables:PutTablePolicy`  |  汎用バケットでメタデータテーブル設定を作成するために必要です。 メタデータテーブル設定で指定されたテーブルバケットにメタデータテーブルを作成するには、指定された `s3tables` アクセス許可が必要です。 AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS) を使用してメタデータテーブルを暗号化する場合は、追加のアクセス許可が必要です。詳細については、「[メタデータテーブルを設定するためのアクセス許可の設定](metadata-tables-permissions.md)」を参照してください。 メタデータテーブルをクエリできるようにテーブルバケットを AWS 分析サービスと統合する場合は、追加のアクセス許可が必要です。詳細については、「[Integrating Amazon S3 Tables with AWS analytics services](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html)」を参照してください。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html)  |  (必須) `s3:DeleteBucket`  |  S3 バケットを削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketAnalyticsConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketAnalyticsConfiguration.html)  |  (必須) `s3:PutAnalyticsConfiguration`  |  S3 バケットから S3 分析設定を削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketCors.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketCors.html)  |  (必須) `s3:PutBucketCORS`  |  バケットのクロスオリジンリソース共有 (CORS) 設定を削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketEncryption.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketEncryption.html)  |  (必須) `s3:PutEncryptionConfiguration`  |  Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3) は、S3 のバケットでデフォルトの暗号化設定をリセットするために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketIntelligentTieringConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketIntelligentTieringConfiguration.html)  |  (必須) `s3:PutIntelligentTieringConfiguration`  |  S3 バケットから既存の S3 Intelligent-Tiering 設定を削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketInventoryConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketInventoryConfiguration.html)  |  (必須) `s3:PutInventoryConfiguration`  |  S3 バケットから S3 インベントリ設定を削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketLifecycle.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketLifecycle.html)  |  (必須) `s3:PutLifecycleConfiguration`  |  S3 バケットの S3 ライフサイクル設定を削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetadataTableConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetadataTableConfiguration.html) (V2 API オペレーション。IAM ポリシーアクション名は、V1 および V2 API オペレーションで同じです。)  |  (必須) `s3:DeleteBucketMetadataTableConfiguration`  |  汎用バケットからメタデータテーブル設定を削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetadataTableConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetadataTableConfiguration.html) (V1 API オペレーション)  |  (必須) `s3:DeleteBucketMetadataTableConfiguration`  |  汎用バケットからメタデータテーブル設定を削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetricsConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetricsConfiguration.html)  |  (必須) `s3:PutMetricsConfiguration`  |  Amazon S3 バケットからの Amazon CloudWatch リクエストメトリクスのメトリクス構成を削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketOwnershipControls.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketOwnershipControls.html)   |  (必須) `s3:PutBucketOwnershipControls`  |  S3 バケットのオブジェクト所有権設定を削除するために必要です。削除後、オブジェクト所有権の設定は `Object writer` になります。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketPolicy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketPolicy.html)  |  (必須) `s3:DeleteBucketPolicy`  |  S3 バケットのポリシーを削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketReplication.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketReplication.html)  |  (必須) `s3:PutReplicationConfiguration`  |  S3 バケットのレプリケーション設定を削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketTagging.html)  |  (必須) `s3:PutBucketTagging`  |  S3 バケットからタグを削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketWebsite.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketWebsite.html)  |  (必須) `s3:DeleteBucketWebsite`  |  S3 バケットのウェブサイト設定を削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html) (バケットレベル)  |  (必須) `s3:PutBucketPublicAccessBlock`  |  S3 バケットのブロックパブリックアクセス設定を削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAccelerateConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAccelerateConfiguration.html)  |  (必須) `s3:GetAccelerateConfiguration`  |  Accelerate サブリソースを使用してバケット のAmazon S3 Transfer Acceleration 状態 (Enabled または Suspended) を返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAcl.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAcl.html)  |  (必須) `s3:GetBucketAcl`  |  S3 バケットのアクセスコントロールリスト (ACL) を返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAnalyticsConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAnalyticsConfiguration.html)  |  (必須) `s3:GetAnalyticsConfiguration`  |  S3 バケットから分析設定 ID によって識別される分析設定を返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketCors.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketCors.html)  |  (必須) `s3:GetBucketCORS`  |  S3 バケットのクロスオリジンリソース共有 (CORS) 設定を返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html)  |  (必須) `s3:GetEncryptionConfiguration`  |  S3 バケットのデフォルトの暗号化設定を返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketIntelligentTieringConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketIntelligentTieringConfiguration.html)  |  (必須) `s3:GetIntelligentTieringConfiguration`  |  S3 バケットの S3 Intelligent-Tiering 設定を取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketInventoryConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketInventoryConfiguration.html)  |  (必須) `s3:GetInventoryConfiguration`  |  バケットのインベントリ設定 ID で識別されインベントリ設定を返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycle.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycle.html)  |  (必須) `s3:GetLifecycleConfiguration`  |  バケットの S3 ライフサイクル設定を返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLocation.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLocation.html)  |  (必須) `s3:GetBucketLocation`  |  S3 バケットが存在する AWS リージョンを返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLogging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLogging.html)  |  (必須) `s3:GetBucketLogging`  |  S3 バケットのロギングステータスと、ユーザーがそのステータスを表示および変更するアクセス許可を返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetadataTableConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetadataTableConfiguration.html) (V2 API オペレーション。IAM ポリシーアクション名は、V1 および V2 API オペレーションで同じです。)  |  (必須) `s3:GetBucketMetadataTableConfiguration`  |  汎用バケットのメタデータテーブル設定を取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetadataTableConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetadataTableConfiguration.html) (V1 API オペレーション)  |  (必須) `s3:GetBucketMetadataTableConfiguration`  |  汎用バケットのメタデータテーブル設定を取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetricsConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetricsConfiguration.html)  |  (必須) `s3:GetMetricsConfiguration`  |  メトリクス設定 ID で指定されたメトリクス設定をバケットから取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketNotificationConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketNotificationConfiguration.html)  |  (必須) `s3:GetBucketNotification`  |  S3 バケットの通知設定を返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketOwnershipControls.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketOwnershipControls.html)  |  (必須) `s3:GetBucketOwnershipControls`  |  S3 バケットのオブジェクト所有権設定を取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicy.html)  |  (必須) `s3:GetBucketPolicy`  |  ポリシーを S3 バケットに返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicyStatus.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicyStatus.html)  |  (必須) `s3:GetBucketPolicyStatus`  |  バケットがパブリックかどうかを示す S3 バケットのポリシーステータスを取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html)  |  (必須) `s3:GetReplicationConfiguration`  |  S3 バケットのレプリケーション設定を返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketRequestPayment.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketRequestPayment.html)  |  (必須) `s3:GetBucketRequestPayment`  |  S3 バケットのリクエスト支払い設定を返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html)  |  (必須) `s3:GetBucketVersioning`  |  S3 バケットのバージョニング状態を返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketTagging.html)  |  (必須) `s3:GetBucketTagging`  |  S3 バケットに関連付けられているタグセットを返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketWebsite.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketWebsite.html)  |  (必須) `s3:GetBucketWebsite`  |  S3 バケットのウェブサイト設定を返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectLockConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectLockConfiguration.html)  |  (必須) `s3:GetBucketObjectLockConfiguration`  |  S3 バケットの Object Lock 設定を取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html) (バケットレベル)  |  (必須) `s3:GetBucketPublicAccessBlock`  |  S3 バケットのブロックパブリックアクセス設定を取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadBucket.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadBucket.html)  |  (必須) `s3:ListBucket`  |  バケットが存在し、そのバケットにアクセスする許可があるかどうかを判断するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketAnalyticsConfigurations.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketAnalyticsConfigurations.html)  |  (必須) `s3:GetAnalyticsConfiguration`  |  S3 バケットの分析設定を一覧表示するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketIntelligentTieringConfigurations.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketIntelligentTieringConfigurations.html)  |  (必須) `s3:GetIntelligentTieringConfiguration`  |  S3 バケットの S3 Intelligent-Tiering 設定を一覧表示するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketInventoryConfigurations.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketInventoryConfigurations.html)  |  (必須) `s3:GetInventoryConfiguration`  |  S3 バケットのインベントリ設定のリストを返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketMetricsConfigurations.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketMetricsConfigurations.html)  |  (必須) `s3:GetMetricsConfiguration`  |  S3 バケットのメトリクス設定を一覧表示するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html)  |  (必須) `s3:ListBucket`  |  S3 バケットのオブジェクトの一部またはすべて (最大 1,000) を一覧表示するために必要です。  | 
|    |  (条件付きで必須) `s3:GetObjectAcl`  |  オブジェクト所有者情報を表示する場合に必要です。  | 
|  [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 バケットのオブジェクトの一部またはすべて (最大 1,000) を一覧表示するために必要です。  | 
|    |  (条件付きで必須) `s3:GetObjectAcl`  |  オブジェクト所有者情報を表示する場合に必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectVersions.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectVersions.html)  |  (必須) `s3:ListBucketVersions`  |  S3 バケット内のすべてのバージョンのオブジェクトに関するメタデータを取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAccelerateConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAccelerateConfiguration.html)  |  (必須) `s3:PutAccelerateConfiguration`  |  既存のバケットの加速設定を指定するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAcl.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAcl.html)  |  (必須) `s3:PutBucketAcl`  |  アクセスコントロールリスト (ACL) を使用して、既存のバケットに対するアクセス許可を設定するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAnalyticsConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAnalyticsConfiguration.html)  |  (必須) `s3:PutAnalyticsConfiguration`  |  S3 バケットの分析設定を行うために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketCors.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketCors.html)  |  (必須) `s3:PutBucketCORS`  |  S3 バケットのクロスオリジンリソース共有 (CORS) 設定を指定するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html)  |  (必須) `s3:PutEncryptionConfiguration`  |  S3 バケットにデフォルトの暗号化を設定するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketIntelligentTieringConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketIntelligentTieringConfiguration.html)  |  (必須) `s3:PutIntelligentTieringConfiguration`  |  S3 Intelligent-Tiering 設定を S3 バケットに配置するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html)  |  (必須) `s3:PutInventoryConfiguration`  |  S3 バケットにインベントリ設定を追加するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html)  |  (必須) `s3:PutLifecycleConfiguration`  |  S3 バケットの新しい S3 ライフサイクル設定を作成するか、既存のライフサイクル設定を置き換えるために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html)  |  (必須) `s3:PutBucketLogging`  |  S3 バケットのログ記録パラメータを設定し、ログ記録パラメータを表示および変更できるユーザーのアクセス許可を指定するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketMetricsConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketMetricsConfiguration.html)  |  (必須) `s3:PutMetricsConfiguration`  |  S3 バケットの Amazon CloudWatch リクエストメトリクスのメトリクス設定を実行または更新するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketNotificationConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketNotificationConfiguration.html)  |  (必須) `s3:PutBucketNotification`  |  S3 バケットの指定されたイベントの通知を有効にするために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketOwnershipControls.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketOwnershipControls.html)  |  (必須) `s3:PutBucketOwnershipControls`  |  S3 バケットのオブジェクト所有権設定を作成または変更するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketPolicy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketPolicy.html)  |  (必須) `s3:PutBucketPolicy`  |  S3 バケットポリシーをバケットに適用するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketReplication.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketReplication.html)  |  (必須) `s3:PutReplicationConfiguration`  |  新しいレプリケーション設定を作成するか、S3 バケットの既存のレプリケーション設定を置き換えるために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketRequestPayment.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketRequestPayment.html)  |  (必須) `s3:PutBucketRequestPayment`  |  バケットのリクエスト支払い設定を実行するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketTagging.html)  |  (必須) `s3:PutBucketTagging`  |  S3 バケットにタグのセットを追加するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketVersioning.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketVersioning.html)  |  (必須) `s3:PutBucketVersioning`  |  S3 バケットのバージョニング状態を設定するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketWebsite.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketWebsite.html)  |  (必須) `s3:PutBucketWebsite`  |  バケットをウェブサイトとして設定し、ウェブサイトの設定を行うために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectLockConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectLockConfiguration.html)  |  (必須) `s3:PutBucketObjectLockConfiguration`  |  S3 バケットに Object Lock 設定を追加するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html) (バケットレベル)  |  (必須) `s3:PutBucketPublicAccessBlock`  |  S3 バケットのブロックパブリックアクセス設定を作成または変更するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateBucketMetadataInventoryTableConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateBucketMetadataInventoryTableConfiguration.html)  |  (必須) `s3:UpdateBucketMetadataInventoryTableConfiguration`、`s3tables:CreateTableBucket`、`s3tables:CreateNamespace`、`s3tables:CreateTable`、`s3tables:GetTable`、`s3tables:PutTablePolicy`、`s3tables:PutTableEncryption`、`kms:DescribeKey`  |  汎用バケットのメタデータテーブル設定のインベントリテーブルを有効または無効にするために必要です。 AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS) を使用してインベントリテーブルを暗号化する場合は、KMS キーポリシーに追加のアクセス許可が必要です。詳細については、「[メタデータテーブルを設定するためのアクセス許可の設定](metadata-tables-permissions.md)」を参照してください。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateBucketMetadataJournalTableConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateBucketMetadataJournalTableConfiguration.html)  |  (必須) `s3:UpdateBucketMetadataJournalTableConfiguration`  |  汎用バケットのメタデータテーブル設定のジャーナルテーブルレコードの有効期限を有効または無効にするために必要です。  | 

## オブジェクトオペレーションとアクセス許可
<a name="using-with-s3-policy-actions-related-to-objects"></a>

オブジェクトオペレーションは、オブジェクトリソースタイプで動作する S3 API オペレーションです。リソースベースのポリシー (バケットポリシー、アクセスポイントポリシー、マルチリージョンアクセスポイントポリシー、VPC エンドポイントポリシーなど) または IAM アイデンティティベースのポリシーでオブジェクトオペレーションに S3 ポリシーアクションを指定する必要があります。

ポリシーでは、`Resource` 要素はオブジェクト ARN である必要があります。`Resource` 要素形式とポリシーの例の詳細については、「[オブジェクト操作](security_iam_service-with-iam.md#using-with-s3-actions-related-to-objects)」を参照してください。

**注記**  
AWS KMS ポリシーアクション (`kms:GenerateDataKey` および `kms:Decrypt`) は AWS KMS リソースタイプにのみ適用され、IAM アイデンティティベースのポリシーと AWS KMS リソースベースのポリシー (AWS KMS キーポリシー) で指定する必要があります。S3 バケットポリシーなど、S3 リソースベースのポリシーでは AWS KMS ポリシーアクションを指定できません。
アクセスポイントを使用してオブジェクトオペレーションへのアクセスを制御する場合、アクセスポイントポリシーを使用できます。アクセスポイントポリシーのオブジェクトオペレーションにアクセス許可を付与するには、次の点に注意してください。  
オブジェクトオペレーションへのアクセス許可を付与するアクセスポイントポリシーでは、`Resource` 要素はアクセスポイントを介してアクセスされるオブジェクトの ARN である必要があります。`Resource` 要素形式とポリシーの例の詳細については、「[アクセスポイントポリシーでのオブジェクトオペレーション](security_iam_service-with-iam.md#object-operations-ap)」を参照してください。
すべてのオブジェクトオペレーションがアクセスポイントでサポートされているわけではありません。詳細については、「[S3 オペレーションとアクセスポイントの互換性](access-points-service-api-support.md#access-points-operations-support)」を参照してください。
すべてのオブジェクトオペレーションがマルチリージョンアクセスポイントでサポートされているわけではありません。詳細については、「[S3 オペレーションとマルチリージョンアクセスポイントの互換性](MrapOperations.md#mrap-operations-support)」を参照してください。

オブジェクトオペレーションと必要なポリシーアクションのマッピングを次に示します。


| API オペレーション | ポリシーアクション | ポリシーアクションの説明 | 
| --- | --- | --- | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html)  |  (必須) `s3:AbortMultipartUpload`  |  マルチパートアップロードを中止するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)  |  (必須) `s3:PutObject`  |  マルチパートアップロードを完了するために必要です。  | 
|    |  (条件付きで必須) `kms:Decrypt`  |  AWS KMS カスタマーマネージドキー暗号化オブジェクトのマルチパートアップロードを完了する場合に必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)  |  ソースオブジェクトの場合:  |  ソースオブジェクトの場合:  | 
|    |  (必須) `s3:GetObject` または `s3:GetObjectVersion`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/using-with-s3-policy-actions.html)  | 
|    |  (条件付きで必須) `kms:Decrypt`  |  ソースバケットから AWS KMS カスタマーマネージドキーで暗号化されたオブジェクトをコピーする場合に必要です。  | 
|    |  送信先オブジェクトの場合:  |  送信先オブジェクトの場合:  | 
|    |  (必須) `s3:PutObject`  |  コピーしたたオブジェクトを送信先バケットに配置するために必要です。  | 
|    |  (条件付きで必須) `s3:PutObjectAcl`  |  `CopyObject` リクエストを行うときに、オブジェクトアクセスコントロールリスト (ACL) を持つコピーしたオブジェクトを送信先バケットに配置する場合に必要です。  | 
|    |  (条件付きで必須) `s3:PutObjectTagging`  |  `CopyObject` リクエストを行うときに、オブジェクトのタグが付いたコピーしたオブジェクトを送信先バケットに配置する場合に必要です。  | 
|    |  (条件付きで必須) `kms:GenerateDataKey`  |  コピーしたオブジェクトを AWS KMS カスタマーマネージドキーで暗号化し、送信先バケットに配置する場合に必要です。  | 
|    |  (条件付きで必須) `s3:PutObjectRetention`  |  新しいオブジェクトの Object Lock 保持設定を行う場合に必要です。  | 
|    |  (条件付きで必須) `s3:PutObjectLegalHold`  |  新しいオブジェクトに Object Lock のリーガルホールドを適用する場合に必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html)  |  (必須) `s3:PutObject`  |  マルチパートアップロードを作成するために必要です。  | 
|    |  (条件付きで必須) `s3:PutObjectAcl`  |  アップロードしたオブジェクトのオブジェクトアクセスコントロールリスト (ACL) アクセス許可を設定する場合に必要です。  | 
|    |  (条件付きで必須) `s3:PutObjectTagging`  |  アップロードしたオブジェクトにオブジェクトのタグ付け (複数可) を追加する場合に必要です。  | 
|    |  (条件付きで必須) `kms:GenerateDataKey`  |  マルチパートアップロードを開始するときに、AWS KMS カスタマーマネージドキーを使用してオブジェクトを暗号化する場合に必要です。  | 
|    |  (条件付きで必須) `s3:PutObjectRetention`  |  アップロードしたオブジェクトの Object Lock 保持設定を実行する場合に必要です。  | 
|    |  (条件付きで必須) `s3:PutObjectLegalHold`  |  アップロードしたオブジェクトに Object Lock のリーガルホールドを適用する場合に必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html)  |  (必須) `s3:DeleteObject` または `s3:DeleteObjectVersion`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/using-with-s3-policy-actions.html)  | 
|    |  (条件付きで必須) `s3:BypassGovernanceRetention`  |  Object Lock 保持のガバナンスモードで保護されているオブジェクトを削除する場合に必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html)  |  (必須) `s3:DeleteObject` または `s3:DeleteObjectVersion`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/using-with-s3-policy-actions.html)  | 
|    |  (条件付きで必須) `s3:BypassGovernanceRetention`  |  Object Lock 保持のガバナンスモードで保護されているオブジェクトを削除する場合に必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjectTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjectTagging.html)  |  (必須) `s3:DeleteObjectTagging` または `s3:DeleteObjectVersionTagging`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/using-with-s3-policy-actions.html)  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)  |  (必須) `s3:GetObject` または `s3:GetObjectVersion`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/using-with-s3-policy-actions.html)  | 
|    |  (条件付きで必須) `kms:Decrypt`  |  AWS KMS カスタマーマネージドキーで暗号化されたオブジェクトを取得および復号する場合に必要です。  | 
|    |  (条件付きで必須) `s3:GetObjectTagging`  |  `GetObject` リクエストを行うときにオブジェクトのタグセットを取得する場合に必要です。  | 
|    |  (条件付きで必須) `s3:GetObjectLegalHold`  |  オブジェクトの現在の Object Lock のリーガルホールドステータスを取得する場合に必要です。  | 
|    |  (条件付きで必須) `s3:GetObjectRetention`  |  オブジェクトの Object Lock 保持設定を取得する場合に必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAcl.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAcl.html)  |  (必須) `s3:GetObjectAcl` または `s3:GetObjectVersionAcl`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/using-with-s3-policy-actions.html)  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html)  |  (必須) `s3:GetObject` または `s3:GetObjectVersion`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/using-with-s3-policy-actions.html)  | 
|    |  (条件付きで必須) `kms:Decrypt`  |  AWS KMS カスタマーマネージドキー暗号化オブジェクトに関連する属性を取得する場合に必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectLegalHold.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectLegalHold.html)  |  (必須) `s3:GetObjectLegalHold`  |  オブジェクトの現在の Object Lock のリーガルホールドステータスを取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectRetention.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectRetention.html)  |  (必須) `s3:GetObjectRetention`  |  オブジェクトの Object Lock 保持設定を取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html)  |  (必須) `s3:GetObjectTagging` または `s3:GetObjectVersionTagging`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/using-with-s3-policy-actions.html)  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTorrent.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTorrent.html)  |  (必須) `s3:GetObject`  |  オブジェクトの torrent ファイルを返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)  |  (必須) `s3:GetObject`  |  オブジェクト自体を返さずにオブジェクトからメタデータを取得するために必要です。  | 
|    |  (条件付きで必須) `s3:GetObjectLegalHold`  |  オブジェクトの現在の Object Lock のリーガルホールドステータスを取得する場合に必要です。  | 
|    |  (条件付きで必須) `s3:GetObjectRetention`  |  オブジェクトの Object Lock 保持設定を取得する場合に必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html)  |  (必須) `s3:ListBucketMultipartUploads`  |  バケット内の進行中のマルチパートアップロードを一覧表示するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html)  |  (必須) `s3:ListMultipartUploadParts`  |  特定のマルチパートアップロードでアップロードされている部分を一覧表示するために必要です。  | 
|    |  (条件付きで必須) `kms:Decrypt`  |  AWS KMS カスタマーマネージドキー暗号化マルチパートアップロードの一部を一覧表示する場合に必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)  |  (必須) `s3:PutObject`  |  オブジェクトを配置するために必要です。  | 
|    |  (条件付きで必須) `s3:PutObjectAcl`  |  `PutObject` リクエストを行うときにオブジェクトアクセスコントロールリスト (ACL) を配置する場合に必要です。  | 
|    |  (条件付きで必須) `s3:PutObjectTagging`  |  `PutObject` リクエストを行うときにオブジェクトのタグ付けを行う場合に必要です。  | 
|    |  (条件付きで必須) `kms:GenerateDataKey`  |  AWS KMS カスタマーマネージドキーを使用してオブジェクトを暗号化する場合に必要です。  | 
|    |  (条件付きで必須) `s3:PutObjectRetention`  |  オブジェクトに Object Lock 保持設定を行う場合に必要です。  | 
|    |  (条件付きで必須) `s3:PutObjectLegalHold`  |  指定されたオブジェクトに Object Lock のリーガルホールド設定を適用する場合に必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectAcl.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectAcl.html)  |  (必須) `s3:PutObjectAcl` または `s3:PutObjectVersionAcl`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/using-with-s3-policy-actions.html)  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectLegalHold.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectLegalHold.html)  |  (必須) `s3:PutObjectLegalHold`  |  Object Lock のリーガルホールド設定をオブジェクトに適用するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectRetention.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectRetention.html)  |  (必須) `s3:PutObjectRetention`  |  Object Lock 保持設定をオブジェクトに適用するために必要です。  | 
|    |  (条件付きで必須) `s3:BypassGovernanceRetention`  |  Object Lock 保持設定のガバナンスモードをバイパスする場合に必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectTagging.html)  |  (必須) `s3:PutObjectTagging` または `s3:PutObjectVersionTagging`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/using-with-s3-policy-actions.html)  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html)  |  (必須) `s3:RestoreObject`  |  アーカイブしたオブジェクトのコピーを復元するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_SelectObjectContent.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_SelectObjectContent.html)  |  (必須) `s3:GetObject`  |  シンプルな構造化クエリ言語 (SQL) ステートメントに基づいて S3 オブジェクトのコンテンツをフィルタリングするために必要です。  | 
|    |  (条件付きで必須) `kms:Decrypt`  |  AWS KMS カスタマーマネージドキーで暗号化された S3 オブジェクトのコンテンツをフィルタリングする場合に必要です。  | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateObjectEncryption.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateObjectEncryption.html) | (必須) `s3:UpdateObjectEncryption`、`s3:PutObject`、`kms:Encrypt`、`kms:Decrypt`、`kms:GenerateDataKey`、`kms:ReEncrypt*` | Amazon S3 マネージド暗号化 (SSE-S3) によるサーバー側の暗号化と AWS Key Management Service (AWS KMS) 暗号化キーによるサーバー側の暗号化 (SSE-KMS) の間で暗号化されたオブジェクトを変更する場合に必要です。`UpdateObjectEncryption` オペレーションを使用して S3 バケットキーを適用し、AWS KMS リクエストのコストを削減したり、データの暗号化に使用されるカスタマーマネージド KMS キーを変更して、カスタムキーローテーション標準に準拠することもできます。 | 
|    | (条件付きで必須) `organizations:DescribeAccount` | AWS Organizations を使用している場合、組織内の他の AWS アカウントのカスタマーマネージド KMS キーで `UpdateObjectEncryption` オペレーションを使用するには、`organizations:DescribeAccount` アクセス許可が必要です。  また、AWS サポート に連絡して、組織内の他のメンバーアカウントが所有する AWS KMS keys を使用する機能をリクエストする必要があります。   | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html)  |  (必須) `s3:PutObject`  |  マルチパートアップロードでパートをアップロードするために必要です。  | 
|    |  (条件付きで必須) `kms:GenerateDataKey`  |  アップロードパートを配置し、AWS KMS カスタマーマネージドキーで暗号化する場合に必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)  |  ソースオブジェクトの場合:  |  ソースオブジェクトの場合:  | 
|    |  (必須) `s3:GetObject` または `s3:GetObjectVersion`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/using-with-s3-policy-actions.html)  | 
|    |  (条件付きで必須) `kms:Decrypt`  |  ソースバケットから AWS KMS カスタマーマネージドキーで暗号化されたオブジェクトをコピーする場合に必要です。  | 
|    |  送信先のパートの場合:  |  送信先のパートの場合:  | 
|    |  (必須) `s3:PutObject`  |  マルチパートアップロードのパートを送信先バケットにアップロードするために必要です。  | 
|    |  (条件付きで必須) `kms:GenerateDataKey`  |  パートを送信先バケットにアップロードするときに、AWS KMS カスタマーマネージドキーを使用してパートを暗号化する場合に必要です。  | 

## 汎用バケットオペレーションのアクセスポイントとアクセス許可
<a name="using-with-s3-policy-actions-related-to-accesspoint"></a>

アクセスポイントオペレーションは、`accesspoint` リソースタイプで動作する S3 API オペレーションです。アクセスポイントオペレーションの S3 ポリシーアクションは、バケットポリシーやアクセスポイントポリシーではなく、IAM アイデンティティベースのポリシーで指定する必要があります。

ポリシーでは、`Resource` 要素は `accesspoint` ARN である必要があります。`Resource` 要素形式とポリシーの例の詳細については、「[汎用バケットオペレーションのアクセスポイント](security_iam_service-with-iam.md#using-with-s3-actions-related-to-accesspoint)」を参照してください。

**注記**  
アクセスポイントを使用してバケットまたはオブジェクトオペレーションへのアクセスを制御する場合は、次の点に注意してください。  
アクセスポイントを使用してバケットオペレーションへのアクセスを制御する方法については、「[汎用バケットのアクセスポイントのポリシーでのバケットオペレーション](security_iam_service-with-iam.md#bucket-operations-ap)」を参照してください。
アクセスポイントを使用してオブジェクトオペレーションへのアクセスを制御する方法については、「[アクセスポイントポリシーでのオブジェクトオペレーション](security_iam_service-with-iam.md#object-operations-ap)」を参照してください。
アクセスポイントポリシーの設定方法の詳細については、「[アクセスポイントを使用するための IAM ポリシーの設定](access-points-policies.md)」を参照してください。

以下は、アクセスポイントオペレーションと必要なポリシーアクションのマッピングです。


| API オペレーション | ポリシーアクション | ポリシーアクションの説明 | 
| --- | --- | --- | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPoint.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPoint.html)  |  (必須) `s3:CreateAccessPoint`  |  S3 バケットに関連付けられているアクセスポイントを作成するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPoint.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPoint.html)  |  (必須) `s3:DeleteAccessPoint`  |  アクセスポイントを削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointPolicy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointPolicy.html)  |  (必須) `s3:DeleteAccessPointPolicy`  |  アクセスポイントポリシーを削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointPolicy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointPolicy.html)  |  (必須) `s3:GetAccessPointPolicy`  |  アクセスポイントポリシーを取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointPolicyStatus.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointPolicyStatus.html)  |  (必須) `s3:GetAccessPointPolicyStatus`  |  指定したアクセスポイントにパブリックアクセスを許可するポリシーが現在あるかどうかに関する情報を取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutAccessPointPolicy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutAccessPointPolicy.html)  |  (必須) `s3:PutAccessPointPolicy`  |  アクセスポイントポリシーを配置するために必要です。  | 

## Object Lambda アクセスポイントのオペレーションとアクセス許可
<a name="using-with-s3-policy-actions-related-to-olap"></a>

Object Lambda アクセスポイントオペレーションは、`objectlambdaaccesspoint` リソースタイプで動作する S3 API オペレーションです。Object Lambda アクセスポイントオペレーションのポリシーを設定する方法についての詳細は、「[Object Lambda アクセスポイントの IAM ポリシーの設定](olap-policies.md)」を参照してください。

Object Lambda アクセスポイントオペレーションと必要なポリシーアクションのマッピングを次に示します。


| API オペレーション | ポリシーアクション | ポリシーアクションの説明 | 
| --- | --- | --- | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPointForObjectLambda.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPointForObjectLambda.html)  |  (必須) `s3:CreateAccessPointForObjectLambda`  |  Object Lambda アクセスポイントを作成するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointForObjectLambda.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointForObjectLambda.html)  |  (必須) `s3:DeleteAccessPointForObjectLambda`  |  指定した Object Lambda アクセスポイントを削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointPolicyForObjectLambda.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointPolicyForObjectLambda.html)  |  (必須) `s3:DeleteAccessPointPolicyForObjectLambda`  |  指定したオブジェクト Lambda アクセスポイントでポリシーを削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointConfigurationForObjectLambda.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointConfigurationForObjectLambda.html)  |  (必須) `s3:GetAccessPointConfigurationForObjectLambda`  |  Object Lambda アクセスポイントの設定を取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetAccessPointForObjectLambda.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetAccessPointForObjectLambda.html)  |  (必須) `s3:GetAccessPointForObjectLambda`  |  Object Lambda アクセスポイントに関する情報を取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetAccessPointPolicyForObjectLambda.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetAccessPointPolicyForObjectLambda.html)  |  (必須) `s3:GetAccessPointPolicyForObjectLambda`  |  指定した Object Lambda アクセスポイントに関連付けられたアクセスポイントポリシーを返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetAccessPointPolicyStatusForObjectLambda.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetAccessPointPolicyStatusForObjectLambda.html)  |  (必須) `s3:GetAccessPointPolicyStatusForObjectLambda`  |  特定の Object Lambda アクセスポイントポリシーのポリシーステータスを返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutAccessPointConfigurationForObjectLambda.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutAccessPointConfigurationForObjectLambda.html)  |  (必須) `s3:PutAccessPointConfigurationForObjectLambda`  |  Object Lambda アクセスポイントの設定に必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutAccessPointPolicyForObjectLambda.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutAccessPointPolicyForObjectLambda.html)  |  (必須) `s3:PutAccessPointPolicyForObjectLambda`  |  アクセスポリシーを指定した Object Lambda アクセスポイントに関連付けるために必要です。  | 

## マルチリージョンアクセスポイントとアクセス許可
<a name="using-with-s3-policy-actions-related-to-mrap"></a>

マルチリージョンアクセスポイントオペレーションは、`multiregionaccesspoint` リソースタイプで動作する S3 API オペレーションです。マルチリージョンアクセスポイントオペレーションのポリシーを設定する方法の詳細については、「[マルチリージョンアクセスポイントポリシーの例](MultiRegionAccessPointPermissions.md#MultiRegionAccessPointPolicyExamples)」を参照してください。

以下は、マルチリージョンアクセスポイントオペレーションと必要なポリシーアクションのマッピングです。


| API オペレーション | ポリシーアクション | ポリシーアクションの説明 | 
| --- | --- | --- | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateMultiRegionAccessPoint.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateMultiRegionAccessPoint.html)  |  (必須) `s3:CreateMultiRegionAccessPoint`  |  マルチリージョンアクセスポイントを作成し、S3 バケットに関連付けるために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteMultiRegionAccessPoint.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteMultiRegionAccessPoint.html)  |  (必須) `s3:DeleteMultiRegionAccessPoint`  |  マルチリージョンアクセスポイントを削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeMultiRegionAccessPointOperation.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeMultiRegionAccessPointOperation.html)  |  (必須) `s3:DescribeMultiRegionAccessPointOperation`  |  マルチリージョンアクセスポイントを管理するための非同期リクエストのステータスを取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPoint.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPoint.html)  |  (必須) `s3:GetMultiRegionAccessPoint`  |  指定したマルチリージョンアクセスポイントに関する設定情報を返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPointPolicy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPointPolicy.html)  |  (必須) `s3:GetMultiRegionAccessPointPolicy`  |  指定したマルチリージョンアクセスポイントのアクセスコントロールポリシーを返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPointPolicyStatus.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPointPolicyStatus.html)  |  (必須) `s3:GetMultiRegionAccessPointPolicyStatus`  |  指定したマルチリージョンアクセスポイントにパブリックアクセスを許可するアクセスコントロールポリシーが存在するかどうかについて、特定のマルチリージョンアクセスポイントのポリシーステータスを返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPointRoutes.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPointRoutes.html)  |  (必須) `s3:GetMultiRegionAccessPointRoutes`  |  マルチリージョンアクセスポイントのルート設定を返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutMultiRegionAccessPointPolicy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutMultiRegionAccessPointPolicy.html)  |  (必須) `s3:PutMultiRegionAccessPointPolicy`  |  指定したマルチリージョンアクセスポイントのアクセスコントロールポリシーを更新するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_SubmitMultiRegionAccessPointRoutes.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_SubmitMultiRegionAccessPointRoutes.html)  |  (必須) `s3:SubmitMultiRegionAccessPointRoutes`  |  マルチリージョンアクセスポイントのルート設定の更新を送信するために必要です。  | 

## バッチジョブのオペレーションとアクセス許可
<a name="using-with-s3-policy-actions-related-to-batchops"></a>

(バッチオペレーション) ジョブオペレーションは、`job` リソースタイプで動作する S3 API オペレーションです。ジョブオペレーションの S3 ポリシーアクションは、バケットポリシーではなく、IAM アイデンティティベースのポリシーで指定する必要があります。

ポリシーでは、`Resource` 要素は `job` ARN である必要があります。`Resource` 要素形式とポリシーの例の詳細については、「[バッチジョブオペレーション](security_iam_service-with-iam.md#using-with-s3-actions-related-to-batchops)」を参照してください。

以下は、バッチジョブオペレーションと必要なポリシーアクションのマッピングです。


| API オペレーション | ポリシーアクション | ポリシーアクションの説明 | 
| --- | --- | --- | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteJobTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteJobTagging.html)  |  (必須) `s3:DeleteJobTagging`  |  既存の S3 バッチオペレーションジョブからタグを削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeJob.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeJob.html)  |  (必須) `s3:DescribeJob`  |  バッチオペレーションジョブの設定パラメータとステータスを取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetJobTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetJobTagging.html)  |  (必須) `s3:GetJobTagging`  |  既存の S3 バッチオペレーションジョブのタグセットを返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutJobTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutJobTagging.html)  |  (必須) `s3:PutJobTagging`  |  既存の S3 バッチオペレーションジョブにタグを配置または置換するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateJobPriority.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateJobPriority.html)  |  (必須) `s3:UpdateJobPriority`  |  既存のジョブの優先度を更新するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateJobStatus.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateJobStatus.html)  |  (必須) `s3:UpdateJobStatus`  |  指定したジョブのステータスを更新するために必要です。  | 

## S3 ストレージレンズ設定オペレーションとアクセス許可
<a name="using-with-s3-policy-actions-related-to-lens"></a>

S3 ストレージレンズオペレーションは、`storagelensconfiguration` リソースタイプで動作する S3 API オペレーションです。S3 Storage Lens 設定オペレーションの設定方法の詳細については、「[Amazon S3 ストレージレンズアクセス許可の設定](storage_lens_iam_permissions.md)」を参照してください。

以下は、S3 ストレージレンズの設定オペレーションと必要なポリシーアクションのマッピングです。


| API オペレーション | ポリシーアクション | ポリシーアクションの説明 | 
| --- | --- | --- | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteStorageLensConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteStorageLensConfiguration.html)  |  (必須) `s3:DeleteStorageLensConfiguration`  |  S3 ストレージレンズ設定を削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteStorageLensConfigurationTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteStorageLensConfigurationTagging.html)  |  (必須) `s3:DeleteStorageLensConfigurationTagging`  |  S3 ストレージレンズ設定タグを削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetStorageLensConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetStorageLensConfiguration.html)  |  (必須) `s3:GetStorageLensConfiguration`  |  S3 ストレージレンズ設定を取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetStorageLensConfigurationTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetStorageLensConfigurationTagging.html)  |  (必須) `s3:GetStorageLensConfigurationTagging`  |  S3 ストレージレンズ設定のタグを取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutStorageLensConfigurationTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutStorageLensConfigurationTagging.html)  |  (必須) `s3:PutStorageLensConfigurationTagging`  |  既存の S3 ストレージレンズ設定にタグを配置または置換するために必要です。  | 

## S3 ストレージレンズグループのオペレーションとアクセス許可
<a name="using-with-s3-policy-actions-related-to-lens-groups"></a>

S3 ストレージレンズグループオペレーションは、`storagelensgroup` リソースタイプで動作する S3 API オペレーションです。S3 ストレージレンズグループのアクセス許可を設定する方法の詳細については、「[Storage Lens グループのアクセス許可。](storage-lens-groups.md#storage-lens-group-permissions)」を参照してください。

以下は、S3 ストレージレンズグループのオペレーションと必要なポリシーアクションのマッピングです。


| API オペレーション | ポリシーアクション | ポリシーアクションの説明 | 
| --- | --- | --- | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteStorageLensGroup.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteStorageLensGroup.html)  |  (必須) `s3:DeleteStorageLensGroup`  |  既存の S3 ストレージレンズグループを削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetStorageLensGroup.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetStorageLensGroup.html)  |  (必須) `s3:GetStorageLensGroup`  |  S3 ストレージレンズグループ設定の詳細を取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateStorageLensGroup.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateStorageLensGroup.html)  |  (必須) `s3:UpdateStorageLensGroup`  |  既存の S3 ストレージレンズグループを更新するために必要です。  | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateStorageLensGroup.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateStorageLensGroup.html) | (必須) `s3:CreateStorageLensGroup` | 新しいストレージレンズグループを作成するために必要です。 | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateStorageLensGroup.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateStorageLensGroup.html), [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_TagResource.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_TagResource.html) | (必須) `s3:CreateStorageLensGroup`、`s3:TagResource` | タグ付きの新しいストレージレンズグループグループを作成するために必要です。 | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListStorageLensGroups.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListStorageLensGroups.html) | (必須) `s3:ListStorageLensGroups` | ホームリージョンのすべてのストレージレンズグループを一覧表示するために必要です。 | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListTagsForResource.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListTagsForResource.html) | (必須) `s3:ListTagsForResource` | ストレージレンズグループに追加されたタグを一覧表示するために必要です。 | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_TagResource.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_TagResource.html) | (必須) `s3:TagResource` | 既存のストレージレンズグループのストレージレンズグループタグを追加または更新するために必要です。 | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UntagResource.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UntagResource.html) | (必須) `s3:UntagResource` | ストレージレンズグループからタグを削除するために必要です。 | 

## S3 Access Grants インスタンスのオペレーションとアクセス許可
<a name="using-with-s3-policy-actions-related-to-s3ag-instances"></a>

S3 Access Grants インスタンスのオペレーションは、`accessgrantsinstance` リソースタイプに対して実行される S3 API オペレーションです。S3 Access Grants インスタンスは、アクセス許可の論理コンテナです。S3 Access Grants インスタンスの使用の詳細については、「[S3 Access Grants インスタンスの使用](access-grants-instance.md)」を参照してください。

以下は、S3 Access Grants インスタンスの設定オペレーションと必要なポリシーアクションのマッピングです。


| API オペレーション | ポリシーアクション | ポリシーアクションの説明 | 
| --- | --- | --- | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_AssociateAccessGrantsIdentityCenter.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_AssociateAccessGrantsIdentityCenter.html)  |  (必須) `s3:AssociateAccessGrantsIdentityCenter`  |  AWS IAM アイデンティティセンター インスタンスを S3 Access Grants インスタンスに関連付けるために必要です。これにより、企業 ID ディレクトリ内のユーザーとグループのアクセス許可を作成できるようになります。また、次のアクセス許可も必要です。 `sso:CreateApplication`、`sso:PutApplicationGrant`、および `sso:PutApplicationAuthenticationMethod`。  | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessGrantsInstance.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessGrantsInstance.html)  |  (必須) `s3:CreateAccessGrantsInstance`  |  個々のアクセス許可のコンテナである S3 Access Grants インスタンス (`accessgrantsinstance` リソース) を作成するために必要です。 AWS IAM アイデンティティセンター インスタンスを S3 Access Grants インスタンスに関連付けるためには、`sso:DescribeInstance`、`sso:CreateApplication`、`sso:PutApplicationGrant`、`sso:PutApplicationAuthenticationMethod` のアクセス許可も必要です。  | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessGrantsInstance.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessGrantsInstance.html)  |  (必須) `s3:DeleteAccessGrantsInstance`  |  アカウント内の AWS リージョン から S3 Access Grants インスタンス (`accessgrantsinstance` リソース) を削除するために必要です。  | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessGrantsInstanceResourcePolicy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessGrantsInstanceResourcePolicy.html)  |  (必須) `s3:DeleteAccessGrantsInstanceResourcePolicy`  |  S3 Access Grants インスタンスのリソースポリシーを削除するために必要です。  | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DissociateAccessGrantsIdentityCenter.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DissociateAccessGrantsIdentityCenter.html)  |  (必須) `s3:DissociateAccessGrantsIdentityCenter`  |  AWS IAM アイデンティティセンター インスタンスと S3 Access Grants インスタンスの関連付けを解除するために必要です。また、次のアクセス許可も必要です。 `sso:DeleteApplication`  | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessGrantsInstance.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessGrantsInstance.html)  |  (必須) `s3:GetAccessGrantsInstance`  |  アカウント内の AWS リージョン の S3 Access Grants インスタンスを取得するために必要です。  | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessGrantsInstanceForPrefix.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessGrantsInstanceForPrefix.html)  |  (必須) `s3:GetAccessGrantsInstanceForPrefix`  |  特定のプレフィックスを含む S3 Access Grants インスタンスを取得するために必要です。  | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessGrantsInstanceResourcePolicy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessGrantsInstanceResourcePolicy.html)  |  (必須) `s3:GetAccessGrantsInstanceResourcePolicy`  |  S3 Access Grants インスタンスのリソースポリシーを返すために必要です。  | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessGrantsInstances.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessGrantsInstances.html)  |  (必須) `s3:ListAccessGrantsInstances`  |  アカウント内の S3 Access Grants インスタンスのリストを返すために必要です。  | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutAccessGrantsInstanceResourcePolicy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutAccessGrantsInstanceResourcePolicy.html)  |  (必須) `s3:PutAccessGrantsInstanceResourcePolicy`  |  S3 Access Grants インスタンスのリソースポリシーを更新するために必要です。  | 

## S3 Access Grants ロケーションのオペレーションとアクセス許可
<a name="using-with-s3-policy-actions-related-to-s3ag-locations"></a>

S3 Access Grants ロケーションのオペレーションは、`accessgrantslocation` リソースタイプに対して実行される S3 API オペレーションです。S3 Access Grants ロケーションの使用の詳細については、「[S3 Access Grants ロケーションの使用](access-grants-location.md)」を参照してください。

以下は、S3 Access Grants ロケーションの設定オペレーションと必要なポリシーアクションのマッピングです。


| API オペレーション | ポリシーアクション | ポリシーアクションの説明 | 
| --- | --- | --- | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessGrantsLocation.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessGrantsLocation.html)  |  (必須) `s3:CreateAccessGrantsLocation`  |  S3 Access Grants インスタンスにロケーションを登録する (`accessgrantslocation` リソースを作成する) ために必要です。指定した IAM ロールには、次のアクセス許可も必要です。 `iam:PassRole`  | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessGrantsLocation.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessGrantsLocation.html)  |  (必須) `s3:DeleteAccessGrantsLocation`  |  S3 Access Grants インスタンスから登録済みのロケーションを削除するために必要です。  | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessGrantsLocation.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessGrantsLocation.html)  |  (必須) `s3:GetAccessGrantsLocation`  |  S3 Access Grants インスタンスに登録済みの特定のロケーションの詳細を取得するために必要です。  | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessGrantsLocations.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessGrantsLocations.html)  |  (必須) `s3:ListAccessGrantsLocations`  |  S3 Access Grants インスタンスに登録済みのロケーションのリストを返すために必要です。  | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateAccessGrantsLocation.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateAccessGrantsLocation.html)  |  (必須) `s3:UpdateAccessGrantsLocation`  |  S3 Access Grants インスタンスの登録済みロケーションの IAM ロールを更新するために必要です。  | 

## S3 Access Grants の許可付与オペレーションとアクセス許可
<a name="using-with-s3-policy-actions-related-to-s3ag-grants"></a>

S3 Access Grants の許可付与オペレーションは、`accessgrant` リソースタイプに対して実行される S3 API オペレーションです。S3 Access Grants の個々の許可付与の使用の詳細については、「[S3 Access Grants での許可の使用](access-grants-grant.md)」を参照してください。

以下は、S3 Access Grants の許可付与の設定オペレーションと必要なポリシーアクションのマッピングです。


| API オペレーション | ポリシーアクション | ポリシーアクションの説明 | 
| --- | --- | --- | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessGrant.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessGrant.html)  |  (必須) `s3:CreateAccessGrant`  |  S3 Access Grants インスタンスでユーザーまたはグループの個々の許可付与 (`accessgrant` リソース) を作成するために必要です。また、次のアクセス許可も必要です。 任意のディレクトリアイデンティティの場合 — `sso:DescribeInstance` および `sso:DescribeApplication` ディレクトリユーザーの場合 — `identitystore:DescribeUser`  | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessGrant.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessGrant.html)  |  (必須) `s3:DeleteAccessGrant`  |  S3 Access Grants インスタンスから個々のアクセス許可付与 (`accessgrant` リソース) を削除するために必要です。  | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessGrant.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessGrant.html)  |  (必須) `s3:GetAccessGrant`  |  S3 Access Grants インスタンスの個々のアクセス許可付与の詳細を取得するために必要です。  | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessGrants.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessGrants.html)  |  (必須) `s3:ListAccessGrants`  |  S3 Access Grants インスタンスの個々のアクセス許可付与のリストを返すために必要です。  | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListCallerAccessGrants.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListCallerAccessGrants.html)  |  (必須) `s3:ListCallerAccessGrants`  |  S3 Access Grants を通じて呼び出し元に Amazon S3 データへのアクセスを許可するアクセス許可付与を一覧表示するために必要です。  | 

## API オペレーションとアクセス許可
<a name="using-with-s3-policy-actions-related-to-accounts"></a>

アカウントオペレーションは、アカウントレベルで実行される S3 API オペレーションです。アカウントは、Amazon S3 で定義されるリソースタイプではありません。アカウントオペレーションの S3 ポリシーアクションは、バケットポリシーではなく、IAM アイデンティティベースのポリシーで指定する必要があります。

ポリシーでは、`Resource` 要素は `"*"` である必要があります。ポリシーの例の詳細については、「[アカウントオペレーション](security_iam_service-with-iam.md#using-with-s3-actions-related-to-accounts)」を参照してください。

以下は、アカウントオペレーションと必要なポリシーアクションのマッピングです。


| API オペレーション | ポリシーアクション | ポリシーアクションの説明 | 
| --- | --- | --- | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateJob.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateJob.html)  |  (必須) `s3:CreateJob`  |  新しい S3 バッチオペレーションジョブを作成するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateStorageLensGroup.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateStorageLensGroup.html)  |  (必須) `s3:CreateStorageLensGroup`  |  新しい S3 ストレージレンズグループを作成し、指定した AWS アカウント ID に関連付けるために必要です。  | 
|    |  (条件付きで必須) `s3:TagResource`  |  AWS リソースタグを使用して S3 ストレージレンズグループを作成する場合に必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeletePublicAccessBlock.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeletePublicAccessBlock.html) (アカウントレベル)  |  (必須) `s3:PutAccountPublicAccessBlock`  |  ブロックパブリックアクセス設定を AWS アカウントから削除するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPoint.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPoint.html)  |  (必須) `s3:GetAccessPoint`  |  指定したアクセスポイントに関する設定情報を取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointPolicy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointPolicy.html) (アカウントレベル)  |  (必須) `s3:GetAccountPublicAccessBlock`  |  AWS アカウントのブロックパブリックアクセス設定を取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessPoints.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessPoints.html)  |  (必須) `s3:ListAccessPoints`  |  AWS アカウントが所有する S3 バケットのアクセスポイントを一覧表示するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessPointsForObjectLambda.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessPointsForObjectLambda.html)  |  (必須) `s3:ListAccessPointsForObjectLambda`  |  Object Lambda アクセスポイントを一覧表示するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html)  |  (必須) `s3:ListAllMyBuckets`  |  認証されたリクエスト送信者が所有するすべてのバケットのリストを返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListJobs.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListJobs.html)  |  (必須) `s3:ListJobs`  |  現在のジョブと最近終了したジョブを一覧表示するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListMultiRegionAccessPoints.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListMultiRegionAccessPoints.html)  |  (必須) `s3:ListMultiRegionAccessPoints`  |  指定した AWS アカウントに現在関連付けられているマルチリージョンアクセスポイントのリストを返すために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListStorageLensConfigurations.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListStorageLensConfigurations.html)  |  (必須) `s3:ListStorageLensConfigurations`  |  AWS アカウントの S3 ストレージレンズ設定のリストを取得するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListStorageLensGroups.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListStorageLensGroups.html)  |  (必須) `s3:ListStorageLensGroups`  |  指定したホーム AWS リージョン内のすべての S3 ストレージレンズグループを一覧表示するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html) (アカウントレベル)  |  (必須) `s3:PutAccountPublicAccessBlock`  |  AWS アカウントのブロックパブリックアクセス設定を作成または変更するために必要です。  | 
|  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutStorageLensConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutStorageLensConfiguration.html)  |  (必須) `s3:PutStorageLensConfiguration`  |  S3 ストレージレンズ設定を配置するために必要です。  | 

# Amazon S3 のポリシーとアクセス許可
<a name="access-policy-language-overview"></a>

ここでは、Amazon S3 のバケットポリシーとユーザーポリシーの概要を示し、AWS Identity and Access Management (IAM) ポリシーの基本的なエレメントについて説明します。リストされた各エレメントは、そのエレメントの詳細と使用方法の例にリンクしています。

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)」を参照してください。

基本的に、ポリシーには以下のエレメントが含まれます。
+ [Resource](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-resources) — ポリシーが適用される Amazon S3 バケット、オブジェクト、アクセスポイント、またはジョブ。バケット、オブジェクト、アクセスポイント、またはジョブの Amazon リソースネーム (ARN) を使用してリソースを識別します。

  バケットレベルのオペレーションの例:

  `"Resource": "arn:aws:s3:::bucket_name"`

  オブジェクトレベルのオペレーションの例: 
  + `"Resource": "arn:aws:s3:::bucket_name/*"` (バケットのすべてのオブジェクト)
  + `"Resource": "arn:aws:s3:::bucket_name/prefix/*"` (バケット内の特定のプレフィックスの下にあるオブジェクト)

  詳細については、「[Amazon S3 のポリシーリソース](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-resources)」を参照してください。
+ [Actions](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-actions) – Amazon S3 では、各リソースに対して一連のオペレーションがサポートされています。許可 (または拒否) するリソースのオペレーションは、アクションキーワードを使用して識別します。

  例えば、`s3:ListBucket` アクセス許可は、Amazon S3 の [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html) オペレーションの使用をユーザーに許可します (`s3:ListBucket` アクセス許可は、アクション名がオペレーション名に直接マッピングされないケースに該当します)。Amazon S3 アクションの使用に関する詳細については、「[Amazon S3 のポリシーアクション](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-actions)」を参照してください。Amazon S3 のアクション一覧については、*Amazon Simple Storage Service API リファレンス*の「[アクション](https://docs.aws.amazon.com/AmazonS3/latest/API/API_Operations.html)」を参照してください。
+ [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_effect.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_effect.html) – ユーザーが特定のアクションをリクエストした場合の効力です。`Allow` または `Deny` のいずれかになります。

  リソースへのアクセスを明示的に許可していない場合、アクセスは暗黙的に拒否されます。リソースへのアクセスを明示的に拒否することもできます。別のポリシーでリソースへのアクセスが許可されているユーザーに対して、そのリソースへのアクセスを禁止できます。詳細については、*IAM ユーザーガイド*の「[IAM JSON ポリシーの要素: Effect](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_effect.html)」を参照してください。
+ [Principal](security_iam_service-with-iam.md#s3-bucket-user-policy-specifying-principal-intro) – ステートメントのアクションやリソースへのアクセスが許可されているアカウントまたはユーザーを指します。バケットポリシーの場合、プリンシパルは、このアクセス許可の被付与者であるユーザー、アカウント、サービス、または他のエンティティです。詳細については、「[バケットポリシーのプリンシパル](security_iam_service-with-iam.md#s3-bucket-user-policy-specifying-principal-intro)」を参照してください。
+ [Condition](amazon-s3-policy-keys.md) – ポリシーが有効になる条件。Amazon S3 のアクセスポリシーの条件は、AWS 全体のキーと Amazon S3 固有のキーを使用して指定することができます。詳細については、「[条件キーを使用したバケットポリシーの例](amazon-s3-policy-keys.md)」を参照してください。

以下のバケットポリシーの例は、`Effect`、`Principal`、`Action`、`Resource`のエレメントを示しています。このポリシーは、アカウント `123456789012` のユーザー `Akua` に、`amzn-s3-demo-bucket1` バケットに対する Amazon S3 の `s3:GetObject`、`s3:GetBucketLocation`、`s3:ListBucket` アクセス許可を付与します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "ExamplePolicy01",
    "Statement": [
        {
            "Sid": "ExampleStatement01",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/Akua"
            },
            "Action": [
                "s3:GetObject",
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket1/*",
                "arn:aws:s3:::amzn-s3-demo-bucket1"
            ]
        }
    ]
}
```

------

ポリシーの言語の詳細については、「IAM ユーザーガイド」の「[IAM でのポリシーとアクセス許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)」および「[IAM JSON ポリシーリファレンス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)」を参照してください。**

## アクセス許可の委任
<a name="permission-delegation"></a>

AWS アカウントがリソースを所有している場合、そのアカウントは別の AWS アカウントにこれらの許可を付与できます。そのアカウントは、それらのアクセス許可またはそのサブセットを、アカウント内のユーザーに委任できます。これはアクセス許可の委任と呼ばれます。**ただし、他のアカウントから許可を受け取るアカウントは、別の AWS アカウント にクロスアカウントで許可を委任することはできません。

## Amazon S3 のバケットとオブジェクトの所有権
<a name="about-resource-owner"></a>

バケットとオブジェクトは Amazon S3 のリソースです。デフォルトでは、リソース所有者のみ、これらのリソースにアクセスできます。リソースの所有者とは、リソースを作成する AWS アカウントを指します。例: 
+ このようなリソースの所有者は、バケットの作成とオブジェクトのアップロードに使用する AWS アカウントです。
+  AWS Identity and Access Management (IAM) ユーザーまたはロールの認証情報を使用してオブジェクトをアップロードする場合、オブジェクトの所有者は、そのユーザーやロールが属する AWS アカウントです。
+ バケット所有者は、別の AWS アカウント (または別のアカウントのユーザー) に対して、オブジェクトをアップロードするためのクロスアカウントアクセス許可を付与できます。この場合、オブジェクトをアップロードする AWS アカウントが、それらのオブジェクトを所有します。バケット所有者には、他のアカウントが所有するオブジェクトに対するアクセス許可はありません。ただし、次のような例外があります。
  + バケット所有者が請求の支払いを行う場合、バケット所有者は、オブジェクトの所有者に関係なく、オブジェクトへのアクセスを拒否したり、バケット内のオブジェクトを削除したりすることができます。
  + バケット所有者は、オブジェクトの所有者に関係なく、オブジェクトをアーカイブしたり、アーカイブされたオブジェクトを復元したりすることができます。アーカイブはオブジェクトの格納に使用されるストレージクラスを指します。詳細については、[オブジェクトのライフサイクルの管理](object-lifecycle-mgmt.md) を参照してください。

### 所有権とリクエスト認証
<a name="about-resource-owner-requests"></a>

バケットに対するリクエストはすべて、認証済みまたは未認証です。認証済みのリクエストには、リクエストの送信元を認証する署名値を含める必要がありますが、未認証のリクエストには含みません。リクエスト認証の詳細については、「Amazon S3 API リファレンス」の「[Making requests](https://docs.aws.amazon.com/AmazonS3/latest/API/MakingRequests.html)」を参照してください。**

バケット所有者は認証されていないリクエストを許可できます。例えば、認証されていない [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html) リクエストは、バケットにパブリックバケットポリシーが適用されている場合や、バケットの ACL で `All Users` グループまたは匿名ユーザーに `WRITE` または `FULL_CONTROL` のアクセス許可が付与されている場合に許可されます。パブリックバケットポリシーとパブリックアクセスコントロールリスト (ACL) の詳細については、[「パブリック」の意味](access-control-block-public-access.md#access-control-block-public-access-policy-status) を参照してください。

認証されていないリクエストはすべて、匿名ユーザーによって行われます。このユーザーは、特定の正規ユーザー ID `65a011a29cdf8ec533ec3d1ccaae921c` によって、ACL で表されます。認証されていないリクエストでオブジェクトがバケットにアップロードされている場合、所有者はその匿名ユーザーです。デフォルトのオブジェクト ACL では、`FULL_CONTROL` がオブジェクトの所有者として匿名ユーザーに付与されます。そのため、Amazon S3 では、認証されていないリクエストによるオブジェクトの取得やその ACL の変更を許可しています。

匿名ユーザーによってオブジェクトが変更されないように、匿名のパブリック書き込みをバケットに許可するバケットポリシーを実装したり、匿名ユーザーにバケットへの書き込みアクセスを許可したりする ACL を使用しないことをお勧めします。この推奨事項を強制的に適用するには、Amazon S3 のパブリックアクセスのブロックを使用します。

パブリックアクセスのブロックの詳細については、[Amazon S3 ストレージへのパブリックアクセスのブロック](access-control-block-public-access.md) を参照してください。ACL の詳細については、[アクセスコントロールリスト (ACL) の概要](acl-overview.md) を参照してください。

**重要**  
認証されたリクエストの実行に AWS アカウントのルートユーザー認証情報を使用しないことをお勧めします。代わりに、IAM ロールを作成し、このロールにフルアクセスを許可します。このロールを持つユーザーを*管理者ユーザー*と呼びます。AWS アカウントのルートユーザー認証情報ではなく、管理者ユーザーに割り当てられた認証情報を使用して AWS とやり取りし、バケットの作成、ユーザーの作成、アクセス許可の付与などのタスクを実行できます。詳細については、「IAM ユーザーガイド」の「[AWS セキュリティ認証情報](https://docs.aws.amazon.com/general/latest/gr/root-vs-iam.html)」および「[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。**







# 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)の*数値条件演算子* を参照してください。

# Amazon S3 のアイデンティティベースのポリシー
<a name="security_iam_id-based-policy-examples"></a>

デフォルトでは、ユーザーとロールには Amazon S3 リソースを作成または変更するアクセス許可がありません。IAM 管理者は、リソースで必要なアクションを実行するための権限をユーザーに付与する IAM ポリシーを作成できます。

これらのサンプルの JSON ポリシードキュメントを使用して IAM アイデンティティベースのポリシーを作成する方法については、「*IAM ユーザーガイド*」の「[IAM ポリシーを作成する (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)」を参照してください。

Amazon S3 が定義するアクションとリソースタイプ (リソースタイプごとの ARN の形式を含む) の詳細については、「サービス認可リファレンス」の「[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)」を参照してください。

**Topics**
+ [ポリシーに関するベストプラクティス](#security_iam_service-with-iam-policy-best-practices)
+ [ユーザーポリシーを使用したバケットへのアクセスの制御](walkthrough1.md)
+ [Amazon S3 のアイデンティティベースのポリシー例](example-policies-s3.md)

## ポリシーに関するベストプラクティス
<a name="security_iam_service-with-iam-policy-best-practices"></a>

アイデンティティベースのポリシーは、あるユーザーがアカウントの Amazon S3 リソースを作成、アクセス、削除できるどうかを決定します。これらのアクションでは、AWS アカウント に費用が発生する場合があります。アイデンティティベースポリシーを作成したり編集したりする際には、以下のガイドラインと推奨事項に従ってください:
+ **AWS マネージドポリシーの使用を開始し、最小特権のアクセス許可に移行する** – ユーザーとワークロードへのアクセス許可の付与を開始するには、多くの一般的なユースケースのためにアクセス許可を付与する *AWS マネージドポリシー*を使用します。これらは AWS アカウントで使用できます。ユースケースに固有の AWS カスタマー管理ポリシーを定義して、アクセス許可を絞り込むことをお勧めします。詳細については、*IAM ユーザーガイド* の [AWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) または [ジョブ機能の AWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html) を参照してください。
+ **最小特権を適用する** – IAM ポリシーでアクセス許可を設定する場合は、タスクの実行に必要な許可のみを付与します。これを行うには、特定の条件下で特定のリソースに対して実行できるアクションを定義します。これは、*最小特権アクセス許可*とも呼ばれています。IAM を使用して許可を適用する方法の詳細については、*IAM ユーザーガイド* の [IAM でのポリシーとアクセス許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) を参照してください。
+ **IAM ポリシーで条件を使用してアクセスをさらに制限する** - ポリシーに条件を追加して、アクションやリソースへのアクセスを制限できます。たとえば、ポリシー条件を記述して、すべてのリクエストを SSL を使用して送信するように指定できます。また、CloudFormation などの特定の AWS のサービス を介して使用する場合、条件を使用してサービスアクションへのアクセスを許可することもできます。詳細については、*IAM ユーザーガイド* の [IAM JSON ポリシー要素:条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html) を参照してください。
+ **IAM アクセスアナライザー を使用して IAM ポリシーを検証し、安全で機能的な権限を確保する** - IAM アクセスアナライザー は、新規および既存のポリシーを検証して、ポリシーが IAM ポリシー言語 (JSON) および IAM のベストプラクティスに準拠するようにします。IAM アクセスアナライザーは 100 を超えるポリシーチェックと実用的な推奨事項を提供し、安全で機能的なポリシーの作成をサポートします。詳細については、*IAM ユーザーガイド* の [IAM Access Analyzer でポリシーを検証する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html) を参照してください。
+ **多要素認証 (MFA) を要求する** – AWS アカウントで IAM ユーザーまたはルートユーザーを要求するシナリオがある場合は、セキュリティを強化するために MFA をオンにします。API オペレーションが呼び出されるときに MFA を必須にするには、ポリシーに MFA 条件を追加します。詳細については、*IAM ユーザーガイド* の [MFA を使用した安全な API アクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html) を参照してください。

IAM でのベストプラクティスの詳細については、*IAM ユーザーガイド* の [IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) を参照してください。

# ユーザーポリシーを使用したバケットへのアクセスの制御
<a name="walkthrough1"></a>

このチュートリアルでは、Amazon S3 でのユーザーアクセス許可の使用について説明します。この例では、フォルダを含むバケットを作成します。AWS アカウントで AWS Identity and Access Management IAM ユーザーを作成し、作成したユーザーに対して、Amazon S3 バケットおよびバケット内のフォルダへのアクセス許可を段階的に付与します。

**Topics**
+ [バケットとフォルダの基本](#walkthrough-background1)
+ [チュートリアルの概要](#walkthrough-scenario)
+ [チュートリアルの準備をする](#walkthrough-what-you-need)
+ [ステップ 1: バケットを作成する](#walkthrough1-create-bucket)
+ [ステップ 2: IAM ユーザーとグループを作成する](#walkthrough1-add-users)
+ [ステップ 3: IAM ユーザーにアクセス許可が付与されていないことを確認する](#walkthrough1-verify-no-user-permissions)
+ [ステップ 4: グループレベルのアクセス許可を付与する](#walkthrough-group-policy)
+ [ステップ 5: IAM ユーザーの Alice に特定のアクセス許可を付与する](#walkthrough-grant-user1-permissions)
+ [ステップ 6: IAM ユーザーの Bob に特定のアクセス許可を付与する](#walkthrough1-grant-permissions-step5)
+ [ステップ 7: Private フォルダをセキュリティで保護する](#walkthrough-secure-private-folder-explicit-deny)
+ [ステップ 8: クリーンアップする](#walkthrough-cleanup)
+ [関連リソース](#RelatedResources-walkthrough1)

## バケットとフォルダの基本
<a name="walkthrough-background1"></a>

Amazon S3 のデータモデルはフラットな構造をしています。バケットを作成し、バケットにオブジェクトを保存します。サブバケットやサブフォルダの階層はありませんが、フォルダ階層をエミュレートすることができます。Amazon S3 コンソールなどのツールを使用すると、バケット内の論理フォルダやサブフォルダを表示できます。

`companybucket` という名前のバケットには、`Private`、`Development`、`Finance` の 3 つのフォルダと `s3-dg.pdf` オブジェクトが含まれていることがコンソールに表示されます。コンソールでは、フォルダおよびサブフォルダからなる論理的な階層が作成するために、オブジェクト名 (キー) を使用します。次の例を考えます。
+ `Development` フォルダを作成すると、コンソールによって `Development/` というキーを持つオブジェクトが作成されます。区切り記号として末尾のスラッシュ (`/`) が付いている点に注意してください。
+ `Projects1.xls` というオブジェクトを `Development` フォルダにアップロードすると、コンソールによってそのオブジェクトがアップロードされ、`Development/Projects1.xls` というキーが設定されます。

  このキーの `Development` は[プレフィックス](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#keyprefix)で、`/` は区切り記号です。Amazon S3 API のオペレーションではプレフィックスと区切り記号がサポートされます。例えば、特定のプレフィックスと区切り記号を持つすべてのオブジェクトの一覧を取得できます。コンソールで `Development` フォルダを開くと、そのフォルダ内のオブジェクトがコンソールに一覧表示されます。次の例では、`Development` フォルダには 1 つのオブジェクトが含まれています。

  コンソールで `Development` バケットの `companybucket` フォルダを表示すると、プレフィックスに `Development` と区切り文字に `/` を指定したリクエストが Amazon S3 に送信されます。コンソールのレスポンスは、コンピュータのファイルシステムのフォルダ一覧と似ています。前述の例は、バケット `companybucket` に `Development/Projects1.xls` というキーを持つ 1 つのオブジェクトがあることを示しています。

コンソールは、オブジェクトのキーを使用して論理階層を推測しています。Amazon S3 には物理階層はありません。Amazon S3 にはフラットなファイル構造にオブジェクトを含むバケットがあるだけです。Amazon S3 API を使用してオブジェクトを作成すると、オブジェクトのキーを使用して論理階層を表すことができます。オブジェクトの論理階層を作成する場合は、個別のフォルダへのアクセスを管理できます。このチュートリアルで、その方法について説明します。

開始する前に、*ルートレベル*のバケットの内容の概念を理解する必要があります。`companybucket` バケットに次のオブジェクトがあるとします。
+ `Private/privDoc1.txt`
+ `Private/privDoc2.zip`
+ `Development/project1.xls`
+ `Development/project2.xls`
+ `Finance/Tax2011/document1.pdf`
+ `Finance/Tax2011/document2.pdf`
+ `s3-dg.pdf`

これらのオブジェクトキーによって、ルートレベルフォルダ `Private`、`Development`、および `Finance` と、ルートレベルオブジェクト `s3-dg.pdf` を持つ論理階層が作成されます。Amazon S3 コンソールでバケット名を選択すると、ルートレベルの項目が表示されます。コンソールにはトップレベルのプレフィックス (`Private/`、`Development/`、`Finance/`) が表示されます。オブジェクトキー `s3-dg.pdf` にはプレフィックスがないため、ルートレベル項目として表示されます。



## チュートリアルの概要
<a name="walkthrough-scenario"></a>

このチュートリアルでは、3 つのフォルダ (`Private`、`Development`、`Finance`) を含むバケットを作成します。

ユーザーは Alice と Bob の 2 名です。Alice には `Development` フォルダにのみ、Bob には `Finance` フォルダにのみアクセスを付与します。`Private` フォルダの内容は非公開のままにします。このチュートリアルの例では、IAM ユーザー (ユーザー名 Alice と Bob) を作成してアクセスを管理し、必要なアクセス許可を付与します。

IAM では、ユーザーグループを作成して、そのグループのすべてのユーザーに適用するグループレベルのアクセス許可を付与することもできます。これにより、アクセス許可を効果的に管理できます。この演習では、Alice と Bob に共通のアクセス許可が必要です。そのため、`Consultants` というグループを作成し、Alice と Bob をそのグループに追加します。最初に、グループポリシーをグループに関連付けてアクセス許可を付与します。次に、特定のユーザーにポリシーを関連付けてユーザー固有のアクセス許可を追加します。

**注記**  
このチュートリアルでは、バケット名に `companybucket`、IAM ユーザーに Alice と Bob、グループ名に `Consultants` を使用しています。Amazon S3 ではバケット名はグローバルに一意である必要があるため、このバケット名は実際に作成する名前に置き換えてください。

## チュートリアルの準備をする
<a name="walkthrough-what-you-need"></a>

 この例では、AWS アカウント 認証情報を使用して、IAM ユーザーを作成します。最初、これらのユーザーにはアクセス許可が何もありません。これらのユーザーに、Amazon S3 の特定のアクションを実行するためのアクセス許可を段階的に付与します。アクセス許可をテストするには、各ユーザーの認証情報を使用してコンソールにサインインします。AWS アカウントの所有者として許可を段階的に付与し、IAM ユーザーとして許可をテストするには、そのたびに異なる認証情報を使用してサインイン/サインアウトする必要があります。これは、1 つのブラウザでテストできますが、2 つのブラウザを使用した方が迅速に処理することができます。一方のブラウザで自分の AWS アカウント 認証情報を使用して AWS マネジメントコンソール に接続し、もう一方のブラウザで IAM ユーザーの認証情報を使用して接続します。

 AWS アカウント 認証情報を使用して AWS マネジメントコンソール にサインインするには、[https://conso4le.aws.amazon.com/](https://console.aws.amazon.com/) にアクセスします。。IAM ユーザーは、このリンクからはサインインできません。IAM ユーザーは IAM 対応のサインインページを使用する必要があります。アカウント所有者からユーザーにこのリンクを通知します。

IAM の詳細については、[IAM ユーザーガイドAWS マネジメントコンソールの ](https://docs.aws.amazon.com/IAM/latest/UserGuide/console.html)* へのサインインページ* を参照してください。

### IAM ユーザーにサインインのリンクを提供するには
<a name="walkthrough-sign-in-user-credentials"></a>

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

1. [**Navigation (ナビゲーション)**] ペインで、[**IAM Dashboard (IAM ダッシュボード)**] を選択します。

1. [**IAM users sign in link (IAM ユーザーのサインインのリンク)**] の URL を書き留めます。このリンクを IAM ユーザーに提供して、IAM ユーザー名とパスワードを使用してコンソールにサインインしてもらいます。

## ステップ 1: バケットを作成する
<a name="walkthrough1-create-bucket"></a>

このステップでは、AWS アカウント認証情報を使用して Amazon S3 コンソールにサインインし、バケットの作成、バケットへのフォルダの追加、各フォルダのへの 1 つまたは 2 つのサンプルドキュメントのアップロードを行います。

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

1. バケットを作成します。

   手順については、[汎用バケットの作成](create-bucket-overview.md) を参照してください。

1. バケットにドキュメントを 1 つアップロードします。

   この演習では、このバケットのルートレベルに `s3-dg.pdf` というドキュメントがあることを前提としています。別のドキュメントをアップロードする場合は、`s3-dg.pdf` をそのドキュメントのファイル名に置き換えてください。

1. 3 つのフォルダ (`Private`、`Finance`、`Development`) をバケットに追加します。

   フォルダを作成するステップバイステップの手順については、*Amazon Simple Storage Service ユーザーガイド*の [フォルダを使用して Amazon S3 コンソールのオブジェクトを整理する](using-folders.md) を参照してください。

1. 各フォルダにドキュメントを 1 つか 2 つアップロードします。

   この演習では、各フォルダに数個のドキュメントをアップロード済みで、バケットに次のキーを持つオブジェクトが存在することを前提としています。
   + `Private/privDoc1.txt`
   + `Private/privDoc2.zip`
   + `Development/project1.xls`
   + `Development/project2.xls`
   + `Finance/Tax2011/document1.pdf`
   + `Finance/Tax2011/document2.pdf`
   + `s3-dg.pdf`

   

   手順については、[オブジェクトのアップロード](upload-objects.md) を参照してください。

## ステップ 2: IAM ユーザーとグループを作成する
<a name="walkthrough1-add-users"></a>

[IAM コンソール](https://console.aws.amazon.com/iam/)を使用して 2 人の IAM ユーザー (Alice と Bob) を AWS アカウント に追加します。詳細な手順については、「IAM ユーザーガイド」の「[AWS アカウント での IAM ユーザーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console)」を参照してください。**

また、`Consultants` という名前の管理グループを作成します。続いて、ユーザーをこのグループに追加します。詳細な手順については、「[IAM ユーザーグループの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups_create.html)」を参照してください。

**警告**  
ユーザーとグループを追加するときに、これらのユーザーにアクセス許可を付与するポリシーを関連付けないでください。最初の時点では、アクセス許可はこれらのユーザーに付与せず、以降のセクションで段階的に付与します。まず、これらの IAM ユーザーにパスワードを割り当てておく必要があります。それらのユーザー認証情報を使用して Amazon S3 のアクションをテストし、アクセス許可が意図したとおりに機能することを確認します。

新しい IAM ユーザーの作成の各手順については、「IAM ユーザーガイド」の「[AWS アカウント での IAM ユーザーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html)」を参照してください。**このチュートリアル用にユーザーを作成するときは、**[AWS マネジメントコンソール アクセス]** を選択し、[[プログラムによるアクセス]](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys) を消去します。

管理グループを作成する手順については、[IAM ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html)の*最初の IAM 管理者のユーザーおよびグループの作成*を参照してください。



## ステップ 3: IAM ユーザーにアクセス許可が付与されていないことを確認する
<a name="walkthrough1-verify-no-user-permissions"></a>

ブラウザを 2 つ使用する場合は、ここで 2 つ目のブラウザからいずれかの IAM ユーザー認証情報を使用して、コンソールにサインインできます。

1. IAM ユーザーのサインインのリンク (「[IAM ユーザーにサインインのリンクを提供するには](#walkthrough-sign-in-user-credentials)」を参照) から、いずれかの IAM ユーザー認証情報を使用して AWS マネジメントコンソールにサインインします。

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

    アクセスが拒否されることを示すコンソールメッセージを確認します。

次に、アクセス許可を段階的にユーザーに付与します。最初に、両方のユーザーに必要なアクセス許可を付与するグループポリシーをアタッチします。

## ステップ 4: グループレベルのアクセス許可を付与する
<a name="walkthrough-group-policy"></a>

ユーザーが次の内容を実行できるようにします。
+ 親アカウントが所有するすべてのバケットを表示します。これを行うには、Bob と Alice に `s3:ListAllMyBuckets` アクションのためのアクセス許可が必要です。
+ `companybucket` バケット内のルートレベルの項目、フォルダ、およびオブジェクトを一覧表示します。これを行うには、Bob と Alice に `s3:ListBucket` バケットに対する `companybucket` アクションのためのアクセス許可が必要です。

次に、これらのアクセス許可を付与するポリシーを作成し、`Consultants` グループにアタッチします。

### ステップ 4.1: すべてのバケットのリストを表示するアクセス許可を付与する
<a name="walkthrough1-grant-permissions-step1"></a>

このステップでは、親アカウントが所有するすべてのバケットを表示するのに必要な最小限のアクセス許可をユーザーに付与する管理ポリシーを作成します。そのポリシーを `Consultants` グループにアタッチします。その管理ポリシーをユーザーまたはグループにアタッチしたら、親 AWS アカウントが所有するバケットのリストを取得する許可をそのユーザーまたはグループに付与します。

1. AWS マネジメントコンソール にサインインして、IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。
**注記**  
ユーザーに許可を付与するため、IAM ユーザーではなく、AWS アカウントの認証情報を使用してサインインします。

1. 管理ポリシーを作成します。

   1. 左側のナビゲーションペインで [**ポリシー**] を選択し、続いて [**ポリシーの作成**] を選択します。

   1. [**JSON**] タブを選択します。

   1. 以下のアクセスポリシーをコピーし、 ポリシーテキストフィールドに貼り付けます。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Sid": "AllowGroupToSeeBucketListInTheConsole",
            "Action": ["s3:ListAllMyBuckets"],
            "Effect": "Allow",
            "Resource": ["arn:aws:s3:::*"]
          }
        ]
      }
      ```

------

      ポリシーは JSON ドキュメントです。そのドキュメントの `Statement` はオブジェクトの配列であり、各オブジェクトが名前と値のペアを使用してアクセス許可を定義しています。前述のポリシーは、1 つの特定のアクセス許可を定義しています。`Action` はアクセスの種類を指定します。ポリシーの `s3:ListAllMyBuckets` は、定義済みの Amazon S3 アクションです。このアクションは Amazon S3 GET サービスオペレーションをターゲットとし、認証された送信者が所有するすべてのバケットの一覧を返します。`Effect` エレメントの値は、特定のアクセスを許可するかどうかを決定します。

   1. [**ポリシーの確認**] を選択します。次のページで、[`AllowGroupToSeeBucketListInTheConsole`Name (名前)**] フィールドに「**」と入力し、[**Create policy (ポリシーの作成)**] を選択します。
**注記**  
[**Summary (概要)**] エントリに、このポリシーではどのアクセス許可も付与されないことを示すメッセージが表示されます。このチュートリアルでは、このメッセージを無視しても問題ありません。

1. 作成した `AllowGroupToSeeBucketListInTheConsole` 管理ポリシーを `Consultants` グループにアタッチします。

   管理ポリシーのアタッチの各手順については、「IAM ユーザーガイド」の「[IAM ID のアクセス許可の追加および削除](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#attach-managed-policy-console)」を参照してください。**

   IAM コンソールで、ポリシードキュメントを IAM ユーザーおよびグループにアタッチします。両方のユーザーがバケットのリストを取得できるように、ポリシーをグループにアタッチします。

1. アクセス許可をテストします。

   1. IAM ユーザーのサインインのリンク (「[IAM ユーザーにサインインのリンクを提供するには](#walkthrough-sign-in-user-credentials)」を参照) から、いずれかの IAM ユーザー認証情報を使用してコンソールにサインインします。

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

      コンソールにすべてのバケットが表示されますが、バケット内のオブジェクトは表示されません。

### ステップ 4.2: バケットのルートレベルの内容をユーザーが表示できるようにする
<a name="walkthrough1-grant-permissions-step2"></a>

次に、`Consultants` グループのすべてのユーザーがルートレベルの `companybucket` バケット項目を一覧表示できるようにします。Amazon S3 コンソールで会社のバケットを選択すると、そのバケットのルートレベルのアイテムが表示されます。

**注記**  
この例では、`companybucket` を使用して説明します。作成したバケットの名前を使用する必要があります。

バケット名を選択したときにコンソールから Amazon S3 に送信されるリクエスト、Amazon S3 から返されるレスポンス、コンソールでレスポンスがどのように解釈されるかについて理解するために、さらに詳しくフローを見てみましょう。

バケット名を選択すると、コンソールから Amazon S3 に[バケットの GET (ListObjects)](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html) のリクエストが送信されます。このリクエストには次のパラメータが含まれます。
+ 空の文字列を値に持つ `prefix` パラメータ。
+ `delimiter` を値に持つ `/` パラメータ。

リクエストの例を次に示します。

```
GET ?prefix=&delimiter=/ HTTP/1.1 
Host: companybucket.s3.amazonaws.com
Date: Wed, 01 Aug  2012 12:00:00 GMT
Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE=
```

Amazon S3 から返されるレスポンスには、次の `<ListBucketResult/>` エレメントが含まれます。

```
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Name>companybucket</Name>
  <Prefix></Prefix>
  <Delimiter>/</Delimiter>
   ...
  <Contents>
    <Key>s3-dg.pdf</Key>
    ...
  </Contents>
  <CommonPrefixes>
    <Prefix>Development/</Prefix>
  </CommonPrefixes>
  <CommonPrefixes>
    <Prefix>Finance/</Prefix>
  </CommonPrefixes>
  <CommonPrefixes>
    <Prefix>Private/</Prefix>
  </CommonPrefixes>
</ListBucketResult>
```

キーの `s3-dg.pdf` オブジェクトには区切り文字のスラッシュ (`/`) が含まれておらず、このキーは Amazon S3 から `<Contents>` エレメントで返されています。一方、このバケットの例の他のキーには区切り文字の `/` が含まれています。Amazon S3 は、キーをグループ化し、`<CommonPrefixes>`、`Development/`、および `Finance/` のそれぞれのプレフィックス値の `Private/` エレメントを返します。このエレメントは、これらのキーの先頭から、指定した `/` 区切り記号の出現箇所までのサブ文字列です。

コンソールでこの結果が解釈され、ルートレベルの項目が 3 つのフォルダと 1 つのオブジェクトキーとして表示されます。

Bob または Alice が **Development** フォルダを開くと、コンソールから Amazon S3 に[バケットの GET (ListObjects)](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html) のリクエストが送信されます。このリクエストの `prefix` パラメータと `delimiter` パラメータは、次の値に設定されます。
+ 値が `prefix` の `Development/` パラメータ。
+ 値が「`delimiter`」の `/` パラメータ。

レスポンスでは、指定したプレフィックスで始まるオブジェクトのキーが Amazon S3 から返されます。

```
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Name>companybucket</Name>
  <Prefix>Development</Prefix>
  <Delimiter>/</Delimiter>
   ...
  <Contents>
    <Key>Project1.xls</Key>
    ...
  </Contents>
  <Contents>
    <Key>Project2.xls</Key>
    ...
  </Contents> 
</ListBucketResult>
```

コンソールにオブジェクトキーが表示されます。

ここで、ルートレベルのバケット項目を一覧表示するためのアクセス許可をユーザーに付与する作業に戻ります。バケットの内容を一覧表示するには、ユーザーは `s3:ListBucket` アクションを呼び出すためのアクセス許可を持っている必要があります。次のポリシーステートメント を参照してください。ルートレベルのコンテンツのみを表示するようにするために、ユーザーがリクエストで `prefix` に値を指定していないことを条件に追加します。これにより、ユーザーはルートレベルのフォルダをダブルクリックできなくなります。最後に、値が「`delimiter`」の `/` パラメータをユーザーリクエストに組み込むようユーザーに義務付けて、フォルダ形式のアクセスを要求する条件を追加します。

```
{
  "Sid": "AllowRootLevelListingOfCompanyBucket",
  "Action": ["s3:ListBucket"],
  "Effect": "Allow",
  "Resource": ["arn:aws:s3:::companybucket"],
  "Condition":{ 
         "StringEquals":{
             "s3:prefix":[""], "s3:delimiter":["/"]
                        }
              }
}
```

Amazon S3 コンソールでバケットを選択すると、コンソールはまず[ Get Bucket location](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETlocation.html) リクエストを送信して、バケットがデプロイされている AWS リージョン を確認します。次に、コンソールはリージョン固有のバケットのエンドポイントを使用して、[バケットの GET (ListObjects)](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html) のリクエストを送信します。結果として、ユーザーがコンソールを使用する場合は、次のポリシーステートメントに示すように、`s3:GetBucketLocation` アクションのためのアクセス許可を付与する必要があります。

```
{
   "Sid": "RequiredByS3Console",
   "Action": ["s3:GetBucketLocation"],
   "Effect": "Allow",
   "Resource": ["arn:aws:s3:::*"]
}
```

**ユーザーがルートレベルのバケットの内容を一覧表示できるようにするには**

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

   IAM ユーザーの認証情報ではなく、AWS アカウントの認証情報を使用してコンソールにサインインします。

1. `AllowGroupToSeeBucketListInTheConsole` グループにアタッチされている既存の `Consultants` 管理ポリシーを以下のポリシーに置き換えます。このポリシーでも `s3:ListBucket` アクションは実行できます。`Resource` ポリシーの *`companybucket`* は、自分のバケットの名前に置き換えてください。

   手順については、「IAM ユーザーガイド」の「[IAM ポリシーの編集](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html)」を参照してください。**詳細な手順では、ポリシーがアタッチされているすべてのプリンシパルエンティティに変更を適用するステップに従ってください。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	                  
     "Statement": [
        {
          "Sid": "AllowGroupToSeeBucketListAndAlsoAllowGetBucketLocationRequiredForListBucket",
          "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ],
          "Effect": "Allow",
          "Resource": [ "arn:aws:s3:::*"  ]
        },
        {
          "Sid": "AllowRootLevelListingOfCompanyBucket",
          "Action": ["s3:ListBucket"],
          "Effect": "Allow",
          "Resource": ["arn:aws:s3:::companybucket"],
          "Condition":{ 
                "StringEquals":{
                       "s3:prefix":[""], "s3:delimiter":["/"]
                              }
                      }
        }
     ] 
   }
   ```

------

1. 更新されたアクセス許可をテストします。

   1. IAM ユーザーのサインインリンク (「[IAM ユーザーにサインインのリンクを提供するには](#walkthrough-sign-in-user-credentials)」を参照) を使用して AWS マネジメントコンソールにサインインします。

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

   1. 作成したバケットを選択すると、ルートレベルのバケット項目がコンソールに表示されます。バケット内のフォルダを選択しても、フォルダの内容は表示されません。そのためのアクセス許可が付与されていないからです。

このテストは、ユーザーが Amazon S3 コンソールを使用すると成功します。コンソールでバケットを選択すると、コンソールの実装により、空の文字列を値に持つ `prefix` パラメータと、`delimiter` を値に持つ `/` パラメータが送信されるためです。

### ステップ 4.3: グループポリシーの概要
<a name="walkthrough-group-policy-summary"></a>

追加したグループポリシーによって、IAM ユーザーである Alice と Bob に次の最小限のアクセス許可が付与されます。
+ 親アカウントが所有するすべてのバケットを表示します。
+ `companybucket` バケット内のルートレベルの項目を表示します。

ただし、ユーザーが実行できる操作はまだ十分ではありません。次のように、ユーザー固有のアクセス許可を付与します。
+ `Development` フォルダのオブジェクトの読み書きを Alice に許可します。
+ `Finance` フォルダのオブジェクトの読み書きを Alice と Bob に許可します。

ユーザー固有のアクセスを許可するには、グループではなく特定のユーザーにポリシーを関連付けます。次のセクションでは、`Development` フォルダを操作するためのアクセス許可を Alice に付与します。`Finance` フォルダを操作するための同様のアクセス許可を Bob に付与するステップを繰り返します。

## ステップ 5: IAM ユーザーの Alice に特定のアクセス許可を付与する
<a name="walkthrough-grant-user1-permissions"></a>

次に、`Development` フォルダの内容を表示し、そのフォルダ内のオブジェクトを読み書きできるように、追加のアクセス許可を Alice に付与します。

### ステップ 5.1: IAM ユーザーの Alice に Development フォルダの内容を一覧表示するためのアクセス許可を付与する
<a name="walkthrough-grant-user1-permissions-listbucket"></a>

Alice が `Development` フォルダの内容を表示できるようにするには、`s3:ListBucket` バケットに対して `companybucket` アクションを実行するためのアクセス許可を付与するポリシーをユーザー Alice に適用する必要があります (プレフィックス `Development/` がリクエストに含まれていることを前提とします)。このポリシーはユーザー (Alice) にのみ適用するため、インラインポリシーを使用します。インラインポリシーの詳細については、「[IAM ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html)」の「*管理ポリシーとインラインポリシー*」を参照してください。

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

   IAM ユーザーの認証情報ではなく、AWS アカウントの認証情報を使用してコンソールにサインインします。

1. `Development` フォルダの内容を表示するアクセス許可をユーザー (Alice) に付与するインラインポリシーを作成します。

   1. 左側のナビゲーションペインで、**[ユーザー]** を選択します。

   1. ユーザー名 **[Alice]** を選択します。

   1. ユーザーの詳細ページで、[**Permissions (アクセス許可)**] タブを選択し、[**Add inline policy (インラインポリシーの追加)**] を選択します。

   1. [**JSON**] タブを選択します。

   1. 以下のアクセスポリシーをコピーし、ポリシーのテキストフィールドに貼り付けます。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	   
          "Statement": [
          {
            "Sid": "AllowListBucketIfSpecificPrefixIsIncludedInRequest",
            "Action": ["s3:ListBucket"],
            "Effect": "Allow",
            "Resource": ["arn:aws:s3:::companybucket"],
            "Condition": { "StringLike": {"s3:prefix": ["Development/*"] }
             }
          }
        ]
      }
      ```

------

   1. [**ポリシーの確認**] を選択します。次のページで、[**Name (名前)**] フィールドに名前を入力し、[**Create policy (ポリシーの作成)**] を選択します。

1. Alice のアクセス許可の変更をテストします。

   1. IAM ユーザーのサインインリンク (「[IAM ユーザーにサインインのリンクを提供するには](#walkthrough-sign-in-user-credentials)」を参照) を使用して AWS マネジメントコンソールにサインインします。

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

   1. Amazon S3 コンソールで、Alice がバケットの `Development/` フォルダ内のオブジェクトを一覧表示できることを確認します。

      ユーザーが `/Development` フォルダ内のオブジェクトを一覧表示するためにそのフォルダを選択すると、Amazon S3 コンソールから Amazon S3 にプレフィックスに `ListObjects` を指定した `/Development` のリクエストが送信されます。ユーザーにはプレフィックスに `Development` と区切り文字に `/` を指定してオブジェクトを一覧表示するアクセス許可が付与されているため、Amazon S3 からキープレフィックスが `Development/` のオブジェクトの一覧が返されてコンソールに表示されます。

### ステップ 5.2: IAM ユーザーの Alice に Development フォルダでオブジェクトを取得および作成するためのアクセス許可を付与する
<a name="walkthrough-grant-user1-permissions-get-put-object"></a>

Alice が `Development` フォルダ内のオブジェクトを読み書きできるようにするには、`s3:GetObject` および `s3:PutObject` アクションを呼び出すためのアクセス許可が Alice に必要です。次のポリシーステートメントは、そのアクセス許可を付与します (リクエストに `prefix` の値を持つ `Development/` パラメータが設定されているとします)。

```
{
    "Sid":"AllowUserToReadWriteObjectData",
    "Action":["s3:GetObject", "s3:PutObject"],
    "Effect":"Allow",
    "Resource":["arn:aws:s3:::companybucket/Development/*"]
 }
```



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

   IAM ユーザーの認証情報ではなく、AWS アカウントの認証情報を使用してコンソールにサインインします。

1. 前のステップで作成したインラインポリシーを編集します。

   1. 左側のナビゲーションペインで、[**ユーザー**] を選択します。

   1. ユーザー名 [Alice] を選択します。

   1. ユーザーの詳細で、[**アクセス許可**] タブを選択し、[**インラインポリシー**] セクションを展開します。

   1. 前のステップで作成したポリシーの名前の横にある [**Edit Policy (ポリシーの編集)**] をクリックします。

   1. 以下のポリシーをコピーして、 ポリシーテキストフィールドに貼り付け、既存のポリシーと置き換えます。

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

****  

      ```
      {
           "Version":"2012-10-17",		 	 	 
           "Statement":[
            {
               "Sid":"AllowListBucketIfSpecificPrefixIsIncludedInRequest",
               "Action":["s3:ListBucket"],
               "Effect":"Allow",
               "Resource":["arn:aws:s3:::companybucket"],
               "Condition":{
                  "StringLike":{"s3:prefix":["Development/*"]
                  }
               }
            },
            {
              "Sid":"AllowUserToReadWriteObjectDataInDevelopmentFolder", 
              "Action":["s3:GetObject", "s3:PutObject"],
              "Effect":"Allow",
              "Resource":["arn:aws:s3:::companybucket/Development/*"]
            }
         ]
      }
      ```

------

1. 更新されたポリシーをテストします。

   1. IAM ユーザーのサインインリンク (「[IAM ユーザーにサインインのリンクを提供するには](#walkthrough-sign-in-user-credentials)」を参照) を使用して AWS マネジメントコンソールにサインインします。

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

   1. Amazon S3 コンソールで、Alice が `Development` フォルダに対するオブジェクトの追加およびダウンロードを行えるようになったことを確認します。

### ステップ 5.3: バケットの他のフォルダへの IAM ユーザーの Alice のアクセス許可を明示的に拒否する
<a name="walkthrough-grant-user1-explicit-deny-other-access"></a>

ユーザー Alice が `companybucket` バケットのルートレベルの内容を表示できるようになったことを確認します。Alice は `Development` フォルダのオブジェクトを読み書きすることもできます。厳密にアクセス許可を制限したい場合は、バケットの他のフォルダへの Alice のアクセスを明示的に拒否することができます。バケットの他のフォルダへのアクセス許可を Alice に付与する他のポリシー (バケットポリシーまたは ACL) が存在する場合は、この明示的な拒否がそれらのアクセス許可よりも優先されます。

次のステートメントをユーザーの Alice のポリシーに追加すると、Alice が Amazon S3 に送信するすべてのリクエストに `prefix` パラメータを含めて値を `Development/*` または空の文字列にすることを要求できます。



```
{
   "Sid": "ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment",
   "Action": ["s3:ListBucket"],
   "Effect": "Deny",
   "Resource": ["arn:aws:s3:::companybucket"],
   "Condition":{  "StringNotLike": {"s3:prefix":["Development/*",""] },
                  "Null"         : {"s3:prefix":false }
    }
}
```

`Condition` ブロックには 2 つの条件式があります。これらの条件式の結果は、論理 `AND` を使用して結合されます。両方の条件が true の場合、結合された条件の結果は true です。このポリシーの `Effect` が `Deny` であるため、`Condition` が true と評価されると、ユーザーは指定した `Action` を実行できません。
+ `Null` 条件式により、Alice からのリクエストに `prefix` パラメータが含まれていることが保証されます。

  `prefix` パラメータはフォルダに類似したアクセスを必要とします。`prefix` パラメータのないリクエストを送信すると、Amazon S3 によりすべてのオブジェクトキーが返されます。

  リクエストに null 値の `prefix` パラメータが含まれている場合、式の評価結果は true になり、`Condition` 全体の評価結果が true になります。空の文字列を `prefix` パラメータの値として許可する必要があります。null 文字列を許可すると、この前の説明に示したコンソールでの操作と同様に、Alice はルートレベルのバケット項目を取得できるようになります。詳細については、[ステップ 4.2: バケットのルートレベルの内容をユーザーが表示できるようにする](#walkthrough1-grant-permissions-step2) を参照してください。
+ 条件式 `StringNotLike` を使用すると、`prefix` パラメータの値が指定されていて `Development/*` でない場合、リクエストは失敗します。

前のセクションの手順に従って、ユーザー Alice 用に作成したインラインポリシーを再び更新します。

以下のポリシーをコピーして、 ポリシーテキストフィールドに貼り付け、既存のポリシーと置き換えます。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"AllowListBucketIfSpecificPrefixIsIncludedInRequest",
         "Action":["s3:ListBucket"],
         "Effect":"Allow",
         "Resource":["arn:aws:s3:::companybucket"],
         "Condition":{
            "StringLike":{"s3:prefix":["Development/*"]
            }
         }
      },
      {
        "Sid":"AllowUserToReadWriteObjectDataInDevelopmentFolder", 
        "Action":["s3:GetObject", "s3:PutObject"],
        "Effect":"Allow",
        "Resource":["arn:aws:s3:::companybucket/Development/*"]
      },
      {
         "Sid": "ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment",
         "Action": ["s3:ListBucket"],
         "Effect": "Deny",
         "Resource": ["arn:aws:s3:::companybucket"],
         "Condition":{  "StringNotLike": {"s3:prefix":["Development/*",""] },
                        "Null"         : {"s3:prefix":false }
          }
      }
   ]
}
```

------

## ステップ 6: IAM ユーザーの Bob に特定のアクセス許可を付与する
<a name="walkthrough1-grant-permissions-step5"></a>

次に、`Finance` フォルダへのアクセス許可を Bob に付与します。Alice にアクセス許可を付与するときに使用した手順に従います。ただし、`Development` フォルダは `Finance` フォルダに置き換えます。手順については、[ステップ 5: IAM ユーザーの Alice に特定のアクセス許可を付与する](#walkthrough-grant-user1-permissions) を参照してください。

## ステップ 7: Private フォルダをセキュリティで保護する
<a name="walkthrough-secure-private-folder-explicit-deny"></a>

この例では、ユーザーは 2 名だけです。グループレベルで最小限必要なすべてのアクセス許可を付与し、ユーザーレベルのアクセス許可は、個々のユーザーレベルでアクセスを許可することが必要な場合にのみ付与しました。このようにすると、アクセス許可を管理する手間を最小限に抑えることができます。ユーザー数が増えるに従って、アクセス許可の管理は煩雑になります。例えば、この例のどのユーザーも `Private` フォルダの内容にアクセスできないようにします。`Private` フォルダへのアクセス許可を誤って付与しないようにするには、どのような方法があるでしょうか。このフォルダへのアクセスを明示的に拒否するポリシーを追加します。明示的な拒否は他のあらゆるアクセス許可よりも優先されます。

`Private` フォルダを非公開に保つには、次の 2 つの拒否ステートメントをグループポリシーに追加します。
+ 次のステートメントを追加して、`Private` フォルダのリソースに対するあらゆるアクションを明示的に拒否します (`companybucket/Private/*`)。

  ```
  {
    "Sid": "ExplictDenyAccessToPrivateFolderToEveryoneInTheGroup",
    "Action": ["s3:*"],
    "Effect": "Deny",
    "Resource":["arn:aws:s3:::companybucket/Private/*"]
  }
  ```
+ また、リクエストに `Private/` プレフィックスが指定されている場合に、オブジェクトを一覧表示するアクションに必要なアクセス許可を拒否します。コンソールで Bob または Alice が `Private` フォルダを開くと、このポリシーにより Amazon S3 からエラーレスポンスが返されます。

  ```
  {
    "Sid": "DenyListBucketOnPrivateFolder",
    "Action": ["s3:ListBucket"],
    "Effect": "Deny",
    "Resource": ["arn:aws:s3:::*"],
    "Condition":{
        "StringLike":{"s3:prefix":["Private/"]}
     }
  }
  ```

`Consultants` グループポリシーを、前述の拒否ステートメントを含む更新したポリシーに置き換えます。更新したポリシーが適用されると、グループ内のどのユーザーも、バケット内の `Private` フォルダにアクセスできなくなります。

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

   IAM ユーザーの認証情報ではなく、AWS アカウントの認証情報を使用してコンソールにサインインします。

1. `AllowGroupToSeeBucketListInTheConsole` グループにアタッチされている既存の `Consultants` 管理ポリシーを以下のポリシーに置き換えます。ポリシーの *`companybucket`* は、自分のバケットの名前に置き換えてください。

   手順については、「IAM ユーザーガイド」の「[カスタマー管理ポリシーの編集 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html#edit-managed-policy-console)」を参照してください。**手順では、ポリシーがアタッチされているすべてのプリンシパルエンティティに変更を適用する指示に従ってください。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "AllowGroupToSeeBucketListAndAlsoAllowGetBucketLocationRequiredForListBucket",
         "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
         "Effect": "Allow",
         "Resource": ["arn:aws:s3:::*"]
       },
       {
         "Sid": "AllowRootLevelListingOfCompanyBucket",
         "Action": ["s3:ListBucket"],
         "Effect": "Allow",
         "Resource": ["arn:aws:s3:::companybucket"],
         "Condition":{
             "StringEquals":{"s3:prefix":[""]}
          }
       },
       {
         "Sid": "RequireFolderStyleList",
         "Action": ["s3:ListBucket"],
         "Effect": "Deny",
         "Resource": ["arn:aws:s3:::*"],
         "Condition":{
             "StringNotEquals":{"s3:delimiter":"/"}
          }
        },
       {
         "Sid": "ExplictDenyAccessToPrivateFolderToEveryoneInTheGroup",
         "Action": ["s3:*"],
         "Effect": "Deny",
         "Resource":["arn:aws:s3:::companybucket/Private/*"]
       },
       {
         "Sid": "DenyListBucketOnPrivateFolder",
         "Action": ["s3:ListBucket"],
         "Effect": "Deny",
         "Resource": ["arn:aws:s3:::*"],
         "Condition":{
             "StringLike":{"s3:prefix":["Private/"]}
          }
       }
     ]
   }
   ```

------



## ステップ 8: クリーンアップする
<a name="walkthrough-cleanup"></a>

クリーンアップするには、[IAM コンソール](https://console.aws.amazon.com/iam/)を開き、ユーザーの Alice と Bob を削除します。手順については、「IAM ユーザーガイド」の「[IAM ユーザーの削除](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html#id_users_deleting)」を参照してください。**

ストレージへの不要な請求を防ぐために、この演習で作成したオブジェクトとバケットも削除してください。

## 関連リソース
<a name="RelatedResources-walkthrough1"></a>
+ 「*IAM ユーザーガイド*」の「[IAM ポリシーを管理する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html)」

# Amazon S3 のアイデンティティベースのポリシー例
<a name="example-policies-s3"></a>

このセクションでは、Amazon S3 へのユーザーアクセスを管理するための AWS Identity and Access Management (IAM) アイデンティティベースポリシーをいくつか示します。*バケットポリシー* (リソースベースのポリシー) の例については、「[Amazon S3 のバケットポリシー](bucket-policies.md)」を参照してください。IAM ポリシー言語については、「[Amazon S3 のポリシーとアクセス許可](access-policy-language-overview.md)」を参照してください。

次のサンプルポリシーは、プログラムで使用する場合に機能します。ただし、Amazon S3 コンソールでこれらを使用するには、コンソールに必要な追加のアクセス許可を付与する必要があります。このようなポリシーの Amazon S3 コンソールでの使用の詳細については、[ユーザーポリシーを使用したバケットへのアクセスの制御](walkthrough1.md) を参照してください。

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

**Topics**
+ [バケット の 1 つへのアクセスを IAM ユーザーに許可する](#iam-policy-ex0)
+ [バケット内のフォルダへのアクセスを各 IAM ユーザーに許可する](#iam-policy-ex1)
+ [Amazon S3 で共有フォルダを持つことをグループに許可する](#iam-policy-ex2)
+ [すべてのユーザーに対し、バケットの特定部分のオブジェクトの読み取りを許可する](#iam-policy-ex3)
+ [パートナーに対し、バケットの特定部分へのファイルのドロップを許可する](#iam-policy-ex4)
+ [特定の AWS アカウント の Amazon S3 バケットへのアクセスを制限する](#iam-policy-ex6)
+ [組織単位内の Amazon S3 バケットへのアクセスを制限する](#iam-policy-ex7)
+ [組織内の Amazon S3 バケットへのアクセスを制限する](#iam-policy-ex8)
+ [AWS アカウント に PublicAccessBlock 設定を取得するアクセス許可を付与する](#using-with-s3-actions-related-to-accountss)
+ [バケット作成を 1 つのリージョンに制限する](#condition-key-bucket-ops-1)

## バケット の 1 つへのアクセスを IAM ユーザーに許可する
<a name="iam-policy-ex0"></a>

この例では、AWS アカウントの IAM ユーザーに *amzn-s3-demo-bucket1* という 1 つのバケットに対する許可を付与して、ユーザーがオブジェクトを追加、更新、削除できるようにします。

このポリシーでは、ユーザーに `s3:PutObject`、`s3:GetObject`、`s3:DeleteObject` のアクセス許可を付与するだけでなく、`s3:ListAllMyBuckets`、`s3:GetBucketLocation`、および `s3:ListBucket` のアクセス許可も付与します。これらが、コンソールで必要とされる追加のアクセス許可です。またコンソール内のオブジェクトのコピー、カット、貼り付けを行うためには、`s3:PutObjectAcl` および `s3:GetObjectAcl` アクションが必要となります。コンソールを使用してユーザーにアクセス許可を付与してテストする例の解説については、[ユーザーポリシーを使用したバケットへのアクセスの制御](walkthrough1.md) を参照してください。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action": "s3:ListAllMyBuckets",
         "Resource":"*"
      },
      {
         "Effect":"Allow",
         "Action":["s3:ListBucket","s3:GetBucketLocation"],
         "Resource":"arn:aws:s3:::amzn-s3-demo-bucket1"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:PutObject",
            "s3:PutObjectAcl",
            "s3:GetObject",
            "s3:GetObjectAcl",
            "s3:DeleteObject"
         ],
         "Resource":"arn:aws:s3:::amzn-s3-demo-bucket1/*"
      }
   ]
}
```

------

## バケット内のフォルダへのアクセスを各 IAM ユーザーに許可する
<a name="iam-policy-ex1"></a>

次の例では、Mary と Carlos という 2 人の IAM ユーザーに *amzn-s3-demo-bucket1* というバケットに対するアクセス許可を付与して、この 2 人がオブジェクトを追加、更新、削除できるようにします。ただし、バケット内の単一のプレフィックス (フォルダ) に全ユーザーのアクセスを制限したいとします。フォルダを作成する際、ユーザー名と同じフォルダ名にすることもできます。

```
amzn-s3-demo-bucket1
   Mary/
   Carlos/
```

各ユーザーに本人のフォルダのみへのアクセス権を付与するには、各ユーザー用のポリシーを作成し、個別にアタッチします。例えば、Mary に次のポリシーをアタッチして、`amzn-s3-demo-bucket1/Mary` フォルダに対する専用の Amazon S3 のアクセス許可を付与することができます。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "s3:PutObject",
            "s3:GetObject",
            "s3:GetObjectVersion",
            "s3:DeleteObject",
            "s3:DeleteObjectVersion"
         ],
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/Mary/*"
      }
   ]
}
```

------

その後、ユーザー Carlos に同様のポリシーをアタッチし、`Resource` 値のフォルダ `Carlos` を指定します。

各ユーザーにポリシーをアタッチするのではなく、ポリシー変数を使用する単一のポリシーを作成し、そのポリシーをグループにアタッチできます。まずグループを作成し、Mary と Carlos をいずれもそのグループに追加する必要があります。次のポリシーの例では、`amzn-s3-demo-bucket1/${aws:username}` フォルダに対する Amazon S3 の一連のアクセス許可を付与しています。ポリシーが評価されると、ポリシー変数 `${aws:username}` はリクエスタのユーザー名で置き換えられます。例えば、Mary がオブジェクトの PUT リクエストを送信した場合、Mary が `amzn-s3-demo-bucket1/Mary` フォルダにオブジェクトをアップロードする PUT オペレーションのみが許可されます。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:PutObject",
            "s3:GetObject",
            "s3:GetObjectVersion",
            "s3:DeleteObject",
            "s3:DeleteObjectVersion"
         ],
         "Resource":"arn:aws:s3:::amzn-s3-demo-bucket1/${aws:username}/*"
      }
   ]
}
```

------

**注記**  
ポリシー変数を使用する場合は、`2012-10-17` をポリシー内で明示的に指定する必要があります。IAM ポリシー言語のデフォルトバージョンは 2008−10−17 です。このバージョンでは、ポリシー変数をサポートしていません。

 Amazon S3 コンソールで前述のポリシーをテストする場合、次のポリシーに示すように、追加のアクセス許可が必要となります。これらのアクセス許可をコンソールで使用する方法については、[ユーザーポリシーを使用したバケットへのアクセスの制御](walkthrough1.md) を参照してください。

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

****  

```
{
 "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowGroupToSeeBucketListInTheConsole",
      "Action": [ 
      	"s3:ListAllMyBuckets", 
      	"s3:GetBucketLocation" 
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::*"  
    },
    {
      "Sid": "AllowRootLevelListingOfTheBucket",
      "Action": "s3:ListBucket",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1",
      "Condition": { 
            "StringEquals": {
                    "s3:prefix": [""], "s3:delimiter": ["/"]
                           }
                 }
    },
    {
      "Sid": "AllowListBucketOfASpecificUserPrefix",
      "Action": "s3:ListBucket",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1",
      "Condition": {  "StringLike": {"s3:prefix": ["${aws:username}/*"] }
       }
    },
      {
     "Sid": "AllowUserSpecificActionsOnlyInTheSpecificUserPrefix",
         "Effect": "Allow",
         "Action": [
            "s3:PutObject",
            "s3:GetObject",
            "s3:GetObjectVersion",
            "s3:DeleteObject",
            "s3:DeleteObjectVersion"
         ],
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/${aws:username}/*"
      }
  ]
}
```

------

**注記**  
2012−10−17 バージョンのポリシーでは、ポリシー変数の先頭には `$` が付きます。使用するオブジェクトキー (オブジェクト名) に `$` が含まれている場合、この構文の変化により衝突が発生します。  
この競合を回避するには、`$` を使用して `${$}` 文字を指定します。例えば、ポリシーにオブジェクトキー `my$file` を含めるには、`my${$}file` として指定します。

IAM ユーザー名は人間が読んで理解できるわかりやすい識別子ですが、グローバルで一意である必要はありません。例えば、Carlos が退職して別の Carlos が入社した場合、この別の Carlos が前の Carlos の情報にアクセスできます。

フォルダを作成する際に、ユーザー名の代わりに IAM ユーザー ID を使用することもできます。IAM ユーザー ID はそれぞれ一意であるためです。この場合、`${aws:userid}` ポリシー変数を使用するように前述のポリシーを修正する必要があります。ユーザー ID の詳細については、「IAM ユーザーガイド」の「[IAM 識別子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html)」を参照してください。**

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "s3:PutObject",
            "s3:GetObject",
            "s3:GetObjectVersion",
            "s3:DeleteObject",
            "s3:DeleteObjectVersion"
         ],
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/home/${aws:userid}/*"
      }
   ]
}
```

------

### バケット内のフォルダへのアクセスを非 IAM ユーザー (モバイルアプリユーザー) に許可する
<a name="non-iam-mobile-app-user-access"></a>

ユーザーのデータを S3 バケットに保存するモバイルゲームアプリを開発するとします。バケットに各アプリユーザーのフォルダを作成します。また、各ユーザーには本人のフォルダのみにアクセスを制限します。 ただし、ユーザーがアプリをダウンロードしてゲームをプレイし始める前にフォルダを作成することはできません。お客様にはユーザーのユーザー ID がないためです。

この場合、ユーザーには、Login with Amazon、 Facebook、または Google などのパブリックアイデンティプロバイダを使用してアプリにサインインするよう要求できます。ユーザーがこれらのプロバイダの 1 つを使用してアプリにサインインすると、ユーザー ID が設定されるため、お客様はこれを使用して実行時にユーザー固有のフォルダを作成することができます。

これにより、AWS Security Token Service のウェブ認証フェデレーションを使用して、アイデンティプロバイダからの情報をアプリに組み入れ、各ユーザーの一時的なセキュリティ認証情報を取得することができます。続いて、IAM ポリシーを作成して、アプリがバケットにアクセスできるようにしたり、ユーザー固有のフォルダの作成、データのアップロードなどのオペレーションを実行できるようにすることができます。ウェブ ID フェデレーションの詳細については、[IAM ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html)の*ウェブ ID フェデレーションについて*を参照してください。

## Amazon S3 で共有フォルダを持つことをグループに許可する
<a name="iam-policy-ex2"></a>

次のポリシーをグループにアタッチすることで、グループ内の全メンバーに Amazon S3 のフォルダ `amzn-s3-demo-bucket1/share/marketing` へのアクセス権が付与されます。グループメンバーは、この指定のフォルダのオブジェクトに対してのみ、ポリシーに示されている Amazon S3 の特定のアクセス許可を付与されます。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:PutObject",
            "s3:GetObject",
            "s3:GetObjectVersion",
            "s3:DeleteObject",
            "s3:DeleteObjectVersion"
         ],
         "Resource":"arn:aws:s3:::amzn-s3-demo-bucket1/share/marketing/*"
      }
   ]
}
```

------

## すべてのユーザーに対し、バケットの特定部分のオブジェクトの読み取りを許可する
<a name="iam-policy-ex3"></a>

次の例では、`AllUsers` というグループを作成し、AWS アカウントのすべての IAM ユーザーを含めます。次に、`GetObject` フォルダ内のオブジェクトに対してのみ `GetObjectVersion` と `amzn-s3-demo-bucket1/readonly` のアクセス権をグループに付与するポリシーをアタッチします。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:GetObject",
            "s3:GetObjectVersion"
         ],
         "Resource":"arn:aws:s3:::amzn-s3-demo-bucket1/readonly/*"
      }
   ]
}
```

------

## パートナーに対し、バケットの特定部分へのファイルのドロップを許可する
<a name="iam-policy-ex4"></a>

次の例では、パートナー会社を表す `AnyCompany` というグループを作成します。パートナー会社でアクセス許可が必要な個人やアプリケーションのために IAM ユーザーを作成し、そのユーザーをグループに入れます。

次に、バケット内の次のフォルダに対する `PutObject` アクセス権をグループに付与するポリシーをアタッチします。

`amzn-s3-demo-bucket1/uploads/anycompany` 

このバケットに対する他の操作を `AnyCompany` グループに禁止するには、`PutObject`で Amazon S3 のリソースに対する AWS アカウント 以外の Amazon S3 のアクションを明示的に拒否するステートメントを追加します。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":"s3:PutObject",
         "Resource":"arn:aws:s3:::amzn-s3-demo-bucket1/uploads/anycompany/*"
      },
      {
         "Effect":"Deny",
         "Action":"s3:*",
         "NotResource":"arn:aws:s3:::amzn-s3-demo-bucket1/uploads/anycompany/*"
      }
   ]
}
```

------

## 特定の AWS アカウント の Amazon S3 バケットへのアクセスを制限する
<a name="iam-policy-ex6"></a>

Amazon S3 プリンシパルが信頼された内のリソースにのみアクセスしていることを確認する場合AWS アカウントでは、アクセスを制限できます。たとえば、この[アイデンティティベースの IAM ポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)は、`Deny` 効果を使用して Amazon S3 アクションへのアクセスをブロックします。ただし、アクセスされている Amazon S3 リソースがアカウント `222222222222` 内の場合は除きます。AWS アカウント の IAM プリンシパルがカウント外の Amazon S3 オブジェクトにアクセスすることを防止するには、次の IAM ポリシーをアタッチします。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyS3AccessOutsideMyBoundary",
      "Effect": "Deny",
      "Action": [
        "s3:*"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "aws:ResourceAccount": [
            "222222222222"
          ]
        }
      }
    }
  ]
}
```

------

**注記**  
このポリシーは、アクセス権を付与しないため、既存の IAM アクセスコントロールに置き換わるものではありません。代わりに、このポリシーは、他の IAM ポリシーによって付与されたアクセス権限に関係なく、他の IAM アクセス権限の追加ガードレールとして機能します。

ポリシーのアカウント ID `222222222222` を自身のポリシー AWS アカウント に必ず置き換えます。この制限を維持しながら複数のアカウントにポリシーを適用するには、アカウント ID を `aws:PrincipalAccount` 条件キーに置き換えます。この条件では、プリンシパルとリソースが同じアカウントにある必要があります。

## 組織単位内の Amazon S3 バケットへのアクセスを制限する
<a name="iam-policy-ex7"></a>

AWS Organizations でセットアップされた[組織単位 (OU)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_ous.html)がある場合、Amazon S3 バケットのアクセスを組織の特定部分に制限することができます。この例では、`aws:ResourceOrgPaths` キーを使って組織の OU へ Amazon S3 バケットのアクセスを制限します。この例では、[OU ID](https://docs.aws.amazon.com/organizations/latest/APIReference/API_OrganizationalUnit.html) は `ou-acroot-exampleou` です。自身のポリシーでこの値を自身の OU ID に置き換えてください。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
     {
       "Sid": "AllowS3AccessOutsideMyBoundary",
       "Effect": "Allow",
       "Action": [
         "s3:*"
       ],
       "Resource": "*",
       "Condition": {
         "ForAllValues:StringLike": {
           "aws:ResourceOrgPaths": [
             "o-acorg/r-acroot/ou-acroot-exampleou/"
           ] 
         }
       }
     }
   ]
 }
```

------

**注記**  
このポリシーは、アクセス許可を付与しません。代わりに、このポリシーは、他の IAM アクセス権限のバックストップとして機能し、プリンシパルが OU 定義の境界外にある Amazon S3 オブジェクトにアクセスするのを防ぎます。

このポリシーは、アクセスされている Amazon S3 オブジェクトが組織内の `ou-acroot-exampleou` OU 内に存在しない場合、Amazon S3 アクションへのアクセスを拒否します。[IAM ポリシー条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)は、リストされた OU パスを含めるのに、複数値を持つ条件キー `aws:ResourceOrgPaths` を要求します。このポリシーは、`ForAllValues:StringNotLike` 演算子を使用して `aws:ResourceOrgPaths` の値をリストされた OU と比較します (大文字と小文字は区別しません)。

## 組織内の Amazon S3 バケットへのアクセスを制限する
<a name="iam-policy-ex8"></a>

組織内の Amazon S3 オブジェクトへのアクセスを制限するには、組織のルートに IAM ポリシーをアタッチし、組織内のすべてのアカウントに適用します。IAM プリンシパルにこのルールに従うように要求するには、[サービスコントロールポリシー (SCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) を使用します。SCP を使用する場合は、組織のルートにポリシーをアタッチする前に、[SCP のテスト](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html#scp-warning-testing-effect)をしっかりと実行してください。

次のポリシー例では、アクセスされている Amazon S3 オブジェクトが、それにアクセスしている IAM プリンシパルと同じ組織内に存在しない限り、Amazon S3 アクションへのアクセスが拒否されます。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
     {
       "Sid": "DenyS3AccessOutsideMyBoundary",
       "Effect": "Deny",
       "Action": [
         "s3:*"
       ],
       "Resource": "arn:aws:s3:::*/*",
       "Condition": {
         "StringNotEquals": {
           "aws:ResourceOrgID": "${aws:PrincipalOrgID}"
         }
       }
     }
   ]
 }
```

------

**注記**  
このポリシーは、アクセス許可を付与しません。代わりに、このポリシーは、他の IAM アクセス権限のバックストップとして機能し、プリンシパルが組織外にある Amazon S3 オブジェクトにアクセスするのを防ぎます。このポリシーは、ポリシーが有効になった後に作成される Amazon S3 リソースにも適用されます。

この例の [IAM ポリシー条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)では、互いに等しい `aws:ResourceOrgID` および `aws:PrincipalOrgID` が必要です。この要件では、リクエストを行うプリンシパルとアクセスされるリソースが同じ組織内になければなりません。

## AWS アカウント に PublicAccessBlock 設定を取得するアクセス許可を付与する
<a name="using-with-s3-actions-related-to-accountss"></a>

以下のアイデンティティベースのポリシーの例は、ユーザーに `s3:GetAccountPublicAccessBlock` のアクセス許可を付与します。これらのアクセス許可については、`Resource` 値を `"*"` に設定します。リソース ARN については、「[Amazon S3 のポリシーリソース](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-resources)」を参照してください。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"statement1",
         "Effect":"Allow",
         "Action":[
            "s3:GetAccountPublicAccessBlock" 
         ],
         "Resource":[
            "*"
         ]
       }
    ]
}
```

------

## バケット作成を 1 つのリージョンに制限する
<a name="condition-key-bucket-ops-1"></a>

例えば、AWS アカウント の管理者がユーザー (Dave) に南米 (サンパウロ) リージョンでのみバケットを作成できる許可を付与するとします。アカウント管理者は、以下のように条件を指定して、`s3:CreateBucket` のアクセス許可を付与する次のユーザーポリシーをアタッチします。`Condition` ブロックのキーと値のペアは、`s3:LocationConstraint` キーと、その値として `sa-east-1` リージョンを指定します。

**注記**  
この例では、バケット所有者はユーザーの 1 人にアクセス許可を付与するため、バケットポリシーまたはユーザーポリシーのどちらでも使用することができます。この例では、ユーザーポリシーを使用します。

Amazon S3 リージョンのリストについては、*AWS 全般のリファレンス* の「[リージョンとエンドポイント](https://docs.aws.amazon.com/general/latest/gr/s3.html)」を参照してください。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "statement1",
         "Effect": "Allow",
         "Action": "s3:CreateBucket",
         "Resource": "arn:aws:s3:::*",
         "Condition": {
             "StringLike": {
                 "s3:LocationConstraint": "sa-east-1"
             }
         }
       }
    ]
}
```

------

**明示的な拒否を追加する**  
上記のポリシーは、ユーザーが `sa-east-1` 以外のリージョンでバケットを作成することを制限します。ただし、他の一部のポリシーで、このユーザーに別のリージョンでバケットを作成するアクセス許可を付与する場合があります。例えば、ユーザーがグループに属している場合、グループのアクセス許可内にいるすべてのユーザーが別のリージョンでバケットを作成できるように、ポリシーがアタッチされている場合があります。ユーザーに別のリージョンでバケットを作成するアクセス許可が付与されないように、上記のポリシーに明示的な拒否のステートメントを追加します。

`Deny` ステートメントは、`StringNotLike` 条件を使用します。つまり、場所の制約が `sa-east-1` でない場合、バケットの作成リクエストは拒否されます。明示的な拒否を使用すれば、どのようなアクセス権限が付与されている場合でも、ユーザーは別のリージョンでバケットを作成できなくなります。次のポリシーには、明示的な拒否ステートメントが含まれています。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"statement1",
         "Effect":"Allow",
         "Action": "s3:CreateBucket",
         "Resource": "arn:aws:s3:::*",
         "Condition": {
             "StringLike": {
                 "s3:LocationConstraint": "sa-east-1"
             }
         }
       },
      {
         "Sid":"statement2",
         "Effect":"Deny",
         "Action": "s3:CreateBucket",
         "Resource": "arn:aws:s3:::*",
         "Condition": {
             "StringNotLike": {
                 "s3:LocationConstraint": "sa-east-1"
             }
         }
       }
    ]
}
```

------

**AWS CLI でポリシーをテストする**  
このポリシーは、次の `create-bucket` AWS CLI コマンドを使用してテストできます。この例では、`bucketconfig.txt` ファイルを使用して場所の制約を指定しています。Windows ファイルパスに注目してください。バケットの名前とパスを適切に更新する必要があります。`--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 create-bucket --bucket examplebucket --profile AccountADave --create-bucket-configuration file://c:/Users/someUser/bucketconfig.txt
```

`bucketconfig.txt` ファイルは、次のように設定を指定します。

```
{"LocationConstraint": "sa-east-1"}
```

# チュートリアル: ポリシーを使用した Amazon S3 リソースへのアクセスの管理
<a name="example-walkthroughs-managing-access"></a>

このトピックでは、Amazon S3 リソースへのアクセスの付与について、次の基本的なチュートリアル例を示します。これらの例では、AWS マネジメントコンソール を使用してリソース (バケット、オブジェクト、ユーザー) を作成し、アクセス許可を付与します。また、これらの例では、コマンドラインツールを使用してアクセス許可を確認する方法を示します。コードを記述する必要はありません。AWS Command Line Interface (AWS CLI) と AWS Tools for Windows PowerShell の両方を使用したコマンドを使用することができます。
+ [例 1: バケット所有者がユーザーにバケットのアクセス許可を付与する](example-walkthroughs-managing-access-example1.md)

  デフォルトでは、使用するアカウントで作成した IAM ユーザーにアクセス許可はありません。この演習では、バケットおよびオブジェクト操作を実行するためのアクセス許可をユーザーに付与します。
+ [例 2: バケット所有者がクロスアカウントのバケットのアクセス許可を付与する](example-walkthroughs-managing-access-example2.md)

  この演習では、バケット所有者 (アカウント A) が別の AWS アカウント (アカウント B) に対してクロスアカウントの許可を付与します。次に、アカウント B でこれらの許可を、そのアカウントのユーザーに委任します。
+ **オブジェクト所有者とバケット所有者が同じではない場合のオブジェクトのアクセス許可の管理**

  このシナリオ例は、バケット所有者が他のユーザーにオブジェクトのアクセス許可を付与しますが、バケット内のすべてのオブジェクトをバケット所有者が所有しているわけではないという場合です。バケット所有者にはどのようなアクセス許可が必要になり、それらのアクセス許可をどのように委任できるのでしょうか。

  バケットを作成する AWS アカウント は、バケット所有者と呼ばれます。**この所有者は、オブジェクトをアップロードする許可を他の AWS アカウントに付与することができ、オブジェクトを作成する AWS アカウントがオブジェクトを所有しています。バケット所有者には、他の AWS アカウントで作成されたオブジェクトに対する許可はありません。バケット所有者がオブジェクトへのアクセス権を付与するバケットポリシーを作成する場合、そのポリシーは他のアカウントが所有するオブジェクトには適用されません。

  この場合、オブジェクト所有者は、オブジェクト ACL を使用して、まずバケット所有者にアクセス許可を付与する必要があります。バケット所有者は、以下の例に示すように、これらのオブジェクトの許可を、他のユーザー、自分のアカウントのユーザー、または別の AWS アカウントに委任できます。
  + [例 3: バケット所有者が自分の所有していないオブジェクトに対するアクセス許可を付与する](example-walkthroughs-managing-access-example3.md)

    この演習では、バケット所有者は最初にオブジェクト所有者からアクセス許可を取得します。次に、バケット所有者は、自分のアカウントのユーザーにそのアクセス許可を委任します。
  + [例 4 - バケット所有者が所有権のないオブジェクトへのクロスアカウントアクセス許可を付与する](example-walkthroughs-managing-access-example4.md)

    オブジェクトの所有者からアクセス許可を取得した後も、クロスアカウントの委任がサポートされていないため、バケット所有者は他の AWS アカウント にアクセス許可を委任できません (「[アクセス許可の委任](access-policy-language-overview.md#permission-delegation)」を参照)。代わりに、バケット所有者は、特定のオペレーション (オブジェクトの取得など) を実行する許可を持つ IAM ロールを作成し、別の AWS アカウントがそのロールを引き受けることを許可できます。このロールを引き受けるすべてのユーザーがオブジェクトにアクセスできます。この例では、バケット所有者が IAM ロールを使用してこのクロスアカウントの委任を有効にする方法を示します。

## チュートリアル例を実行する前に
<a name="before-you-try-example-walkthroughs-manage-access"></a>

これらの例では、AWS マネジメントコンソール を使用してリソースを作成し、アクセス許可を付与します。許可をテストするために、この例ではコマンドラインツール AWS CLI および AWS Tools for Windows PowerShell を使用するため、コードを書く必要はありません。アクセス許可をテストするには、これらのツールのいずれかをセットアップする必要があります。詳細については、「[チュートリアル用のツールのセットアップ](policy-eval-walkthrough-download-awscli.md)」を参照してください。

さらに、これらの例では、リソースの作成時に AWS アカウントのルートユーザー認証情報を使用しません。代わりに、アカウントに、これらのタスクを実行するための管理者ユーザーを作成します。

### 管理者ユーザーを使用したリソースの作成とアクセス許可の付与について
<a name="about-using-root-credentials"></a>

AWS Identity and Access Management (IAM) では、AWS アカウントのルートユーザー認証情報を使用してリクエストを行わないようお勧めします。代わりに、IAM ユーザーまたはロールを作成してフルアクセスを許可し、そのユーザーまたはロールの認証情報を使用してリクエストを行います。このユーザーを管理者ユーザーまたはロールと呼びます。詳細については、*AWS 全般のリファレンス* の「[AWS アカウントのルートユーザー の認証情報と IAM ID](https://docs.aws.amazon.com/general/latest/gr/root-vs-iam.html)」と *IAM ユーザーガイド*の「[IAM のベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。

このセクションのすべてのチュートリアル例では、管理者ユーザーの認証情報を使用します。まだ AWS アカウントの管理者ユーザーを作成していない場合は、トピックでその方法を説明します。

ユーザーの認証情報を使用して AWS マネジメントコンソール にサインインするには、IAM ユーザーのサインイン URL を使用する必要があります。[IAM コンソール](https://console.aws.amazon.com/iam/)は、AWS アカウント にこの URL を提供します。トピックで、この URL を取得する方法を示します。

# チュートリアル用のツールのセットアップ
<a name="policy-eval-walkthrough-download-awscli"></a>

導入例 ([チュートリアル: ポリシーを使用した Amazon S3 リソースへのアクセスの管理](example-walkthroughs-managing-access.md) を参照) では、AWS マネジメントコンソール を使用してリソースを作成し、アクセス許可を付与します。許可をテストするために、この例ではコマンドラインツール AWS Command Line Interface (AWS Tools for Windows PowerShell)および AWS CLI を使用するため、コードを書く必要はありません。アクセス許可をテストするには、これらのツールのいずれかをセットアップする必要があります。

**AWS CLI をセットアップするには**

1. AWS CLI をダウンロードして設定します。手順については、*「AWS Command Line Interface ユーザーガイド」*の次のトピックを参照してください。

    [ の最新バージョンのインストールまたは更新AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html) 

    [ の開始方法AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) 

1. デフォルトのプロファイルを設定します。

   ユーザーの認証情報を AWS CLI 設定ファイルに格納します。AWS アカウントの認証情報を使用して設定ファイルにデフォルトのプロファイルを作成します。AWS CLI 設定ファイルの検索と編集の手順については、「[Configuration and credential file settings](https://docs.aws.amazon.com/cli/latest/userguide/cli-config-files.html)」を参照してください。

   ```
   [default]
   aws_access_key_id = access key ID
   aws_secret_access_key = secret access key
   region = us-west-2
   ```

1. コマンドプロンプトで以下のコマンドを入力して、セットアップを確認します。これらのコマンドは、いずれも認証情報を明示的に提供しないため、デフォルトプロファイルの認証情報が使用されます。
   + `help` コマンドを試してみます。

     ```
     aws help
     ```
   + 設定したアカウントのバケットのリストを取得するには、`aws s3 ls` コマンドを使用します。

     ```
     aws s3 ls
     ```

このチュートリアルでは、以下の例に示すように、ユーザーを作成し、プロファイルを作成することによってユーザー認証情報を設定ファイルに保存します。これらのプロファイルには、`AccountAadmin` と `AccountBadmin` の名前があります。

```
[profile AccountAadmin]
aws_access_key_id = User AccountAadmin access key ID
aws_secret_access_key = User AccountAadmin secret access key
region = us-west-2

[profile AccountBadmin]
aws_access_key_id = Account B access key ID
aws_secret_access_key = Account B secret access key
region = us-east-1
```

これらのユーザー認証情報を使用してコマンドを実行するには、プロファイル名を指定する `--profile` パラメータを追加します。次の AWS CLI コマンドは、*`examplebucket`* 内のオブジェクトのリストを取得し、`AccountBadmin` プロファイルを指定します。

```
aws s3 ls s3://examplebucket --profile AccountBadmin
```

また、コマンドプロンプトから `AWS_DEFAULT_PROFILE` 環境変数を変更することで、ユーザー認証情報セットをデフォルトプロファイルとして設定できます。これを行うと、`--profile` パラメータを指定せずに AWS CLI コマンドを実行するたびに、AWS CLI は環境変数でデフォルトプロファイルとして設定したプロファイルを使用します。

```
$ export AWS_DEFAULT_PROFILE=AccountAadmin
```

**AWS Tools for Windows PowerShell をセットアップするには**

1. AWS Tools for Windows PowerShell をダウンロードして設定します。手順については、「**AWS Tools for PowerShell ユーザーガイド」の「[Installing the AWS Tools for Windows PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html#pstools-installing-download)」を参照してください。
**注記**  
AWS Tools for Windows PowerShell モジュールをロードするには、PowerShell スクリプトの実行を有効にする必要があります。詳細については、「AWS Tools for PowerShell ユーザーガイド」の「[Enable Script Execution](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html#enable-script-execution)」を参照してください。**

1. これらのチュートリアルでは、`Set-AWSCredentials` コマンドを使用して、セッションごとに AWS 認証情報を指定します。このコマンドは永続的なストア (`-StoreAs `パラメータ) に認証情報を格納します。

   ```
   Set-AWSCredentials -AccessKey AccessKeyID -SecretKey SecretAccessKey -storeas string
   ```

1. セットアップを確認します。
   + Amazon S3 オペレーションで使用できるコマンドのリストを取得するには、`Get-Command` コマンドを実行します。

     ```
     Get-Command -module awspowershell -noun s3* -StoredCredentials string
     ```
   + バケット内のオブジェクトのリストを取得するには、`Get-S3Object` コマンドを実行します。

     ```
     Get-S3Object -BucketName bucketname -StoredCredentials string
     ```

コマンドのリストについては、「[AWS Tools for PowerShell Cmdlet Reference](https://docs.aws.amazon.com/powershell/latest/reference/Index.html)」を参照してください。

これで、チュートリアルを行う準備ができました。各セクションの冒頭に示されているリンクをクリックしてください。

# 例 1: バケット所有者がユーザーにバケットのアクセス許可を付与する
<a name="example-walkthroughs-managing-access-example1"></a>

**重要**  
IAM ロールへのアクセス許可の付与は、個別のユーザーへのアクセス許可の付与より優れた方法です。IAM ロールへのアクセス許可の付与方法の詳細については、「[クロスアカウントのアクセス許可の理解と IAM ロールの使用](example-walkthroughs-managing-access-example4.md#access-policies-walkthrough-example4-overview)」を参照してください。

**Topics**
+ [チュートリアルの準備をする](#grant-permissions-to-user-in-your-account-step0)
+ [ステップ 1: アカウント A でリソースを作成して、アクセス許可を付与する](#grant-permissions-to-user-in-your-account-step1)
+ [ステップ 2: アクセス許可をテストする](#grant-permissions-to-user-in-your-account-test)

このチュートリアルでは、AWS アカウント がバケットを所有し、アカウントに IAM ユーザーが含まれています。デフォルトでは、ユーザーにはアクセス許可はありません。何らかのタスクを実行するユーザーには、親アカウントがそのためのアクセス許可をユーザーに付与する必要があります。バケット所有者と親アカウントは同じです。したがって、バケットへの許可をユーザーに付与するには、AWS アカウントは、バケットポリシー、ユーザーポリシー、またはその両方を使用することができます。アカウント所有者は、一部のアクセス許可はバケットポリシーを使用し、他のアクセス許可はユーザーポリシーを使用して付与します。

手順の概要を以下に示します。

![\[AWS アカウントによるアクセス許可の付与を説明している図\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/access-policy-ex1.png)


1. アカウント管理者は、ユーザーに一連のアクセス許可を付与するバケットポリシーを作成します。

1. アカウント管理者は、ユーザーポリシーをユーザーにアタッチして、追加のアクセス許可を付与します。

1. これによりユーザーは、バケットポリシーとユーザーポリシーの両方を通じて付与されているアクセス許可を使用できます。

この例では、AWS アカウントが必要です。アカウントのルートユーザー認証情報を使用する代わりに、管理者ユーザーを作成します (「[管理者ユーザーを使用したリソースの作成とアクセス許可の付与について](example-walkthroughs-managing-access.md#about-using-root-credentials)」を参照してください)。ここ例の AWS アカウント および管理者ユーザーは、次のとおりです。


| アカウント ID | アカウントの呼び方 | アカウントの管理者ユーザー | 
| --- | --- | --- | 
|  *1111-1111-1111*  |  アカウント A  |  AccountAadmin  | 

**注記**  
この例では、管理者ユーザーは **AccountAadmin** で、アカウント A を参照しており、**AccountAdmin** ではありません。

ユーザーを作成し、アクセス許可を付与するためのすべてのタスクは、AWS マネジメントコンソール で実行します。このチュートリアルでは、許可を検証するために、コマンドラインツールの AWS Command Line Interface (AWS CLI) と AWS Tools for Windows PowerShell を使用するので、コードを記述する必要はありません。

## チュートリアルの準備をする
<a name="grant-permissions-to-user-in-your-account-step0"></a>

1. AWS アカウントが存在し、管理者権限を持つユーザーが存在することを確認します。

   1. 必要な場合、AWS アカウントにサインアップします。このアカウントをアカウント A と呼びます。

      1.  [https://aws.amazon.com/s3](https://aws.amazon.com/s3) に移動して、**[AWS アカウントの作成]** を選択します。

      1. 画面上の指示に従ってください。

         AWSアカウントがアクティブになり、使用可能な状態になったら、 から E メールで通知が届きます。

   1. アカウント A に管理者ユーザー **AccountAadmin** を作成します。アカウント A の認証情報を使用して、[IAM コンソール](https://console.aws.amazon.com/iam/home?#home)にサインインし、次の操作を行います。

      1. ユーザー **AccountAadmin** を作成して、ユーザーのセキュリティ認証情報を書き留めます。

         手順については、「IAM ユーザーガイド」の「[AWS アカウント での IAM ユーザーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html)」を参照してください。**

      1. フルアクセスを付与するユーザーポリシーをアタッチして、管理者に **AccountAadmin** を付与します。

         手順については、「IAM ユーザーガイド」の「[IAM ポリシーを管理する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html)」を参照してください。**

      1. **AccountAadmin** の **IAM ユーザーサインイン URL** を書き留めます。この URL は AWS マネジメントコンソール にサインインする際に使用する必要があります。サインイン URL を見つける方法については、「IAM ユーザーガイド」の「[Sign in to the AWS マネジメントコンソール as an IAM user](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_how-users-sign-in.html)」を参照してください。**URL はアカウントごとにメモしてください。

1. AWS CLI または AWS Tools for Windows PowerShell をセットアップします。管理者ユーザーの認証情報は以下のように保存します。
   + AWS CLI を使用する場合は、設定ファイルに `AccountAadmin` プロファイルを作成します。
   + AWS Tools for Windows PowerShell を使用する場合は、セッションの認証情報を `AccountAadmin` として保存します。

   手順については、「[チュートリアル用のツールのセットアップ](policy-eval-walkthrough-download-awscli.md)」を参照してください。

## ステップ 1: アカウント A でリソースを作成して、アクセス許可を付与する
<a name="grant-permissions-to-user-in-your-account-step1"></a>

アカウント A のユーザー `AccountAadmin` の認証情報と、IAM ユーザー専用のサインイン URL を使用して、AWS マネジメントコンソールにサインインし、次の操作を行います。

1. バケットリソースと IAM ユーザーリソースの作成

   1. Amazon S3 コンソールでバケットを作成します。バケットを作成した AWS リージョン を書き留めます。手順については、「[汎用バケットの作成](create-bucket-overview.md)」を参照してください。

   1. [IAM コンソール](https://console.aws.amazon.com/iam/)で次の操作を行います。

      1. Dave という名前のユーザーを作成します。

         詳細な手順については、「IAM ユーザーガイド」の「[IAM ユーザーの作成 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console)」を参照してください。**

      1. `UserDave` 認証情報を書き留めます。

      1. ユーザー Dave の Amazon リソースネーム (ARN) を書き留めます。[IAM コンソール](https://console.aws.amazon.com/iam/)でユーザーを選択すると、**[概要]** タブにユーザー ARN が表示されます。

1. アクセス許可を付与します。

   バケット所有者とユーザーが属する親アカウントが同じであるため、AWS アカウントは、バケットポリシー、ユーザーポリシー、またはその両方を使用してユーザーに許可を付与できます。この例では、両方を使用します。オブジェクトの所有者も同じアカウントである場合は、バケット所有者はバケットポリシー (または IAM ポリシー) でオブジェクトのアクセス権を付与することもできます。

   1. Amazon S3 コンソールで、次のバケットポリシーを *awsexamplebucket1* にアタッチします。

      このポリシーには 2 つのステートメントがあります。
      + 最初のステートメントは、バケットオペレーションのアクセス許可 `s3:GetBucketLocation` と `s3:ListBucket` を Dave に付与します。
      + 2 番目のステートメントは、アクセス許可 `s3:GetObject` を付与します。アカウント A はオブジェクトの所有者でもあるので、アカウント管理者はアクセス許可 `s3:GetObject` を付与できます。

      `Principal` ステートメントでは、Dave はユーザー ARN によって識別されます。ポリシーエレメントの詳細については、[Amazon S3 のポリシーとアクセス許可](access-policy-language-overview.md) を参照してください。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "statement1",
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:user/Dave"
                  },
                  "Action": [
                      "s3:GetBucketLocation",
                      "s3:ListBucket"
                  ],
                  "Resource": [
                      "arn:aws:s3:::awsexamplebucket1"
                  ]
              },
              {
                  "Sid": "statement2",
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:user/Dave"
                  },
                  "Action": [
                      "s3:GetObject"
                  ],
                  "Resource": [
                      "arn:aws:s3:::awsexamplebucket1/*"
                  ]
              }
          ]
      }
      ```

------

   1. 以下のポリシーを使用して、ユーザー Dave のインラインポリシーを作成します。このポリシーは、`s3:PutObject` アクセス許可を Dave に付与します。バケット名を指定してポリシーを更新する必要があります。

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

****  

      ```
      {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
            {
               "Sid": "PermissionForObjectOperations",
               "Effect": "Allow",
               "Action": [
                  "s3:PutObject"
               ],
               "Resource": [
                  "arn:aws:s3:::awsexamplebucket1/*"
               ]
            }
         ]
      }
      ```

------

      手順については、「IAM ユーザーガイド」の「[IAM ポリシーを管理する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html)」を参照してください。**コンソールにサインインするには、アカウント A の認証情報を使用する必要があります。

## ステップ 2: アクセス許可をテストする
<a name="grant-permissions-to-user-in-your-account-test"></a>

Dave の認証情報を使用して、アクセス許可が機能することを確認します。次の 2 つの手順のいずれかを使用できます。

**AWS CLI を使用してアクセス許可をテストする**

1. 次の `UserDaveAccountA` プロファイルを追加して、AWS CLI 設定ファイルを更新します。詳細については、「[チュートリアル用のツールのセットアップ](policy-eval-walkthrough-download-awscli.md)」を参照してください。

   ```
   [profile UserDaveAccountA]
   aws_access_key_id = access-key
   aws_secret_access_key = secret-access-key
   region = us-east-1
   ```

1. Dave がユーザーポリシーで許可されたオペレーションを実行できることを確認します。次の AWS CLI `put-object` コマンドを使用して、サンプルのオブジェクトをアップロードします。

   アップロードするソースファイルは、コマンドの `--body` パラメータで指定します。例えば、ファイルが Windows 端末の C: ドライブのルートにある場合、`c:\HappyFace.jpg` と指定します。`--key` パラメータは、オブジェクトのキー名を指定します。

   ```
   aws s3api put-object --bucket awsexamplebucket1 --key HappyFace.jpg --body HappyFace.jpg --profile UserDaveAccountA
   ```

   次の AWS CLI コマンドを実行して、オブジェクトを取得します。

   ```
   aws s3api get-object --bucket awsexamplebucket1 --key HappyFace.jpg OutputFile.jpg --profile UserDaveAccountA
   ```

**AWS Tools for Windows PowerShell を使用してアクセス許可をテストする**

1. Dave の認証情報を `AccountADave` という名前で保存します。次に、この認証情報を使用して、オブジェクトの `PUT` と `GET` を実行します。

   ```
   set-awscredentials -AccessKey AccessKeyID -SecretKey SecretAccessKey -storeas AccountADave
   ```

1. 保存したユーザー Dave の認証情報を使用して、AWS Tools for Windows PowerShell `Write-S3Object` コマンドでサンプルオブジェクトをアップロードします。

   ```
   Write-S3Object -bucketname awsexamplebucket1 -key HappyFace.jpg -file HappyFace.jpg -StoredCredentials AccountADave
   ```

   先にアップロードしたオブジェクトをダウンロードします。

   ```
   Read-S3Object -bucketname awsexamplebucket1 -key HappyFace.jpg -file Output.jpg -StoredCredentials AccountADave
   ```

# 例 2: バケット所有者がクロスアカウントのバケットのアクセス許可を付与する
<a name="example-walkthroughs-managing-access-example2"></a>

**重要**  
アクセス許可は、個々のユーザーではなく、IAM ロールに付与することをお勧めします。これを行う方法については、「[クロスアカウントのアクセス許可の理解と IAM ロールの使用](example-walkthroughs-managing-access-example4.md#access-policies-walkthrough-example4-overview)」を参照してください。

**Topics**
+ [チュートリアルの準備をする](#cross-acct-access-step0)
+ [ステップ 1: アカウント A のタスクを実行する](#access-policies-walkthrough-cross-account-permissions-acctA-tasks)
+ [ステップ 2: アカウント B のタスクを実行する](#access-policies-walkthrough-cross-account-permissions-acctB-tasks)
+ [ステップ 3: (オプション) 明示的な拒否を試す](#access-policies-walkthrough-example2-explicit-deny)
+ [ステップ 4: クリーンアップする](#access-policies-walkthrough-example2-cleanup-step)

ある AWS アカウント (例えば、アカウント A) で、バケットやオブジェクトなど、そのリソースにアクセスするためのアクセス許可を、別の AWS アカウント (アカウント B) に付与できます。アカウント B では、そのアカウントのユーザーに、付与されたアクセス許可を委任できます。この例のシナリオでは、バケット所有者が、特定のバケットオペレーションを実行するためのクロスアカウントアクセス許可を別のアカウントに付与します。

**注記**  
また、バケットポリシーを使用して、アカウント A から直接アカウント B のユーザーにアクセス許可を付与することもできます。ただし、このユーザーには、アカウント B がアカウント A からアクセス許可を付与されていない場合でも、ユーザーが属している親アカウントであるアカウント B からのアクセス許可が必要です。このユーザーがリソース所有者と親アカウントの両方からのアクセス許可を持っている場合にのみ、ユーザーはリソースにアクセスできます。

この手順の概要を以下に示します。

![\[ある AWS アカウント がアカウントのリソースへのアクセス許可を別の AWS アカウント に付与している状況を描いた図。\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/access-policy-ex2.png)


1. アカウント A の管理者ユーザーは、特定のバケットオペレーションを実行するためのクロスアカウントアクセス許可をアカウント B に付与するバケットポリシーをアタッチします。

   アカウント B の管理者ユーザーは、自動的にこのアクセス許可を継承することに注意してください。

1. アカウント B の管理者ユーザーは、アカウント A から受け取ったアクセス許可を委任するユーザーポリシーをユーザーにアタッチします。

1. アカウント B のユーザーは、アカウント A が所有するバケットのオブジェクトにアクセスすることにより、アクセス許可を確認します。

この例では、2 個のアカウントが必要です。次の表に、これらのアカウントとそれぞれの管理者ユーザーの呼び方を示します。IAM ガイドライン (「[管理者ユーザーを使用したリソースの作成とアクセス許可の付与について](example-walkthroughs-managing-access.md#about-using-root-credentials)」を参照) に従い、このチュートリアルではルートユーザー認証情報は使用しません。その代わりに、各アカウントで管理者ユーザーを作成し、その認証情報を使用してリソースを作成し、アクセス許可を付与します。


| AWS アカウント ID | アカウントの呼び方 | アカウントの管理者ユーザー  | 
| --- | --- | --- | 
|  *1111-1111-1111*  |  アカウント A  |  AccountAadmin  | 
|  *2222-2222-2222*  |  アカウント B  |  AccountBadmin  | 

ユーザーを作成し、アクセス許可を付与するためのすべてのタスクは、AWS マネジメントコンソールで実行します。このチュートリアルでは、許可を検証するために、コマンドラインツールの AWS Command Line Interface (CLI) と AWS Tools for Windows PowerShell を使用するので、コードを記述する必要はありません。

## チュートリアルの準備をする
<a name="cross-acct-access-step0"></a>

1. 前のセクションの表に示したように、2 個の AWS アカウントがあり、各アカウントに 1 人ずつの管理者ユーザーが存在することを確認します。

   1. 必要な場合、AWS アカウントにサインアップします。

   1. アカウント A の認証情報を使用して、[IAM コンソール](https://console.aws.amazon.com/iam/home?#home)にサインインし、管理者ユーザーを作成します。

      1. ユーザー **AccountAadmin** を作成して、セキュリティ認証情報を書き留めます。手順については、「*IAM ユーザーガイド*」の「[AWS アカウント での IAM ユーザーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html)」を参照してください。

      1. フルアクセスを付与するユーザーポリシーをアタッチして、管理者に **AccountAadmin** を付与します。手順については、[IAM ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html)の *IAM ポリシーの管理*を参照してください。

   1. IAM コンソールの **[ダッシュボード]** の **IAM ユーザーサインイン URL** をメモします このアカウントのすべてのユーザーは、AWS マネジメントコンソール にサインインするときにこの URL を使用する必要があります。

      詳細については、*IAM ユーザーガイド*の[ユーザーがお客様のアカウントにサインインする方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_how-users-sign-in.html) を参照してください。

   1. 前述のステップを、アカウント B の認証情報を使用してもう一度実行し、管理者ユーザー **AccountBadmin** を作成します。

1. AWS Command Line Interface (AWS CLI) または AWS Tools for Windows PowerShell をセットアップします。管理者ユーザーの認証情報は以下のように保存します。
   + AWS CLI を使用する場合は、設定ファイルに `AccountAadmin` と `AccountBadmin` の 2 つのプロファイルを作成します。
   + AWS Tools for Windows PowerShell を使用する場合は、セッションの認証情報を `AccountAadmin` および `AccountBadmin` として保存します。

   手順については、「[チュートリアル用のツールのセットアップ](policy-eval-walkthrough-download-awscli.md)」を参照してください。

1. プロファイルとも呼ばれる、管理者ユーザーの認証情報を保存します。入力する各コマンドで認証情報を指定する代わりにプロファイル名を使用できます。詳細については、「[チュートリアル用のツールのセットアップ](policy-eval-walkthrough-download-awscli.md)」を参照してください。

   1. 2 つのアカウントの管理者ユーザー (`AccountAadmin` および `AccountBadmin`) のそれぞれの AWS CLI 認証情報ファイルにプロファイルを追加します。

      ```
      [AccountAadmin]
      aws_access_key_id = access-key-ID
      aws_secret_access_key = secret-access-key
      region = us-east-1
      
      [AccountBadmin]
      aws_access_key_id = access-key-ID
      aws_secret_access_key = secret-access-key
      region = us-east-1
      ```

   1. AWS Tools for Windows PowerShell を使用している場合は、次のコマンドを実行します。

      ```
      set-awscredentials –AccessKey AcctA-access-key-ID –SecretKey AcctA-secret-access-key –storeas AccountAadmin
      set-awscredentials –AccessKey AcctB-access-key-ID –SecretKey AcctB-secret-access-key –storeas AccountBadmin
      ```

## ステップ 1: アカウント A のタスクを実行する
<a name="access-policies-walkthrough-cross-account-permissions-acctA-tasks"></a>

### ステップ 1.1: AWS マネジメントコンソールにサインインする
<a name="access-policies-walkthrough-cross-account-permissions-acctA-tasks-sign-in"></a>

アカウント A で IAM ユーザーのサインイン URL を使用して、まず **AccountAadmin** ユーザーとして AWS マネジメントコンソール にサインインします。このユーザーはバケットを作成し、ポリシーをアタッチします。

### ステップ 1.2: バケットを作成する
<a name="access-policies-walkthrough-example2a-create-bucket"></a>

1. Amazon S3 コンソールでバケットを作成します。この演習では、米国東部 (バージニア北部) AWS リージョン に `amzn-s3-demo-bucket` という名前でバケットを作成することを前提とします。

   手順については、「[汎用バケットの作成](create-bucket-overview.md)」を参照してください。

1. サンプルオブジェクトをバケットにアップロードします。

   方法については、[ステップ 2: バケットにオブジェクトをアップロードする](GetStartedWithS3.md#uploading-an-object-bucket) を参照してください。

### ステップ 1.3: クロスアカウントアクセス許可を付与するバケットポリシーをアカウント B にアタッチする
<a name="access-policies-walkthrough-example2a"></a>

このバケットポリシーは、`s3:GetLifecycleConfiguration` および `s3:ListBucket` アクセス許可をアカウント B に付与します。これは、**AccountAadmin** ユーザーの認証情報を使用してコンソールにサインインしていることを前提としています。

1. 次のバケットポリシーを `amzn-s3-demo-bucket` にアタッチします。このポリシーは、アカウント B に `s3:GetLifecycleConfiguration` および `s3:ListBucket` アクションのアクセス許可を付与します。

   手順については、「[Amazon S3 コンソールを使用したバケットポリシーの追加](add-bucket-policy.md)」を参照してください。

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

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
         {
            "Sid": "Example permissions",
            "Effect": "Allow",
            "Principal": {
               "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": [
               "s3:GetLifecycleConfiguration",
               "s3:ListBucket"
            ],
            "Resource": [
               "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
         }
      ]
   }
   ```

------

1. アカウント B (とその管理ユーザー) がオペレーションを実行できることを確認します。
   + AWS CLI を使用して検証する

     ```
     aws s3 ls s3://amzn-s3-demo-bucket --profile AccountBadmin
     aws s3api get-bucket-lifecycle-configuration --bucket amzn-s3-demo-bucket --profile AccountBadmin
     ```
   + AWS Tools for Windows PowerShell を使用して検証する

     ```
     get-s3object -BucketName amzn-s3-demo-bucket -StoredCredentials AccountBadmin 
     get-s3bucketlifecycleconfiguration -BucketName amzn-s3-demo-bucket -StoredCredentials AccountBadmin
     ```

## ステップ 2: アカウント B のタスクを実行する
<a name="access-policies-walkthrough-cross-account-permissions-acctB-tasks"></a>

次に、アカウント B の管理者はユーザー Dave を作成し、アカウント A から受け取ったアクセス許可を委任します。

### ステップ 2.1: AWS マネジメントコンソールにサインインする
<a name="access-policies-walkthrough-cross-account-permissions-acctB-tasks-sign-in"></a>

アカウント B の IAM ユーザーのサインイン URL を使用し、**AccountBadmin** ユーザーとして AWS マネジメントコンソール にサインインします。

### ステップ 2.2: アカウント B でユーザー Dave を作成する
<a name="access-policies-walkthrough-example2b-create-user"></a>

[IAM コンソール](https://console.aws.amazon.com/iam/)で、ユーザー **Dave** を作成します。

手順については、「IAM ユーザーガイド」の「[IAM ユーザーの作成 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console)」を参照してください。**

### ステップ 2.3: ユーザー Dave に許可を委任する
<a name="access-policies-walkthrough-example2-delegate-perm-userdave"></a>

以下のポリシーを使用して、ユーザー Dave のインラインポリシーを作成します。バケット名を指定してポリシーを更新する必要があります。

これは、**AccountBadmin** ユーザーの認証情報を使用してコンソールにサインインしていることを前提としています。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "Example",
         "Effect": "Allow",
         "Action": [
            "s3:ListBucket"
         ],
         "Resource": [
            "arn:aws:s3:::amzn-s3-demo-bucket"
         ]
      }
   ]
}
```

------

手順については、「IAM ユーザーガイド」の「[IAM ポリシーを管理する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html)」を参照してください。**

### ステップ 2.4: アクセス許可をテストする
<a name="access-policies-walkthrough-example2b-user-dave-access"></a>

これで、アカウント B の Dave はアカウント A が所有する `amzn-s3-demo-bucket` の内容をリストできます。次のいずれかの手順でアクセス許可を確認できます。

**AWS CLI を使用してアクセス許可をテストする**

1. AWS CLI 設定ファイルに `UserDave` プロファイルを追加します。設定ファイルの詳細については、[チュートリアル用のツールのセットアップ](policy-eval-walkthrough-download-awscli.md) を参照してください。

   ```
   [profile UserDave]
   aws_access_key_id = access-key
   aws_secret_access_key = secret-access-key
   region = us-east-1
   ```

1. コマンドプロンプトで、次の AWS CLI コマンドを入力して、Dave がアカウント A によって所有される `amzn-s3-demo-bucket` からオブジェクトリストを取得できることを検証します。このコマンドでは、`UserDave` プロファイルを指定していることに注意してください。

   ```
   aws s3 ls s3://amzn-s3-demo-bucket --profile UserDave
   ```

   Dave には他のアクセス許可はありません。したがって、他のオペレーション (次の `get-bucket-lifecycle` 設定など) を実行しようとすると、Amazon S3 はアクセス許可の拒否を返します。

   ```
   aws s3api get-bucket-lifecycle-configuration --bucket amzn-s3-demo-bucket --profile UserDave
   ```

**AWS Tools for Windows PowerShell を使用してアクセス許可をテストする**

1. Dave の認証情報を `AccountBDave` という名前で保存します。

   ```
   set-awscredentials -AccessKey AccessKeyID -SecretKey SecretAccessKey -storeas AccountBDave
   ```

1. List Bucket コマンドを試してみます。

   ```
   get-s3object -BucketName amzn-s3-demo-bucket -StoredCredentials AccountBDave
   ```

   Dave には他のアクセス許可はありません。したがって、他のオペレーション (次の `get-s3bucketlifecycleconfiguration` など) を実行しようとすると、Amazon S3 はアクセス許可の拒否を返します。

   ```
   get-s3bucketlifecycleconfiguration -BucketName amzn-s3-demo-bucket -StoredCredentials AccountBDave
   ```

## ステップ 3: (オプション) 明示的な拒否を試す
<a name="access-policies-walkthrough-example2-explicit-deny"></a>

アクセスコントロールリスト (ACL)、バケットポリシー、またはユーザーポリシーを使用して、アクセス許可を付与できます。ただし、バケットポリシーまたはユーザーポリシーによって明示的な拒否が設定されている場合、他のアクセス許可よりも明示的な拒否が優先されます。テストのために、バケットポリシーを更新し、アカウント B の `s3:ListBucket` アクセス許可を明示的に拒否してみます。このポリシーでは、`s3:ListBucket` アクセス許可も付与されます。ただし、明示的な拒否が優先され、アカウント B またはアカウント B のユーザーは `amzn-s3-demo-bucket` 内のオブジェクトを一覧表示を行うことはできません。

1. アカウント A のユーザー `AccountAadmin` の認証情報を使用して、バケットポリシーを次のように置き換えます。

1. ここで `AccountBadmin` の認証情報を使用してバケットリストを取得しようとすると、アクセスは拒否されます。
   + AWS CLI を使用して、次のコマンドを実行します。

     ```
     aws s3 ls s3://amzn-s3-demo-bucket --profile AccountBadmin
     ```
   + AWS Tools for Windows PowerShell を使用して、次のコマンドを実行します。

     ```
     get-s3object -BucketName amzn-s3-demo-bucket -StoredCredentials AccountBDave
     ```

## ステップ 4: クリーンアップする
<a name="access-policies-walkthrough-example2-cleanup-step"></a>

1. テストが終了したら、次の手順でクリーンアップを行います。

   1. アカウント A の認証情報を使用して AWS マネジメントコンソール ([AWS マネジメントコンソール](https://console.aws.amazon.com/)) にサインインし、次の操作を行います。
     + Amazon S3 コンソールで、`amzn-s3-demo-bucket` にアタッチされているバケットポリシーを削除します。バケットの **[プロパティ]** で、**[アクセス許可]** セクションのポリシーを削除します。
     + バケットをこの演習のために作成した場合は、Amazon S3 コンソールでオブジェクトを削除してから、バケットを削除します。
     + [IAM コンソール](https://console.aws.amazon.com/iam/)で、`AccountAadmin` ユーザーを削除します。

1. アカウント B の認証情報を使用して [IAM コンソール](https://console.aws.amazon.com/iam/)にサインインします。`AccountBadmin` ユーザーを削除します。手順については、「IAM ユーザーガイド」の「[IAM ユーザーの削除](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html#id_users_deleting)」を参照してください。**

# 例 3: バケット所有者が自分の所有していないオブジェクトに対するアクセス許可を付与する
<a name="example-walkthroughs-managing-access-example3"></a>

**重要**  
アクセス許可は、個々のユーザーではなく、IAM ロールに付与することをお勧めします。これを行う方法については、「[クロスアカウントのアクセス許可の理解と IAM ロールの使用](example-walkthroughs-managing-access-example4.md#access-policies-walkthrough-example4-overview)」を参照してください。

**Topics**
+ [ステップ 0: チュートリアルの準備をする](#access-policies-walkthrough-cross-account-acl-step0)
+ [ステップ 1: アカウント A のタスクを実行する](#access-policies-walkthrough-cross-account-acl-acctA-tasks)
+ [ステップ 2: アカウント B のタスクを実行する](#access-policies-walkthrough-cross-account-acl-acctB-tasks)
+ [ステップ 3: アクセス許可をテストする](#access-policies-walkthrough-cross-account-acl-verify)
+ [ステップ 4: クリーンアップする](#access-policies-walkthrough-cross-account-acl-cleanup)

この例のシナリオでは、バケット所有者はオブジェクトへのアクセス許可を付与しますが、バケット内のオブジェクトの一部はバケット所有者によって所有されていません。この例では、バケット所有者は、自分のアカウントのユーザーにアクセス許可を付与しようとしています。

バケット所有者は、他の AWS アカウントにオブジェクトのアップロードを許可できます。デフォルトでは、バケット所有者は別の AWS アカウント によってバケットに書き込まれたオブジェクトを所有しません。オブジェクトは、S3 バケットに書き込むアカウントによって所有されています。バケット所有者がバケット内のオブジェクトを所有していない場合、オブジェクト所有者は最初にオブジェクトのアクセスコントロールリスト (ACL) を使用してバケット所有者に権限を付与する必要があります。その後、バケット所有者は所有していないオブジェクトのアクセス許可を付与できます。詳細については、「[Amazon S3 のバケットとオブジェクトの所有権](access-policy-language-overview.md#about-resource-owner)」を参照してください。

バケット所有者がバケットの S3 オブジェクト所有権にバケット所有者強制設定を適用すると、バケット所有者は、別の AWS アカウント によって書き込まれたオブジェクトを含む、バケット内のすべてのオブジェクトを所有します。これにより、オブジェクトがバケット所有者によって所有されていないという問題が解決されます。次に、自分のアカウントまたは他の AWS アカウント アカウントのユーザーにアクセス許可を委任できます。

**注記**  
S3 オブジェクト所有権は、Amazon S3 バケットレベルの設定で、バケットにアップロードされる新しいオブジェクト所有権を制御し、ACL を無効にするのに使用できます。デフォルトでは、オブジェクト所有権はバケット所有者の強制設定に設定され、すべての ACL は無効になります。ACL を無効にすると、バケット所有者はバケット内のすべてのオブジェクトを所有し、アクセス管理ポリシーのみを使用してデータへのアクセスを管理します。  
 Amazon S3 の最新のユースケースの大部分では ACL を使用する必要がなくなっています。オブジェクトごとに個別にアクセスを制御する必要がある状況を除き、ACL は無効にしておくことをお勧めします。ACL を無効にすると、誰がオブジェクトをバケットにアップロードしたかに関係なく、ポリシーを使用してバケット内のすべてのオブジェクトへのアクセスを制御できます。詳細については、「[オブジェクトの所有権の制御とバケットの ACL の無効化。](about-object-ownership.md)」を参照してください。

この例では、バケット所有者がオブジェクト所有権のバケット所有者強制設定を適用していないと仮定します。バケット所有者は、自分のアカウントのユーザーに許可を委任します。この手順の概要を以下に示します。

![\[バケット所有者が自分の所有していないオブジェクトに対するアクセス許可を付与します。\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/access-policy-ex3.png)


1. アカウント A の管理者ユーザーが、2 つのステートメントを持つバケットポリシーをアタッチします。
   + オブジェクトをアップロードするクロスアカウントアクセスをアカウント B に許可します。
   + 自分のアカウントのユーザーにバケット内のオブジェクトへのアクセスを許可します。

1. アカウント B の管理者ユーザーは、アカウント A が所有するバケットにオブジェクトをアップロードします。

1. アカウント B の管理者は、オブジェクト ACL を更新して、オブジェクトに対するフルコントロールアクセス許可をバケット所有者に付与します。

1. アカウント A のユーザーは、所有者に関わりなくバケット内のオブジェクトにアクセスできることを確認します。

この例では、2 個のアカウントが必要です。次の表に、これらのアカウントの呼び方とそれぞれの管理者ユーザーを示します。このチュートリアルでは、推奨される IAM ガイドラインに従って、アカウントのルートユーザー認証情報を使用しません。詳細については、「[管理者ユーザーを使用したリソースの作成とアクセス許可の付与について](example-walkthroughs-managing-access.md#about-using-root-credentials)」を参照してください。その代わりに、各アカウントに管理者を作成し、その認証情報を使用してリソースを作成し、アクセス許可を付与します。


| AWS アカウント ID | アカウントの呼び方 | アカウントの管理者  | 
| --- | --- | --- | 
|  *1111-1111-1111*  |  アカウント A  |  AccountAadmin  | 
|  *2222-2222-2222*  |  アカウント B  |  AccountBadmin  | 

ユーザーを作成し、アクセス許可を付与するためのすべてのタスクは、AWS マネジメントコンソール で実行します。このチュートリアルでは、許可を検証するために、コマンドラインツールの AWS Command Line Interface (AWS CLI) と AWS Tools for Windows PowerShell を使用するので、コードを記述する必要はありません。

## ステップ 0: チュートリアルの準備をする
<a name="access-policies-walkthrough-cross-account-acl-step0"></a>

1. 前のセクションの表に示したように、2 個の AWS アカウントがあり、各アカウントに 1 人ずつの管理者が存在することを確認します。

   1. 必要な場合、AWS アカウントにサインアップします。

   1. アカウント A の認証情報を使用して、[IAM コンソール](https://console.aws.amazon.com/iam/)にサインインし、次の操作を行って管理者ユーザーを作成します。
      + ユーザー **AccountAadmin** を作成し、ユーザーのセキュリティ認証情報を書き留めます。ユーザーの追加の詳細については、「IAM ユーザーガイド」の「[AWS アカウント での IAM ユーザーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html)」を参照してください。**
      + **AccountAadmin** にフルアクセスを許可するユーザーポリシーをアタッチして、管理者権限を付与します。手順については、「IAM ユーザーガイド」の「[IAM ポリシーを管理する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html)」を参照してください。**
      + [IAM コンソール](https://console.aws.amazon.com/iam/)の **[ダッシュボード]** で、**[IAM ユーザーのサインイン URL]** を書き留めます。このアカウントのユーザーは、この URL を使用して AWS マネジメントコンソール にサインインします。詳細については、*IAM ユーザーガイド*の[ユーザーがお客様のアカウントにサインインする方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_how-users-sign-in.html) を参照してください。

   1. 前述のステップを、アカウント B の認証情報を使用してもう一度実行し、管理者ユーザー **AccountBadmin** を作成します。

1. AWS CLI または Tools for Windows PowerShell をセットアップします。管理者認証情報を必ず次のように保存してください。
   + AWS CLI を使用する場合は、設定ファイルに `AccountAadmin` と `AccountBadmin` の 2 つのプロファイルを作成します。
   + Tools for Windows PowerShell を使用する場合、セッションの認証情報を `AccountAadmin` および `AccountBadmin` として保存します。

   手順については、[チュートリアル用のツールのセットアップ](policy-eval-walkthrough-download-awscli.md) を参照してください。

## ステップ 1: アカウント A のタスクを実行する
<a name="access-policies-walkthrough-cross-account-acl-acctA-tasks"></a>

アカウント A に対して、次の手順を実行します。

### ステップ 1.1: コンソールにサインインする
<a name="access-policies-walkthrough-cross-account-permissions-acctA-tasks-sign-in-example3"></a>

アカウント A の IAM ユーザーのサインイン URL を使用して、**AccountAadmin** ユーザーとして AWS マネジメントコンソール にサインインします。このユーザーはバケットを作成し、ポリシーをアタッチします。

### ステップ 1.2: バケットとユーザーを作成し、ユーザーにアクセス許可を付与するバケットポリシーを追加する
<a name="access-policies-walkthrough-cross-account-acl-create-bucket"></a>

1. Amazon S3 コンソールでバケットを作成します。この演習では、米国東部 (バージニア北部) AWS リージョン に `amzn-s3-demo-bucket1` という名前でバケットを作成することを前提とします。

   手順については、「[汎用バケットの作成](create-bucket-overview.md)」を参照してください。

1. [IAM コンソール](https://console.aws.amazon.com/iam/)で、ユーザー **Dave** を作成します。

   詳細な手順については、「IAM ユーザーガイド」の「[IAM ユーザーの作成 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console)」を参照してください。**

1. ユーザー Dave の認証情報を書き留めます。

1. Amazon S3 コンソールで、次のバケットポリシーを `amzn-s3-demo-bucket1` バケットにアタッチします。手順については、[Amazon S3 コンソールを使用したバケットポリシーの追加](add-bucket-policy.md) を参照してください。バケットポリシーを追加するには、このステップに従います。アカウント ID を確認する方法については、[AWS アカウント ID の検索](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html#FindingYourAccountIdentifiers) を参照してください。

   このポリシーは、アカウント B に `s3:PutObject` および `s3:ListBucket` アクセス許可を付与します。このポリシーはまた、ユーザー `Dave` に `s3:GetObject` アクセス許可を付与します。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Statement1",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:root"
               },
               "Action": [
                   "s3:PutObject",
                   "s3:ListBucket"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket1/*",
                   "arn:aws:s3:::amzn-s3-demo-bucket1"
               ]
           },
           {
               "Sid": "Statement3",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:user/Dave"
               },
               "Action": [
                   "s3:GetObject"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket1/*"
               ]
           }
       ]
   }
   ```

------

## ステップ 2: アカウント B のタスクを実行する
<a name="access-policies-walkthrough-cross-account-acl-acctB-tasks"></a>

これでアカウント B はアカウント A のバケットに対するオペレーション実行のアクセス許可を得ましたので、管理者は次の作業を行います。
+ アカウント A のバケットにオブジェクトをアップロードします。
+ バケット所有者であるアカウント A にそのバケットへのフルコントロールをオブジェクトの ACL で付与します。

**の使用AWS CLI**

1. `put-object` AWS CLI コマンドを使用して、オブジェクトをアップロードします。アップロードするソースファイルは、コマンドの `--body` パラメータで指定します。例えば、ファイルが Windows 端末の `C:` ドライブにある場合、`c:\HappyFace.jpg` のように指定します。`--key` パラメータは、オブジェクトのキー名を指定します。

   ```
   aws s3api put-object --bucket amzn-s3-demo-bucket1 --key HappyFace.jpg --body HappyFace.jpg --profile AccountBadmin
   ```

1. バケット所有者に対するオブジェクトのフルコントロールの許可をオブジェクト ACL に追加します。正規ユーザー ID を検索する方法については、「**AWS Account Management リファレンスガイド」の「[AWS アカウント の正規ユーザー ID を検索する](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html#FindCanonicalId)」を参照してください。

   ```
   aws s3api put-object-acl --bucket amzn-s3-demo-bucket1 --key HappyFace.jpg --grant-full-control id="AccountA-CanonicalUserID" --profile AccountBadmin
   ```

**Tools for Windows PowerShell の使用**

1. `Write-S3Object` コマンドを使用して、オブジェクトをアップロードします。

   ```
   Write-S3Object -BucketName amzn-s3-demo-bucket1 -key HappyFace.jpg -file HappyFace.jpg -StoredCredentials AccountBadmin
   ```

1. バケット所有者に対するオブジェクトのフルコントロールの許可をオブジェクト ACL に追加します。

   ```
   Set-S3ACL -BucketName amzn-s3-demo-bucket1 -Key HappyFace.jpg -CannedACLName "bucket-owner-full-control" -StoredCreden
   ```

## ステップ 3: アクセス許可をテストする
<a name="access-policies-walkthrough-cross-account-acl-verify"></a>

アカウント A のユーザー Dave が、アカウント B が所有するオブジェクトにアクセスできることを確認します。

**AWS CLI の使用**

1. ユーザー Dave の認証情報を AWS CLI の設定ファイルに追加して、新しいプロファイル `UserDaveAccountA` を作成します。詳細については、[チュートリアル用のツールのセットアップ](policy-eval-walkthrough-download-awscli.md) を参照してください。

   ```
   [profile UserDaveAccountA]
   aws_access_key_id = access-key
   aws_secret_access_key = secret-access-key
   region = us-east-1
   ```

1. `get-object` CLI コマンドを実行して `HappyFace.jpg` をダウンロードし、ローカルに保存します。`--profile` パラメータを追加して、ユーザー Dave の認証情報を指定します。

   ```
   aws s3api get-object --bucket amzn-s3-demo-bucket1 --key HappyFace.jpg Outputfile.jpg --profile UserDaveAccountA
   ```

**Tools for Windows PowerShell の使用**

1. ユーザー Dave の AWS 認証情報を、`UserDaveAccountA` という名前で永続的ストアに保存します。

   ```
   Set-AWSCredentials -AccessKey UserDave-AccessKey -SecretKey UserDave-SecretAccessKey -storeas UserDaveAccountA
   ```

1. `Read-S3Object` コマンドを実行して `HappyFace.jpg` オブジェクトをダウンロードし、ローカルに保存します。`-StoredCredentials` パラメータを追加して、ユーザー Dave の認証情報を指定します。

   ```
   Read-S3Object -BucketName amzn-s3-demo-bucket1 -Key HappyFace.jpg -file HappyFace.jpg  -StoredCredentials UserDaveAccountA
   ```

## ステップ 4: クリーンアップする
<a name="access-policies-walkthrough-cross-account-acl-cleanup"></a>

1. テストが終了したら、次の手順でクリーンアップを行います。

   1. アカウント A の認証情報を使用して [AWS マネジメントコンソール](https://console.aws.amazon.com/) にサインインし、次の操作を行います。
     + Amazon S3 コンソールで、*amzn-s3-demo-bucket1* にアタッチされているバケットポリシーを削除します。バケットの **[プロパティ]** で、**[アクセス許可]** セクションのポリシーを削除します。
     + バケットをこの演習のために作成した場合は、Amazon S3 コンソールでオブジェクトを削除してから、バケットを削除します。
     + [IAM コンソール](https://console.aws.amazon.com/iam/)で、**[AccountAadmin]** ユーザーを削除します。手順については、「IAM ユーザーガイド」の「[IAM ユーザーの削除](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html#id_users_deleting)」を参照してください。**

1. アカウント B の認証情報を使用して [AWS マネジメントコンソール](https://console.aws.amazon.com/) にサインインします。[IAM コンソール](https://console.aws.amazon.com/iam/)で、ユーザー **[AccountBadmin]** を削除します。

# 例 4 - バケット所有者が所有権のないオブジェクトへのクロスアカウントアクセス許可を付与する
<a name="example-walkthroughs-managing-access-example4"></a>

**Topics**
+ [クロスアカウントのアクセス許可の理解と IAM ロールの使用](#access-policies-walkthrough-example4-overview)
+ [ステップ 0: チュートリアルの準備をする](#access-policies-walkthrough-example4-step0)
+ [ステップ 1: アカウント A のタスクを実行する](#access-policies-walkthrough-example4-step1)
+ [ステップ 2: アカウント B のタスクを実行する](#access-policies-walkthrough-example4-step2)
+ [ステップ 3: アカウント C のタスクを実行する](#access-policies-walkthrough-example4-step3)
+ [ステップ 4: クリーンアップする](#access-policies-walkthrough-example4-step6)
+ [関連リソース](#RelatedResources-managing-access-example4)

 この例のシナリオでは、バケット所有者が、オブジェクトをアップロードするためのアクセス許可を他の AWS アカウント に付与します。バケットの S3 オブジェクト所有権にバケット所有者強制設定を適用した場合、別の AWS アカウント によって書き込まれたオブジェクトを含む、バケット内のすべてのオブジェクトを所有します。これにより、バケット所有者であるユーザーがオブジェクトを所有していないという問題が解決されます。次に、自分のアカウントまたは他の AWS アカウント アカウントのユーザーにアクセス許可を委任できます。S3 オブジェクト所有権のバケット所有者強制設定が有効になっていないとします。つまり、バケットは、他の AWS アカウントが所有するオブジェクトを含むことができます。

バケット所有者は、オブジェクトの所有者が誰であるかに関係なく、オブジェクトに対するクロスアカウントのアクセス許可を別のアカウントのユーザーに付与しなければならない場合があります。例えば、課金アプリケーションがユーザーとしてオブジェクトのメタデータにアクセスしなければならない場合などです。ここで、主に 2 つの問題が生じます。
+ バケット所有者には、他の AWS アカウントで作成されたオブジェクトに対する許可はありません。バケット所有者が、自分が所有していないオブジェクトに対するアクセス許可を付与するには、オブジェクトの所有者 (オブジェクトを作成した ) は、最初にバケット所有者にアクセス許可を付与する必要があります。この所有者は、オブジェクトを作成した AWS アカウントです。これで、バケット所有者は、それらのアクセス許可を委任できるようになります。
+ バケット所有者は、自分のアカウントのユーザーに許可を委任できます (「[例 3: バケット所有者が自分の所有していないオブジェクトに対するアクセス許可を付与する](example-walkthroughs-managing-access-example3.md)」を参照)。ただし、クロスアカウントの委任はサポートされていないため、バケット所有者アカウントは他の AWS アカウント にアクセス許可を委任できません。

このシナリオでは、バケット所有者はオブジェクトへのアクセス許可を持つ AWS Identity and Access Management (IAM) ロールを作成できます。その後、バケット所有者は別の AWS アカウント にロールを引き受けるアクセス許可を付与して、バケットのオブジェクトへのアクセスを一時的に有効化できます。

**注記**  
S3 オブジェクト所有権は、Amazon S3 バケットレベルの設定で、バケットにアップロードされる新しいオブジェクト所有権を制御し、ACL を無効にするのに使用できます。デフォルトでは、オブジェクト所有権はバケット所有者の強制設定に設定され、すべての ACL は無効になります。ACL を無効にすると、バケット所有者はバケット内のすべてのオブジェクトを所有し、アクセス管理ポリシーのみを使用してデータへのアクセスを管理します。  
 Amazon S3 の最新のユースケースの大部分では ACL を使用する必要がなくなっています。オブジェクトごとに個別にアクセスを制御する必要がある状況を除き、ACL は無効にしておくことをお勧めします。ACL を無効にすると、誰がオブジェクトをバケットにアップロードしたかに関係なく、ポリシーを使用してバケット内のすべてのオブジェクトへのアクセスを制御できます。詳細については、「[オブジェクトの所有権の制御とバケットの ACL の無効化。](about-object-ownership.md)」を参照してください。

## クロスアカウントのアクセス許可の理解と IAM ロールの使用
<a name="access-policies-walkthrough-example4-overview"></a>

 IAM ロールは、リソースへのアクセスを委任する、いくつかのシナリオで使用されます。なかでも、クロスアカウントアクセスは重要なシナリオです。この例では、バケット所有者 (アカウント A) は、IAM ロールを使用して、他の AWS アカウント (アカウント C) のユーザーに一時的にオブジェクトへのクロスアカウントの許可を委任します。作成された IAM ロールには、次の 2 つのポリシーがアタッチされています。
+ ロールを引き受ける別の AWS アカウントを指定する信頼ポリシー。
+ ロールを引き受けるユーザーに付与されるアクセス許可 (`s3:GetObject` など) を定義するアクセスポリシー。ポリシーで指定できるアクセス許可のリストについては、[Amazon S3 のポリシーアクション](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-actions) を参照してください。

信頼ポリシーで指定された AWS アカウントは、アカウントに属するユーザーにロールを引き受ける許可を付与します。ユーザーは、以下の手順でオブジェクトにアクセスします。
+ ロールを引き受け、その応答として一時的なセキュリティ認証情報を取得します。
+ 一時的なセキュリティ認証情報を使用して、バケットのオブジェクトにアクセスします。

IAM ロールの詳細については、「IAM ユーザーガイド」の「[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)」を参照してください。**

この手順の概要を以下に示します。

![\[IAM ロールを使用したクロスアカウントのアクセス許可\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/access-policy-ex4.png)


1. アカウント A の管理者ユーザーは、バケットポリシーをアタッチし、オブジェクトをアップロードする条件付きのアクセス許可をアカウント B に付与します。

1. アカウント A の管理者ユーザーは、IAM ロールを作成し、アカウント C との間に信頼を確立します。これで、アカウント C のユーザーはアカウント A にアクセスできるようになります。ロールにアタッチされたアクセスポリシーは、アカウント C のユーザーがアカウント A にアクセスするときに実行できる操作を制限します。

1. アカウント B の管理者は、アカウント A が所有するバケットにオブジェクトをアップロードし、バケット所有者にフルコントロールのアクセス許可を付与します。

1. アカウント C の管理者は、ユーザーを作成し、ロールを引き受けるためのユーザーポリシーをアタッチします。

1. アカウント C のユーザーが初めてロールを引き受けると、一時的なセキュリティ認証情報が返されます。ユーザーは、この一時的な認証情報を使用して、バケットのオブジェクトにアクセスします。

この例では、3 つのアカウントが必要です。次の表に、これらのアカウントの呼び方とそれぞれの管理者ユーザーを示します。IAM のガイドライン (「[管理者ユーザーを使用したリソースの作成とアクセス許可の付与について](example-walkthroughs-managing-access.md#about-using-root-credentials)」を参照) に従い、このチュートリアルでは AWS アカウントのルートユーザーの認証情報を使用しません。その代わりに、各アカウントで管理者ユーザーを作成し、その認証情報を使用してリソースを作成し、アクセス許可を付与します。


| AWS アカウント ID | アカウントの呼び方 | アカウントの管理者ユーザー  | 
| --- | --- | --- | 
|  *1111-1111-1111*  |  アカウント A  |  AccountAadmin  | 
|  *2222-2222-2222*  |  アカウント B  |  AccountBadmin  | 
|  *3333-3333-3333*  |  アカウント C  |  AccountCadmin  | 



## ステップ 0: チュートリアルの準備をする
<a name="access-policies-walkthrough-example4-step0"></a>

**注記**  
テキストエディタを開いて、手順を実行しながら、いくつかの情報を書き留めることができます。特に、コンソールに接続する各アカウントのアカウント ID、正規ユーザー ID、IAM ユーザーのサインイン URL、IAM ユーザーとロールの Amazon リソースネーム (ARN) が必要になります。

1. 前のセクションの表に示したように、3 つの AWS アカウント があり、各アカウントに 1 人ずつ管理者ユーザーが存在することを確認します。

   1. 必要に応じて AWS アカウントにサインアップします。ここでは、それぞれのアカウントをアカウント A、アカウント B、アカウント C と呼ぶことにします。

   1. アカウント A の認証情報を使用して、[IAM コンソール](https://console.aws.amazon.com/iam/home?#home)にサインインし、次の操作を行って管理者ユーザーを作成します。
      + ユーザー **AccountAadmin** を作成して、そのセキュリティ認証情報を書き留めます。ユーザーの追加の詳細については、「IAM ユーザーガイド」の「[AWS アカウント での IAM ユーザーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html)」を参照してください。**
      + フルアクセスを付与するユーザーポリシーをアタッチして、管理者に **AccountAadmin** を付与します。手順については、「IAM ユーザーガイド」の「[IAM ポリシーを管理する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html)」を参照してください。**
      + IAM コンソールの **[ダッシュボード]** で、**[IAM ユーザーのサインイン URL]** を書き留めます。このアカウントのユーザーは、この URL を使用して AWS マネジメントコンソール にサインインします。詳細については、「IAM ユーザーガイド」の「[Sign in to the AWS マネジメントコンソール as an IAM user](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_how-users-sign-in.html)」を参照してください。**

   1. 前述の手順を繰り返し、アカウント B およびアカウント C の管理者ユーザーを作成します。

1. アカウント C で、正規ユーザー ID を書き留めます。

   アカウント A で IAM ロールを作成したら、信頼ポリシーでアカウント C のアカウント ID を指定して、ロールを引き受けるアクセス許可をアカウント C に付与します。アカウント情報は、次の手順で確認できます。

   1. AWS アカウント ID またはアカウントエイリアス、IAM ユーザー名、パスワードを使用して、[Amazon S3 コンソール](https://console.aws.amazon.com/s3/)にサインインします。

   1. バケットの詳細を確認する Amazon S3 バケットの名前を選択します。

   1. [**Permissions (アクセス許可)**] タブを選択してから、[**アクセスコントロールリスト**] を選択します。

   1. ** AWS アカウント のアクセス**のセッションで、**アカウント** 列は `c1daexampleaaf850ea79cf0430f33d72579fd1611c97f7ded193374c0b163b6` のような長い識別子です。これが正規ユーザー ID です。

1. バケットポリシーを作成するときは、次の情報が必要になります。これらの値を書き留めます。
   + **アカウント A の正規ユーザー ID** – アカウント A の管理者がアカウント B の管理者にオブジェクトをアップロードする条件付きのアクセス許可を付与するとき、オブジェクトに対するフルコントロールを取得するアカウント A のユーザーの正規ユーザー ID を指定します。
**注記**  
正規ユーザー ID は、Amazon S3 固有の概念です。64 文字から成る、難読化されたアカウント ID です。
   + **アカウント B 管理者の ユーザー ARN** - ユーザー ARN は [IAM コンソール](https://console.aws.amazon.com/iam/)にあります。**[概要]** タブでユーザーを選択し、ユーザーの ARN を見つけます。

     バケットポリシーでは、オブジェクトをアップロードするアクセス許可を `AccountBadmin` に付与し、ARN を使用してユーザーを指定します。ARN 値の例を示します。

     ```
     arn:aws:iam::AccountB-ID:user/AccountBadmin
     ```

1. AWS Command Line Interface (CLI) または AWS Tools for Windows PowerShell をセットアップします。管理者ユーザーの認証情報は以下のように保存します。
   + AWS CLI を使用する場合は、設定ファイルに `AccountAadmin` と `AccountBadmin` のプロファイルを作成します。
   + AWS Tools for Windows PowerShell を使用する場合は、セッションの認証情報を `AccountAadmin` および `AccountBadmin` として保存します。

   手順については、「[チュートリアル用のツールのセットアップ](policy-eval-walkthrough-download-awscli.md)」を参照してください。

## ステップ 1: アカウント A のタスクを実行する
<a name="access-policies-walkthrough-example4-step1"></a>

この例では、アカウント A はバケット所有者です。したがって、アカウント A のユーザー AccountAadmin は以下を実行します。
+ バケットを作成します。
+ オブジェクトをアップロードするアクセス許可をアカウント B の管理者に付与するバケットポリシーをアタッチします。
+ バケット内のオブジェクトにアクセスできるように、ロールを引き受けるアクセス許可をアカウント C に付与する IAM ロールを作成します。

### ステップ 1.1: AWS マネジメントコンソールにサインインする
<a name="access-policies-walkthrough-cross-account-permissions-acctA-tasks-sign-in-example4"></a>

アカウント A で IAM ユーザーのサインイン URL を使用して、まず **AccountAadmin** ユーザーとして AWS マネジメントコンソール にサインインします。このユーザーはバケットを作成し、ポリシーをアタッチします。

### ステップ 1.2: バケットを作成してバケットポリシーをアタッチする
<a name="access-policies-walkthrough-example2d-step1-1"></a>

Amazon S3 コンソールで、次の操作を行います。

1. バケットを作成します。この演習では、バケットの名前を `amzn-s3-demo-bucket1` とします。

   手順については、「[汎用バケットの作成](create-bucket-overview.md)」を参照してください。

1. 次のバケットポリシーをアタッチします。このポリシーは、オブジェクトをアップロードする条件付きのアクセス許可をアカウント B の管理者に付与します。

   `amzn-s3-demo-bucket1`、`AccountB-ID`、`CanonicalUserId-of-AWSaccountA-BucketOwner` に独自の値を指定してポリシーを更新します。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "111",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:user/AccountBadmin"
               },
               "Action": "s3:PutObject",
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*"
           },
           {
               "Sid": "112",
               "Effect": "Deny",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:user/AccountBadmin"
               },
               "Action": "s3:PutObject",
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*",
               "Condition": {
                   "StringNotEquals": {
                       "s3:x-amz-grant-full-control": "id=CanonicalUserId-of-AWSaccountA-BucketOwner"
                   }
               }
           }
       ]
   }
   ```

------

### ステップ 1.3: アカウント C にクロスアカウントアクセスを許可する IAM ロールをアカウント A に作成する
<a name="access-policies-walkthrough-example2d-step1-2"></a>

[IAM コンソール](https://console.aws.amazon.com/iam/)で、アカウント C にロールを引き受けるアクセス許可を付与する IAM ロール (**examplerole**) を作成します。このロールはアカウント A に作成する必要があるため、アカウント A の管理者としてサインインしていることを再度確認してください。

1. ロールを作成する前に、ロールに必要なアクセス許可を定義する管理ポリシーを準備します。後の手順で、このポリシーをロールにアタッチします。

   1. 左側のナビゲーションペインで **[ポリシー]** を選択し、続いて **[ポリシーの作成]** を選択します。

   1. **[独自のポリシーを作成]** の横で、**[選択]** を選択します。

   1. [**Policy Name** (ポリシー名)] フィールドに「**access-accountA-bucket** 」と入力します。

   1. 以下のアクセスポリシーをコピーして、[**Policy Document (ポリシードキュメント)**] フィールドに貼り付けます。このアクセスポリシーは、ロールに `s3:GetObject` のアクセス許可を付与するため、アカウント C のユーザーがこのロールを引き受けると、`s3:GetObject` オペレーションのみを実行できます。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*"
          }
        ]
      }
      ```

------

   1. **[ポリシーを作成]** を選択します。

      新しいポリシーが管理ポリシーの一覧に表示されます。

1. 左側のナビゲーションペインで、**[ロール]**、**[新しいロールの作成]** の順に選択します。

1. **[ロールタイプの選択]** で **[クロスアカウントアクセスのロール]** を選択して、**[所有する AWS アカウント の間のアクセスの提供] **の隣の **[選択]** ボタンを選択します。

1. アカウント C のアカウント ID を入力します。

   このチュートリアルでは、ロールを引き受けるユーザーに多要素認証 (MFA) を必須とする必要がないため、このオプションは選択していない状態のままにしておきます。

1. **[次のステップ]** を選択して、そのロールに関連するアクセス許可を設定します。

1. 

   作成した **access-accountA-bucket** ポリシーの横にあるチェックボックスを選択し、**[次のステップ]** を選択します。

   [Review] ページが表示されます。このページで作成前のロールの設定を確認できます。このページで注意する重要な項目は、このロールを使用する必要があるユーザーに送信できるリンクです。ユーザーがこのリンクをクリックすると、**[ロールの切り替え]** ページがすぐに表示されます。このページには、[アカウント ID] と [ロール名] がすでに設定されています。このリンクは、クロスアカウントロールの **[ロールの概要]** ページで後で確認することもできます。

1. ロール名に「`examplerole`」と入力し、**[次のステップ]** を選択します。

1. ロールを確認したら、**[ロールの作成]** を選択します。

   `examplerole` ロールがロールの一覧に表示されます。

1. ロール名 `examplerole` を選択します。

1. [**Trust Relationships (信頼関係)**] タブを選択します。

1. **[ポリシードキュメントの表示]** を選択して、表示されている信頼ポリシーが次のポリシーと一致するか確認します。

   次の信頼ポリシーは、アカウント C との信頼を確立し、`sts:AssumeRole` アクションを許可します。詳細については、「*AWS Security Token Service API リファレンス*」の「[https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)」を参照してください。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:root"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. 作成した `examplerole` ロールの Amazon リソースネーム (ARN) を書き留めます。

   後の手順で、このロールの引き受けを許可するユーザーポリシーを IAM ユーザーにアタッチしますが、ロールは ARN 値で指定します。

## ステップ 2: アカウント B のタスクを実行する
<a name="access-policies-walkthrough-example4-step2"></a>

アカウント A が所有するバケットの例では、他のアカウントが所有するオブジェクトが必要です。このステップでは、アカウント B の管理者は、コマンドラインツールを使用してオブジェクトをアップロードします。
+ `put-object` AWS CLI コマンドを使用して、オブジェクトを `amzn-s3-demo-bucket1` にアップロードします。

  ```
  aws s3api put-object --bucket amzn-s3-demo-bucket1 --key HappyFace.jpg --body HappyFace.jpg --grant-full-control id="canonicalUserId-ofTheBucketOwner" --profile AccountBadmin
  ```

  次の点に注意してください。
  + `--Profile` パラメータは `AccountBadmin` のプロファイルを指定しているため、オブジェクトはアカウント B によって所有されます。
  + `grant-full-control` パラメータは、バケットポリシーに従って、バケット所有者にオブジェクトに対するフルコントロールのアクセス許可を付与します。
  + `--body` パラメータは、アップロードするソースファイルを指定します。例えば、ファイルが Windows コンピュータの C: ドライブにある場合は、「`c:\HappyFace.jpg`」と指定します。

## ステップ 3: アカウント C のタスクを実行する
<a name="access-policies-walkthrough-example4-step3"></a>

これまでの手順で、アカウント A はすでに `examplerole` ロールを作成し、アカウント C との信頼を確立しています。これにより、アカウント C のユーザーは、アカウント A にアクセスすることができます。このステップでは、アカウント C の管理者がユーザー (Dave) を作成し、アカウント A から取得した `sts:AssumeRole` のアクセス許可を委任します。`examplerole` を引き受けた Dave は、一時的にアカウント A へのアクセス権を取得します。アカウント A がロールにアタッチしたアクセスポリシーは、アカウント A にアクセスする Dave が実行できるアクション (特に `amzn-s3-demo-bucket1` のオブジェクトを取得すること) を制限します。

### ステップ 3.1: アカウント C でユーザーを作成し、examplerole を引き受けるアクセス許可を委任する
<a name="cross-acct-access-using-role-step3-1"></a>

1. アカウント C で IAM ユーザーのサインイン URL を使用して、まず **AccountCadmin** ユーザーとして AWS マネジメントコンソール にサインインします。

   

1. [IAM コンソール](https://console.aws.amazon.com/iam/)で、ユーザー Dave を作成します。

   詳細な手順については、「IAM ユーザーガイド」の「[AWS マネジメントコンソール での IAM ユーザーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console)」を参照してください。**

1. Dave の認証情報を書き留めます。Dave は、`examplerole` ロールを引き受けるのに、これらの認証情報を必要とします。

1. アカウント A の `sts:AssumeRole` ロールで `examplerole` アクセス許可を Dave に委任する Dave IAM ユーザー用のインラインポリシーを作成します。

   1. 左側のナビゲーションペインで、**[ユーザー]** を選択します。

   1. ユーザー名 **[Dave]** を選択します。

   1. ユーザー詳細ページで [**Permissions (アクセス許可)**] タブを選択し、[**Inline Policies (インラインポリシー)**] セクションを展開します。

   1. [**click here (ここをクリック)**] (または [**Create User Policy (ユーザーポリシーの作成)**]) を選択します。

   1. [**Custom Policy**] を選択し、[**Select**] を選択します。

   1. [**Policy Name (ポリシー名)**] フィールドにポリシーの名前を入力します。

   1. 以下のポリシーをコピーして、[**Policy Document (ポリシードキュメント)**] フィールドに貼り付けます。

      `AccountA-ID` を指定してポリシーを更新する必要があります。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "sts:AssumeRole"
                  ],
                  "Resource": "arn:aws:iam::111122223333:role/examplerole"
              }
          ]
      }
      ```

------

   1. **[ポリシーを適用]** を選びます。

1. 別のプロファイル `AccountCDave` を追加して、Dave の認証情報を AWS CLI の設定ファイルに保存します。

   ```
   [profile AccountCDave]
   aws_access_key_id = UserDaveAccessKeyID
   aws_secret_access_key = UserDaveSecretAccessKey
   region = us-west-2
   ```

### ステップ 3.2: ロール (examplerole) を引き受けてオブジェクトにアクセスする
<a name="cross-acct-access-using-role-step3-2"></a>

Dave は、以下の手順でアカウント A が所有するバケットのオブジェクトにアクセスできます。
+ Dave は、まず自分の認証情報を使用して、`examplerole` を引き受けます。一時的な認証情報が返されます。
+ この一時的な認証情報を使用して、アカウント A のバケットのオブジェクトにアクセスします。

1. コマンドプロンプトで、`AccountCDave` プロファイルを使用して、次の AWS CLI `assume-role` コマンドを実行します。

   `examplerole` が定義されている `AccountA-ID` を指定して、コマンドの ARN 値を更新する必要があります。

   ```
   aws sts assume-role --role-arn arn:aws:iam::AccountA-ID:role/examplerole --profile AccountCDave --role-session-name test
   ```

   AWS Security Token Service (AWS STS) が一時的なセキュリティ認証情報 (アクセスキー ID、シークレットアクセスキー、およびセッショントークン) を返します。

1. 一時的なセキュリティ認証情報を `TempCred` プロファイルの AWS CLI 設定ファイルに保存します。

   ```
   [profile TempCred]
   aws_access_key_id = temp-access-key-ID
   aws_secret_access_key = temp-secret-access-key
   aws_session_token = session-token
   region = us-west-2
   ```

1. コマンドプロンプトで、一時的な認証情報を使用して、次の AWS CLI コマンドを実行してオブジェクトにアクセスします。例えば、コマンドで head−object API を指定すると、`HappyFace.jpg` オブジェクトのオブジェクトメタデータが取得されます。

   ```
   aws s3api get-object --bucket amzn-s3-demo-bucket1 --key HappyFace.jpg SaveFileAs.jpg --profile TempCred
   ```

   `examplerole` にアタッチされているアクセスポリシーでは、アクションが許可されているため、Amazon S3 はリクエストを処理します。バケットの任意のオブジェクトに対して任意のアクションを試してみましょう。

   例えば、`get-object-acl` のアクションを試すと、このロールではそのアクションは許可されていないため、アクセス許可が拒否されます。

   ```
   aws s3api get-object-acl --bucket amzn-s3-demo-bucket1 --key HappyFace.jpg --profile TempCred
   ```

   この例では、ユーザー Dave がロールを引き受け、一時的な認証情報を使用してオブジェクトにアクセスしました。同様に、アカウント C のアプリケーションが `amzn-s3-demo-bucket1` のオブジェクトにアクセスすることも可能です。アプリケーションが一時的なセキュリティ認証情報を取得すれば、アカウント C はこのアプリケーションに `examplerole` を引き受けるアクセス許可を委任できます。

## ステップ 4: クリーンアップする
<a name="access-policies-walkthrough-example4-step6"></a>

1. テストが終了したら、次の手順でクリーンアップを行います。

   1. アカウント A の認証情報を使用して [AWS マネジメントコンソール](https://console.aws.amazon.com/) にサインインし、次の操作を行います。
     + Amazon S3 コンソールで、 にアタッチされているバケットポリシーを削除します`amzn-s3-demo-bucket1` バケットの **[プロパティ]** で、**[アクセス許可]** セクションのポリシーを削除します。
     + バケットをこの演習のために作成した場合は、Amazon S3 コンソールでオブジェクトを削除してから、バケットを削除します。
     + [IAM コンソール](https://console.aws.amazon.com/iam/)で、アカウント A で作成した `examplerole` を削除します。詳細な手順については、「IAM ユーザーガイド」の「[IAM ユーザーの削除](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html#id_users_deleting)」を参照してください。**
     + [IAM コンソール](https://console.aws.amazon.com/iam/)で、**[AccountAadmin]** ユーザーを削除します。

1. アカウント B の認証情報を使用して [IAM コンソール](https://console.aws.amazon.com/iam/)にサインインします。ユーザー **AccountBadmin** を削除します。

1. アカウント C の認証情報を使用して [IAM コンソール](https://console.aws.amazon.com/iam/)にサインインします。**AccountCadmin** とユーザー Dave を削除します。

## 関連リソース
<a name="RelatedResources-managing-access-example4"></a>

このチュートリアルに関連する詳細については、「IAM ユーザーガイド」の以下のリソースを参照してください。**
+ [IAM ユーザーにアクセス許可を委任するロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)
+ [チュートリアル: IAM ロールを使用した AWS アカウント 全体でのアクセスの委任](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial-cross-account-with-roles.html)
+ [IAM ポリシーを管理する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html)

# Amazon S3 ストレージレンズでのサービスにリンクされたロールの使用
<a name="using-service-linked-roles"></a>

Amazon S3 ストレージレンズを使用して AWS Organizations 内のすべてのアカウントでメトリクスを収集および集約するには、最初に組織の管理アカウントにより有効化された、信頼されたアクセスを S3 Storage Lens が持っていることを確認する必要があります。S3 Storage Lens は、サービスリンクロール (SLR) を作成し、そのロールが組織に属する AWS アカウント のリストを取得できるようにします。このアカウントの一覧は、S3 Storage Lens ダッシュボードまたは設定が作成または更新された場合に、すべてのメンバーアカウントの S3 リソースのメトリクスを収集するため S3 Storage Lens によって使用されます。

Amazon S3 ストレージレンズは AWS Identity and Access Management (IAM) [サービスにリンクされたロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)を使用します。サービスにリンクされたロールは S3 Storage Lens に直接リンクされた一意のタイプの IAM ロールです。サービスにリンクされたロールは、S3 Storage Lens によって事前定義されており、ユーザーの代わりにサービスから他の AWS のサービス を呼び出す必要のある許可がすべて含まれています。

サービスにリンクされたロールを使用すると、必要なアクセス許可を手動で追加する必要がなくなるため、S3 Storage Lens の設定が簡単になります。S3 Storage Lens は、サービスにリンクされたロールのアクセス許可を定義します。特に定義されている場合を除き、S3 Storage Lens のみがそのロールを引き受けることができます。定義された許可には信頼ポリシーと許可ポリシーが含まれ、その許可ポリシーを他の IAM エンティティにアタッチすることはできません。

関連リソースを削除した後でなければ、このサービスにリンクされたロールを削除することはできません。これにより、リソースにアクセスするためのアクセス許可を不注意で削除することが防止され、S3 Storage Lens リソースは保護されます。

サービスにリンクされたロールをサポートするその他のサービスについては、「[IAM と連携する AWS のサービス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)」を参照の上、**[サービスにリンクされたロール]** 列が **[はい]** になっているサービスを検索してください。サービスにリンクされたロールに関するドキュメントをサービスで表示するには、[**はい**] リンクを選択します。

## Amazon S3 ストレージレンズへのサービスにリンクされたロールのアクセス許可
<a name="slr-permissions"></a>

S3 Storage Lens は、**AWSServiceRoleForS3StorageLens** という名前のサービスにリンクされたロールを使用します。これにより、S3 Storage Lens によって使用または管理される AWS のサービスとリソースにアクセスできます。これにより、S3 Storage Lens は、ユーザーに代わって AWS Organizations のリソースにアクセスできるようになります。

S3 Storage Lens のサービスにリンクされたロールは、組織のストレージ上で次のサービスを信頼します。
+ `storage-lens.s3.amazonaws.com`

ロールのアクセス許可ポリシーは、以下のアクションを実行することを S3 Storage Lens に許可します。
+ `organizations:DescribeOrganization`

  `organizations:ListAccounts`

  `organizations:ListAWSServiceAccessForOrganization`

  `organizations:ListDelegatedAdministrators`

サービスにリンクされたロールの作成、編集、削除を IAM エンティティ (ユーザー、グループ、ロールなど) に許可するには、アクセス許可を設定する必要があります。詳細については、[IAM ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)の*サービスにリンクされたロールのアクセス許可*を参照してください。

## S3 Storage Lens へのサービスにリンクされたロールの作成
<a name="create-slr"></a>

サービスにリンクされたロールを手動で作成する必要はありません。AWS Organizations 管理アカウントまたは委任された管理者アカウントにサインインしているときに次のいずれかのタスクを完了すると、S3 Storage Lens がサービスにリンクされたロールを作成します。
+ Amazon S3 コンソールで、組織用の S3 Storage Lens ダッシュボード設定を作成する。
+ REST API、AWS CLI、SDK を使用して組織に S3 Storage Lens 設定を `PUT` する。

**注記**  
S3 Storage Lens は組織ごとに最大 5 人の委任管理者をサポートします。

このサービスにリンクされたロールを削除した場合、前述のアクションによって必要に応じてロールが再作成されます。

### S3 Storage Lens サービスにリンクされたロールのポリシーの例
<a name="slr-sample-policy"></a>

**Example S3 Storage Lens のサービスにリンクされたロールへのアクセス許可ポリシー**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AwsOrgsAccess",
            "Effect": "Allow",
            "Action": [
                "organizations:DescribeOrganization",
                "organizations:ListAccounts",
                "organizations:ListAWSServiceAccessForOrganization",
                "organizations:ListDelegatedAdministrators"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

## Amazon S3 ストレージレンズのサービスにリンクされたロールの編集
<a name="edit-slr"></a>

S3 Storage Lens では、AWSServiceRoleForS3StorageLens サービスリンクロールを編集することはできません。サービスリンクロールを作成すると、多くのエンティティによってロールが参照される可能性があるため、ロール名を変更することはできません。ただし、IAM を使用したロール記述の編集はできます。詳細については、[IAM ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)の*サービスにリンクされたロールの編集*を参照してください。

## Amazon S3 ストレージレンズのサービスにリンクされたロールの削除
<a name="delete-slr"></a>

サービスにリンクされたロールが不要になった場合は、そのロールを削除することをお勧めします。そうすることで、使用していないエンティティがアクティブにモニタリングされたり、メンテナンスされたりすることがなくなります。ただし、手動で削除する前に、サービスにリンクされたロールのリソースをクリーンアップする必要があります。

**注記**  
リソースを削除する際に、Amazon S3 ストレージレンズサービスでそのロールが使用されている場合、削除は失敗することがあります。失敗した場合は、数分待ってから再度オペレーションを実行してください。

AWSServiceRoleForS3StorageLens を削除するには、AWS Organizations 管理アカウントまたは委任された管理者アカウントを使用して、すべての AWS リージョン に存在する組織レベルの S3 Storage Lens 設定をすべて削除する必要があります。

リソースは組織レベルの S3 Storage Lens 設定です。S3 Storage Lens を使用してリソースをクリーンアップし、[IAM コンソール](https://console.aws.amazon.com/iam/)、CLI、REST API、または AWS SDK を使用してロールを削除します。

REST API、AWS CLI、SDK では、`ListStorageLensConfigurations` を使用して組織が S3 Storage Lens 設定を作成したすべてのリージョンで S3 Storage Lens 設定を見つけることができます。`DeleteStorageLensConfiguration` アクションを使用してこれらの設定を削除し、ロールを削除できるようにします。

**注記**  
サービスにリンクされたロールを削除するには、すべてのリージョンに存在する組織レベルの S3 Storage Lens 設定をすべて削除する必要があります。

**AWSServiceRoleForS3StorageLens SLR で使用されている Amazon S3 ストレージレンズリソースを削除するには**

1. 組織レベルの設定一覧を取得するには、S3 Storage Lens 設定があるすべてのリージョンで `ListStorageLensConfigurations` を使用する必要があります。この一覧は Amazon S3 コンソールから取得することもできます。

1. これらの設定は、`DeleteStorageLensConfiguration` API コールを呼び出すか Amazon S3 コンソールを使用して、適切なリージョンのエンドポイントから削除する必要があります。

**サービスリンクロールを IAM で手動削除するには**

設定を削除した後、[IAM コンソール](https://console.aws.amazon.com/iam/)から、または IAM API `DeleteServiceLinkedRole` を呼び出すか、AWS CLI もしくは AWS SDK を使用して、AWSServiceRoleForS3StorageLens SLR を削除できます。詳細については、[IAM ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role) の*サービスにリンクされたロールの削除*を参照してください。

## S3 Storage Lens のサービスにリンクされたロールがサポートされるリージョン
<a name="slr-regions"></a>

S3 Storage Lens は、そのサービスを利用できるすべての AWS リージョンで、サービスにリンクされたロールの使用をサポートします。詳細については、[Amazon S3 Regions and Endpoints](https://docs.aws.amazon.com/general/latest/gr/s3.html) を参照してください。

# Amazon S3 アイデンティティとアクセスのトラブルシューティング
<a name="security_iam_troubleshoot"></a>

以下の情報を使用して、Amazon S3 と IAM の使用時に発生する可能性がある一般的な問題の診断と修正に役立てます。

**Topics**
+ [アクセス拒否エラーが表示された](#access_denied_403)
+ [Amazon S3 でアクションを実行する権限がありません](#security_iam_troubleshoot-no-permissions)
+ [iam:PassRole を実行する権限がありません](#security_iam_troubleshoot-passrole)
+ [自分の AWS アカウント 以外のユーザーに Amazon S3 リソースへのアクセスを許可したい](#security_iam_troubleshoot-cross-account-access)
+ [Amazon S3 でのアクセス拒否 (403 Forbidden) エラーのトラブルシューティング](troubleshoot-403-errors.md)

## アクセス拒否エラーが表示された
<a name="access_denied_403"></a>

バケットポリシーまたはアイデンティティベースポリシーのいずれにも、アクセス許可を付与するリクエスタに対する明示的な `Deny` ステートメントがないことを確認します。

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

## Amazon S3 でアクションを実行する権限がありません
<a name="security_iam_troubleshoot-no-permissions"></a>

アクションを実行する権限がないというエラーが表示された場合は、そのアクションを実行できるようにポリシーを更新する必要があります。

次のエラー例は、`mateojackson` IAM ユーザーがコンソールを使用して、ある `my-example-widget` リソースに関する詳細情報を表示しようとしたことを想定して、その際に必要な `s3:GetWidget` アクセス許可を持っていない場合に発生するものです。

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: s3:GetWidget on resource: my-example-widget
```

この場合、`s3:GetWidget` アクションを使用して `my-example-widget` リソースへのアクセスを許可するように、`mateojackson` ユーザーのポリシーを更新する必要があります。

サポートが必要な場合は、AWS 管理者に問い合わせてください。サインイン認証情報を提供した担当者が管理者です。

## iam:PassRole を実行する権限がありません
<a name="security_iam_troubleshoot-passrole"></a>

`iam:PassRole` アクションを実行する権限がないというエラーが表示された場合は、ポリシーを更新して Amazon S3 にロールを渡せるようにする必要があります。

一部の AWS のサービス では、新しいサービスロールやサービスリンクロールを作成せずに、既存のロールをサービスに渡すことができます。そのためには、サービスにロールを渡すアクセス許可が必要です。

次のエラー例は、`marymajor` という IAM ユーザーがコンソールを使用して Amazon S3 でアクションを実行しようとする場合に発生します。ただし、このアクションをサービスが実行するには、サービスロールから付与されたアクセス許可が必要です。Mary には、ロールをサービスに渡すアクセス許可がありません。

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

この場合、Mary のポリシーを更新してメアリーに `iam:PassRole` アクションの実行を許可する必要があります。

サポートが必要な場合は、AWS 管理者に問い合わせてください。サインイン認証情報を提供した担当者が管理者です。

## 自分の AWS アカウント 以外のユーザーに Amazon S3 リソースへのアクセスを許可したい
<a name="security_iam_troubleshoot-cross-account-access"></a>

他のアカウントのユーザーや組織外の人が、リソースにアクセスするために使用できるロールを作成できます。ロールの引き受けを委託するユーザーを指定できます。リソースベースのポリシーまたはアクセスコントロールリスト (ACL) をサポートするサービスの場合、それらのポリシーを使用して、リソースへのアクセスを付与できます。

詳細については、以下を参照してください。
+ Amazon S3 がこれらの機能をサポートしているかどうかを確認するには、「[Amazon S3 での IAM の機能](security_iam_service-with-iam.md)」を参照してください。
+ 所有している AWS アカウント 全体のリソースへのアクセス権を提供する方法については、*IAM ユーザーガイド* の [所有している別の AWS アカウント へのアクセス権を IAM ユーザーに提供](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html) を参照してください。
+ サードパーティの AWS アカウント にリソースへのアクセス権を提供する方法については、「*IAM ユーザーガイド*」の「[サードパーティが所有する AWS アカウント へのアクセス権を付与する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)」を参照してください。
+ ID フェデレーションを介してアクセスを提供する方法については、*IAM ユーザーガイド* の [外部で認証されたユーザー (ID フェデレーション) へのアクセスの許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html) を参照してください。
+ クロスアカウントアクセスにおけるロールとリソースベースのポリシーの使用方法の違いについては、*IAM ユーザーガイド* の [IAM でのクロスアカウントのリソースへのアクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) を参照してください。

# Amazon S3 でのアクセス拒否 (403 Forbidden) エラーのトラブルシューティング
<a name="troubleshoot-403-errors"></a>

アクセス拒否 (HTTP `403 Forbidden`) エラーは、AWS が認可リクエストを明示的または暗黙的に拒否した場合に表示されます。
+ *明示的な拒否*は、特定の AWS アクションに対する `Deny` ステートメントがポリシーに含まれている場合に発生します。
+ 該当する `Deny` ステートメントがなく、該当する `Allow` ステートメントもない場合に、*暗黙的な拒否*が発生します。

AWS Identity and Access Management (IAM) ポリシーはデフォルトで IAM プリンシパルを暗黙的に拒否するため、ポリシーではプリンシパルのアクションの実行を明示的に許可する必要があります。それ以外の場合、ポリシーは暗黙的にアクセスを拒否します。詳細については、「**IAM ユーザーガイド」の「[明示的な拒否と暗黙的な拒否の違い](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#AccessPolicyLanguage_Interplay)」を参照してください。アクセスリクエストを許可または拒否するかを決定するポリシー評価ロジックの詳細については、「IAM ユーザーガイド」の「[ポリシーの評価ロジック](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)」を参照してください。**

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

以降のトピックでは、Amazon S3 でのアクセス拒否 (403 Forbidden) エラーの最も一般的な原因について説明します。

**注記**  
アクセス拒否 (HTTP `403 Forbidden`) エラーの場合、バケット所有者の個別の AWS アカウントまたはバケット所有者の AWS 組織の外部でリクエストが開始された場合、バケット所有者に対する Amazon S3 の料金は発生しません。

**Topics**
+ [アクセス拒否メッセージの例とトラブルシューティング方法](#access-denied-message-examples)
+ [リクエスタ支払いの設定によるアクセス拒否](#access-denied-requester-pays)
+ [バケットポリシーと IAM ポリシー](#bucket-iam-policies)
+ [Amazon S3 ACL 設定](#troubleshoot-403-acl-settings)
+ [S3 ブロックパブリックアクセス設定](#troubleshoot-403-bpa)
+ [Amazon S3 の暗号化設定](#troubleshoot-403-encryption)
+ [S3 オブジェクトロック設定](#troubleshoot-403-object-lock)
+ [VPC エンドポイントポリシー](#troubleshoot-403-vpc)
+ [AWS Organizations ポリシー](#troubleshoot-403-orgs)
+ [CloudFront ディストリビューションアクセス](#troubleshoot-403-cloudfront)
+ [アクセスポイント設定](#troubleshoot-403-access-points)
+ [その他のリソース](#troubleshoot-403-additional-resources)

**注記**  
アクセス許可の問題をトラブルシューティングする場合は、[アクセス拒否メッセージの例とトラブルシューティング方法](#access-denied-message-examples) セクションから始めて、[バケットポリシーと IAM ポリシー](#bucket-iam-policies) セクションに移動します。「[アクセス許可を確認するためのヒント](#troubleshoot-403-tips)」のガイダンスに従う必要もあります。

## アクセス拒否メッセージの例とトラブルシューティング方法
<a name="access-denied-message-examples"></a>

Amazon S3 は、同じ AWS アカウント、または同じ AWS Organizations の組織のリソースに対して行われたリクエストのアクセス拒否 (HTTP `403 Forbidden`) エラーに追加コンテキストを含めるようになりました。この新しいコンテキストには、アクセスを拒否したポリシーのタイプ、拒否の理由、リソースへのアクセスをリクエストした IAM ユーザーまたはロールに関する情報が含まれます。

この追加のコンテキストは、アクセス問題のトラブルシューティング、アクセス拒否エラーの根本原因の特定、関連するポリシーの更新による誤ったアクセスコントロールの修正に役立ちます。この追加のコンテキストは、AWS CloudTrail ログでも使用できます。AWS GovCloud (US) Regions および中国リージョンを含むすべての AWS リージョンで、同じアカウントまたは同じ組織のリクエストに対する拡張アクセス拒否エラーメッセージが利用可能になりました。

ほとんどのアクセス拒否のエラーメッセージは、`User user-arn is not authorized to perform action on "resource-arn" because context` の形式です。この例では、*`user-arn`* は、アクセス権がないユーザーの [Amazon リソースネーム (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)、*`action`* はポリシーが拒否するサービスアクション、*`resource-arn`* はポリシーが対象とするリソースの ARN です。*`context`* フィールドには、ポリシータイプについての追加のコンテキストが表示され、ポリシーがアクセスを拒否した理由が説明されます。

ポリシー内の `Deny` ステートメントで明示的にポリシーがアクセスを拒否した場合、アクセス拒否エラーメッセージには、`with an explicit deny in a type policy` というフレーズが含まれます。ポリシーがアクセスを暗黙的に拒否する場合、アクセス拒否エラーメッセージには、`because no type policy allows the action action` というフレーズが含まれます。

**重要**  
拡張アクセス拒否メッセージは、同じアカウントリクエストまたは AWS Organizations の同じ組織のリクエストに対してのみ返されます。同じ組織の外のクロスアカウントリクエストは、汎用 `Access Denied` メッセージを返します。  
クロスアカウントアクセスリクエストを許可または拒否するかを決定するポリシー評価ロジックの詳細については、「IAM ユーザーガイド」の「[クロスアカウントのポリシーの評価ロジック](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html)」を参照してください。**クロスアカウントアクセスを許可する方法を説明するチュートリアルについては、「[例 2: バケット所有者がクロスアカウントのバケットのアクセス許可を付与する](example-walkthroughs-managing-access-example2.md)」を参照してください。
AWS Organizations の同じ組織内のリクエストの場合。  
仮想プライベートクラウド (VPC) エンドポイントポリシーが原因で拒否が発生した場合、拡張アクセス拒否メッセージは返されません。
拡張アクセス拒否メッセージは、バケット所有者と発信者アカウントの両方が AWS Organizations の同じ組織に属している場合に提供されます。S3 オブジェクト所有者の **[希望するバケット所有者]** または **[オブジェクトライター]** 設定で設定されたバケットには、異なるアカウントが所有するオブジェクトが含まれる場合がありますが、オブジェクトの所有者は、拡張アクセス拒否メッセージには影響しません。バケット所有者と呼び出し元が同じ組織にある限り、拡張アクセス拒否メッセージは、特定のオブジェクトの所有者に関係なく、すべてのオブジェクトリクエストに対して返されます。オブジェクト所有者の設定と設定に関する情報については、「[オブジェクトの所有権の制御とバケットの ACL の無効化。](about-object-ownership.md)」を参照してください。
ディレクトリバケットに対するリクエストに関しては、拡張アクセス拒否エラーメッセージは返されません。ディレクトリバケットリクエストの場合は、汎用の `Access Denied` メッセージが返されます。
ポリシータイプが同じである複数のポリシーが認可リクエストを拒否した場合、アクセスは拒否され、エラーメッセージではポリシーの番号が特定されません。
複数のポリシータイプで認可リクエストが拒否された場合、エラーメッセージには、これらのポリシータイプのうち 1 つだけが含まれます。
複数の理由でアクセスリクエストが拒否された場合でも、エラーメッセージに含まれるのは、いずれか 1 つの拒否理由のみです。

次の例では、さまざまなタイプのアクセス拒否エラーメッセージの形式と、各タイプのメッセージに関するトラブルシューティング方法を説明しています。

### ブロックされた暗号化タイプによりアクセスが拒否されました
<a name="access-denied-due-to-blocked-encryption-type"></a>

汎用バケットで使用できるサーバー側の暗号化タイプを制限するには、バケットのデフォルトの暗号化設定を更新して SSE-C 書き込みリクエストをブロックすることを選択できます。このバケットレベルの設定は、SSE-C を指定するオブジェクトをアップロードするリクエストをブロックします。バケットに対して SSE-C がブロックされている場合、SSE-C 暗号化を指定する `PutObject`、`CopyObject`、`PostObject`、またはマルチパートアップロードまたはレプリケーションリクエストは、HTTP 403 `AccessDenied` エラーで拒否されます。

この設定は `PutBucketEncryption` API のパラメータであり、`s3:PutEncryptionConfiguration` アクセス許可がある場合は S3 コンソール、AWS CLI、および AWS SDK を使用して更新することもできます。有効な値は、汎用バケットの SSE-C 暗号化をブロックする `SSE-C` と、バケットへの書き込みに SSE-C を使用できるようにする `NONE` です。

例えば、`BlockedEncryptionTypes` の設定により SSE-C を指定する書き込みリクエストがブロックされるため、`PutObject` リクエストへのアクセスが拒否された場合、次のメッセージが表示されます。

```
An error occurred (AccessDenied) when calling the PutObject operation:   
User: arn:aws:iam::123456789012:user/MaryMajor  is not   
authorized to perform: s3:PutObject on resource:   
"arn:aws:s3:::amzn-s3-demo-bucket1/object-name" because this   
bucket has blocked upload requests that specify   
Server Side Encryption with Customer provided keys (SSE-C).   
Please specify a different server-side encryption type
```

この設定の詳細については「[汎用バケットの SSE-C のブロックまたはブロック解除](blocking-unblocking-s3-c-encryption-gpb.md)」を参照してください。

### リソースコントロールポリシーによるアクセスの拒否 - 明示的な拒否
<a name="access-denied-rcp-examples-explicit"></a>

1. リソースコントロールポリシー (RCP) 内のアクションの `Deny` ステートメントを確認します。次の例では、`s3:GetObject` がアクションです。

1. `Deny` ステートメントを削除して、RCP を更新してください。詳細については、「*AWS Organizations ユーザーガイド*」の「[リソースコントロールポリシー (RCP) の更新](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_policies_update.html#update_policy-rcp)」を参照してください。

```
An error occurred (AccessDenied) when calling the GetObject operation: 
User: arn:aws:iam::777788889999:user/MaryMajor is not authorized to perform: 
s3:GetObject on resource: "arn:aws:s3:::amzn-s3-demo-bucket1/object-name" 
with an explicit deny in a resource control policy
```

### サービスコントロールポリシーによるアクセスの拒否 - 暗黙的な拒否
<a name="access-denied-scp-examples-implicit"></a>

1. サービスコントロールポリシー (SCP) のアクションで、`Allow` ステートメントが欠けていないかを確認します。次の例では、`s3:GetObject` がアクションです。

1. `Allow` ステートメントを追加して、ポリシーを更新してください。詳細については、「*AWS Organizations ユーザーガイド*」の「[SCP の更新](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_create.html#update_policy)」を参照してください。

```
User: arn:aws:iam::777788889999:user/MaryMajor is not authorized to perform:
s3:GetObject because no service control policy allows the s3:GetObject action
```

### サービスコントロールポリシーによるアクセスの拒否 - 明示的な拒否
<a name="access-denied-scp-examples-explicit"></a>

1. サービスコントロールポリシー (SCP) のアクションで、`Deny` ステートメントを確認します。次の例では、`s3:GetObject` がアクションです。

1. `Deny` ステートメントを変更して SCP を更新し、必要なアクセスをユーザーに許可します。これを行う方法の例については、「AWS Organizations ユーザーガイド」の「[特定の管理者ロールを除いて、IAM ユーザーとロールが特定の変更を行わないようにする](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples_general.html#example-scp-restricts-with-exception)」を参照してください。**SCP の更新に関する詳細については、「AWS Organizations ユーザーガイド」の「[SCP の更新](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_create.html#update_policy)」を参照してください。**

```
User: arn:aws:iam::777788889999:user/MaryMajor is not authorized to perform: 
s3:GetObject with an explicit deny in a service control policy
```

### VPC エンドポイントポリシーによるアクセスの拒否 – 暗黙的な拒否
<a name="access-denied-vpc-endpoint-examples-implicit"></a>

1. 仮想プライベートクラウド (VPC) エンドポイントポリシーのアクションで、`Allow` ステートメントが欠落していないかを確認します。次の例では、`s3:GetObject` がアクションです。

1. `Allow` ステートメントを追加して、VPC エンドポイントポリシーを更新します。詳細については、「*AWS PrivateLink ガイド*」の「[Update a VPC endpoint policy](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html#update-vpc-endpoint-policy)」を参照してください。

```
User: arn:aws:iam::123456789012:user/MaryMajor is not authorized to perform: 
s3:GetObject because no VPC endpoint policy allows the s3:GetObject action
```

### VPC エンドポイントポリシーによるアクセスの拒否 – 明示的拒否
<a name="access-denied-vpc-endpoint-examples-explicit"></a>

1. 仮想プライベートクラウド (VPC) エンドポイントポリシーのアクションに、明示的な `Deny` ステートメントがあるかを確認します。次の例では、`s3:GetObject` がアクションです。

1. `Deny` ステートメントを変更して VPC エンドポイントポリシーを更新し、ユーザーに必要なアクセスを許可します。例えば、`Deny` ステートメントを更新して、`aws:PrincipalAccount` 条件キーと `StringNotEquals` 条件演算子を使用し、[例 7: `Deny` ステートメントから特定のプリンシパルを除外する](amazon-s3-policy-keys.md#example-exclude-principal-from-deny-statement) に示すように、特定のプリンシパルアクセスを許可できます。VPC エンドポイントポリシーの更新の詳細については、「AWS PrivateLink ガイド」の「[VPC エンドポイントポリシーの更新](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html#update-vpc-endpoint-policy)」を参照してください。**

```
User: arn:aws:iam::123456789012:user/MaryMajor is not authorized to perform: 
s3:GetObject on resource: "arn:aws:s3:::amzn-s3-demo-bucket1/object-name" with 
an explicit deny in a VPC endpoint policy
```

### アクセス許可の境界によりアクセスの拒否 – 暗黙的な拒否
<a name="access-denied-permissions-boundary-examples-implicit"></a>

1. アクセス許可の境界にあるアクションで、`Allow` ステートメントが欠落してないかを確認してください。次の例では、`s3:GetObject` がアクションです。

1. IAM ポリシーに `Allow` ステートメントを追加して、アクセス許可の境界を更新してください。詳細については、「IAM ユーザーガイド」の「[IAM エンティティのアクセス許可の境界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)」と「[IAM ポリシーの編集](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html)」を参照してください。**

```
User: arn:aws:iam::123456789012:user/MaryMajor is not authorized to perform: 
s3:GetObject on resource: "arn:aws:s3:::amzn-s3-demo-bucket1/object-name" 
because no permissions boundary allows the s3:GetObject action
```

### アクセス許可の境界によりアクセスの拒否 – 明示的拒否
<a name="access-denied-permissions-boundary-examples-explicit"></a>

1. アクセス許可の境界にあるアクションで、明示的な `Deny` ステートメントを確認してください。次の例では、`s3:GetObject` がアクションです。

1. IAM ポリシーの `Deny` ステートメントを変更してアクセス許可の境界を更新し、ユーザーに必要なアクセスを許可します。例えば、「IAM ユーザーガイド」の [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalaccount) に示すように、`aws:PrincipalAccount` 条件キーと `StringNotEquals` 条件演算子を使用して、特定のプリンシパルアクセスを許可するように `Deny` ステートメントを更新できます。**詳細については、「IAM ユーザーガイド」の「[IAM エンティティのアクセス許可の境界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)」と「[IAM ポリシーの編集](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html)」を参照してください。**

```
User: arn:aws:iam::777788889999:user/MaryMajor is not authorized to perform: 
s3:GetObject with an explicit deny in a permissions boundary
```

### セッションポリシーによるアクセスの拒否 – 暗黙的な拒否
<a name="access-denied-session-policy-examples-implicit"></a>

1. セッションポリシーにあるアクションで、`Allow` ステートメントが欠落していないかを確認してください。次の例では、`s3:GetObject` がアクションです。

1. `Allow` ステートメントを追加して、セッションポリシーを更新してください。詳細については、「IAM ユーザーガイド」の「[セッションポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)」と「[IAM ポリシーの編集](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html)」を参照してください。**

```
User: arn:aws:iam::123456789012:user/MaryMajor is not authorized to perform: 
s3:GetObject because no session policy allows the s3:GetObject action
```

### セッションポリシーによるアクセスの拒否 – 明示的拒否
<a name="access-denied-session-policy-examples-explicit"></a>

1. セッションポリシーにあるアクションで、明示的な `Deny` ステートメントがあるのかを確認してください。次の例では、`s3:GetObject` がアクションです。

1. `Deny` ステートメントを変更してセッションポリシーを更新し、ユーザーに必要なアクセスを許可します。例えば、`Deny` ステートメントを更新して、`aws:PrincipalAccount` 条件キーと `StringNotEquals` 条件演算子を使用し、[例 7: `Deny` ステートメントから特定のプリンシパルを除外する](amazon-s3-policy-keys.md#example-exclude-principal-from-deny-statement) に示すように、特定のプリンシパルアクセスを許可できます。セッションポリシーの更新の詳細については、「IAM ユーザーガイド」の「[セッションポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)」および「[IAM ポリシーの編集](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html)」を参照してください。**

```
User: arn:aws:iam::123456789012:user/MaryMajor is not authorized to perform: 
s3:GetObject on resource: "arn:aws:s3:::amzn-s3-demo-bucket1/object-name" with 
an explicit deny in a session policy
```

### リソースベースのポリシーによるアクセスの拒否 – 暗黙的な拒否
<a name="access-denied-resource-based-policy-examples-implicit"></a>

**注記**  
リソースベースのポリシーとは、バケットポリシーやアクセスポイントポリシーなどのポリシーを指します。**

1. リソースベースのポリシーにあるアクションで、`Allow` ステートメントが欠落してないかを確認してください。`IgnorePublicAcls` S3 ブロックパブリックアクセス設定が、バケット、アクセスポイント、またはアカウントレベルに適用されているかどうかも確認します。次の例では、`s3:GetObject` がアクションです。

1. `Allow` ステートメントを追加して、ポリシーを更新してください。詳細については、「IAM ユーザーガイド」の「[リソースベースのポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_resource-based)」と「[IAM ポリシーの編集](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html)」を参照してください。**

   バケット、アクセスポイント、またはアカウントの `IgnorePublicAcls` ブロックパブリックアクセス設定を調整する必要がある場合もあります。詳細については、「[ブロックパブリックアクセス設定によるアクセス拒否](#access-denied-bpa-examples)」および「[S3 バケットへのパブリックアクセスブロック設定の構成](configuring-block-public-access-bucket.md)」を参照してください。

```
User: arn:aws:iam::123456789012:user/MaryMajor is not authorized to perform: 
s3:GetObject because no resource-based policy allows the s3:GetObject action
```

### リソースベースのポリシーによるアクセスの拒否 – 明示的拒否
<a name="access-denied-resource-based-policy-examples-explicit"></a>

**注記**  
リソースベースのポリシーとは、バケットポリシーやアクセスポイントポリシーなどのポリシーを指します。**

1. リソースベースのポリシーにあるアクションで、明示的な `Deny` ステートメントがあるのかを確認してください。`RestrictPublicBuckets` S3 ブロックパブリックアクセス設定が、バケット、アクセスポイント、またはアカウントレベルに適用されているかどうかも確認します。次の例では、`s3:GetObject` がアクションです。

1. `Deny` ステートメントを変更してポリシーを更新し、ユーザーに必要なアクセスを許可します。例えば、`Deny` ステートメントを更新して、`aws:PrincipalAccount` 条件キーと `StringNotEquals` 条件演算子を使用し、[例 7: `Deny` ステートメントから特定のプリンシパルを除外する](amazon-s3-policy-keys.md#example-exclude-principal-from-deny-statement) に示すように、特定のプリンシパルアクセスを許可できます。リソースベースのポリシーの更新に関する詳細については、「IAM ユーザーガイド」の「[リソースベースのポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_resource-based)」および「[IAM ポリシーの編集](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html)」を参照してください。**

   バケット、アクセスポイント、またはアカウントの `RestrictPublicBuckets` ブロックパブリックアクセス設定を調整する必要がある場合もあります。詳細については、「[ブロックパブリックアクセス設定によるアクセス拒否](#access-denied-bpa-examples)」および「[S3 バケットへのパブリックアクセスブロック設定の構成](configuring-block-public-access-bucket.md)」を参照してください。

```
User: arn:aws:iam::123456789012:user/MaryMajor is not authorized to perform: 
s3:GetObject on resource: "arn:aws:s3:::amzn-s3-demo-bucket1/object-name" with 
an explicit deny in a resource-based policy
```

### ID ベースのポリシーによるアクセスの拒否 – 暗黙的な拒否
<a name="access-denied-identity-based-policy-examples-implicit"></a>

1. ID にアタッチされた ID ベースのポリシーにあるアクションに対して、`Allow` ステートメントが欠落していないかを確認してください。次の例のアクションは、ユーザー `MaryMajor` にアタッチされた `s3:GetObject` です。

1. `Allow` ステートメントを追加して、ポリシーを更新してください。詳細については、「IAM ユーザーガイド」の「[アイデンティティベースのポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_id-based)」と「[IAM ポリシーの編集](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html)」を参照してください。**

```
User: arn:aws:iam::123456789012:user/MaryMajor is not authorized to perform: 
s3:GetObject because no identity-based policy allows the s3:GetObject action
```

### ID ベースのポリシーによるアクセスの拒否 – 明示的拒否
<a name="access-denied-identity-based-policy-examples-explicit"></a>

1. ID にアタッチされた ID ベースのポリシーにあるアクションに対して、明示的な `Deny` ステートメントがあるのかを確認してください。次の例のアクションは、ユーザー `MaryMajor` にアタッチされた `s3:GetObject` です。

1. `Deny` ステートメントを変更してポリシーを更新し、ユーザーに必要なアクセスを許可します。例えば、「IAM ユーザーガイド」の [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalaccount) に示すように、`aws:PrincipalAccount` 条件キーと `StringNotEquals` 条件演算子を使用して、特定のプリンシパルアクセスを許可するように `Deny` ステートメントを更新できます。**詳細については、「IAM ユーザーガイド」の「[アイデンティティベースのポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_id-based)」と「[IAM ポリシーの編集](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html)」を参照してください。**

```
User: arn:aws:iam::123456789012:user/MaryMajor is not authorized to perform: 
s3:GetObject on resource: "arn:aws:s3:::amzn-s3-demo-bucket1/object-name" with 
an explicit deny in an identity-based policy
```

### ブロックパブリックアクセス設定によるアクセス拒否
<a name="access-denied-bpa-examples"></a>

Amazon S3 のパブリックアクセスブロック機能は、Amazon S3 のリソースへのパブリックアクセスの管理に役立つ、アクセスポイント、バケット、アカウントの設定を提供します。Amazon S3 が「パブリック」を定義する方法の詳細については、「[「パブリック」の意味](access-control-block-public-access.md#access-control-block-public-access-policy-status)」を参照してください。

デフォルトでは、新しいバケット、アクセスポイント、およびオブジェクトはパブリックアクセスを許可しません。ただし、ユーザーはバケットポリシー、アクセスポイントポリシー、IAM ユーザーポリシー、オブジェクトのアクセス許可、またはアクセスコントロールリスト (ACL) を変更することで、パブリックアクセスを許可できます。S3 ブロックパブリックアクセス設定は、このようなポリシー、アクセス許可、ACL を上書きします。2023 年 4 月以降、すべてのブロックパブリックアクセス設定がデフォルトで新しいバケットに対して有効になります。

Amazon S3 はバケットやオブジェクトへのアクセスのリクエストを受け取ると、バケットやバケット所有者のアカウントに適用されているパブリックアクセスブロック設定があるかどうかを確認します。リクエストがアクセスポイントを経由している場合、Amazon S3 はアクセスポイントのパブリックアクセスブロック設定も確認します。リクエストされたアクセスを禁止する既存のパブリックアクセスブロック設定がある場合、Amazon S3 はそのリクエストを拒否します。

Amazon S3 のパブリックアクセスブロックには、4 つの設定があります。これらの設定は、独立しており、任意の組み合わせで使用できます。各設定は、アクセスポイント、バケット、または AWS アカウント全体に適用できます。アクセスポイント、バケット、アカウントのパブリックアクセスブロック設定が異なる場合、Amazon S3 は、アクセスポイント、バケット、アカウントの設定の組み合わせで最も制限が厳しいものを適用します。

Amazon S3 は、パブリックアクセスブロック設定でオペレーションが禁止されているかどうかを評価し、アクセスポイント、バケット、アカウントの設定に違反しているすべてのリクエストを拒否します。

Amazon S3 ブロックパブリックアクセスが提供する 4 つの設定: 
+ `BlockPublicAcls` – この設定は、`PutBucketAcl`、`PutObjectAcl`、`PutObject`、`CreateBucket`、`CopyObject`、`POST Object` のリクエストに適用されます。`BlockPublicAcls` の設定により、次のように動作します。
  + 指定されたアクセスコントロールリスト (ACL) がパブリックである場合、`PutBucketAcl` と `PutObjectAcl` の呼び出しは失敗します。
  + リクエストにパブリック ACL が含まれている場合、`PutObject` の呼び出しは失敗します。
  + この設定がアカウントに適用されている場合、リクエストにパブリック ACL が含まれていると、`CreateBucket` の呼び出しは失敗し、HTTP `400` (`Bad Request`) レスポンスが返されます。

  例えば、`BlockPublicAcls` の設定により `CopyObject` リクエストのアクセスが拒否されると、次のとおりのメッセージが表示されます。

  ```
  An error occurred (AccessDenied) when calling the CopyObject operation: 
  User: arn:aws:sts::123456789012:user/MaryMajor is not authorized to 
  perform: s3:CopyObject on resource: "arn:aws:s3:::amzn-s3-demo-bucket1/object-name" 
  because public ACLs are prevented by the BlockPublicAcls setting in S3 Block Public Access.
  ```
+ `IgnorePublicAcls` – `IgnorePublicAcls` 設定を使用すると、Amazon S3 はバケットとバケット内のすべてのオブジェクトのパブリック ACL を無視します。リクエストの許可がパブリック ACL によってのみ付与されている場合は、`IgnorePublicAcls` 設定によってリクエストが拒否されます。

  `IgnorePublicAcls` 設定による拒否は、すべて暗黙的です。例えば、パブリック ACL により、`IgnorePublicAcls` が `GetObject` リクエストを拒否すると、次のとおりのメッセージが返されます。

  ```
  User: arn:aws:iam::123456789012:user/MaryMajor is not authorized to perform: 
  s3:GetObject because no resource-based policy allows the s3:GetObject action
  ```
+ `BlockPublicPolicy` – この設定は、`PutBucketPolicy` と `PutAccessPointPolicy` のリクエストに適用されます。

  バケットに対して `BlockPublicPolicy` を設定すると、指定されたバケットポリシーでパブリックアクセスが許可されている場合、Amazon S3 は `PutBucketPolicy` への呼び出しを拒否します。この設定により、指定されたポリシーでパブリックアクセスが許可されている場合、Amazon S3 はバケットの同じアカウントのすべてのアクセスポイントに対する `PutAccessPointPolicy` への呼び出しも拒否します。

  アクセスポイントで `BlockPublicPolicy` を設定すると、指定されたポリシー (アクセスポイントまたは基盤となるバケットのいずれか) でパブリックアクセスが許可されている場合、Amazon S3 はアクセスポイント経由で行われる `PutAccessPointPolicy` および `PutBucketPolicy` への呼び出しを拒否します。

  例えば、`BlockPublicPolicy` の設定が原因で `PutBucketPolicy` リクエストのアクセスが拒否されると、次のとおりのメッセージが表示されます。

  ```
  An error occurred (AccessDenied) when calling the PutBucketPolicy operation: 
  User: arn:aws:sts::123456789012:user/MaryMajor is not authorized to 
  perform: s3:PutBucketPolicy on resource: "arn:aws:s3:::amzn-s3-demo-bucket1/object-name" 
  because public policies are prevented by the BlockPublicPolicy setting in S3 Block Public Access.
  ```
+ `RestrictPublicBuckets` – `RestrictPublicBuckets` 設定は、パブリックポリシーを持つアクセスポイントまたはバケットへのアクセスを、バケット所有者のアカウントとアクセスポイント所有者のアカウント内の AWS のサービスのプリンシパルと承認済みのユーザーのみに制限します。この設定により、アクセスポイントまたはバケットへのすべてのクロスアカウントアクセスがブロックされます (AWS のサービスのプリンシパルによるアクセスを除く)。ただし、アカウント内のユーザーは引き続きアクセスポイントまたはバケットを管理できます。この設定では、匿名 (または署名なし) のコールもすべて拒否されます。

  `RestrictPublicBuckets` 設定による拒否は、すべて暗黙的です。例えば、`RestrictPublicBuckets` がパブリックバケットまたはアクセスポイントポリシーにより `GetObject` リクエストを拒否した場合、次のメッセージが表示されます。

  ```
  User: arn:aws:iam::123456789012:user/MaryMajor is not authorized to perform: 
  s3:GetObject on resource: "arn:aws:s3:::amzn-s3-demo-bucket1/object-name" with 
  an explicit deny in a resource-based policy
  ```

これらの設定の詳細については、「[パブリックアクセスブロック設定](access-control-block-public-access.md#access-control-block-public-access-options)」をご参照ください。これらの設定を確認して更新するには、「[パブリックアクセスブロックの設定](access-control-block-public-access.md#configuring-block-public-access)」を参照してください。

## リクエスタ支払いの設定によるアクセス拒否
<a name="access-denied-requester-pays"></a>

アクセスしようとしている Amazon S3 バケットでリクエスタ支払い機能が有効になっている場合は、そのバケットにリクエストを行うときに正しいリクエストパラメータを渡す必要があります。Amazon S3 のリクエスタ支払い機能を使用すると、バケット所有者の代わりにリクエスタがバケット内のオブジェクトにアクセスするためのデータ転送とリクエストのコストを支払うことができます。リクエスタ支払いがバケットに対して有効になっている場合、バケット所有者は他の AWS アカウントによって行われたリクエストに対して課金されません。

必要なパラメータを渡さずにリクエスタ支払い対応バケットにリクエストを行うと、アクセス拒否 (403 Forbidden) エラーが発生します。リクエスタ支払いが有効なバケット内のオブジェクトにアクセスするには、以下を実行する必要があります。

1. AWS CLI を使用してリクエストを行う場合は、`--request-payer requester` パラメータを含める必要があります。例えば、`s3://amzn-s3-demo-bucket/` S3 バケットにある `object.txt` キーを持つオブジェクトをローカルマシン上の場所にコピーするには、このバケットでリクエスタ支払いが有効になっている場合も `--request-payer requester` パラメータを渡す必要があります。

   ```
   aws s3 cp s3://amzn-s3-demo-bucket/object.txt /local/path \
   --request-payer requester
   ```

1. AWS SDK を使用してプログラムによるリクエストを行う場合は、`x-amz-request-payer` ヘッダーを値 `requester` に設定します。例については、[リクエスタ支払いバケットからのオブジェクトのダウンロード](ObjectsinRequesterPaysBuckets.md)を参照してください。

1. リクエストを行う IAM ユーザーまたはロールに、`s3:GetObject` や `s3:ListBucket` のアクセス許可など、リクエスタ支払いバケットにアクセスするために必要なアクセス許可があることを確認します。

`--request-payer requester` パラメータを含めるか、`x-amz-request-payer` ヘッダーを設定することで、リクエスタ支払いが有効なバケット内のオブジェクトへのアクセスに関連するコストをリクエスタが支払うことを Amazon S3 に通知します。これにより、アクセス拒否 (403 Forbidden) エラーを防ぐことができます。

## バケットポリシーと IAM ポリシー
<a name="bucket-iam-policies"></a>

### バケットレベルの操作
<a name="troubleshoot-403-bucket-level-ops"></a>

バケットポリシーが設定されていない場合、バケットはバケット所有者のアカウントの任意の AWS Identity and Access Management (IAM) アイデンティティからのリクエストを暗黙的に許可します。また、バケットは、他の任意のアカウントからの他の IAM ID からのリクエストや、匿名の (署名されていない) リクエストを暗黙的に拒否します。ただし、IAM ユーザーポリシーが設定されていない場合、リクエスタのすべてのリクエストは (AWS アカウントのルートユーザーでない限り) 暗黙的に拒否されます。詳細については、*IAM ユーザーガイド*の「[アカウント内でのリクエストの許可または拒否の決定](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow)」を参照してください。

### オブジェクトレベルの操作
<a name="troubleshoot-403-object-level-ops"></a>

バケット所有アカウントがオブジェクトを所有している場合、バケットポリシーと IAM ユーザーポリシーは、オブジェクトレベルの操作でもバケットレベルの操作と同じように機能します。例えば、バケットポリシーが設定されていない場合、バケットはバケット所有者のアカウントの任意の IAM アイデンティティからのオブジェクトリクエストを暗黙的に許可します。また、バケットは、他の任意のアカウントの他の IAM ID からのオブジェクトリクエストや、匿名 (署名なし) リクエストを暗黙的に拒否します。ただし、IAM ユーザーポリシーが設定されていない場合、リクエスタのすべてのオブジェクトリクエストは (AWS アカウントのルートユーザーでない限り) 暗黙的に拒否されます。

オブジェクトが外部アカウントによって所有されている場合、オブジェクトへのアクセスはオブジェクトアクセスコントロールリスト (ACL) を通じてのみ許可されます。バケットポリシーと IAM ユーザーポリシーは、引き続きオブジェクトリクエストを拒否するために使用できます。

したがって、バケットポリシーまたは IAM ユーザーポリシーによりアクセス拒否 (403 Forbidden) エラーが発生しないことを確認するには、次の要件が満たされていることを確認します。
+ 同じアカウントでアクセスする場合、バケットポリシーまたは IAM ユーザーポリシーのいずれにも、アクセス権限を付与するリクエスタに対する明示的な `Deny` 記述があってはなりません。バケットポリシーと IAM ユーザーポリシーのみを使用してアクセス権限を付与する場合は、これらのポリシーの 1 つに少なくとも 1 つの明示的な `Allow` ステートメントが必要です。
+ クロスアカウントアクセスの場合、バケットポリシーまたは IAM ユーザーポリシーのいずれにも、アクセス許可を付与するリクエスタに対する明示的な `Deny` ステートメントを含めることはできません。バケットポリシーと IAM ユーザーポリシーのみを使用してクロスアカウントアクセス許可を付与する場合は、リクエスタのバケットポリシーと IAM ユーザーポリシーの両方に明示的な `Allow` ステートメントが含まれていることを確認します。

**注記**  
バケットポリシーの `Allow` ステートメントは、[同じバケット所有アカウントが所有する](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)オブジェクトにのみ適用されます。ただし、バケットポリシーの `Deny` ステートメントは、オブジェクトの所有権に関係なくすべてのオブジェクトに適用されます。

**バケットポリシーを確認または編集する方法**
**注記**  
バケットポリシーを表示または編集するには、`s3:GetBucketPolicy` アクセス許可が必要です。

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

1. 左側のナビゲーションペインで、**[バケット]** を選択します。

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

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

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

AWS Command Line Interface (AWS CLI) を使用してバケットポリシーを確認または編集するには、[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-bucket-policy.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-bucket-policy.html) コマンドを使用します。

**注記**  
バケットポリシーが適正でないためにバケットからロックアウトされた場合は、[AWS アカウントのルートユーザー認証情報を使用してAWS マネジメントコンソールにサインイン](https://docs.aws.amazon.com/signin/latest/userguide/introduction-to-root-user-sign-in-tutorial.html)します。バケットへのアクセスを回復するには、必ず AWS アカウントのルートユーザーの認証情報を使用してバケットポリシーを削除します。

### アクセス許可を確認するためのヒント
<a name="troubleshoot-403-tips"></a>

リクエスタが Amazon S3 オペレーションを実行するための適切な権限を持っているかどうかを確認するには、以下を試してください。
+ リクエスタを特定します。署名なしのリクエストの場合、IAM ユーザーポリシーのない匿名リクエストです。署名済み URL を使用したリクエストの場合、ユーザーポリシーは、リクエストに署名した IAM ユーザーまたはロールのポリシーと同じになります。
+ 正しい IAM ユーザーまたはロールを使用していることを確認します。IAM ユーザーまたはロールを確認するには、AWS マネジメントコンソール の右上隅を確認するか、[https://docs.aws.amazon.com/cli/latest/reference/sts/get-caller-identity.html](https://docs.aws.amazon.com/cli/latest/reference/sts/get-caller-identity.html) コマンドを使用することができます。
+ IAM ユーザーまたはロールに関連付けられている IAM ポリシーを確認します。次のいずれかの方法を使用します。
  + [IAM ポリシーシミュレーターを使用して IAM ポリシーをテストします](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_testing-policies.html)。
  + さまざまな [IAM ポリシータイプ](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)を確認します。
+ 必要に応じて、[IAM ユーザーポリシーを編集します](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html)。
+ アクセスを明示的に拒否または許可するポリシーについては、以下の例を確認してください。
  + IAM ユーザーポリシーの明示的な許可: [IAM: 複数のサービスへのアクセスをプログラムおよびコンソールで許可および拒否](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_iam_multiple-services-console.html)
  + バケットポリシーの明示的許可: [オブジェクトをアップロードしたり、パブリックアクセス用のオブジェクト ACL を設定したりする権限を複数のアカウントに付与](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html#example-bucket-policies-acl-1)
  + IAM ユーザーポリシーの明示的拒否: [AWS: リクエストされた AWS リージョン に基づいてAWS へのアクセスを拒否](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_aws_deny-requested-region.html)
  + バケットポリシーの明示的拒否: [バケットに書き込まれるすべてのオブジェクトに SSE-KMS が必要](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html#example-bucket-policies-encryption-1)

## Amazon S3 ACL 設定
<a name="troubleshoot-403-acl-settings"></a>

ACL 設定を確認するときは、まず[オブジェクト所有権の設定を確認](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-ownership-retrieving.html)して、バケットで ACL が有効になっているかどうかを確認してください。ACL アクセス許可を使用できるのは、アクセス許可を付与するためのみであり、リクエストを拒否するためには使用できないことに注意が必要です。ACL は、バケットポリシーや IAM ユーザーポリシーでの明示的拒否によって拒否されたリクエスタにアクセス権を付与する目的でも使用できません。

### オブジェクト所有者の設定にバケット所有者の強制を設定する
<a name="troubleshoot-403-object-ownership-1"></a>

**[バケット所有者の強制]** 設定が有効になっている場合、この設定によってバケットとオブジェクトに適用されるすべての ACL が無効になるため、ACL 設定によってアクセス拒否 (403 Forbidden) エラーが発生する可能性はほとんどありません。Amazon S3 バケットのデフォルト (および推奨) 設定は、**[バケット所有者の強制]** です。

### オブジェクト所有者設定に希望するバケット所有者またはオブジェクトライターを設定する
<a name="troubleshoot-403-object-ownership-2"></a>

ACL 権限は、**[希望するバケット所有者]** 設定または **[オブジェクト作成者]** 設定でも引き続き有効です。ACL には、バケット ACL とオブジェクト ACL の 2 種類があります。この 2 種類の ACL の違いについては、「[ACL アクセス許可とアクセスポリシーのアクセス許可のマッピング](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#acl-access-policy-permission-mapping)」を参照してください。

拒否されたリクエストのアクションに応じて、以下のように[バケットまたはオブジェクトの ACL 権限を確認してください](https://docs.aws.amazon.com/AmazonS3/latest/userguide/managing-acls.html)。
+ Amazon S3 が `LIST`、`PUT` オブジェクト、`GetBucketAcl`、または `PutBucketAcl` リクエストを拒否した場合は、[バケットの ACL 権限を確認](https://docs.aws.amazon.com/AmazonS3/latest/userguide/managing-acls.html)してください。
**注記**  
バケット ACL 設定では、`GET` オブジェクトのアクセス許可を付与することはできません。
+ Amazon S3 が S3 オブジェクトの `GET` リクエスト、または [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectAcl.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectAcl.html) リクエストを拒否した場合は、[そのオブジェクトの ACL 権限を確認してください](https://docs.aws.amazon.com/AmazonS3/latest/userguide/managing-acls.html)。
**重要**  
オブジェクトを所有するアカウントがバケットを所有するアカウントと異なる場合、オブジェクトへのアクセスはバケットポリシーによって制御されません。

### クロスアカウントによるオブジェクト所有権である場合の、`GET` オブジェクトリクエストによるアクセス拒否 (403 Forbidden) エラーのトラブルシューティング
<a name="troubleshoot-403-object-ownership-tips"></a>

バケットの[オブジェクト所有権設定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html#object-ownership-overview)を確認して、オブジェクト所有者を判断します。[オブジェクト ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/managing-acls.html) へのアクセス権限がある場合は、オブジェクト所有者のアカウントを確認することもできます。(オブジェクト所有者のアカウントを表示するには、Amazon S3 コンソールでオブジェクト ACL 設定を確認します)。または、`GetObjectAcl` リクエストを実行してオブジェクト所有者の[正規 ID](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAcl.html) を検索し、オブジェクト所有者のアカウントを確認することもできます。デフォルトでは、ACL はオブジェクト所有者のアカウントへの `GET` リクエストに対する明示的な許可権限を付与します。

オブジェクト所有者がバケット所有者と異なることを確認してから、ユースケースとアクセスレベルに応じて、次のいずれかの方法を選択してアクセス拒否 (403 Forbidden) エラーに対処します。
+ **ACL を無効にする (推奨)** - この方法はすべてのオブジェクトに適用され、バケット所有者が実行できます。この方法では、バケット所有者に所有権が自動的に与えられ、バケット内のすべてのオブジェクトを完全に制御できます。この方法を実行する前に、[ACL を無効にする前提条件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-ownership-migrating-acls-prerequisites.html)を確認します。**[バケット所有者の強制]** (推奨) モードにバケットを設定する方法については、「[既存のバケットでのオブジェクトの所有権の設定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-ownership-existing-bucket.html)」を参照してください。
**重要**  
アクセス拒否 (403 Forbidden) エラーを防ぐには、ACL を無効にする前に、必ず ACL 権限をバケットポリシーに移行してください。詳細については、「[ACL 権限からの移行に関するバケットポリシーの例](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-ownership-migrating-acls-prerequisites.html#migrate-acl-permissions-bucket-policies)」を参照してください。
+ **オブジェクト所有者をバケット所有者に変更** - この方法は個々のオブジェクトに適用できますが、オブジェクトの所有権を変更できるのはオブジェクト所有者 (または適切な権限を持つユーザー) のみです。追加の `PUT` コストが適用される場合があります。(詳細については、「[Amazon S3 の料金](https://aws.amazon.com/s3/pricing/)」を参照してください)。この方法では、バケット所有者にオブジェクトの完全な所有権が付与され、バケット所有者はバケットポリシーを通じてオブジェクトへのアクセスを制御できます。

  オブジェクトの所有権を変更するには、以下のいずれかを実行します。
  + バケット所有者は[オブジェクトをコピーして](https://docs.aws.amazon.com/AmazonS3/latest/userguide/copy-object.html#CopyingObjectsExamples)バケットに戻すことができます。
  + バケットのオブジェクト所有者設定を **[希望するバケット所有者]** に変更できます。バージョニングを無効にすると、バケット内のオブジェクトは上書きされます。バージョニングが有効になっている場合、同じオブジェクトの重複バージョンがバケットに表示され、バケット所有者は[ライフサイクルルールを期限切れに設定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-expire-general-considerations.html)できます。オブジェクト所有権設定を変更する方法については、「[既存のバケットでのオブジェクトの所有権の設定](object-ownership-existing-bucket.md)」を参照してください。
**注記**  
オブジェクト所有者の設定を **[希望するバケット所有者]** に更新すると、その設定はバケットにアップロードされた新しいオブジェクトにのみ適用されます。
  + `bucket-owner-full-control` 既定オブジェクト ACL を使用して、オブジェクト所有者にオブジェクトを再度アップロードさせることができます。
**注記**  
クロスアカウントアップロードの場合、バケットポリシーで `bucket-owner-full-control` 既定オブジェクト ACL を要求することもできます。バケットポリシーの例については、[バケット所有者はフルコントロール権限を持ちながら、オブジェクトをアップロードするためのクロスアカウントアクセス許可を付与する](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html#example-bucket-policies-acl-2)を参照してください。
+ **オブジェクト作成者をオブジェクト所有者のままにする** - この方法ではオブジェクトの所有者は変更されませんが、オブジェクトへのアクセス権限を個別に付与できます。オブジェクトへのアクセス権限を付与するには、そのオブジェクトに対する `PutObjectAcl` 権限が必要です。次に、アクセス拒否 (403 Forbidden) エラーを修正するために、リクエスタをオブジェクトの ACL 内のオブジェクトへのアクセス権限[付与者](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#specifying-grantee)として追加します。詳細については、「[ACL の設定](managing-acls.md)」を参照してください。

## S3 ブロックパブリックアクセス設定
<a name="troubleshoot-403-bpa"></a>

失敗したリクエストがパブリックアクセスまたはパブリックポリシーに関連している場合は、アカウント、バケット、または S3 アクセスポイントの S3 ブロックパブリックアクセス設定を確認します。S3 パブリックアクセスブロック設定に関連するアクセス拒否エラーのトラブルシューティングの詳細については、「[ブロックパブリックアクセス設定によるアクセス拒否](#access-denied-bpa-examples)」を参照してください。

## Amazon S3 の暗号化設定
<a name="troubleshoot-403-encryption"></a>

Amazon S3 はバケットのサーバー側暗号化をサポートしています。サーバー側の暗号化とは、データを受信するアプリケーションまたはサービスによって、送信先でデータを暗号化することです。Amazon S3 は、AWS データセンターのディスクに書き込まれるときにデータをオブジェクトレベルで暗号化し、お客様がデータにアクセスするときに復号します。

デフォルトで、Amazon S3 では、Amazon S3 のすべてのバケットに対する基本レベルの暗号化として、Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3) が適用されるようになりました。Amazon S3 では、オブジェクトをアップロードするときにサーバー側を暗号化する方法も指定できます。

**バケットのサーバー側暗号化ステータスと暗号化設定を確認する方法**

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

1. 左側のナビゲーションペインで、**[バケット]** を選択します。

1. **[バケット]** リストで、暗号化設定を確認するバケットを選択します。

1. **[プロパティ]** タブを選択します。

1. **[デフォルトの暗号化]** セクションまでスクロールして、**[暗号化タイプ]** 設定を表示します。

AWS CLI を使用して暗号化設定を確認するには、[https://docs.aws.amazon.com/cli/latest/reference/s3api/get-bucket-encryption.html](https://docs.aws.amazon.com/cli/latest/reference/s3api/get-bucket-encryption.html) コマンドを使用します。

**オブジェクトの暗号化状態を確認する方法**

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

1. 左側のナビゲーションペインで、**[バケット]** を選択します。

1. **[バケット]** リストで、オブジェクトが含まれるバケットの名前を選択します。

1. **[オブジェクト]** リストで、暗号化を追加または変更するオブジェクトの名前を選択します。

   オブジェクトの詳細ページが表示されます。

1. **[サーバー側の暗号化設定]** セクションまでスクロールすると、オブジェクトのサーバー側暗号化設定が表示されます。

AWS CLI を使用してオブジェクト暗号化ステータスを確認するには、[https://docs.aws.amazon.com/cli/latest/reference/s3api/head-object.html#examples](https://docs.aws.amazon.com/cli/latest/reference/s3api/head-object.html#examples) コマンドを使用します。

### 暗号化とアクセス許可の要件
<a name="troubleshoot-403-encryption-requirements"></a>

Amazon S3 では 3 種類のサーバー側暗号化がサポートされます。
+ Amazon S3 マネージドキーを用いたサーバー側の暗号化 (SSE-S3)
+ AWS Key Management Service (AWS KMS) キー (SSE-KMS) によるサーバー側の暗号化
+ お客様が用意したキーを使用したサーバー側の暗号化 (SSE-C)

暗号化設定に基づいて、以下のアクセス許可要件が満たされていることを確認します。
+ **SSE-S3** - 追加の権限は必要ありません。
+ **SSE-KMS (カスタマー管理キーを使用)** - オブジェクトをアップロードするには、AWS KMS key に `kms:GenerateDataKey` 権限が必要です。オブジェクトをダウンロードしてオブジェクトのマルチパートアップロードを実行するには、KMS キーに `kms:Decrypt` 権限が必要です。
+ **SSE-KMS (AWS マネージドキー を使用)** - リクエスタは `aws/s3` KMS キーを所有しているのと同じアカウントに属している必要があります。また、リクエスタはオブジェクトにアクセスするための正しい Amazon S3 権限を持っている必要があります。
+ **SSE-C (お客様提供のキーを使用)** - 追加の権限は必要ありません。バケットポリシーを設定すると、バケットのオブジェクトに対して[お客様が用意した暗号化キーでサーバー側の暗号化をリクエストおよび制限できます](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerSideEncryptionCustomerKeys.html#ssec-require-condition-key)。

オブジェクトがカスタマーマネージドキーで暗号化されている場合は、KMS キーポリシーによって `kms:GenerateDataKey` または `kms:Decrypt` アクションの実行が許可されていることを確認してください。KMS キーポリシーを確認する手順については、*AWS Key Management Service デベロッパーガイド*の「[キーポリシーの表示](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-viewing.html)」を参照してください。

## S3 オブジェクトロック設定
<a name="troubleshoot-403-object-lock"></a>

バケットで [S3 Object Lock](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html) が有効になっていて、オブジェクトが[保持期間](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-overview.html#object-lock-retention-periods)または[リーガルホールド](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-overview.html#object-lock-legal-holds)によって保護されている場合、オブジェクトを削除しようとすると、Amazon S3 はオブジェクトの削除方法に応じて次のいずれかのレスポンスを返します。
+ **永続的 `DELETE` なリクエスト** – 永続的な `DELETE` リクエスト (バージョン ID を指定するリクエスト) を発行した場合、オブジェクトを削除しようとすると、Amazon S3 はアクセス拒否 (`403 Forbidden`) エラーを返します。
+ **シンプルな `DELETE` リクエスト** – シンプルな `DELETE` リクエスト (バージョン ID を指定しないリクエスト) を発行した場合、Amazon S3 は `200 OK` レスポンスを返し、バケットに[削除マーカー](DeleteMarker.md)を挿入します。そのマーカーは、新しい ID を持つオブジェクトの最新バージョンになります。

**バケットでオブジェクトロックが有効になっているかどうかを確認する方法**

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

1. 左側のナビゲーションペインで、**[バケット]** を選択します。

1. **[バケット]** リストで、確認するバケットの名前を選択します。

1. **[プロパティ]** タブを選択します。

1. **[オブジェクトロック]** セクションまでスクロールします。**[オブジェクトロック]** 設定が **[有効]** または **[無効]** であるかを確認します。

オブジェクトが保持期間またはリーガルホールドで保護されているかを判断するには、オブジェクトの[ロック情報を参照](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-managing-view)します。

オブジェクトが保持期間またはリーガルホールドで保護されている場合は、次の点を確認します。
+ オブジェクトバージョンがコンプライアンス保存モードで保護されている場合、それを完全に削除する方法はありません。AWS アカウントのルートユーザーを含む、すべてのリクエスタからの永続的な `DELETE` リクエストは、アクセス拒否 (403 Forbidden) エラーになります。また、コンプライアンス保持モードで保護されているオブジェクトの `DELETE` リクエストを送信すると、Amazon S3 はそのオブジェクトの[削除マーカー](https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeleteMarker.html)を作成することに注意してください。
+ オブジェクトバージョンがガバナンス保持モードで保護されていて `s3:BypassGovernanceRetention` 権限がある場合は、保護をバイパスしてバージョンを完全に削除できます。詳細については、「[ガバナンスモードのバイパス](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-managing-bypass)」を参照してください。
+ オブジェクトバージョンがリーガルホールドで保護されている場合は、永久 `DELETE` リクエストを実行するとアクセス拒否 (403 Forbidden) エラーが発生する可能性があります。オブジェクトバージョンを永久に削除するには、オブジェクトバージョンのリーガルホールドを解除する必要があります。リーガルホールドを解除するには、`s3:PutObjectLegalHold` 許可が必要です。リーガルホールドの解除の詳細については、「[オブジェクトロックの設定](object-lock-configure.md)」を参照してください。

## VPC エンドポイントポリシー
<a name="troubleshoot-403-vpc"></a>

仮想プライベートクラウド (VPC) エンドポイントを使用して Amazon S3 にアクセスする場合は、VPC エンドポイントポリシーによって Amazon S3 リソースへのアクセスがブロックされていないことを確認します。デフォルトでは、VPC エンドポイントポリシーは Amazon S3 へのすべてのリクエストを許可します。特定のリクエストを制限するように VPC エンドポイントポリシーを設定することもできます。VPC エンドポイントポリシーを確認する方法については、次のリソースを参照してください。
+ [VPC エンドポイントポリシーによるアクセスの拒否 – 暗黙的な拒否](#access-denied-vpc-endpoint-examples-implicit)
+ [VPC エンドポイントポリシーによるアクセスの拒否 – 明示的拒否](#access-denied-vpc-endpoint-examples-explicit)
+ 「AWS PrivateLink ガイド」の「[エンドポイントポリシーを使用して VPC エンドポイントへのアクセスを制御する](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)」**

## AWS Organizations ポリシー
<a name="troubleshoot-403-orgs"></a>

あなたの AWS アカウント が組織に所属している場合、AWS Organizations ポリシーによって Amazon S3 リソースへのアクセスがブロックされる場合があります。デフォルトでは、AWS Organizations ポリシーは Amazon S3 へのいずれのリクエストもブロックしません。ただし、AWS Organizations ポリシーが S3 バケットへのアクセスをブロックするように設定されていないことを確認してください。AWS Organizations ポリシーを確認する方法については、以下のリソースを参照してください。
+ [サービスコントロールポリシーによるアクセスの拒否 - 暗黙的な拒否](#access-denied-scp-examples-implicit)
+ [サービスコントロールポリシーによるアクセスの拒否 - 明示的な拒否](#access-denied-scp-examples-explicit)
+ [リソースコントロールポリシーによるアクセスの拒否 - 明示的な拒否](#access-denied-rcp-examples-explicit)
+ 「AWS Organizations ユーザーガイド」の「[すべてのポリシーの一覧表示](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_info-operations.html#list-all-pols-in-org)」**

さらに、S3 バケットへのすべてのユーザーのアクセスを拒否するようにメンバーアカウントのバケットポリシーを誤って設定した場合は、IAM でメンバーアカウントの特権セッションを起動することでバケットをロック解除できます。特権セッションを起動した後、誤って設定したバケットポリシーを削除して、バケットへのアクセスを再開できます。詳細については、「*AWS Identity and Access Management ユーザーガイド*」の「[AWS Organizations メンバーアカウントで特権タスクを実行する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user-privileged-task.html)」を参照してください 

## CloudFront ディストリビューションアクセス
<a name="troubleshoot-403-cloudfront"></a>

CloudFront 経由で S3 静的ウェブサイトにアクセスしようとしたときに「アクセス拒否 (403 Forbidden)」エラーが発生した場合は、次の一般的な問題を確認してください。
+ **オリジンドメイン名の形式は正しいですか**
  + REST API エンドポイントではなく S3 ウェブサイトエンドポイント形式 (bucket-name.s3-website-region.amazonaws.com) を使用していることを確認
  + バケットで静的ウェブサイトホスティングが有効になっていることを確認
+ **バケットポリシーで CloudFront アクセスが許可されていますか**
  + バケットポリシーに CloudFront ディストリビューションのオリジンアクセスアイデンティティ (OAI) またはオリジンアクセスコントロール (OAC) のアクセス許可が含まれていることを確認
  + ポリシーに必要な s3:GetObject アクセス許可が含まれていることを確認

エラーページの設定やプロトコル設定など、その他のトラブルシューティング手順や設定については、AWS re:Post 情報センターの「[Amazon S3 ウェブサイトのエンドポイントを CloudFront ディストリビューションのオリジンとして使用すると、"403 access denied" エラーが発生する理由を知りたいです](https://repost.aws/knowledge-center/s3-website-cloudfront-error-403)」を参照してください。

**注記**  
このエラーは、S3 に直接アクセスしたときに発生する可能性のある 403 エラーとは異なります。CloudFront 固有の問題については、CloudFront のディストリビューション設定と S3 の設定の両方を確認してください。

## アクセスポイント設定
<a name="troubleshoot-403-access-points"></a>

Amazon S3 Access Points 経由でリクエストを行っているときにアクセス拒否 (403 Forbidden) エラーが表示される場合は、次の点を確認する必要がある場合があります。
+ アクセスポイントの設定
+ アクセスポイントに使用される IAM ユーザーポリシー
+ クロスアカウントアクセスポイントの管理または設定に使用されるバケットポリシー

**アクセスポイントの設定とポリシー**
+ アクセスポイントを作成するときに、**インターネット**または **VPC** をネットワークオリジンとして指定できます。ネットワークオリジンが VPC のみに設定されている場合、Amazon S3 は指定 VPC 以外のアクセスポイントへのリクエストをすべて拒否します。アクセスポイントのネットワークオリジンを確認するには、[Virtual Private Cloud に制限されたアクセスポイントの作成](access-points-vpc.md) を参照してください。
+ アクセスポイントでは、カスタムのブロックパブリックアクセス設定を構成することもできます。これは、バケットレベルまたはアカウントレベルのブロックパブリックアクセス設定と同様に機能します。カスタムのブロックパブリックアクセス設定を確認する方法は、「[汎用バケットのアクセスポイントへのパブリックアクセスの管理](access-points-bpa-settings.md)」を参照してください。
+ アクセスポイントを使用して Amazon S3 へのリクエストを正常に行うには、リクエスタが必要な IAM 権限を持っていることを確認します。詳細については、「[アクセスポイントを使用するための IAM ポリシーの設定](access-points-policies.md)」を参照してください。
+ リクエストにクロスアカウントアクセスポイントが含まれる場合、バケット所有者がアクセスポイントからのリクエストを許可するようにバケットポリシーを更新済みであることを確認します。詳細については、「[クロスアカウントアクセスポイントへのアクセス許可の付与](access-points-policies.md#access-points-cross-account)」を参照してください。

このトピックのすべての項目を確認してもアクセス拒否 (403 Forbidden) エラーが解決しない場合は、[Amazon S3 リクエスト ID を取得](https://docs.aws.amazon.com/AmazonS3/latest/userguide/get-request-ids.html)して、追加ガイダンスについて サポート まで問い合わせてください。

## その他のリソース
<a name="troubleshoot-403-additional-resources"></a>

アクセス拒否 (403 Forbidden) エラーに関する詳細なガイダンスについては、次のリソースを確認できます。
+ AWS re:Post 情報センターの「[Amazon S3 での、403 Access Denied エラーをトラブルシューティングする方法を教えてください](https://repost.aws/knowledge-center/s3-troubleshoot-403)」。
+ AWS re:Post 情報センターの、「[Amazon S3 にファイルをアップロードしようとすると「403 禁止」エラーが表示されるのはなぜですか](https://repost.aws/knowledge-center/s3-403-forbidden-error)」。
+ AWS re:Post 情報センターの、「[すべてのリソースが同じ AWS アカウントからのものである場合、Amazon S3 バケットからの 403 アクセス拒否エラーをトラブルシューティングする方法を教えてください](https://repost.aws/knowledge-center/s3-troubleshoot-403-resource-same-account)」。
+ AWS re:Post 情報センターの、「[パブリック読み取りアクセス権を持つ Amazon S3 バケットからの 403 アクセス拒否エラーをトラブルシューティングする方法を教えてください](https://repost.aws/knowledge-center/s3-troubleshoot-403-public-read)」。
+ AWS re:Post 情報センターの、「[Amazon S3 の署名済み URL でリクエストを行う際の、SignatureDoesNotMatch または 403 Forbidden エラーをトラブルシューティングする方法を教えてください](https://repost.aws/knowledge-center/s3-presigned-url-signature-mismatch)」。
+ AWS re:Post 情報センターの、「[Amazon S3 バケットで同期コマンドを実行すると、ListObjectsV2 のアクセス拒否エラーが表示されるのはなぜですか](https://repost.aws/knowledge-center/s3-access-denied-listobjects-sync)」。
+ AWS re:Post 情報センターの、「[Amazon S3 ウェブサイトのエンドポイントを CloudFront ディストリビューションのオリジンとして使用すると、"403 access denied" エラーが発生する理由を知りたいです](https://repost.aws/knowledge-center/s3-website-cloudfront-error-403)」。

# AWSAmazon S3 の マネージドポリシー
<a name="security-iam-awsmanpol"></a>

AWS マネージドポリシーは、AWS が作成および管理するスタンドアロンポリシーです。AWS マネージドポリシーは、多くの一般的ユースケースでアクセス許可を提供するように設計されているため、ユーザー、グループ、ロールへのアクセス許可の割り当てを開始できます。

AWS マネージドポリシーは、ご利用の特定のユースケースに対して最小特権のアクセス許可を付与しない場合があることにご注意ください。これは、すべての AWS ユーザーが使用できるようになるのを避けるためです。ユースケースに固有の[カスタマー管理ポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)を定義して、アクセス許可を絞り込むことをお勧めします。

AWS マネージドポリシーで定義されたアクセス許可は変更できません。AWS が AWS マネージドポリシーに定義されているアクセス許可を更新すると、更新はポリシーがアタッチされているすべてのプリンシパルアイデンティティ (ユーザー、グループ、ロール) に影響します。新しい AWS のサービス を起動するか、既存のサービスで新しい API オペレーションが使用可能になると、AWS が AWS マネージドポリシーを更新する可能性が最も高くなります。

詳細については、「*IAM ユーザーガイド*」の「[AWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)」を参照してください。

## AWS マネージドポリシー: AmazonS3FullAccess
<a name="security-iam-awsmanpol-amazons3fullaccess"></a>

`AmazonS3FullAccess` ポリシーを IAM IDにアタッチできます。このポリシーは、Amazon S3 への完全なアクセスを可能にする許可を付与します。

このポリシーのアクセス許可を確認するには、「AWS マネジメントコンソール」の「[https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonS3FullAccess$jsonEditor](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonS3FullAccess$jsonEditor)」を参照してください。

## AWS マネージドポリシー: AmazonS3ReadOnlyAccess
<a name="security-iam-awsmanpol-amazons3readonlyaccess"></a>

`AmazonS3ReadOnlyAccess` ポリシーを IAM IDにアタッチできます。このポリシーは、Amazon S3 への読み取り専用アクセスを可能にする許可を付与します。

このポリシーのアクセス許可を確認するには、「AWS マネジメントコンソール」の「[https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess$jsonEditor](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess$jsonEditor)」を参照してください。

## AWS マネージドポリシー: AmazonS3ObjectLambdaExecutionRolePolicy
<a name="security-iam-awsmanpol-amazons3objectlambdaexecutionrolepolicy"></a>

S3 Object Lambda アクセスポイントにリクエストが行われたときに S3 Object Lambda にデータを送信するために必要な許可を AWS Lambda 関数に提供します。また、Amazon CloudWatch Logs に書き込む許可を Lambda に付与します。

このポリシーのアクセス許可を確認するには、「AWS マネジメントコンソール」の「[https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/service-role/AmazonS3ObjectLambdaExecutionRolePolicy$jsonEditor](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/service-role/AmazonS3ObjectLambdaExecutionRolePolicy$jsonEditor)」を参照してください。

## AWS マネージドポリシー: S3UnlockBucketPolicy
<a name="security-iam-awsmanpol-S3UnlockBucketPolicy"></a>

S3 バケットへのすべてのユーザーのアクセスを拒否するようにメンバーアカウントのバケットポリシーを誤って設定した場合は、この AWS マネージドポリシー (`S3UnlockBucketPolicy`) を使用してバケットのロックを解除できます。Amazon S3 バケットへのすべてのプリンシパルのアクセスを拒否するように誤って設定したバケットポリシーを削除する方法の詳細については、「*AWS Identity and Access Management ユーザーガイド*」の「[AWS Organizations メンバーアカウントで特権タスクを実行する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user-privileged-task.html)」を参照してください。

## AWS マネージドポリシーに対する Amazon S3 更新
<a name="security-iam-awsmanpol-updates"></a>

Amazon S3 の AWS マネージドポリシーの更新に関する詳細を、このサービスがこれらの変更の追跡を開始した以降の分について表示します。


| 変更 | 説明 | 日付 | 
| --- | --- | --- | 
|  Amazon S3 が `S3UnlockBucketPolicy` を追加  |  バケットのロックを解除して、Amazon S3 バケットへのすべてのプリンシパルのアクセスを拒否するように誤って設定したバケットポリシーを削除するために、Amazon S3 は `S3UnlockBucketPolicy` という新しい AWS マネージドポリシーを追加しています。  | 2024 年 11 月 1 日 | 
|  Amazon S3 が `AmazonS3ReadOnlyAccess` に記述許可を追加しました  |  Amazon S3 が `s3:Describe*` 記述許可を `AmazonS3ReadOnlyAccess` に追加しました。  | 2023 年 8 月 11 日 | 
|  Amazon S3 では、S3 Object Lambda のアクセス許可を `AmazonS3FullAccess` および `AmazonS3ReadOnlyAccess` に追加しました。  |  Amazon S3 は、S3 Object Lambda のアクセス権限を含む `AmazonS3FullAccess` および `AmazonS3ReadOnlyAccess` のポリシーを更新しました。  | 2021 年 9 月 27 日 | 
|  Amazon S3 が `AmazonS3ObjectLambdaExecutionRolePolicy` を追加  |  Amazon S3 は、`AmazonS3ObjectLambdaExecutionRolePolicy` と呼ばれる新しい AWS マネージドポリシーを追加しました。これは、Lambda 関数に S3 Object Lambda とやり取りして CloudWatch Logs に書き込むための許可を提供します。  | 2021 年 8 月 18 日 | 
|  Amazon S3 が変更の追跡を開始  |  Amazon S3 が AWS マネージドポリシーの変更の追跡を開始しました。  | 2021 年 8 月 18 日 | 