ユーザー指定のサービス アカウントの構成

このページでは、ビルド用にユーザー指定のサービス アカウントを構成する方法について説明します。

デフォルトでは、Cloud Build は特別なサービス アカウントを使用してユーザーの代わりにビルドを実行します。このサービス アカウントは Cloud Build サービス アカウントと呼ばれ、Google Cloud プロジェクトで Cloud Build API を有効にすると自動的に作成されます。このサービス アカウントには、ビルドの更新やログの書き込みなど、さまざまな権限がデフォルトで付与されています。

デフォルトの Cloud Build サービス アカウントを使用する代わりに、ユーザーの代理でビルドを実行する独自のサービス アカウントを指定できます。プロジェクトごとに、任意の数のサービス アカウントを指定できます。複数のサービス アカウントを管理すれば、これらのサービス アカウントに実行するタスクに応じて異なる権限を付与できます。たとえば、1 つのサービス アカウントを使用してイメージをビルドして Container Registry に push し、別のサービス アカウントを使用してイメージをビルドして Artifact Registry に push できます。

始める前に

  • Cloud Build and IAM API を有効にします。

    API を有効にする

  • このガイドのコマンドラインの例を使用するには、Cloud SDK をインストールして構成します。

  • 使用するサービス アカウントを作成したことを確認します。 ビルドを実行する同じクラウド プロジェクトでアカウントを作成する必要があります

ビルドログの設定

ビルド用に独自のサービス アカウントを指定するには、Cloud Logging または独自の Cloud Storage バケットのいずれかでビルドログを保存する必要があります。

必要な IAM 権限

サービス アカウントに IAM のロールを付与する方法については、リソースへのアクセスの構成をご覧ください。

コマンドラインからのビルドの実行

  1. プロジェクトのルート ディレクトリに、cloudbuild.yaml または cloudbuild.json という名前の Cloud Build ビルド構成ファイルを作成します。

  2. ビルド構成ファイルで、次のことを行います。

    • サービス アカウントのメールアドレスを指定する serviceAccount フィールドを追加します。
    • ビルドログを Cloud Storage バケットに保存する場合は、Cloud Storage バケットを指す logsBucket フィールドを追加します。

    YAML

    steps:
    - name: 'bash'
      args: ['echo', 'Hello world!']
    logsBucket: 'LOGS_BUCKET_LOCATION'
    serviceAccount: 'projects/PROJECT_NAME/serviceAccounts/SERVICE_ACCOUNT'
    

    JSON

    {
      "steps": [
      {
        "name": "bash",
        "args": [
          "echo",
          "Hello world!"
        ]
      }
      ],
      "logsBucket": "LOGS_BUCKET_LOCATION",
      "serviceAccount": "projects/PROJECT_NAME/serviceAccounts/SERVICE_ACCOUNT"
    }
    

    ビルド構成ファイルのプレースホルダ値を次のように置き換えます。

    • LOGS_BUCKET_LOCATION: ビルドログを保存する Cloud Storage バケット。例: gs://mylogsbucket
    • PROJECT_NAME: ビルドを実行するクラウド プロジェクトの名前。
    • SERVICE_ACCOUNT は、ビルドに指定するサービス アカウントのメールアドレスまたは一意の ID です。
  3. ビルド構成ファイルを使用してビルドを開始します。

     gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
    

上記のコマンドのプレースホルダ値を次のように置き換えます。

  • CONFIG_FILE_PATH は、ビルド構成ファイルへのパスです。
  • SOURCE_DIRECTORY は、ソースコードのパスまたは URL です。

gcloud builds submit コマンドに CONFIG_FILE_PATHSOURCE_DIRECTORY を指定しない場合、Cloud Build は、ビルド構成ファイルとソースコードが現在の作業ディレクトリにあると想定します。

ビルドトリガーを使用したビルドの実行

  1. ソース リポジトリで、cloudbuild.yaml または cloudbuild.json という名前の Cloud Build ビルド構成ファイルを作成します。

  2. Logging またはユーザーが作成した Cloud Storage バケットにログを保存するようにビルドを構成します。ユーザー指定のサービス アカウントを使用する場合、デフォルトのバケットは使用できません。以下の例では、logsBucket フィールドは Cloud Storage バケットを指します。

    YAML

    steps:
    - name: 'bash'
      args: ['echo', 'Hello world!']
    logsBucket: 'LOGS_BUCKET_LOCATION'
    

    JSON

    {
      "steps": [
      {
        "name": "bash",
        "args": [
          "echo",
          "Hello world!"
        ]
      }
      ],
      "logsBucket": "LOGS_BUCKET_LOCATION",
    

    ビルド構成ファイルのプレースホルダ値を次のように置き換えます。

    • LOGS_BUCKET_LOCATION: ビルドログを保存する Cloud Storage バケット。例: gs://mylogsbucket
  3. ビルドトリガーで使用するサービス アカウントを指定します。

    Console

    1. ビルドトリガーを作成または編集します
    2. [サービス アカウント] フィールドに、サービス アカウントを指定します。サービス アカウントを指定しない場合は、デフォルトの Cloud Build サービス アカウントが使用されます。
    3. [作成] をクリックして、ビルドトリガーを保存します。

    gcloud

    ビルドトリガーを作成する場合は、--service-account フラグを使用してサービス アカウントを指定します。サービス アカウントを指定しない場合は、デフォルトの Cloud Build サービス アカウントが使用されます。次の例の gcloud コマンドは、ソースコードが GitHub にある場合にビルドトリガーを作成します。

     gcloud beta builds triggers create github \
        --name=TRIGGER_NAME \
        --repo-name=REPO_NAME \
        --repo-owner=REPO_OWNER \
        --branch-pattern=BRANCH_PATTERN
        --build-config=BUILD_CONFIG_FILE
        --service-account=SERVICE_ACCOUNT
    

    ビルド構成ファイルのプレースホルダ値を次のように置き換えます。

    • TRIGGER_NAME はビルドトリガーの名前です。
    • REPO_NAME はリポジトリの名前です。
    • REPO_OWNER は、リポジトリ オーナーのユーザー名です。
    • BRANCH_PATTERN は、ビルドを呼び出すリポジトリ内のブランチ名です。
    • TAG_PATTERN は、ビルドを呼び出すリポジトリ内のタグ名です。
    • BUILD_CONFIG_FILE はビルド構成ファイルのパスです。
    • SERVICE_ACCOUNT は、サービス アカウントに関連付けられたメールです。

ビルドトリガーは、トリガーに関連付けられたイベントに応じてビルドを呼び出します。たとえば、ソースコードがリポジトリに push されたときにトリガーが実行されます。トリガーの詳細については、ビルドトリガーの作成と管理をご覧ください。

次のステップ