スキップしてコンテンツを表示

Amazon EC2 インスタンスに別の AWS アカウントの Amazon S3 バケットへのアクセス権を付与する方法を教えてください。

所要時間2分
0

Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを使用して、別の AWS アカウントの Amazon Simple Storage Service (Amazon S3) バケットにアクセスしたいと考えています。

解決策

EC2 インスタンスから S3 バケットへのクロスアカウントアクセスを許可するには、2 つの AWS アカウント間に信頼関係を設定します。AWS Identity and Access Management (IAM) ロールを使用して関係を作成します。バケット所有者アカウントから、S3 アクセス許可を付与するロールを作成します。EC2 インスタンスの所有者アカウントから、バケットにアクセスするためのバケット所有者のロールを引き受けることができるロールを作成します。

バケット所有者アカウントからロールを作成する

バケット所有者アカウントから Identity and Access Management (IAM) ロールを作成するには、次の手順を実行します。

  1. バケット所有者アカウントを使用して AWS マネジメントコンソールにサインインします。

  2. IAM コンソールを開きます。

  3. ナビゲーションペインで [ロール][ロールを作成] の順に選択します。

  4. [信頼されたエンティティタイプ] で、[AWS アカウント] を選択します。

  5. [別の AWS アカウント] を選択し、EC2 インスタンス所有者アカウントのアカウント ID を入力します。
    注: [外部 ID が必要] または [MFA が必要] オプションは、セキュリティ要件でこれらのオプションが義務付けられている場合を除き、選択しないでください。

  6. [次へ] をクリックします。

  7. Amazon S3 へのアクセスを委任するロールに IAM ポリシーをアタッチし、[次へ] を選択します。例えば、次の IAM ポリシーは、バケット内のオブジェクトへの s3:GetObject アクセス権を付与します。

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:ListBucket"
                ],
                "Resource": [
                    "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
                    "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
                ]
            }
        ]
    }

    注: DOC-EXAMPLE-BUCKET は、実際の S3 バケットの名前に置き換えます。また、ユースケースに必要な Amazon S3 バケットレベルとオブジェクトレベルのアクセス許可に基づいて IAM ポリシーを変更します。

  8. [ロール名] に、ロールの名前を入力します。

  9. (オプション) ロールにタグを追加します。

  10. [ロールの作成] を選択します。

バケット所有者アカウントから、IAM ロールの Amazon リソースネーム (ARN) を見つけます

IAM ロールの ARN を見つけるには、次の手順を実行します。

  1. IAM コンソールのナビゲーションペインから、[ロール] を選択します。
  2. 作成した IAM ロールを選択します。
  3. ロール ARN にリストされている値を書き留めておきます。

EC2 インスタンス所有者アカウントから、別のロールを作成してインスタンスにアタッチします。

EC2 インスタンス所有者アカウントから別のインスタンスプロファイルを作成してインスタンスにアタッチするには、次の手順を実行します。

  1. EC2 インスタンス所有者アカウントを使用して、AWS マネジメントコンソールにサインインします。
  2. IAM コンソールを開きます。
  3. ナビゲーションペインから [ロール]、**[ロールを作成]**を選択します。
  4. [信頼されたエンティティタイプ] で、[AWS サービス] を選択します。
  5. [サービスまたはユースケース][EC2] を選択し、ユースケースを選択します。
  6. [次へ] をクリックします。
  7. [アクセス許可を追加] ページで、[次へ] を選択します。
  8. [ロール名] に、ロールの名前を入力します。
  9. (オプション) ロールにタグを追加します。
  10. [ロールの作成] を選択します。
  11. ロールのリストから、作成したロールを選択します。
  12. [アクセス許可を追加] ページで [インラインポリシーを作成] を選択します。
  13. ポリシーエディターJSON を選択し、次のポリシーを入力します。
{
    "Version": "2012-10-17",
    "Statement": [{
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::111111111111:role/ROLENAME"
    }]
}

注: arn:aws:iam::111111111111:role/ROLENAME を、バケット所有者アカウントで作成した IAM ロールの ARN に置き換えます。

  1. [次へ] をクリックします。
  2. **[名前]にポリシーの名前を入力し、[ポリシーの作成]**を選択します。
  3. Amazon S3 バケットへのアクセスに使用するインスタンスに IAM ロールをアタッチします。

Amazon EC2 インスタンスから、CLI 設定ファイルにロールのプロファイルを作成します。

注: SSH と Session Manager を使用してインスタンスに接続する場合、ec2-user と ssm-user の両方に対してこれらの手順を実行する必要があります。Session Manager は AWS Systems Manager 内のツールです。

インスタンスから CLI 設定ファイル内のロールのプロファイルを作成するには、次の手順を実行します。

  1. インスタンスに接続します。詳細については、「SSH を使用した Linux インスタンスへの接続」または「RDP を使用した Windows インスタンスへの接続」を参照してください。

  2. ディレクトリに ~/.aws という名前のフォルダがすでにあるかどうかを確認するには、次の ls コマンドを実行してインスタンスディレクトリを一覧表示します。

    ls -l ~/.aws
  3. ~/.aws フォルダが見つかったら、次のステップに進みます。~/.aws フォルダが見つからない場合は、次の mkdir コマンドを実行してフォルダを作成します。

    mkdir ~/.aws/
  4. ~/.aws フォルダで、テキストエディタを使用してファイルを作成します。ファイルに config という名前を付けます。

  5. ファイルに、次のテキストを入力してロールのプロファイルを定義します。

    [profile enterprofilename]
    role_arn = arn:aws:iam::111111111111:role/ROLENAME
    credential_source = Ec2InstanceMetadata

    **注:**enterprofilename を自分の値に置き換えます。arn:aws:iam::111111111111:role/ROLENAME を、バケット所有者アカウントで作成したロールの ARN に置き換えます。

  6. ファイルを保存します。

インスタンスプロファイルがロールを引き継ぐことができることを確認する

インスタンスのロールがバケット所有者アカウントのロールを引き継ぐことができることを確認するには、インスタンスに接続し、次のコマンドを実行します。

aws sts get-caller-identity --profile profilename

**注:**profilename を、インスタンスにアタッチしたロールの名前に置き換えます。

このコマンドは、次のような出力を返します。

"Account": "11111111111",
"UserId": "AROAEXAMPLEID:sessionName",
"Arn": "arn:aws:sts::111111111111:assumed-role/ROLENAME/sessionName"

"Arn" の値が、バケット所有者アカウントで作成したロールの ARN と一致することを確認します。

Amazon S3 バケットへのアクセスを確認する

インスタンスが S3 バケットにアクセスできることを確認するには、インスタンスに接続し、次の list コマンドを実行します。

aws s3 ls s3://DOC-EXAMPLE-BUCKET --profile profilename

注: DOC-EXAMPLE-BUCKET を実際のバケットの名前に置き換え、profilename を設定ファイルに設定した名前に置き換えます。

インスタンスがバケットに正常にアクセスできた場合、次のような応答が返されます。

PRE Hello/
2018-08-15 16:16:51 89 index.html

関連情報

IAM チュートリアル: AWS アカウント間の IAM ロールを使用したアクセスの委任

AWS公式更新しました 4ヶ月前
コメントはありません

関連するコンテンツ