35
19

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 5 years have passed since last update.

他のAWSアカウントのECRリポジトリにPush/Pullする

Posted at

アカウント①(111111111111)がアカウント②(999999999999)に対してPush/Pullする場合。

アカウント①のIAMの設定

まず、Pushする側のアカウント①のIAMに対してECRの操作に必要な権限 を付与する。
これは、アカウント②のECRリポジトリの権限とは別に必要なので注意。

MiamでRoleに権限を付与した場合の例を示す

# アカウント①(111111111111)
role "DockerPusher", :path=>"/" do
  instance_profiles(
    "DockerPusher"
  )

  assume_role_policy_document do
    {"Version"=>"2012-10-17",
     "Statement"=>
      [{"Effect"=>"Allow",
        "Principal"=>{"Service"=>"ec2.amazonaws.com"},
        "Action"=>"sts:AssumeRole"}]}
  end

  # 今回はECRの権限を AmazonEC2ContainerRegistryPowerUser で付与する
  attached_managed_policies(
    "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPowerUser"
  )
end

アカウント②のECRリポジトリポリシーを設定する

ECRはS3のバケットポリシーのようにリポジトリごとにポリシーを設定することができ
http://docs.aws.amazon.com/AmazonECR/latest/userguide/RepositoryPolicyExamples.html
他のアカウントに対して操作権限を付与することができる。

アカウント②のECRリポジトリに対して、アカウント①のDockerPusherロールからPush/Pull可能なポリシーをセットする。

// アカウント②(999999999999)
{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "AllowPushPull",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:role/DockerPusher"
            },
            "Action": [
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage",
                "ecr:BatchCheckLayerAvailability",
                "ecr:PutImage",
                "ecr:InitiateLayerUpload",
                "ecr:UploadLayerPart",
                "ecr:CompleteLayerUpload"
            ]
        }
    ]
}

リポジトリのポリシーの操作はコンソールから行うことができるが、他のAWSアカウントに権限を付与する場合 rootしか指定できない ので、ロールを個別に指定する場合は以下のようにCLIでポリシーをセットする必要がある。

aws ecr set-repository-policy --repository-name webrick --policy-text file://policy.json --region us-east-1

アカウント①でDockerの操作

アカウント①のDockerPusherロールでは、以下のようにdocker loginを実行することで、Push/Pullすることができる。

# アカウント②のレジストリID(アカウント番号)を指定してログイン
$(aws ecr get-login --registry-ids 999999999999 --region us-east-1)

# あとは普通にPush/Pull
docker push 999999999999.dkr.ecr.us-east-1.amazonaws.com/webrick:latest

docker pull 999999999999.dkr.ecr.us-east-1.amazonaws.com/webrick:latest

おまけ

ECRリポジトリを管理するツールを作りました。
https://github.com/winebarrel/repol

35
19
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
35
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?