メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

例 2: バケット所有者がクロスアカウントのバケットのアクセス許可を付与

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

注記

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

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

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

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

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

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

この例では、2 個のアカウントが必要です。次の表に、これらのアカウントとそれぞれの管理者ユーザーの呼び方を示します。IAM のガイドライン(「管理者ユーザーを使用したリソースの作成とアクセス許可の付与について」を参照)に基づいて、この説明ではアカウントのルート認証情報を使用しません。その代わりに、各アカウントに管理者ユーザーを作成し、その認証情報を使用してリソースを作成し、アクセス許可を付与します。

AWS アカウント ID アカウントの呼び方 アカウントの管理者ユーザー

1111-1111-1111

アカウント A

AccountAadmin

2222-2222-2222

アカウント B

AccountBadmin

ユーザーを作成し、アクセス許可を付与するためのすべてのタスクは、AWS マネジメントコンソール で実行します。この説明では、アクセス許可を確認するために、コマンドラインツールの AWS コマンドラインインターフェイス(CLI)と AWS Tools for Windows PowerShell を使用するので、コードを作成する必要はありません。

ステップ 0: チュートリアルに関する準備を行う

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

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

      1. http://aws.amazon.com/s3 にアクセスして、[サインアップ] をクリックします。

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

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

    2. アカウント A の認証情報を使用して、IAM コンソールにサインインし、管理者ユーザーを作成します。

      1. ユーザー AccountAadmin を作成し、セキュリティ認証情報を書き留めます。手順については、『IAM ユーザーガイド』の「Creating an IAM User in Your AWS Account」を参照してください。

      2. AccountAadmin にフルアクセスを許可するユーザーポリシーをアタッチして、管理者権限を付与します。手順については、『IAM ユーザーガイド』の「ポリシーの管理(AWS マネジメントコンソール)」を参照してください。

    3. IAM コンソールで、[ダッシュボード] の [IAM User Sign-In URL] を書き留めます。このアカウントのすべてのユーザーは、AWS マネジメントコンソール にサインインするときにこの URL を使用する必要があります。

      詳細については、『IAM ユーザーガイド』の「IAM ユーザーが AWS アカウントにサインインする方法」を参照してください。

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

  2. AWS コマンドラインインターフェイス(CLI)または AWS Tools for Windows PowerShell をセットアップします。管理者ユーザーの認証情報は以下のように保存します。

    • AWS CLI を使用する場合、設定ファイルに AccountAadmin と AccountBadmin の 2 個のプロファイルを作成します。

    • AWS Tools for Windows PowerShell を使用する場合、セッションの認証情報を AccountAadmin と AccountBadmin として保存します。

    手順については、「チュートリアル例のツールのセットアップ」を参照してください。

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

    1. 2 個のアカウントの管理者ユーザーごとに、AWS CLI の設定ファイルでプロファイルを追加します。

      Copy
      [profile AccountAadmin] aws_access_key_id = access-key-ID aws_secret_access_key = secret-access-key region = us-east-1 [profile AccountBadmin] aws_access_key_id = access-key-ID aws_secret_access_key = secret-access-key region = us-east-1
    2. AWS Tools for Windows PowerShell を使用している場合

      Copy
      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 のタスクの実行

ステップ 1.1: AWS Management Console にサインイン

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

ステップ 1.2: バケットを作成する

  1. Amazon S3 コンソールで、バケットを作成します。この演習では、バケットを米国スタンダードリージョンに examplebucket という名前で作成することを前提とします。

    詳細な手順については、『Amazon Simple Storage Service コンソールユーザーガイド』の「バケットの作成」を参照してください。

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

    手順については、『Amazon Simple Storage Service 入門ガイド』の「バケットにオブジェクトを追加」を参照してください。

ステップ 1.3: クロスアカウントアクセス許可を付与するバケットポリシーをアカウント B にアタッチ

このバケットポリシーは、s3:GetBucketLocation および s3:ListBucket アクセス許可をアカウント B に付与します。これは、AccountAadmin のユーザーの認証情報を使用してコンソールにサインインしていることを前提としています。

  1. 次のバケットポリシーを examplebucket にアタッチします。このポリシーは、アカウント B に s3:GetBucketLocation および s3:ListBucket アクションのアクセス許可を付与します。

    手順については、『Amazon Simple Storage Service コンソールユーザーガイド』の「バケットのアクセス許可の編集」を参照してください。バケットポリシーを追加するには、以下の手順を実行します。

    Copy
    { "Version": "2012-10-17", "Statement": [ { "Sid": "Example permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:root" }, "Action": [ "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::examplebucket" ] } ] }
  2. アカウント B(とその管理ユーザー)がオペレーションを実行できることを確認します。

    • AWS CLI の使用

      Copy
      aws s3 ls s3://examplebucket --profile AccountBadmin aws s3api get-bucket-location --bucket examplebucket --profile AccountBadmin
    • AWS Tools for Windows PowerShell の使用

      Copy
      get-s3object -BucketName example2bucket -StoredCredentials AccountBadmin get-s3bucketlocation -BucketName example2bucket -StoredCredentials AccountBadmin

ステップ 2: アカウント B のタスクの実行

次に、アカウント B の管理者はユーザー Dave を作成し、アカウント A から受け取ったアクセス許可を Dave に委任します。

ステップ 2.1: AWS Management Console にサインイン

アカウント B の IAM ユーザーのサインイン URL を使用し、AccountBadmin ユーザーとして AWS マネジメントコンソール にサインインします。

ステップ 2.2: アカウント B でユーザー Dave を作成

  1. IAM コンソールで、ユーザー Dave を作成します。

    手順については、『IAM ユーザーガイド』の「IAM ユーザーの作成(AWS マネジメントコンソール)」を参照してください。

  2. UserDave の認証情報を記録します。

ステップ 2.3: ユーザー Dave にアクセス許可を委任

  • 以下のポリシーを使用して、ユーザー Dave のインラインポリシーを作成します。バケット名を指定してポリシーを更新する必要があります。

    これは、AccountBadmin のユーザーの認証情報を使用してコンソールにサインインしていることを前提としています。

    Copy
    { "Version": "2012-10-17", "Statement": [ { "Sid": "Example", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::examplebucket" ] } ] }

    手順については、『IAM ユーザーガイド』の「インラインポリシーの管理(AWS マネジメントコンソール)」を参照してください。

ステップ 2.4: アクセス許可のテスト

これで、アカウント B の Dave はアカウント A が所有する examplebucket の内容をリストできます。次のいずれかの手順でアクセス許可を確認できます。

AWS CLI によるテスト

  1. AWS CLI の設定ファイルに UserDave プロファイルを追加します。設定ファイルの詳細については、「チュートリアル例のツールのセットアップ」を参照してください。

    Copy
    [profile UserDave] aws_access_key_id = access-key aws_secret_access_key = secret-access-key region = us-east-1
  2. コマンドプロンプトで、次の AWS CLI コマンドを入力して、Dave がアカウント A によって所有される examplebucket からオブジェクトリストを取得できることを確認します。このコマンドでは、UserDave プロファイルを指定していることに注意してください。

    Copy
    aws s3 ls s3://examplebucket --profile UserDave

    Dave には他のアクセス許可はありません。したがって、他のオペレーション(次の get bucket location など)を実行しようとすると、Amazon S3 はアクセス許可の拒否を返します。

    Copy
    aws s3api get-bucket-location --bucket examplebucket --profile UserDave

AWS Tools for Windows PowerShell によるテスト

  1. Dave の認証情報を AccountBDave という名前で保存します。

    Copy
    set-awscredentials -AccessKey AccessKeyID -SecretKey SecretAccessKey -storeas AccountBDave
  2. List Bucket コマンドを試してみます。

    Copy
    get-s3object -BucketName example2bucket -StoredCredentials AccountBDave

    Dave には他のアクセス許可はありません。したがって、他のオペレーション(次の get bucket location など)を実行しようとすると、Amazon S3 はアクセス許可の拒否を返します。

    Copy
    get-s3bucketlocation -BucketName example2bucket -StoredCredentials AccountBDave

ステップ 3: 追加演習: 明示的な拒否の試行

アクセス許可は、ACL、バケットポリシー、およびユーザーポリシーによって付与できます。ただし、バケットポリシーまたはユーザーポリシーによって明示的な拒否が設定されている場合、他のアクセス許可よりも明示的な拒否が優先されます。テストのために、バケットポリシーを更新し、アカウント B の s3:ListBucket アクセス許可を明示的に拒否してみます。このポリシーは、s3:ListBucket アクセス許可も付与していますが、明示的な拒否が優先され、アカウント B またはアカウント B のユーザーは examplebucket 内のオブジェクトをリストできません。

  1. アカウント A のユーザー AccountAadmin の認証情報を使用して、バケットポリシーを次のように置き換えます。

    Copy
    { "Version": "2012-10-17", "Statement": [ { "Sid": "Example permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:root" }, "Action": [ "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::examplebucket" ] }, { "Sid": "Deny permission", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:root" }, "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::examplebucket" ] } ] }
  2. ここで AccountBadmin の認証情報を使用してバケットリストを取得しようとすると、アクセスは拒否されます。

    • AWS CLI の使用:

      Copy
      aws s3 ls s3://examplebucket --profile AccountBadmin
    • AWS Tools for Windows PowerShell の使用:

      Copy
      get-s3object -BucketName example2bucket -StoredCredentials AccountBDave

手順 4: クリーンアップ

  1. テストが終了したら、次の手順でクリーンアップを行います。

    1. アカウント A の認証情報を使用して AWS マネジメントコンソール(AWS マネジメントコンソール)にサインインし、次の操作を行います。

      • Amazon S3 コンソールで、examplebucket にアタッチされているバケットポリシーを削除します。バケットの [Properties] で、[Permissions] セクションのポリシーを削除します。

      • バケットをこの演習のために作成した場合は、Amazon S3 コンソールで、オブジェクトを削除してから、バケットを削除します。

      • IAM コンソールで、AccountAadmin ユーザーを削除します。

  2. アカウント B の認証情報を使用して AWS マネジメントコンソール(AWS マネジメントコンソール)にサインインします。IAM コンソールで、ユーザー AccountBadmin を削除します。