S3 Access Grants の概念 - Amazon Simple Storage Service

S3 Access Grants の概念

S3 Access Grants では、シンプルなアクセススキームとして以下の概念が導入されています。

S3 Access Grants インスタンス

S3 Access Grants インスタンスは、Amazon S3 データに対してどのユーザーがどのレベルのアクセスを持つかを定義する個別のアクセス許可の論理コンテナです。AWS リージョン ごと、AWS アカウント ごとに単一の S3 Access Grants インスタンスを持つことができます。この S3 Access Grants インスタンスを使用して、同じアカウントと AWS リージョン のすべてのバケットへのアクセスを制御できます。S3 Access Grants を使用して社内ディレクトリ内のユーザーとグループのアイデンティティへのアクセスを許可する場合は、S3 Access Grants インスタンスを AWS Identity and Access Management (IAM) アイデンティティセンターのインスタンスに関連付ける必要もあります。

ロケーション

ロケーションは、S3 Access Grants インスタンスがアクセスを許可できるデータを定義します。S3 Access Grants は、特定の S3 プレフィックス、バケット、またはオブジェクトへのアクセスを範囲とする IAM 認証情報を発行することで機能します。S3 Access Grants のロケーションを IAM ロールに関連付けることで、そのロールから一時的なセッションが作成されます。最も一般的なロケーション設定は、S3 Access Grants インスタンス全体を s3:// の単一のロケーションに設定することです。これで、アカウントと AWS リージョン 内のすべての S3 バケットへのアクセスに対応できます。S3 Access Grants インスタンスでは複数のロケーションを作成することもできます。例えば、バケットをこのバケットに制限する権限のために s3://example-s3-bucket1 ロケーションとして登録できます。また、デフォルトのロケーション s3:// も登録できます。

権限

ロケーション内のアクセス範囲を絞り込むには、個別の権限を作成します。S3 Access Grants インスタンスの個別の権限を使用すると、特定のエンティティ (IAM プリンシパル、または社内ディレクトリのユーザーやグループ) に Amazon S3 プレフィックス、バケット、またはオブジェクトへのアクセスを許可できます。権限ごとに、異なる範囲 (プレフィックス、バケット、またはオブジェクト) とアクセスレベル (READWRITE、または READWRITE) を定義できます。例えば、特定の社内ディレクトリグループ 01234567-89ab-cdef-0123-456789abcdefs3://example-s3-bucket1/projects/items/* への READ アクセスを許可する権限があるとします。この権限により、そのグループのユーザーは、example-s3-bucket1 という名前のバケット内のプレフィックス projects/items/ が付いたキー名を持つすべてのオブジェクトに READ アクセスが付与されます。

S3 Access Grants の一時的な認証情報

アプリケーションは、新しい S3 API オペレーション GetDataAccess を呼び出して、アクセス許可レベルが、READWRITE または READWRITE の単一のオブジェクト、プレフィックス、またはバケットへのアクセスをリクエストすることで、ジャストインタイムアクセス認証情報をリクエストできます。S3 Access Grants インスタンスは、GetDataAccess リクエストを保持する権限に照会して評価します。一致する権限がある場合、S3 Access Grants は、一致する権限のロケーションに関連付けられた IAM ロールを引き受けます。次に、S3 Access Grants は IAM セッションのアクセス許可の範囲を、権限の範囲で指定されている S3 バケット、プレフィックス、またはオブジェクトのみに限定します。一時アクセス認証情報の有効期限はデフォルトで 1 時間です。ただし、15 分から 12 時間までの任意の値に設定できます。

仕組み

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

このロケーションでは、2 人の IAM ユーザーに対して 2 つの個別のアクセス権限が作成されます。IAM ユーザー Bob には、DOC-BUCKET-EXAMPLE バケット内のプレフィックス bob/ への READWRITE のアクセス権の両方が付与されます。別の 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 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 の仕組み

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