Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを使用して、別のアカウントの Amazon Simple Storage Service (Amazon S3) バケットにアクセスしたいと考えています。
解決策
**注:**Amazon EC2 インスタンスに Amazon S3 バケットへのアクセス権を付与するステップは、別のアカウントの AWS リソースへのアクセスを許可するステップと似ています。
アカウント A のインスタンスに、アカウント B の S3 バケットへのアクセス権を付与するには、次の手順を実行します。
アカウント B で IAM ロールを作成します。
アカウント B から ID およびアクセス管理 (IAM) ロールを作成するには、次の手順を実行します。
- アカウント B を使用して AWS マネジメントコンソールにサインインします。
- IAM コンソールを開きます。
- ナビゲーションペインで [ロール]、[ロールを作成] の順に選択します。
- [信頼されたエンティティタイプ] で、[AWS アカウント] を選択します。
- 別の AWS アカウントを選択し、アカウント A のアカウント ID を入力します。
- [次へ] を選択します。
- 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"
]
}
]
}
**注:**ユースケースに必要な Amazon S3 バケットレベルとオブジェクトレベルのアクセス権限に基づいて IAM ポリシーを変更します。
- [ロール名] に、ロールの名前を入力します。
- (オプション) ロールにタグを追加します。
- [ロールの作成] を選択します。
アカウント B から IAM ロールの ARN を確認します。
IAM ロールの ARN を見つけるには、次の手順を実行します。
- IAM コンソールのナビゲーションペインから、[ロール] を選択します。
- 作成した IAM ロールを選択します。
- ロール ARN にリストされている値を書き留めておきます。
アカウント A から、別のロールを作成してインスタンスにアタッチします
アカウント A から別のインスタンスプロファイルを作成してインスタンスにアタッチするには、次の手順を実行します。
- アカウント A を使用して AWS マネジメントコンソールにサインインします。
- IAM コンソールを開きます。
- ナビゲーションペインから [ロール]、**[ロールを作成]**を選択します。
- [信頼されたエンティティタイプ] で、[AWS サービス] を選択します。
- [サービスまたはユースケース] で [EC2] を選択し、次にユースケースを選択します。
- [次へ] を選択します。
- [権限の追加] ページで、[次へ] を選択します。
- [ロール名] に、ロールの名前を入力します。
- (オプション) ロールにタグを追加します。
- [ロールの作成] を選択します。
- ロールのリストから、作成したロールを選択します。
- [権限を追加] ページで [インラインポリシーを作成] を選択します。
- ポリシーエディターで JSON を選択し、次のポリシーを入力します。
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::111111111111:role/ROLENAME"
}]
}
**注:**arn:aws:iam::111111111111:role/ROLENAME を、アカウント B で作成した IAM ロールの ARN に置き換えます。
[次へ] を選択します。
**[名前]にポリシーの名前を入力し、[ポリシーの作成]**を選択します。
Amazon S3 バケットへのアクセスに使用するインスタンスに IAM ロールをアタッチします。
Amazon EC2 インスタンスから、CLI 設定ファイルにロールのプロファイルを作成します。
**注:**SSH と AWS Systems Manager の機能であるセッションマネージャを使用してインスタンスに接続する場合、ec2-user と ssm-user の両方に対してこれらの手順を実行する必要があります。
インスタンスから CLI 設定ファイル内のロールのプロファイルを作成するには、次の手順を実行します。
-
インスタンスに接続します。詳細については、「Linux インスタンスへの接続」または「Windows インスタンスへの接続」を参照してください。
-
ディレクトリに ~/.aws という名前のフォルダがすでにあるかどうかを確認するには、次の ls コマンドを実行してインスタンスディレクトリを一覧表示します。
ls -l ~/.aws
~/.aws フォルダが見つかったら、次のステップに進みます。~/.aws フォルダが見つからない場合は、次の mkdir コマンドを実行してフォルダを作成します。
mkdir ~/.aws/
-
~/.aws フォルダで、テキストエディタを使用してファイルを作成します。ファイルに config という名前を付けます。
-
ファイルに、次のテキストを入力します。
[profile enterprofilename]
role_arn = arn:aws:iam::111111111111:role/ROLENAME
credential_source = Ec2InstanceMetadata
**注:**enterprofilename を自分の値に置き換えてください。arn:aws:iam::111111111111:role/ROLENAME を、アカウント B で作成したロールの ARN に置き換えてください。
-
ファイルを保存します。
インスタンスプロファイルがロールを引き継ぐことができることを確認する
インスタンスのロールがアカウント B のロールを引き継ぐことができることを確認するには、インスタンスに接続し、次のコマンドを実行します。
$aws sts get-caller-identity --profile profilename
**注:**profilename は、インスタンスにアタッチしたロールの名前に置き換えてください。
このコマンドは、次のような出力を返します。
"Account": "11111111111",
"UserId": "AROAEXAMPLEID:sessionName",
"Arn": "arn:aws:sts::111111111111:assumed-role/ROLENAME/sessionName"
**「Arn」**の値が、アカウント B で作成したロールの ARN と一致することを確認します。
Amazon S3 バケットへのアクセスを確認する
インスタンスが S3 バケットにアクセスできることを確認するには、インスタンスに接続し、次の list コマンドを実行します。
aws s3 ls s3://DOC-EXAMPLE-BUCKET --profile profilename
**注:**profilename は、インスタンスにアタッチしたロールの名前に置き換えてください。
インスタンスがバケットに正常にアクセスできた場合、次のような応答が返されます。
PRE Hello/
2018-08-15 16:16:51 89 index.html
関連情報
IAM チュートリアル: AWS アカウント間の IAM ロールを使用したアクセスの委任