ブログの画像を別アカウントのS3に移動するためにIAMロールでクロスアカウントアクセス
ずっと先延ばしにしていたのですが、このブログの画像はEC2から直接配信しています。
いい加減にS3からの配信に切り替えようと、画像データだけの引っ越しを予定しております。
諸事情ありまして、S3バケットのアカウントとEC2のアカウントは別のアカウントです。
なので、クロスアカウントでファイルをアップロードします。
いい機会ですので、IAMロールを使用したクロスアカウントアクセスをEC2インスタンスプロファイルで実行しました。
S3のコマンドは、SSMセッションマネージャから実行してます。
ssm-userでも特に問題なく設定できました。
ほとんどこちらのブログ別アカウントのS3バケットを利用する手順を参考にさせていただきました。
ありがとうございます!
目次
アカウントA(S3バケットがある方)のIAMロールの設定
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::bucket_name/*", ] } ] } |
IAMポリシーは特定バケット以下へのPutObjectのみです。
これを「別のAWSアカウント」用のロールをアカウントBを指定して作成してアタッチしました。
結果として、次の画面のような信頼関係になりました。
このアカウントAのIAMロールのARNをアカウントB側で使用します。
アカウントB(EC2がある方)のIAMロールの設定
すでに起動しているEC2にIAMロールを割り当てているので、IAMポリシーをインラインポリシーで追加しました。
ResourceにはアカウントAで作成したIAMロールのARNを指定しました。
1 2 3 4 5 6 7 8 9 |
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::111111111111:role/account_a_role" } } |
セッションマネージャでEC2にアクセスします。
1 2 |
$ vim ~/.aws/credentials |
credentialsファイルを以下のように作成しました。
1 2 3 4 |
[s3_profile] role_arn = arn:aws:iam::111111111111:role/account_a_role credential_source=Ec2InstanceMetadata |
試しにreadme.htmlをアップロードしてみました。
1 2 3 |
$ aws s3 cp readme.html s3://bucket_name/ --profile s3_profile upload: readme.html to s3://bucket_name/readme.html |
無事アップロードされました。
これで、画像ファイルのコピーは恙無く行えそうです。
sudo利用時
今回、最初にうっかりsudoで実行して、
「The config profile (s3_profile) could not be found」
となってしまいました。
ssm-userでsudo でroot権限で実行したのでssm-userのcredentialsが見つからないということのようです。
/root/.aws/credentialsにプロファイル情報を作ればsudoでも実行できました。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。


開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
Kinesis Data AnalyticsをKinesis Data Streamsに接続してSQL検索する
Amazon Kinesis Data StreamsにTwitter検索データ …
-
-
cfn-signalの認証とネットワーク
AWS CloudFormationヘルパースクリプトのcfn-signalがC …
-
-
EC2 VyOSで/etc/resolv.confを設定しました
EC2でVyOSを起動してSSHで接続して確認していたところ、どうもVyOSから …
-
-
API GatewayからLambdaを介さずにSNSトピックへ送信
やりたいこと APIリクエストをまずLambdaで受けて、SNSトピックへ送信す …
-
-
Amazon API Gatewayでモックを作る
超シンプルなAPI Gatewayのサンプルがほしかったので、ユーザーガイドの手 …
-
-
AWS Organizations SCPがリソースベースのポリシーには影響しないことを確認
AWS Organizations SCPで許可ポリシーの設定をし継承の関係を確 …
-
-
IAMセッションポリシーの利用(GetFederationToken)
GetFederationTokenでのセッションポリシーは、呼び出し元のIAM …
-
-
AWS Systems Manager AutomationでEC2の自動停止
Systems Manager Automationがない時代に、Lambdaを …
-
-
Amazon SageMaker Canvas Immersion Dayワークショップのエンドツーエンド機械学習の記録
Amazon SageMaker Canvas Immersion Dayという …
-
-
Backlogの課題チケット更新内容をMicrosoft Teamsに通知する(AWS Lambda Python)
BacklogにSlack連携が追加されました。 ですが、私の所属している会社で …