このドキュメントでは、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 つの名前空間に制限できます。
別のプロジェクトのサービス アカウントの使用
実行環境の場合、ターゲットを作成するプロジェクトとは別のプロジェクトにあるサービス アカウントを指定できます。
サービス アカウントを所有するプロジェクトで、プロジェクト間の 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
の呼び出し元に、サービス アカウントまたは[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 は、自動化サービス アカウント(デフォルトの実行サービス アカウント、実行サービス アカウントとして使用されるデフォルト以外のサービス アカウント、別のサービス アカウント)を使用して、自動化を行います。
このサービス アカウントについては、自動化サービス アカウントのセクションをご覧ください。
次のステップ
- IAM について学習する。
- 事前定義された Cloud Deploy のロールについて確認する。
- サービス アカウントの作成と管理を行う方法を理解する。