0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CodeBuildでdocker buildして別アカウントのECRにdocker pushするまで

Posted at

意外とハマりどころが多いと思ったので書いておく。

まず、アカウントAとBがあるとして、AのCodeBuildでdocker buildを実行してBのECRにdocker pushしたい状況を考える。

最初に、AのCodeBuildにBのECRを操作する権限を与える。AとBにそれぞれこういうRoleを作成する。B側のRoleにはAmazonEC2ContainerRegistryPowerUser をつけておく。

アカウントA_CodeBuildに付与するロールのポリシードキュメント
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::<Account B>:role/ECRRoleForCodeBuild"
        }
    ]
}
アカウントB_ECRRoleForCodeBuildの信頼ポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<Account A>:root",
                "Service": "codebuild.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

ここまでは簡単で、問題は次。docker loginするための認証情報を得る必要があるが、2点注意が必要。

  1. プロファイルをBアカウント側に設定すること
  2. credential_source = EcsContainer を設定すること

EcsContainerって何だよという感じだがCodeBuildがECSで実行されているということか。
configとloginコマンドはそれぞれこんな感じ

aws-config
[default]
region=ap-northeast-1
output=json

[profile B]
role_arn=arn:aws:iam::<Account B>:role/ECRRoleForCodeBuild
credential_source = EcsContainer
loginコマンド
aws --profile B ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin ${REPOSITORY_HOST}

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?