AWS CodeBuildでクロスアカウントのECRイメージをカスタムイメージとして使う

AWS CodeBuildでクロスアカウントのECRイメージをカスタムイメージとして使う

Clock Icon2025.02.14

はじめに

マルチアカウント環境の場合、テストやビルドに用いるECRイメージは1つのアカウントで管理して、他のアカウントからそのイメージを使いたいという場面があります。この記事では、AWS CodeBuildでクロスアカウントのECRイメージをカスタムイメージとして使う方法を紹介します。

全体構成図

全体図

この記事では、ECRイメージを管理するアカウントをインフラアカウント、ECRイメージを使ってビルドするアカウントをサービスアカウントと、それぞれ呼びます。サービスアカウントのCodeBuildプロジェクトで、インフラアカウントのECRイメージを使うといった構成です。

インフラアカウントのECR許可設定

マネコンから操作する場合、まずは対象のリポジトリを選択してアクセス許可設定画面に遷移します。

CodeBuild-Permission1

右上の「ポリシーJSONの編集」から、JSON編集画面を開きます。

CodeBuild-Permission2

サービスアカウントのCodeBuildサービスロールからの操作を許可するため、以下のようなポリシーを設定します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CodeBuildAccess",
      "Effect": "Allow",
      "Principal": {
        "AWS": "< サービスアカウントのCodeBuildサービスロールARN >"
      },
      "Action": [
        "ecr:BatchCheckLayerAvailability",
        "ecr:BatchGetImage",
        "ecr:GetDownloadUrlForLayer"
      ]
    }
  ]
}

CodeBuild-Permission3

インフラアカウント側の準備は以上です。

サービスアカウントのCodeBuild設定

プロジェクトについては「別のECRアカウント」のイメージを使うように設定し、インフラアカウントのECRリポジトリURIを指定します。

CodeBuild-Config

「AWS CodeBuild にこのサービスロールの編集を許可し、このビルドプロジェクトでの使用を可能にする」にチェックを入れている場合は、サービスロールのポリシーをよしなに編集してくれますが、手動で設定する場合は以下のようなポリシーを設定します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecr:GetAuthorizationToken"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ecr:BatchCheckLayerAvailability",
        "ecr:BatchGetImage",
        "ecr:GetDownloadUrlForLayer"
      ],
      "Resource": "< インフラアカウントのECRリポジトリARN >"
    }
  ]
}

「AWS CodeBuild にこのサービスロールの編集を許可し、このビルドプロジェクトでの使用を可能にする」については以下の記事も参照ください。

https://dev.classmethod.jp/articles/codebuild-service-role-checkbox/

おわりに

シングルアカウントではIAM周りをあまり気にしなくてもAWSサービス間で連携できますが、クロスアカウントの場合はIAMポリシーの設定が必要になります。今回はECRイメージを使う場面でのポリシー設定について紹介しました。他にもクロスアカウントでの連携を行う際には、IAMポリシーの設定が必要になることが多いので、その際は適切なポリシーを設定してください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.