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

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

重要

IAM ロールへのアクセス許可の付与は、個別のユーザーへのアクセス許可の付与より優れた方法です。IAM ロールへのアクセス許可の付与方法の詳細については、「クロスアカウントのアクセス許可の理解と IAM ロールの使用」を参照してください。

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

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

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

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

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

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

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

1111-1111-1111

アカウント A

AccountAadmin

注記

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

ユーザーを作成し、アクセス許可を付与するためのすべてのタスクは、AWS Management Consoleで実行します。このチュートリアルでは、許可を検証するために、コマンドラインツールの AWS Command Line Interface (AWS CLI) と AWS Tools for Windows PowerShell を使用するので、コードを記述する必要はありません。

チュートリアルの準備をする

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

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

      1. https://aws.amazon.com/s3 に移動して、[AWS アカウントの作成] を選択します。

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

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

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

      1. ユーザー AccountAadmin を作成して、ユーザーのセキュリティ認証情報を書き留めます。

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

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

        手順については、「IAM ユーザーガイド」の「IAM ポリシーを管理する」を参照してください。

      3. AccountAadminIAM ユーザーサインイン URL を書き留めます。この URL は AWS Management Console にサインインする際に使用する必要があります。サインイン URL を見つける方法については、「IAM ユーザーガイド」の「Sign in to the AWS Management Console as an IAM user」を参照してください。URL はアカウントごとにメモしてください。

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

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

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

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

ステップ 1: アカウント A でリソースを作成して、アクセス許可を付与する

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

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

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

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

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

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

      2. UserDave 認証情報を書き留めます。

      3. ユーザー Dave の Amazon リソースネーム (ARN) を書き留めます。IAM コンソールでユーザーを選択すると、[概要] タブにユーザー ARN が表示されます。

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

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

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

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

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

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

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

      { "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. 次の UserDaveAccountA プロファイルを追加して、AWS CLI 設定ファイルを更新します。詳細については、「チュートリアル用のツールのセットアップ」を参照してください。

    [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 という名前で保存します。次に、この認証情報を使用して、オブジェクトの PUTGET を実行します。

    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