Cloud Deploy サービス アカウント

このドキュメントでは、Cloud Deploy を行し、Cloud Deploy を呼び出してさまざまな操作を実行するために使用されるサービス アカウントについて説明します。

Cloud Deploy は次のサービス アカウントを使用します。

  • Cloud Deploy サービス エージェント

    Cloud Deploy は、このサービス アカウントを使用してプロジェクトを操作します。このサービス エージェントを別のサービス アカウントに置き換えることはできませんが、プロジェクト以外のリソース(サービス アカウントやプライベート Cloud Build ワーカープールなど)を使用している場合、その権限を編集することができます。

  • Cloud Deploy 実行サービス アカウント

    Cloud Deploy は、このサービス アカウントを使用して Cloud Build でレンダリング オペレーションとデプロイ オペレーションを実行します。このアカウントには、Cloud Storage バケットに対する読み取りと書き込み、およびターゲットへのアクセスに十分な権限が必要です。

    実行時のデフォルトのサービス アカウントは、デフォルトの Compute Engine サービス アカウントです。 ターゲット構成で代替のサービス アカウントを指定できます。

  • Cloud Deploy 自動化サービス アカウント

    これは、Cloud Deploy が自動化の実行に使用するサービス アカウントです。これは、デフォルトの実行サービス アカウントまたは別のサービス アカウントにできます。このサービス アカウントの詳細については、自動化サービス アカウントをご覧ください。

サービス アカウントの権限を編集する方法と、代替のサービス アカウントを作成する方法については、サービス アカウントの作成と管理をご覧ください。

Cloud Deploy サービス エージェント

Cloud Deploy サービス エージェントは、Cloud Deploy が Cloud Deploy が依存する他のサービスとやり取りするために使用するサービス アカウントです。 Google Cloudこれらのサービスには、Cloud Build、Pub/Sub、Cloud Audit Logs などがあります。

このサービス アカウントの名前は次の形式になります。

service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com

このアカウントがプロジェクトから削除された場合は、再度追加できます。

  1. Google Cloud コンソールで IAM ページを開きます。

    [IAM] ページを開く

  2. [Google 提供のロール付与を含める] を選択して、サービス エージェントを表示します。

    サービス エージェントが表示されている場合は、残りの手順をスキップできます。

  3. サービス エージェントが表示されない場合は、[アクセス権を付与] をクリックします。

  4. [新しいプリンシパル] フィールドに、次の形式でサービス エージェントのアドレスを入力します。

    1. service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com
  5. [ロールを選択] プルダウン リストをクリックし、[Cloud Deploy サービス エージェント] を選択します。

  6. [保存] をクリックします。

Cloud Deploy 実行サービス アカウント

デフォルトでは、Cloud Deploy は、デフォルトの Compute Engine サービス アカウントを使用して実行されます。

このサービス アカウントの名前は次の形式になります。

[project-number]-compute@developer.gserviceaccount.com

このサービス アカウントは多くのプロダクトで使用されるため、幅広い権限が付与されている場合があります。ベストプラクティスは、Cloud Deploy が別のサービス アカウントとして実行されるように、実行環境を変更することです。ターゲット定義内の executionConfigs.privatePool.serviceAccount プロパティまたは executionConfigs.defaultPool.serviceAccount プロパティを使用して、各ターゲットの実行サービス アカウントを変更できます。

これらのプロパティに設定するサービス アカウントには、Cloud Deploy プロジェクトの Cloud Deploy Runner ロールが必要です。デフォルトの実行サービス アカウントにこのロールがない場合は、次のコマンドを実行します。

 gcloud projects add-iam-policy-binding PROJECT_ID \
     --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
     --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
     --role="roles/clouddeploy.jobRunner"

サービス アカウントには、選択したランタイムにデプロイするためのランタイム固有の権限も必要です。Google Kubernetes Engine の場合は、コンテナ開発者ロールとサービス アカウント ユーザーロールを選択できます。Cloud Run の場合は、Cloud Run デベロッパーロールとサービス アカウント ユーザーロールを選択できます。カスタム ターゲットで使用される他のランタイムには、独自の権限が必要になる場合があります。

作成するサービス アカウント

レンダリングとデプロイにデフォルトの実行サービス アカウントを使用しない場合は、使用する代替サービス アカウントを 1 つ以上作成する必要があります。これらは、Cloud Deploy が実行するサービス アカウントであり、ターゲット構成で構成されています。

複数のサービス アカウントを作成する理由の 1 つは、本番環境ターゲットなどの制限付きターゲットにデプロイするために、特定のサービス アカウントやアカウントを持つことです。

考えられる 1 つのアプローチは、デリバリー パイプラインごとに個別のサービス アカウントを使用することです。このようなサービス アカウントには、レンダリングとデプロイに十分な権限を持つロールが含まれます。

Google Kubernetes Engine へのデプロイでは、サービス アカウントを 1 つの Namespace に制限できます。

別のプロジェクトのサービス アカウントを使用する

実行環境の場合、ターゲットを作成するプロジェクトとは別のプロジェクトにあるサービス アカウントを指定できます。

  1. サービス アカウントを所有するプロジェクトで、プロジェクト間 SA 組織のポリシーを有効にします

  2. Cloud Deploy サービス エージェントservice-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com)に、サービス アカウントの iam.serviceAccounts.actAs 権限を付与します。

    この場合、project-number はターゲットを作成したプロジェクトです。

    また、roles/iam.serviceAccountUser ロール(その権限を含む)は、そのプロジェクトに付与することも、Cloud Deploy が実行されているプロジェクトとは別のプロジェクトにあるサービス アカウントに付与することもできます。

  3. Cloud Build サービス エージェント(service-<project-number>@gcp-sa-cloudbuild.iam.gserviceaccount.com)に roles/iam.serviceAccountTokenCreator ロールを付与します。

    この場合、project-number はターゲットを作成したプロジェクトで、このロールはそのサービス アカウントのプロジェクトに付与されます。

    このサービス アカウントが Cloud Deploy が実行されているプロジェクトとは別のプロジェクトにある場合、ターゲットの実行環境で構成されている各サービス アカウントにこのロールを付与する必要があります。

  4. gcloud deploy releases creategcloud deploy rollouts create の呼び出し元に、サービス アカウントに対する iam.serviceAccounts.actAs 権限、または roles/iam.serviceAccountUser ロールを付与します。

必要な権限

  • レンダリング構成に使用するサービス アカウントには、Cloud Deploy リソースが格納されている Cloud Storage バケットにアクセスするための十分な権限が必要です(デリバリー パイプライン、リリース、ロールアウト)。

    ロール roles/clouddeploy.jobRunner には、レンダリング サービス アカウント(privatePool または defaultPool)に必要なすべての権限が含まれています。

  • デプロイに使用するサービス アカウントには、ターゲット クラスタへのデプロイに十分な権限、および Cloud Storage バケットへのアクセス権限が必要です。

  • Cloud Deploy を呼び出してリリースを作成するサービス アカウントには、clouddeploy.releaser ロールが必要です。また、マニフェストをレンダリングするサービス アカウントを使用する iam.serviceAccount.actAs 権限(たとえば、roles/iam.serviceAccountUser ロールを介して)も必要です。

  • Cloud Deploy を呼び出してリリースを昇格するか、または rollout を作成するサービス アカウントには、ターゲットにデプロイするサービス アカウントを使用するための iam.serviceAccount.actAs 権限が必要です(たとえば、roles/iam.serviceAccountUser ロールを介して)。

  • 自動化用に構成されたサービス アカウントには、自動化されるオペレーションを実行する権限が必要です。詳細

自動化サービス アカウント

リリースの一部のアクションは自動化できます。Cloud Deploy は、自動化サービス アカウントを使用してこれらの自動化を実行します。自動化サービス アカウントは、デフォルトの実行サービス アカウント、実行サービス アカウントとして使用されるデフォルト以外のサービス アカウント、または別のサービス アカウントにできます。

自動化サービス アカウントの詳細については、こちらをご覧ください。

次のステップ