

# S3 Access Grants の概念
<a name="access-grants-concepts"></a>

**S3 Access Grants のワークフロー**  
S3 Access Grants のワークフローは次のとおりです。

1. S3 Access Grants インスタンスを作成します。「[S3 Access Grants インスタンスの使用](access-grants-instance.md)」を参照してください。

1. S3 Access Grants インスタンスに、Amazon S3 データ内のロケーションを登録し、これらのロケーションを AWS Identity and Access Management (IAM) ロールにマッピングします。「[ロケーションを登録する](access-grants-location-register.md)」を参照してください。

1. 被付与者用の権限を作成し、被付与者に S3 リソースへのアクセス許可を付与します。「[S3 Access Grants での許可の使用](access-grants-grant.md)」を参照してください。

1. 被付与者が S3 Access Grants の一時的な認証情報をリクエストします。「[S3 Access Grants を介して Amazon S3 データへのアクセスをリクエストする](access-grants-credentials.md)」を参照してください。

1. 被付与者が、これらの一時的な認証情報を使用して S3 データにアクセスします。「[S3 Access Grants が提供する認証情報を使用した S3 データへのアクセス](access-grants-get-data.md)」を参照してください。

詳細については、「[S3 Access Grants の開始方法](access-grants-get-started.md)」を参照してください。

 **S3 Access Grants インスタンス**   
S3 Access Grants インスタンス**は、個々の権限の論理コンテナです**。S3 Access Grants インスタンスを作成するときは、AWS リージョンを指定する必要があります。AWS アカウントの AWS リージョンごとに、1 つの S3 Access Grants インスタンスを作成できます。詳細については、「[S3 Access Grants インスタンスの使用](access-grants-instance.md)」を参照してください。  
S3 Access Grants を使用して社内ディレクトリ内のユーザーとグループのアイデンティティにアクセス許可を付与する場合は、S3 Access Grants インスタンスを AWS IAM アイデンティティセンター インスタンスに関連付ける必要もあります。詳細については、「[S3 Access Grants と社内ディレクトリのアイデンティティ](access-grants-directory-ids.md)」を参照してください。  
新規作成された S3 Access Grants インスタンスは空です。インスタンス内で、ロケーションを登録する必要があります。S3 デフォルトパス (`s3://`）、バケット、またはバケット内のプレフィックスを使用できます。少なくとも 1 つのロケーションを登録したら、この登録したロケーションのデータへのアクセスを許可するアクセス権限を作成できます。

 **ロケーション**   
S3 Access Grants のロケーション**によって、バケットまたはプレフィックスが AWS Identity and Access Management (IAM) ロールにマッピングされます。S3 Access Grants は、この IAM ロールを引き受けて、その特定のロケーションにアクセスする被付与者に一時的な認証情報を提供します。アクセス権限を作成する前に、まず S3 Access Grants インスタンスに少なくとも 1 つのロケーションを登録する必要があります。  
デフォルトのロケーション (`s3://`) を登録し、IAM ロールにマッピングすることをお勧めします。デフォルトの S3 パスのロケーション (`s3://`) を使用すると、アカウントの AWS リージョン内のすべての S3 バケットへのアクセスがカバーされます。アクセス権限を作成するときに、権限の範囲をデフォルトのロケーション内のバケット、プレフィックス、またはオブジェクトに絞り込むことができます。  
より複雑なアクセス管理のユースケースでは、デフォルトのロケーション以外の登録が必要になる場合があります。例として、次のようなユースケースが挙げられます。  
+ *amzn-s3-demo-bucket* が S3 Access Grants インスタンスの登録済みロケーションで、IAM ロールがマッピングされているが、この IAM ロールがバケット内の特定のプレフィックスへのアクセスを拒否されるとします。この場合、IAM ロールがアクセスできないプレフィックスを別のロケーションとして登録し、そのロケーションを、必要なアクセス権を持つ別の IAM ロールにマッピングできます。
+ 仮想プライベートクラウド (VPC) エンドポイント内のユーザーのみにアクセスを制限する権限を作成するとします。この場合、IAM ロールで VPC エンドポイントのみにアクセスを制限するバケットのロケーションを登録できます。後で、被付与者が S3 Access Grants に認証情報を要求すると、S3 Access Grants はロケーションの IAM ロールを引き受けて一時的な認証情報を提供します。この認証情報は、呼び出し元が VPC エンドポイント内のユーザーでない限り、特定のバケットへのアクセスを拒否します。こうした拒否のアクセス許可は、権限で指定された通常の READ、WRITE、または READWRITE のアクセス許可に加えて適用されます。
ユースケースで S3 Access Grants インスタンスに複数のロケーションを登録する必要がある場合は、次のいずれかを登録できます。  
+ デフォルトの S3 ロケーション (`s3://`)
+ 1 つのバケット (*amzn-s3-demo-bucket* など) または複数のバケット
+ 1 つのバケットと 1 つのプレフィックス (`amzn-s3-demo-bucket/prefix*` など）、または複数のプレフィックス
S3 Access Grants インスタンスに登録できるロケーションの最大数については、「[S3 Access Grants の制約](access-grants-limitations.md)」を参照してください。S3 Access Grants のロケーション登録の詳細については「[ロケーションを登録する](access-grants-location-register.md)」を参照してください。  
S3 Access Grants インスタンスに最初のロケーションを登録しても、インスタンスに個別のアクセス権限はありません。そのため、S3 データへのアクセスはまだ許可されていません。この時点で、アクセス権限を作成してアクセスを許可できます。権限の作成方法の詳細については、「[S3 Access Grants での許可の使用](access-grants-grant.md)」を参照してください。

 **権限**   
S3 Access Grants インスタンス内の個々の「**権限」は、特定のアイデンティティ (IAM プリンシパル、社内ディレクトリのユーザーやグループ) に、S3 Access Grants インスタンスに登録されたロケーション内でのアクセスを許可するものです。  
権限を作成する際、登録されたロケーション全体へのアクセス許可を付与する必要はありません。ロケーション内で権限のアクセス範囲を絞り込むことができます。登録されたロケーションがデフォルトの S3 パス (`s3://`) である場合は、バケット、バケット内のプレフィックス、または特定のオブジェクトに権限の範囲を絞り込む必要があります。権限に登録されたロケーションがバケットまたはプレフィックスである場合は、バケットまたはプレフィックス全体へのアクセスを許可することも、オプションで、権限の範囲をプレフィックス、サブプレフィックス、またはオブジェクトに絞り込むこともできます。  
権限では、権限のアクセスレベルを READ、WRITE、または READWRITE に設定します。例えば、社内ディレクトリグループ `01234567-89ab-cdef-0123-456789abcdef` にバケット `s3://amzn-s3-demo-bucket/projects/items/*` への READ アクセスを許可する権限があるとします。この場合、そのグループのユーザーには、*amzn-s3-demo-bucket* という名前のバケット内の、プレフィックス `projects/items/` が付いたオブジェクトキー名を持つすべてのオブジェクトへの READ アクセスが付与されます。  
S3 Access Grants インスタンスで作成できる権限の最大数については、「[S3 Access Grants の制約](access-grants-limitations.md)」を参照してください。権限の作成方法の詳細については、「[権限を作成する](access-grants-grant-create.md)」を参照してください。

 **S3 Access Grants の一時的な認証情報**   
権限を作成すると、権限で指定されたアイデンティティを利用する承認済みアプリケーションは、*ジャストインタイムアクセス認証情報*をリクエストできるようになります。これを行うために、アプリケーションは [GetDataAccess](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetDataAccess.html) S3 API オペレーションを呼び出します。被付与者は、この API オペレーションを使用して、共有された S3 データへのアクセスをリクエストできます。  
S3 Access Grants インスタンスは、`GetDataAccess` リクエストを保持する権限に照会して評価します。リクエスタに一致する権限がある場合、S3 Access Grants は、一致する権限の登録ロケーションに関連付けられた IAM ロールを引き受けます。S3 Access Grants は一時的な認証情報のアクセス許可の範囲を、権限の範囲で指定されている S3 バケット、プレフィックス、またはオブジェクトのみに限定します。  
一時アクセス認証情報の有効期限はデフォルトで 1 時間です。ただし、15 分から 12 時間までの任意の値に設定できます。[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) の API リファレンスでセッションの最長時間について確認してください。

## 仕組み
<a name="access-grants-concepts-how"></a>

次の図では、範囲が `s3://` のデフォルトの Amazon S3 ロケーションが IAM ロール `s3ag-location-role` に登録されています。この IAM ロールには、S3 Access Grants を介して認証情報が取得されると、アカウント内で Amazon S3 アクションを実行するアクセス許可があります。

このロケーションでは、2 人の IAM ユーザーに対して 2 つの個別のアクセス権限が作成されます。IAM ユーザー Bob には、`DOC-BUCKET-EXAMPLE` バケット内のプレフィックス `bob/` への `READ` と `WRITE` のアクセス権の両方が付与されます。別の IAM ロールである Alice には、`DOC-BUCKET-EXAMPLE` バケット内のプレフィックス `alice/` への `READ` アクセス許可のみが付与されます。Bob が `DOC-BUCKET-EXAMPLE` バケット内のプレフィックス `bob/` にアクセスするための権限は青色で定義されています。Alice が `DOC-BUCKET-EXAMPLE` バケット内のプレフィックス `alice/` にアクセスするための権限は緑色で定義されています。

Bob がデータの `READ` を行う場合、Bob の権限が付与されているロケーションに関連付けられている IAM ロールが S3 Access Grants の [GetDataAccess](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetDataAccess.html) API オペレーションを呼び出します。Bob が `s3://DOC-BUCKET-EXAMPLE/bob/*` で始まる S3 プレフィックスまたはオブジェクトに対して `READ` を行おうとすると、`GetDataAccess` リクエストは `s3://DOC-BUCKET-EXAMPLE/bob/*` へのアクセス許可がある一時的な IAM セッション認証情報セットを返します。Bob は、権限により許可されているため、`s3://DOC-BUCKET-EXAMPLE/bob/*` で始まる任意の S3 プレフィックスまたはオブジェクトに対して `WRITE` を同様に実行できます。

同じように、Alice は、`s3://DOC-BUCKET-EXAMPLE/alice/` で始まるすべてに対して `READ` を実行できます。ただし、`s3://` 内のバケット、プレフィックス、オブジェクトに対して `WRITE` を実行しようすると、Access Denied (403 Forbidden) エラーが発生します。これは、どのデータに対する `WRITE` アクセスを Alice に付与する権限がないためです。さらに、Alice が `s3://DOC-BUCKET-EXAMPLE/alice/` 外部のデータに対して何らかのアクセスレベル (`READ` または `WRITE`) をリクエストしても、同様に Access Denied エラーが表示されます。

![\[S3 Access Grants の仕組み\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/s3ag-how-it-works.png)


このパターンは多数のユーザーとバケットに応じてスケールでき、アクセス許可の管理を簡素化します。個別のユーザーとプレフィックスのアクセス関係を追加または削除するたびに、サイズが大きくなる可能性のある S3 バケットポリシーを編集する代わりに、個別の権限を別々に追加したり削除したりできます。