このドキュメントでは、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
このアカウントがプロジェクトから削除された場合は、再度追加できます。
Google Cloud コンソールで [IAM] ページを開きます。
[Google 提供のロール付与を含める] を選択して、サービス エージェントを表示します。
サービス エージェントが表示されている場合は、残りの手順をスキップできます。
サービス エージェントが表示されない場合は、[アクセス権を付与] をクリックします。
[新しいプリンシパル] フィールドに、次の形式でサービス エージェントのアドレスを入力します。
service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com
[ロールを選択] プルダウン リストをクリックし、[Cloud Deploy サービス エージェント] を選択します。
[保存] をクリックします。
Cloud Deploy 実行サービス アカウント
デフォルトでは、Cloud Deploy は、デフォルトの Compute Engine サービス アカウントを使用して実行されます。
このサービス アカウントの名前は次のパターンに従います。
[project-number]-compute@developer.gserviceaccount.com
このサービス アカウントは多くのプロダクトで使用されるため、幅広い権限が付与されている可能性があります。実行環境を変更して、Cloud Deploy が別のサービス アカウントとして実行されるようにするのが効果的な手法です。ターゲット定義内の executionConfigs.privatePool.serviceAccount プロパティまたは executionConfigs.defaultPool.serviceAccount プロパティを使用して、各ターゲットの実行サービス アカウントを変更できます。
これらのプロパティに設定するサービス アカウントには、Cloud Deploy プロジェクトの Cloud Deploy ランナーロールが必要です。デフォルトの実行サービス アカウントにこのロールがない場合は、次のコマンドを実行します。
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 に制限できます。
別のプロジェクトのサービス アカウントを使用する
実行環境の場合、ターゲットを作成するプロジェクトとは別のプロジェクトにあるサービス アカウントを指定できます。
サービス アカウントを所有するプロジェクトで、プロジェクト間の SA 組織のポリシーを有効にします。
Cloud Deploy サービス エージェント(
service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com)に、サービス アカウントのiam.serviceAccounts.actAs権限を付与します。この場合、
project-numberはターゲットを作成したプロジェクトです。また、
roles/iam.serviceAccountUserロール(その権限を含む)は、そのプロジェクトに付与することも、Cloud Deploy が実行されているプロジェクトとは別のプロジェクトにあるサービス アカウントに付与することもできます。Cloud Build サービス エージェント(
service-<project-number>@gcp-sa-cloudbuild.iam.gserviceaccount.com)にroles/iam.serviceAccountTokenCreatorロールを付与します。この場合、
project-numberはターゲットを作成したプロジェクトで、このロールはそのサービス アカウントのプロジェクトに付与されます。このサービス アカウントが Cloud Deploy が実行されているプロジェクトとは別のプロジェクトにある場合、ターゲットの実行環境で構成されている各サービス アカウントにこのロールを付与する必要があります。
gcloud deploy releases createとgcloud 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 は、自動化サービス アカウントを使用してこれらの自動化を実行します。自動化サービス アカウントは、デフォルトの実行サービス アカウント、実行サービス アカウントとして使用されるデフォルト以外のサービス アカウント、または別のサービス アカウントにすることができます。
自動化サービス アカウントの詳細については、こちらをご覧ください。
次のステップ
- IAM について学習する。
- 事前定義された Cloud Deploy のロールについて確認する。
- サービス アカウントの作成と管理を行う方法を理解する。