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

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

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

バケット所有者は、他の AWS アカウントにオブジェクトのアップロードを許可できます。これらのオブジェクトは、それを作成したアカウントによって所有されています。バケット所有者は、バケット所有者が作成したのでないオブジェクトを所有していません。したがって、バケット所有者がこれらのオブジェクトへのアクセスを許可するには、まずオブジェクトの所有者がオブジェクト ACL を使用してバケット所有者にアクセス許可を付与する必要があります。その後、バケット所有者はバケットポリシーによってこれらのアクセス許可を委任できます。この例では、バケット所有者は、自分のアカウントのユーザーにアクセス許可を委任します。

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

  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 コンソールの [Dashboard] で、[IAM User Sign-In URL] を記録します。このアカウントのユーザーは、この URL を使用して AWS マネジメントコンソール にサインインします。詳細については、『IAM ユーザーガイド』の「ユーザーがアカウントにサインインする方法」を参照してください。

    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 Management Console にサインイン

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

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

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

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

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

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

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

  4. Amazon S3 コンソールで、次のバケットポリシーを examplebucket バケットにアタッチします。手順については、「S3 バケットポリシーを追加する方法」(Amazon Simple Storage Service コンソールユーザーガイド) を参照してください。バケットポリシーの追加手順を実行します。

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

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

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

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

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

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

AWS CLI の使用

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

    Copy
    aws s3api put-object --bucket examplebucket --key HappyFace.jpg --body HappyFace.jpg --profile AccountBadmin
  2. バケット所有者に対するオブジェクトのフルコントロールの許可をオブジェクト ACL に追加します。

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

AWS Tools for Windows PowerShell の使用

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

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

    Copy
    Set-S3ACL -BucketName examplebucket -Key HappyFace.jpg -CannedACLName "bucket-owner-full-control" -StoredCreden

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

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

AWS CLI の使用

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

    Copy
    [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 の認証情報を指定します。

    Copy
    aws s3api get-object --bucket examplebucket --key HappyFace.jpg Outputfile.jpg --profile UserDaveAccountA

AWS Tools for Windows PowerShell の使用

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

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

    Copy
    Read-S3Object -BucketName examplebucket -Key HappyFace.jpg -file HappyFace.jpg -StoredCredentials UserDaveAccountA

手順 4: クリーンアップ

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

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

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

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

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

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