例 3: バケット所有者が自分の所有していないオブジェクトに対するアクセス許可をユーザーに付与する - Amazon Simple Storage Service

例 3: バケット所有者が自分の所有していないオブジェクトに対するアクセス許可をユーザーに付与する

この例のシナリオでは、バケット所有者がオブジェクトへのアクセス許可を付与しますが、バケット内のオブジェクトの一部がバケット所有者によって所有されていません。バケット所有者は、自分が所有していないオブジェクトへのアクセス許可をどうすれば付与できるでしょうか。 この例では、バケット所有者は、自分のアカウントのユーザーにアクセス許可を付与しようとしています。

バケット所有者は、他の AWS アカウントにオブジェクトのアップロードを許可できます。これらのオブジェクトは、それを作成したアカウントによって所有されています。バケット所有者は、バケット所有者が作成したのでないオブジェクトを所有していません。したがって、バケット所有者がこれらのオブジェクトへのアクセスを許可するには、まずオブジェクトの所有者がオブジェクト ACL を使用してバケット所有者にアクセス許可を付与する必要があります。詳細については、「Amazon S3 のバケットとオブジェクトの所有権」を参照してください。

この例では、バケット所有者は、自分のアカウントのユーザーにアクセス許可を委任します。この手順の概要を以下に示します。

  1. アカウント A の管理者ユーザーが、2 つのステートメントを持つバケットポリシーをアタッチします。

    • オブジェクトをアップロードするクロスアカウントアクセスをアカウント B に許可します。

    • 自分のアカウントのユーザーにバケット内のオブジェクトへのアクセスを許可します。

  2. アカウント B の管理者ユーザーは、アカウント A が所有するバケットにオブジェクトをアップロードします。

  3. アカウント B の管理者は、オブジェクト ACL を更新して、オブジェクトに対するフルコントロールアクセス許可をバケット所有者に付与します。

  4. アカウント 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. https://aws.amazon.com/s3/ に移動し、[Create an AWS Account (今すぐ無料サインアップ)] をクリックします。

      2. 画面上の指示に従ってください。アカウントがアクティブになり、使用可能な状態になったら、AWS から E メールで通知が届きます。

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

      • ユーザー AccountAadmin を作成し、セキュリティ認証情報を記録します。ユーザーの追加の詳細については、IAM ユーザーガイドの「AWS アカウントでの IAM ユーザーの作成」を参照してください。

      • AccountAadmin にフルアクセスを許可するユーザーポリシーをアタッチして、管理者権限を付与します。手順については、IAM ユーザーガイドの「IAM ポリシーの管理」を参照してください。

      • IAM コンソールの [Dashboard (ダッシュボード)] で、[IAM User Sign-In URL (IAM ユーザーのサインイン URL)] を記録します。このアカウントのユーザーは、AWS マネジメントコンソールにサインインするときにこの URL を使用する必要があります。詳細については、IAM ユーザーガイドの「IAM ユーザーが AWS アカウントにサインインする方法」を参照してください。

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

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

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

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

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

ステップ 1: アカウント A のタスクを実行する

ステップ 1.1: AWS マネジメントコンソールにサインインする

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

ステップ 1.2: バケットとユーザーを作成し、ユーザーにアクセス許可を付与するバケットポリシーを追加する

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

    手順については、Amazon Simple Storage Service コンソールユーザーガイドの「S3 バケットを作成する方法」を参照してください。

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

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

  3. Dave の認証情報を書き留めます。

  4. Amazon S3 コンソールで、次のバケットポリシーを DOC-EXAMPLE-BUCKET1 バケットにアタッチします。手順については、Amazon Simple Storage Service コンソールユーザーガイドの「S3 バケットポリシーを追加する方法」を参照してください。バケットポリシーを追加するには、このステップに従います。アカウント ID を確認する方法については、「AWS アカウント ID の検索」を参照してください。

    このポリシーは、アカウント B に s3:PutObject および s3:ListBucket アクセス許可を付与します。このポリシーはまた、ユーザー Dave に s3:GetObject アクセス許可を付与します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:root" }, "Action": [ "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1" ] }, { "Sid": "Statement3", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountA-ID:user/Dave" }, "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" ] } ] }

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

これでアカウント B はアカウント A のバケットに対するオペレーション実行のアクセス許可を得ましたので、管理者は次の作業を行います。

  • アカウント A のバケットにオブジェクトをアップロードします。

  • バケット所有者であるアカウント A にそのバケットへのフルコントロールをオブジェクトの ACL で付与します。

AWS CLI の使用

  1. put-object AWS CLI コマンドを使用して、オブジェクトをアップロードします。アップロードするソースファイルは、コマンドの --body パラメータで指定します。たとえば、ファイルが Windows マシンの C: ドライブにある場合、c:\HappyFace.jpg のように指定します。--key パラメータは、オブジェクトのキー名を指定します。

    aws s3api put-object --bucket DOC-EXAMPLE-BUCKET1 --key HappyFace.jpg --body HappyFace.jpg --profile AccountBadmin
  2. バケット所有者に対するオブジェクトのフルコントロールの許可をオブジェクト ACL に追加します。正規ユーザー ID を確認する方法については、「AWS アカウントの正規ユーザー ID を検索するには」を参照してください。

    aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET1 --key HappyFace.jpg --grant-full-control id="AccountA-CanonicalUserID" --profile AccountBadmin

AWS Tools for Windows PowerShell の使用

  1. AWS Tools for Windows PowerShell の Write-S3Object コマンドを使用して、オブジェクトをアップロードします。

    Write-S3Object -BucketName DOC-EXAMPLE-BUCKET1 -key HappyFace.jpg -file HappyFace.jpg -StoredCredentials AccountBadmin
  2. バケット所有者に対するオブジェクトのフルコントロールの許可をオブジェクト ACL に追加します。

    Set-S3ACL -BucketName DOC-EXAMPLE-BUCKET1 -Key HappyFace.jpg -CannedACLName "bucket-owner-full-control" -StoredCreden

ステップ 3: アクセス許可をテストする

アカウント A のユーザー Dave が、アカウント B が所有するオブジェクトにアクセスできることを確認します。

AWS CLI の使用

  1. ユーザー Dave の認証情報を AWS CLI の設定ファイルに追加して、新しいプロファイル UserDaveAccountA を作成します。詳細については、「チュートリアル例のツールのセットアップ」を参照してください。

    [profile UserDaveAccountA] aws_access_key_id = access-key aws_secret_access_key = secret-access-key region = us-east-1
  2. AWS CLI の get-object コマンドを実行して HappyFace.jpg をダウンロードし、ローカルに保存します。--profile パラメータを追加して、ユーザー Dave の認証情報を指定します。

    aws s3api get-object --bucket DOC-EXAMPLE-BUCKET1 --key HappyFace.jpg Outputfile.jpg --profile UserDaveAccountA

AWS Tools for Windows PowerShell の使用

  1. ユーザー Dave の AWS 認証情報を、UserDaveAccountA という名前で永続的ストアに保存します。

    Set-AWSCredentials -AccessKey UserDave-AccessKey -SecretKey UserDave-SecretAccessKey -storeas UserDaveAccountA
  2. Read-S3Object コマンドを実行して HappyFace.jpg オブジェクトをダウンロードし、ローカルに保存します。-StoredCredentials パラメータを追加して、ユーザー Dave の認証情報を指定します。

    Read-S3Object -BucketName DOC-EXAMPLE-BUCKET1 -Key HappyFace.jpg -file HappyFace.jpg -StoredCredentials UserDaveAccountA

ステップ 4: クリーンアップする

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

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

      • Amazon S3 コンソールで、DOC-EXAMPLE-BUCKET1 にアタッチされているバケットポリシーを削除します。バケットの [Properties (プロパティ)] で、[Permissions (アクセス許可)] セクションのポリシーを削除します。

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

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

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