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

サービス エージェントを別のサービス アカウントに置き換えることはできません。ただし、実行環境の一部として構成された別のプロジェクトのプライベート プールへのアクセスを許可する場合など、権限の追加が必要になる場合があります。

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

デフォルトでは、Cloud Deploy は、デフォルトの Compute Engine サービス アカウントを使用して実行されます。このサービス アカウントには、マニフェストをレンダリングしてターゲットにデプロイするのに十分な、プロジェクトを含む権限が必要です。

このサービス アカウントの名前は次のパターンに従います。

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

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

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

 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"

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

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

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

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

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

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

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

  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 の呼び出し元に、サービス アカウントまたは [roles/iam.serviceAccountUser](/iam/docs/understanding-roles#service-accounts-roles) ロールに対する iam.serviceAccounts.actAs 権限を付与します。

必要な権限

  • レンダリング構成に使用するサービス アカウントには、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 は、自動化サービス アカウント(デフォルトの実行サービス アカウント、実行サービス アカウントとして使用されるデフォルト以外のサービス アカウント、別のサービス アカウント)を使用して、自動化を行います。

このサービス アカウントについては、自動化サービス アカウントのセクションをご覧ください。

次のステップ