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 が依存する他の Google Cloud サービスとやり取りするために Cloud Deploy が使用するサービス アカウントです。これらのサービスには、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 つの 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 は、自動化サービス アカウントを使用してこれらの自動化を実行します。自動化サービス アカウントは、デフォルトの実行サービス アカウント、実行サービス アカウントとして使用されるデフォルト以外のサービス アカウント、または別のサービス アカウントにできます。

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

次のステップ