Infrastructure Manager を使用してデプロイメントを作成、更新、削除するには、サービス アカウントを使用する必要があります。Infra Manager は、このサービス アカウントの ID を使用して Terraform を実行します。
Infra Manager のデプロイに関する情報を表示するためにサービス アカウントは必要ありません。
このページでは、Infrastructure Manager でリソースをデプロイできるようにサービス アカウントを構成する方法について説明します。
始める前に
- Infra Manager サービスを有効にします。
- Infra Manager で使用するサービス アカウントを作成するか、既存のサービス アカウントを指定します。
サービス アカウントへのアクセスを許可する
Infrastructure Manager を使用してデプロイメントを作成、更新、削除するには、個々のユーザーがサービス アカウントにアクセスできる必要があります。
ユーザーに、サービス アカウントの サービス アカウント ユーザー(roles/iam.serviceAccountUser
)の IAM ロールを付与します。
Infra Manager の権限を付与する
Infra Manager を操作するには、サービス アカウントに Infra Manager エージェント(roles/config.agent
)ロールが必要です。これにより、Infra Manager にリソースの作成、更新、削除の権限が付与されます。
サービス アカウントに権限を付与する方法については、サービス アカウントに対するアクセス権の管理をご覧ください。
ストレージ バケットの読み取り権限を付与する
ストレージ バケットを使用して、Infra Manager によってデプロイされる Terraform 構成を保存できます。
構成にストレージ バケットを使用し、このストレージ バケットが Infra Manager を実行しているプロジェクトとは異なるプロジェクトにある場合は、Infra Manager の呼び出しに使用するサービス アカウントにバケットの読み取り権限があることを確認する必要があります。Cloud Storage の権限の詳細については、Cloud Storage の IAM 権限をご覧ください。
ストレージ バケットが Infra Manager と同じプロジェクトにあり、サービス アカウントに roles/config.agent
を付与している場合、バケットへの読み取り権限はすでに有効になっています。
ストレージ バケットに構成をアップロードする方法については、Terraform 構成をアップロードするをご覧ください。
構成で定義されたリソースに対する権限を付与する
Terraform 構成で定義されている Google Cloud リソースを作成して管理するには、サービス アカウントにこれらのリソースに固有の権限が必要です。
デプロイする Terraform 構成で定義されている Google Cloud リソースに固有の権限。たとえば、Compute Engine VM インスタンスを作成するための権限は
compute.instances.create
です。更新するデプロイの Terraform 構成で定義されている Google Cloud リソースに固有の権限。
たとえば、デプロイメントで Compute Engine VM がプロビジョニングされ、Compute Engine VM を含まない構成を使用してデプロイメントを更新するとします。この場合、リビジョンを更新するときに、サービス アカウントには次の権限が必要です。
新しい構成で定義されたリソースの権限。
削除されるリソースの権限(この例の Compute Engine VM など)。
Terraform 構成のリソースに必要な権限を特定する方法については、事前定義ロールの選択をご覧ください。
サービス アカウントに権限を付与する方法については、サービス アカウントに対するアクセス権の管理をご覧ください。
プロジェクトへのアクセス権を付与する
サービス アカウントが Infra Manager サービスが実行されているプロジェクトとは異なるプロジェクトにある場合は、追加の権限が必要です。
これらの追加の権限を付与する手順は次のとおりです。
サービス アカウントがあるプロジェクトで、
iam.disableCrossProjectServiceAccountUsage
組織のポリシー制約が適用されていないことを確認します。この制約はデフォルトで適用されます。この組織のポリシーの制約を無効にするには、次のコマンドを実行します。
gcloud resource-manager org-policies disable-enforce iam.disableCrossProjectServiceAccountUsage --project=SERVICE_ACCOUNT_PROJECT_ID
SERVICE_ACCOUNT_PROJECT_ID は、サービス アカウントを含むプロジェクトの ID に置き換えます。
サービス アカウントを含むプロジェクトで、デプロイメントを作成するプロジェクトの Infra Manager サービス エージェントに
roles/iam.serviceAccountUser
ロールを付与します。gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member="serviceAccount:service-INFRA_MANAGER_PROJECT_NUMBER@gcp-sa-config.iam.gserviceaccount.com" \ --role="roles/iam.serviceAccountUser"
上記のコマンドのプレースホルダ値を次のように置き換えます。
- SERVICE_ACCOUNT_PROJECT_ID: サービス アカウントを含むプロジェクトのプロジェクト ID。
- INFRA_MANAGER_PROJECT_NUMBER: デプロイメントを作成するプロジェクトのプロジェクト番号。これにより、サービス エージェントのメール ID が
service-INFRA_MANAGER_PROJECT_NUMBER@gcp-sa-config.iam.gserviceaccount.com
になります。
Infra Manager がサービス アカウントに代わって Cloud Build ジョブを作成できるようにするには、サービス アカウントに
roles/iam.serviceAccountTokenCreator
ロールを付与します。このロールは、デプロイメントを作成するプロジェクトの Infra Manager サービス エージェント用です。gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member="serviceAccount:service-INFRA_MANAGER_PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com" \ --role="roles/iam.serviceAccountTokenCreator"
次のステップ
- IAM について学習する。
- Google Cloudで Terraform を使用する方法の詳細を確認する。
- Infra Manager を使用してインフラストラクチャをデプロイする。
- デプロイメントを更新する。
- デプロイの状態を表示する。