例 1: バケット所有者がユーザーにバケットのアクセス許可を付与する - Amazon Simple Storage Service

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

重要

アクセス許可は、個々のユーザーではなく、IAM ロールに付与することをお勧めします。これを行う方法については、背景: クロスアカウントのアクセス許可と IAM ロールの使用を参照してください。

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

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

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

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

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

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

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

1111-1111-1111

アカウント A

AccountAadmin

注記

この例では、管理者ユーザーは AccountAadmin で、アカウント A を参照しており、AccountAdmin ではありません。

ユーザーを作成し、アクセス許可を付与するためのすべてのタスクは、AWS Management Console で実行します。このチュートリアルでは、許可を確認するために、コマンドラインツールの AWS Command Line Interface (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 ユーザーガイドIAM ポリシーの管理を参照してください。

      3. AccountAadmin の [IAM User Sign−In URL] (IAM ユーザーのサインイン URL) を書き留めます。この URL は AWS Management Console にサインインする際に使用する必要があります。どこで見つけるのかの詳細については、IAM ユーザーガイドユーザーがお客様のアカウントにサインインする方法 を参照してください。URL はアカウントごとに記録する必要があります。

  2. AWS Command Line Interface (CLI) または AWS Tools for Windows PowerShell をセットアップします。管理者ユーザーの認証情報は以下のように保存します。

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

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

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

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

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

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

    1. Amazon S3 コンソールでバケットを作成します。作成した AWS リージョンを書き留めます。手順については、バケットの作成 を参照してください。

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

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

        詳細な手順については、「IAM ユーザーガイド」の「IAM ユーザーの作成 (AWS Management Console)」を参照してください。

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

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

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

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

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

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

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

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

      Principal ステートメントでは、Dave はユーザー ARN によって識別されます。ポリシーエレメントの詳細については、バケットポリシーとユーザーポリシー を参照してください。

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

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

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

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

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

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

    [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 パラメータは、オブジェクトのキー名を指定します。

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

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

    aws s3api get-object --bucket awsexamplebucket1 --key HappyFace.jpg OutputFile.jpg --profile UserDaveAccountA
AWS Tools for Windows PowerShell によるテスト
  1. Dave の認証情報を AccountADave という名前で保存します。次に、この認証情報を使用して、オブジェクトの PUT と GET を実行します。

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

    Write-S3Object -bucketname awsexamplebucket1 -key HappyFace.jpg -file HappyFace.jpg -StoredCredentials AccountADave

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

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