このドキュメントでは、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 プロジェクトの 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 に制限できます。
別のプロジェクトのサービス アカウントを使用する
実行環境の場合、ターゲットを作成するプロジェクトとは別のプロジェクトにあるサービス アカウントを指定できます。
サービス アカウントを所有するプロジェクトで、プロジェクト間 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 のロールについて確認する。
- サービス アカウントの作成と管理を行う方法を理解する。