S3 Access は、クロスアカウントアクセスを許可します。 - Amazon Simple Storage Service

S3 Access は、クロスアカウントアクセスを許可します。

S3 Access Grants を使用すると、Amazon S3 データアクセスを以下に付与できます。

  • AWS Identity and Access Management アカウント内の (IAM) アイデンティティ

  • 他の AWS アカウントの IAM アイデンティティ

  • AWS IAM Identity Center インスタンス内のディレクトリユーザーまたはグループ

まず、他のアカウントでのクロスアカウントアクセスを設定します。これには、リソースポリシーを使用して S3 Access Grants インスタンスへのアクセス許可の付与などがあります。次に、許可を使用して S3 データ (バケット、プレフィックス、オブジェクト) へのアクセス許可を付与します。

クロスアカウントアクセスの設定後、他のアカウントは S3 Access Grants から Amazon S3 データへの一時的なアクセス認証情報をリクエストできるようになります。次の図は、S3 Access Grants によるクロスアカウント S3 アクセスのユーザーフローを説明しています。

S3 Access Grants のクロスアカウントユーザーフロー
  1. 2 番目のアカウント (B) のユーザーまたはアプリケーションは、Amazon S3 データが保存されているアカウント (A) の S3 Access Grants インスタンスに認証情報をリクエストします。詳細については、「S3 Access Grants を介して Amazon S3 データへのアクセスをリクエストする」を参照してください。

  2. アカウント (A) の S3 Access Grants インスタンスは、2 番目のアカウントに Amazon S3 データへのアクセスを付与する許可がある場合、一時的な認証情報を返します。詳細については、「権限を作成する」を参照してください。

  3. 2 番目のアカウント (B) のユーザーまたはアプリケーションは、S3 Access Grants が提供する認証情報を使用して、アカウント (A) の S3 データにアクセスします。

S3 Access Grants クロスアカウントアクセスの設定

S3 Access Grants を介してクロスアカウント S3 アクセスを付与するには、次の手順を実行します。

  • ステップ 1: S3 データが保存されているアカウント ID 111122223333 など、S3 Access Grants インスタンスをアカウントに設定します。

  • ステップ 2: アカウント 111122223333 の S3 Access Grants インスタンスのリソースポリシーを設定して、2 番目のアカウント (アカウント ID 444455556666 など) へのアクセスを許可します。

  • ステップ 3: 2 番目のアカウント 444455556666 の IAM プリンシパルの IAM アクセス許可を設定し、アカウント 111122223333 の S3 Access Grants インスタンスに認証情報をリクエストします。

  • ステップ 4: 2 番目のアカウント 444455556666 の IAM プリンシパルに 111122223333 アカウント内の S3 データの一部へのアクセスを付与する許可を 111122223333 アカウントに作成します。

ステップ 1: アカウントで S3 Access Grants インスタンスを設定する

Amazon S3 へのアクセスを管理するには、まずアカウント 111122223333 に S3 Access Grants インスタンスが必要です。共有する S3 データが保存されている各 AWS リージョン に S3 Access Grants インスタンスを作成する必要があります。データを複数の AWS リージョン 間で共有する場合は、各 AWS リージョン について、この設定手順を繰り返します。共有する S3 データが保存されている AWS リージョン に S3 Access Grants インスタンスが既にある場合は、次のステップに進みます。S3 Access Grants インスタンスを設定していない場合は、「S3 Access Grants インスタンスを作成する」を参照してこのステップを完了します。

ステップ 2: クロスアカウントアクセスを許可するに S3 Access Grants インスタンスを許可するように、S3 Access Grants インスタンスのリソースポリシーを設定する

アカウント 111122223333 でクロスアカウントアクセス用の S3 Access Grants インスタンスを作成したら、アカウント 111122223333 内の S3 Access Grants インスタンスのリソースベースのポリシーを設定して、クロスアカウントアクセスを許可します。S3 Access Grants インスタンス自体は、リソースベースのポリシーをサポートしています。適切なリソースベースのポリシーを施行すると、その他の AWS アカウント の AWS Identity and Access Management (IAM) ユーザーまたはロールに S3 Access Grants インスタンスへのアクセスを付与できます。クロスアカウントアクセスで付与されるのは、次のアクセス許可 (アクション) のみです。

  • s3:GetAccessGrantsInstanceForPrefix — ユーザー、ロール、またはアプリは、特定のプレフィックスを持つ S3 Access Grants インスタンスを取得できます。

  • s3:ListAccessGrants

  • s3:ListAccessLocations

  • s3:GetDataAccess — ユーザー、ロール、またはアプリは、S3 Access Grants を介して付与されたアクセスに基づいて一時的な認証情報をリクエストできます。これらの認証情報を使用して、アクセスが付与されている S3 データにアクセスする。

このようなアクセス許可のいずれかをリソースポリシーに含めることができます。S3 Access Grants インスタンスのこのリソースポリシーは、通常のリソースベースのポリシーであり、IAM ポリシー言語がサポートするすべてをサポートします。同じポリシーで、例えば aws:PrincipalArn 条件を使用して、アカウント 111122223333 の特定の IAM アイデンティティにアクセスを付与することはできるとはいえ、S3 Access Grants ではその必要はありません。代わりに、S3 Access Grants インスタンス内で、自身のアカウントおよびその他のアカウントの個別の IAM アイデンティティに対する付与を作成できます。S3 Access Grants を使用して各アクセス権限を個別に管理することにより、アクセス許可をスケールできます。

AWS Resource Access Manager (AWS RAM) を既に使用している場合は、これを使用して、s3:AccessGrants リソースをその他のアカウントや組織内で共有できます。詳細については、「共有 AWS リソースの使用」を参照してください。AWS RAM を使用しない場合は、S3 Access Grants API オペレーションと AWS Command Line Interface (AWS CLI) を使用してリソースポリシーを追加することもできます。

s3:AccessGrants リソースをその他のアカウントや組織内で共有するには、AWS Resource Access Manager (AWS RAM) コンソールを使用することをお勧めします。S3 Access Grants をクロスアカウントで共有するには、以下を実行します。

S3 Access Grants インスタンスのリソースポリシーを設定するには:
  1. AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. AWS リージョン セレクタから AWS リージョン を選択します。

  3. 左側のナビゲーションペインで、[Access Grants] を選択します。

  4. Access Grants インスタンスページの [このアカウントのインスタンス] セクションで、[インスタンスを共有] をクリックします。これにより、AWS RAM コンソールにリダイレクトされます。

  5. [リソース共有を作成] をクリックします。

  6. AWS RAM ステップを実行して、リソース共有を作成します。詳細については、「AWS RAM ユーザーガイド」の「リソース共有の作成」を参照してください。

AWS CLI をインストールするには、「AWS Command Line Interface ユーザーガイド」の「AWS CLI をインストールする」を参照してください。

リソースポリシーは、put-access-grants-instance-resource-policy CLI コマンドを使用して追加できます。

アカウント 111122223333 の S3 Access Grants インスタンスへのクロスアカウントアクセスを 2 番目のアカウント 444455556666 に付与する場合、アカウント 111122223333 の S3 Access Grants インスタンスのリソースポリシーは、2 番目のアカウント 444455556666 に次のアクションを実行するアクセス許可を付与する必要があります。

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • s3:GetDataAccess

  • s3:GetAccessGrantsInstanceForPrefix

S3 Access Grants インスタンスのリソースポリシーで、S3 Access Grants インスタンスの ARN を Resource として指定し、2 番目のアカウント 444455556666Principal として指定します。次の例を使用する際は、ユーザー入力用プレースホルダーを独自の情報に置き換えます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "444455556666" }, "Action": [ "s3:ListAccessGrants", "s3:ListAccessGrantsLocations", "s3:GetDataAccess", "s3:GetAccessGrantsInstanceForPrefix" ], "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default" } ] }

S3 Access Grants インスタンスのリソースポリシーを追加または更新するには、次のコマンドを使用します。次のコマンド例を使用する際は、user input placeholders を独自の情報に置き換えます。

例 S3 Access Grants インスタンスのリソースポリシーを追加または更新する
aws s3control put-access-grants-instance-resource-policy \ --account-id 111122223333 \ --policy file://resourcePolicy.json \ --region us-east-2 { "Policy": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"AWS\": \"444455556666\"\n },\n \"Action\": [\n \"s3:ListAccessGrants\",\n \"s3:ListAccessGrantsLocations\",\n \"s3:GetDataAccess\",\n \"s3:GetAccessGrantsInstanceForPrefix\"\n ],\n \"Resource\": \"arn:aws:s3:us-east-2:111122223333:access-grants/default\"\n }\n ]\n }\n", "CreatedAt": "2023-06-16T00:07:47.473000+00:00" }
例 S3 Access Grants リソースポリシーを取得する

CLI を使用して、S3 Access Grants インスタンスのリソースポリシーを取得または削除することもできます。

S3 Access Grants リソースポリシーを取得するには、次のサンプルコマンドを使用します。このコマンドの例を実行するには、user input placeholders をユーザー自身の情報に置き換えます。

aws s3control get-access-grants-instance-resource-policy \ --account-id 111122223333 \ --region us-east-2 { "Policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::111122223333:root\"},\"Action\":[\"s3:ListAccessGrants\",\"s3:ListAccessGrantsLocations\",\"s3:GetDataAccess\"],\"Resource\":\"arn:aws:s3:us-east-2:111122223333:access-grants/default\"}]}", "CreatedAt": "2023-06-16T00:07:47.473000+00:00" }
例 S3 Access Grants リソースポリシーを削除する

S3 Access Grants リソースポリシーを削除するには、次のサンプルコマンドを使用します。このコマンドの例を実行するには、user input placeholders をユーザー自身の情報に置き換えます。

aws s3control delete-access-grants-instance-resource-policy \ --account-id 111122223333 \ --region us-east-2 // No response body

PutAccessGrantsInstanceResourcePolicy API を使用してリソースポリシーを追加できます。

アカウント 111122223333 の S3 Access Grants インスタンスへのクロスアカウントアクセスを 2 番目のアカウント 444455556666 に付与する場合、アカウント 111122223333 の S3 Access Grants インスタンスのリソースポリシーは、2 番目のアカウント 444455556666 に次のアクションを実行するアクセス許可を付与する必要があります。

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • s3:GetDataAccess

  • s3:GetAccessGrantsInstanceForPrefix

S3 Access Grants インスタンスのリソースポリシーで、S3 Access Grants インスタンスの ARN を Resource として指定し、2 番目のアカウント 444455556666Principal として指定します。次の例を使用する際は、ユーザー入力用プレースホルダーを独自の情報に置き換えます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "444455556666" }, "Action": [ "s3:ListAccessGrants", "s3:ListAccessGrantsLocations", "s3:GetDataAccess", "s3:GetAccessGrantsInstanceForPrefix" ], "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default" } ] }

その後、PutAccessGrantsInstanceResourcePolicy API を使用して、ポリシーを設定できます。

S3 Access Grants インスタンスのリソースポリシーを更新、取得、または削除するための REST API サポートの詳細については、「Amazon Simple Storage Service API リファレンス」の次のセクションを参照してください。

このセクションでは、S3 アクセス許可リソース ポリシーを設定して 2 番目の AWS アカウントに S3 データの一部へのアクセスを許可する方法の AWS SDK の例を示します。

Java

リソースポリシーを追加、更新、取得、または削除して、S3 Access Grants インスタンスへのクロスアカウントアクセスを管理します。

例 S3 Access Grants インスタンスのリソースポリシーを追加または更新する

アカウント 111122223333 の S3 Access Grants インスタンスへのクロスアカウントアクセスを 2 番目のアカウント 444455556666 に付与する場合、アカウント 111122223333 の S3 Access Grants インスタンスのリソースポリシーは、2 番目のアカウント 444455556666 に次のアクションを実行するアクセス許可を付与する必要があります。

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • s3:GetDataAccess

  • s3:GetAccessGrantsInstanceForPrefix

S3 Access Grants インスタンスのリソースポリシーで、S3 Access Grants インスタンスの ARN を Resource として指定し、2 番目のアカウント 444455556666Principal として指定します。次の例を使用する際は、ユーザー入力用プレースホルダーを独自の情報に置き換えます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "444455556666" }, "Action": [ "s3:ListAccessGrants", "s3:ListAccessGrantsLocations", "s3:GetDataAccess", "s3:GetAccessGrantsInstanceForPrefix" ], "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default" } ] }

S3 Access Grants インスタンスのリソースポリシーを追加または更新するには、次のサンプルコードを使用します。

public void putAccessGrantsInstanceResourcePolicy() { PutAccessGrantsInstanceResourcePolicyRequest putRequest = PutAccessGrantsInstanceResourcePolicyRequest.builder() .accountId(111122223333) .policy(RESOURCE_POLICY) .build(); PutAccessGrantsInstanceResourcePolicyResponse putResponse = s3Control.putAccessGrantsInstanceResourcePolicy(putRequest); LOGGER.info("PutAccessGrantsInstanceResourcePolicyResponse: " + putResponse); }

レスポンス:

PutAccessGrantsInstanceResourcePolicyResponse( Policy={ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "AWS": "444455556666" }, "Action": [ "s3:ListAccessGrants", "s3:ListAccessGrantsLocations", "s3:GetDataAccess", "s3:GetAccessGrantsInstanceForPrefix" ], "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default" }] } )
例 S3 Access Grants リソースポリシーを取得する

S3 Access Grants リソースポリシーを取得するには、次のサンプルコマンドを使用します。次のコマンド例を使用するには、user input placeholders をユーザー自身の情報に置き換えます。

public void getAccessGrantsInstanceResourcePolicy() { GetAccessGrantsInstanceResourcePolicyRequest getRequest = GetAccessGrantsInstanceResourcePolicyRequest.builder() .accountId(111122223333) .build(); GetAccessGrantsInstanceResourcePolicyResponse getResponse = s3Control.getAccessGrantsInstanceResourcePolicy(getRequest); LOGGER.info("GetAccessGrantsInstanceResourcePolicyResponse: " + getResponse); }

レスポンス:

GetAccessGrantsInstanceResourcePolicyResponse( Policy={"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::444455556666:root"},"Action":["s3:ListAccessGrants","s3:ListAccessGrantsLocations","s3:GetDataAccess"],"Resource":"arn:aws:s3:us-east-2:111122223333:access-grants/default"}]}, CreatedAt=2023-06-15T22:54:44.319Z )
例 S3 Access Grants リソースポリシーを削除する

S3 Access Grants リソースポリシーを削除するには、次のサンプルコマンドを使用します。次のコマンド例を使用するには、user input placeholders をユーザー自身の情報に置き換えます。

public void deleteAccessGrantsInstanceResourcePolicy() { DeleteAccessGrantsInstanceResourcePolicyRequest deleteRequest = DeleteAccessGrantsInstanceResourcePolicyRequest.builder() .accountId(111122223333) .build(); DeleteAccessGrantsInstanceResourcePolicyResponse deleteResponse = s3Control.putAccessGrantsInstanceResourcePolicy(deleteRequest); LOGGER.info("DeleteAccessGrantsInstanceResourcePolicyResponse: " + deleteResponse); }

レスポンス:

DeleteAccessGrantsInstanceResourcePolicyResponse()

ステップ 3: 2 番目のアカウントの IAM アイデンティティに、アカウント内の S3 Access Grants インスタンスを呼び出すためのアクセス許可を付与する

Amazon S3 データの所有者がアカウント 111122223333 の S3 Access Grants インスタンスのクロスアカウントポリシーを設定した後、2 番目のアカウント 444455556666 の所有者は、IAM ユーザーまたはロールのアイデンティティベースのポリシーを作成し、S3 Access Grants インスタンスへのアクセスを付与する必要があります。S3 Access Grants インスタンスのリソースポリシーで付与されている内容と付与するアクセス許可に応じて、アイデンティティベースのポリシーに次のアクションを 1 つまたは複数含めます。

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • s3:GetDataAccess

  • s3:GetAccessGrantsInstanceForPrefix

AWS cross-account access pattern」に従って、2 番目のアカウント 444455556666 の IAM ユーザーまたはロールは、このようなアクセス許可を明示的に 1 つまたは複数持つ必要があります。例えば、IAM ユーザーまたはロールがアカウント 111122223333 内の S3 Access Grants インスタンスを呼び出して認証情報をリクエストできるように、s3:GetDataAccess アクセス許可を付与します。

このコマンドの例を実行するには、user input placeholders をユーザー自身の情報に置き換えます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetDataAccess", ], "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default" } ] }

IAM アイデンティティベースのポリシーの編集については、「AWS Identity and Access Management ガイド」の「IAM ポリシーの編集」を参照してください。

ステップ 4: アカウントの S3 Access Grants インスタンスで許可を作成して、2 番目のアカウントの IAM アイデンティティに S3 データの一部へのアクセスを許可します。

最後の設定ステップでは、アカウント 111122223333 の S3 Access Grants インスタンスに許可を作成します。これにより、2 番目のアカウント 444455556666 の IAM アイデンティティに、アカウント内の S3 データの一部へのアクセスが付与されます。これを行うには、Amazon S3 コンソール、CLI、API、SDK を使用できます。詳細については、「権限を作成する」を参照してください。

許可では、2 番目のアカウントの IAM アイデンティティの AWS ARN を指定して、アクセスを許可する S3 データの場所 (バケット、プレフィックス、またはオブジェクト) を指定します。この場所は、S3 Access Grants インスタンスに既に登録されている必要があります。詳細については、「ロケーションを登録する」を参照してください。必要に応じて、サブプレフィックスを指定することができます。例えば、アクセスを許可する場所がバケットで、そのバケット内の特定のオブジェクトへのアクセスをさらに制限したい場合は、オブジェクトキー名を S3SubPrefix フィールドで渡します。または、キー名が特定のプレフィックス (2024-03-research-results/ など) で始まるバケット内のオブジェクトへのアクセスを制限したい場合は、S3SubPrefix=2024-03-research-results/ を渡します。

2 番目のアカウントのアイデンティティに対するアクセス許可を作成するための CLI コマンドの例は、次のとおりです。詳細については、「権限を作成する」を参照してください。このコマンドの例を実行するには、user input placeholders をユーザー自身の情報に置き換えます。

aws s3control create-access-grant \ --account-id 111122223333 \ --access-grants-location-id default \ --access-grants-location-configuration S3SubPrefix=prefixA* \ --permission READ \ --grantee GranteeType=IAM,GranteeIdentifier=arn:aws:iam::444455556666:role/data-consumer-1

クロスアカウントアクセスを設定したら、2 番目のアカウントのユーザーまたはロールは次を実行できます。