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

例 1: バケット所有者がユーザーにバケットのアクセス許可を付与

この演習では、AWS アカウントがバケットを所有し、アカウントに IAM ユーザーが存在します。ユーザーはデフォルトでは何のアクセス許可も持ちません。ユーザーが何らかのタスクを実行するには、親アカウントがそのためのアクセス許可をユーザーに付与する必要があります。バケット所有者とユーザーが属する親アカウントは同じです。したがって、AWS アカウントは、バケットポリシー、ユーザーポリシー、またはその両方を使用して、バケットへのアクセス許可をユーザーに付与できます。一部のアクセス許可はバケットポリシーを使用し、他のアクセス許可はユーザーポリシーを使用して付与します。

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

  1. アカウント管理者は、ユーザーに一連のアクセス許可を付与するバケットポリシーを作成します。

  2. アカウント管理者は、ユーザーポリシーをユーザーにアタッチして、追加のアクセス許可を付与します。

  3. これによりユーザーは、バケットポリシーとユーザーポリシーの両方を通じて付与されているアクセス許可を使用できます。

この例では、AWS アカウントが必要です。アカウントのルート認証情報を使用する代わりに、管理者ユーザーを作成します(「管理者ユーザーを使用したリソースの作成とアクセス許可の付与について」を参照してください)。AWS アカウントと管理者ユーザーは次のように呼ばれます。

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

1111-1111-1111

アカウント A

AccountAadmin

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

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

  1. AWS アカウントが存在し、管理者権限を持つユーザーが存在することを確認します。

    1. 必要な場合、アカウントにサインアップします。このアカウントをアカウント A と呼びます。

      1. https://aws.amazon.com/s3 にアクセスして、[Sign Up] をクリックします。

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

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

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

      1. ユーザー AccountAadmin を作成し、ユーザーのセキュリティ認証情報を記録します。

        手順については、『IAM ユーザーガイド』の「AWS アカウント内での IAM ユーザーの作成」を参照してください。

      2. AccountAadmin にフルアクセスを許可するユーザーポリシーをアタッチして、管理者権限を付与します。

        手順については、『IAM ユーザーガイド』の「ポリシーの使用」を参照してください。

      3. AccountAadmin の [IAM User Sign-In URL] を記録します。この URL は AWS マネジメントコンソール にサインインする際に使用します。これを知る方法の詳細については、『IAM ユーザーガイド』の「ユーザーがアカウントにサインインする方法」を参照してください。URL はアカウントごとに記録する必要があります。

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

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

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

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

ステップ 1: アカウント A にリソース(バケットと IAM ユーザー)を作成し、アクセス許可を付与

アカウント A のユーザー AccountAadmin の認証情報と、IAM ユーザー専用のサインイン URL を使用して、AWS マネジメントコンソール にサインインし、次の操作を行います。

  1. リソース(バケットと IAM ユーザー)の作成

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

    2. IAM コンソールで次の操作を行います。

      1. Dave というユーザーを作成します。

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

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

      3. ユーザー Dave の Amazon Resource Name(ARN)を記録します。IAM コンソールでユーザーを選択すると、[Summary] タブに ARN が表示されます。

  2. アクセス許可を付与します。

    バケット所有者とユーザーの親アカウントが同じであるため、AWS アカウントは、バケットポリシー、ユーザーポリシー、またはその両方を使用してユーザーにアクセス許可を付与できます。この例では、両方を使用します。オブジェクトの所有者も同じアカウントである場合は、バケット所有者はバケットポリシー(または IAM ポリシー)でオブジェクトのアクセス権を付与することもできます。

    1. Amazon S3 コンソールで、次のバケットポリシーを examplebucket にアタッチします。

      このポリシーには 2 つのステートメントがあります。

      • 最初のステートメントは、バケットオペレーションのアクセス許可 s3:GetBucketLocations3:ListBucket を Dave に付与します。

      • 2 番目のステートメントは、アクセス許可 s3:GetObject を付与します。アカウント A はオブジェクトの所有者でもあるので、アカウント管理者はアクセス許可 s3:GetObject を付与できます。

      Principal ステートメントでは、Dave はユーザー ARN によって識別されます。ポリシー要素の詳細については、「アクセスポリシー言語の概要」を参照してください。

      Copy
      { "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountA-ID:user/Dave" }, "Action": [ "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::examplebucket" ] }, { "Sid": "statement2", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountA-ID:user/Dave" }, "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::examplebucket/*" ] } ] }
    2. 以下のポリシーを使用して、ユーザー Dave のインラインポリシーを作成します。このポリシーは、s3:PutObject アクセス許可を Dave に付与します。バケット名を指定してポリシーを更新する必要があります。

      Copy
      { "Version": "2012-10-17", "Statement": [ { "Sid": "PermissionForObjectOperations", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::examplebucket/*" ] } ] }

      手順については、『IAM ユーザーガイド』の「インラインポリシーの使用」を参照してください。コンソールにサインインするには、アカウント B の認証情報を使用する必要があります。

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

Dave の認証情報を使用して、アクセス許可が機能することを確認します。次の 2 つの手順のいずれかを使用できます。

AWS CLI によるテスト

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

    Copy
    [profile UserDaveAccountA] aws_access_key_id = access-key aws_secret_access_key = secret-access-key region = us-east-1
  2. Dave がユーザーポリシーで許可されたオペレーションを実行できることを確認します。次の AWS CLI put-object コマンドを使用して、サンプルのオブジェクトをアップロードします。

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

    Copy
    aws s3api put-object --bucket examplebucket --key HappyFace.jpg --body HappyFace.jpg --profile UserDaveAccountA

    次の AWS CLI コマンドを実行して、オブジェクトを取得します。

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

AWS Tools for Windows PowerShell によるテスト

  1. Dave の認証情報を AccountADave という名前で保存します。次に、この認証情報を使用して、オブジェクトの PUT と GET を実行します。

    Copy
    set-awscredentials -AccessKey AccessKeyID -SecretKey SecretAccessKey -storeas AccountADave
  2. 保存したユーザー Dave の認証情報を使用して、AWS Tools for Windows PowerShell の Write-S3Object コマンドでサンプルオブジェクトをアップロードします。

    Copy
    Write-S3Object -bucketname examplebucket -key HappyFace.jpg -file HappyFace.jpg -StoredCredentials AccountADave

    先にアップロードしたオブジェクトをダウンロードします。

    Copy
    Read-S3Object -bucketname examplebucket -key HappyFace.jpg -file Output.jpg -StoredCredentials AccountADave