ブログの画像を別アカウントの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認定資格試験テキスト AWS認定AIプラクティショナー」という本を書きました。
「AWS教科書 AWS認定デベロッパーアソシエイト テキスト&問題集 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
関連記事
-
-
ADOT用のAWS マネージド型 Lambda レイヤーを使ってトレースを送信する
2025年11月にAWS X-Ray SDK / Daemon のサポート終了と …
-
-
特定AWSアカウント特定リージョンのCloud9環境を削除するLambda(Python)
やりたいこと 特定アカウント内特定リージョン内のCloud9環境を全部削除したい …
-
-
RDSインスタンスのストレージをgp2からgp3に変更しました
2022/11/9にRDSでgp3ボリュームが使用できるようになりました。 Am …
-
-
AWS Organizations EC2宣言型ポリシーを設定する
2024/12/1に発表されましたOrganizationsの宣言型ポリシーを設 …
-
-
boto3(Python SDK) s3 get_object でバイト範囲を指定する
S3のGetObjectアクションでバイト範囲を指定することができます。 それに …
-
-
AWS CodeStarのプロジェクトテンプレートLambda+Pythonによって生成されるもの
勉強会のデモで、AWS CodeStarのプロジェクトテンプレートLambda+ …
-
-
VyOSにSSMエージェントをインストールしました
VyOSにSSHでログインするのも面倒なので、SSMエージェントをインストールし …
-
-
ハンズオン: CloudWatch、X-Ray ~AWS認定デベロッパーアソシエイト(DVA-C02)~
このブログは2026年6月29日翔泳社さんより発売される「AWS教科書 AWS認 …
-
-
AWS Systems Manager Fleet Manager Windows RDP Connectを試してみました
AWS Systems Manager Fleet Manager Window …
-
-
AWS WAFのマネージドルールを見てみました
Web ACLで[Add managed rule groups]を選択しました …


