CodeBuild 用の AWS Secrets Manager を使用したプライベートレジストリのサンプル - AWS CodeBuild

CodeBuild 用の AWS Secrets Manager を使用したプライベートレジストリのサンプル

このサンプルでは、プライベートレジストリに保存されている Docker イメージを AWS CodeBuild ランタイム環境として使用する方法を示します。プライベートレジストリの認証情報は AWS Secrets Manager に保存されています。CodeBuild では任意のプライベートレジストリを使用できます。このサンプルでは Docker Hub を使用します。

注記

シークレットはアクションに表示され、ファイルに書き込まれる際にマスクされません。

プライベートレジストリのサンプルの要件

AWS CodeBuild でプライベートレジストリを使用するには、以下が必要です。

  • Docker Hub 認証情報を保存する Secrets Manager シークレット。この認証情報を使用してプライベートリポジトリにアクセスします。

    注記

    作成したシークレットに対して料金が発生します。

  • プライベートリポジトリまたはアカウント。

  • Secrets Manager シークレットへのアクセス許可を付与する CodeBuild サービスロールの IAM ポリシー。

これらのリソースを作成し、プライベートレジストリに保存されている Docker イメージを使用して CodeBuild ビルドプロジェクトを作成するには、以下の手順に従います。

プライベートレジストリを使用した CodeBuild プロジェクトの作成

  1. 無料のプライベートリポジトリを作成する方法については、Docker Hub のリポジトリに関するページを参照してください。ターミナルで以下のコマンドを実行して、イメージのプル、ID の取得、新しいリポジトリへのプッシュを行うこともできます。

    docker pull amazonlinux docker images amazonlinux --format {{.ID}} docker tag image-id your-username/repository-name:tag docker login docker push your-username/repository-name
  2. 「AWS Secrets Manager ユーザーガイド」の「AWS Secrets Manager シークレットを作成する」の手順に従います。

    1. ステップ 3 の [シークレットのタイプを選択] で、[他の種類のシークレット] を選択します。

    2. [キー/値のペア] で、Docker Hub ユーザー名として 1 つのキーと値のペアを作成し、Docker Hub パスワードとして 1 つのキーと値のペアを作成します

    3. 引き続き「AWS Secrets Manager シークレットを作成する」の手順に従います。

    4. ステップ 5 の [自動ローテーションの設定] ページで、自動ローテーションをオフにします。キーは Docker Hub の認証情報に対応しているためです。

    5. AWS Secrets Manager シークレットを作成する」の手順を終了します。

    詳細については、「AWS Secrets Manager とは」を参照してください。

  3. コンソールで AWS CodeBuild プロジェクトを作成すると、必要なアクセス許可が CodeBuild で自動的にアタッチされます。AWS KMS 以外の DefaultEncryptionKey キーを使用する場合は、そのキーをサービスロールに追加する必要があります。詳細については、『[g852]IAM ユーザーガイド[/g852]』の「[g851]ロールの修正 (コンソール)[/g851]」を参照してください。

    Secrets Manager で使用するサービスロールには、少なくとも secretsmanager:GetSecretValue アクセス許可が必要です。

  4. コンソールでプライベートレジストリに保存されている環境を使用してプロジェクトを作成するには、プロジェクトの作成時に以下の操作を行います。詳細については、ビルドプロジェクトの作成 (コンソール) を参照してください。

    注記

    プライベートレジストリが VPC 内にある場合は、パブリックインターネットアクセスが必要です。CodeBuild は、VPC 内のプライベート IP アドレスからイメージを取得できません。

    1. [環境イメージ] で、[カスタムイメージ] を選択します。

    2. [Environment type (環境タイプ)] で、[Linux] または [Windows] を選択します。

    3. [イメージレジストリ] で、[その他のレジストリ] を選択します。

    4. [外部レジストリの URL] で、画像の場所を入力し、[レジストリの認証情報 - オプション] で Secrets Manager の認証情報の ARN または名前を入力します。

      注記

      認証情報が現在のリージョンに存在しない場合は、ARN を使用する必要があります。認証情報が別のリージョンに存在する場合、認証情報の名前は使用できません。