#背景
AWSを使用して別のアカウントのECRにあるDockerイメージを取得したかったため
AWS CLIによるロール切り替えについていろいろ調べた結果をまとめました。
#前提条件
#####1.アカウントAに欲しいDockerイメージがある
#####2.アカウントBに存在するEC2にアカウントAのDockerイメージをPULLする
#作業の流れ
####1.アカウントAのIAMからアカウントBで使えるロールを作る
#####1-1.信頼されたエンティティの選択
※アカウントIDは__アカウントBのID12桁__を入力する
#####1-2.Attachアクセス制限ポリシー
下記を付与する
・AmazonEC2ContainerRegistryFullAccess
・AmazonEC2FullAccess
・AmazonEC2RoleforSSM(EC2にセッションマネージャーで接続するために使用)
#####1-3.ロールの作成
・タグ名は入力しなくてもよい
・ロール名はswitch-roleなどわかりやすい名前が良いかと。
・作成後、作成されるロールのARNをコピーする
####2.アカウントBで実際にロールを切り替えるための準備をする
#####2-1.アカウントBでログインしてEC2のIAMロールを設定する
EC2に付けているIAMロールを開いて信頼関係タブから信頼関係編集ボタンを押下
青枠に作成したロールのARNを貼り付ける
#####2-2.EC2にログインして、awscliの設定をする
EC2にログイン(今回はセッションマネージャーを利用)
ログイン後、管理者権限(su)に切り替え
######2-2-1.切替後のプロファイルを登録する
[root@ip-10-10-10-131 ~]# aws configure --profile dev
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]: ap-northeast-1
Default output format [None]: json
ここでは、切替後の名前を__dev__と定義する
設定後、configureファイルを直接開く
[root@ip-10-10-10-131 ~]# vi .aws/config
「role_arn」と「source_profile」を追記する
######2-2-2.認証情報を登録する
[root@ip-10-10-10-131 ~]# vi .aws/credentials
credentialsファイルを新規作成する
[default]
aws_access_key_id = xxxxxxxx
aws_secret_access_key = xxxxxx
アクセスキーとシークレットアクセスキーはアカウントBで使用できるユーザーのものを登録する
####3.実際に試してみる
#####3-1.ロールを切り替えない場合
ECR(Amazon Elastic Container Registry)にログイン
[root@ip-10-10-10-185 ~]aws ecr get-login --region ap-northeast-1 --no-include-email > dlogin.sh
[root@ip-10-10-10-185 ~]chmod +x dlogin.sh
[root@ip-10-10-10-185 ~]./dlogin.sh
リポジトリの取得
[root@ip-10-10-10-185 ~]docker pull 'リポジトリのURI'
Error response from daemon: Get 'リポジトリのURI' no basic auth credentials
という風に認証関係でエラーとなる
#####3-2.ロールを切り替えた場合
ECR(Amazon Elastic Container Registry)にログイン
[root@ip-10-10-10-185 ~]aws ecr get-login --region ap-northeast-1 --no-include-email --profile dev > dlogin_dev.sh
[root@ip-10-10-10-185 ~]chmod +x dlogin_dev.sh
[root@ip-10-10-10-185 ~]./dlogin_dev.sh
リポジトリの取得
[root@ip-10-10-10-185 ~]docker pull 'リポジトリのURI'
ダウンロード中..
・
・
・
・
Digest: sha256:0xx
Status: Downloaded newer image for 'リポジトリのURI'
取得したイメージの確認
[root@ip-10-10-10-185 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
リポジトリ名 latest xxxxxxxxxxxx 13 months ago 5.37GB
#最後に
今回はDockerイメージの取得に特化したが、ロールの切り替えはCodeCommitからドキュメントの取得などにも使えるので
備忘録としてaws cliの切り替えの手順をまとめました。
[AWS CLI でロールを切り替えて作業する]
(https://nasrinjp1.hatenablog.com/entry/2018/04/06/215737)