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 にリソースの作成、更新、削除の権限が付与されます。
gcloud projects add-iam-policy-binding INFRA_MANAGER_PROJECT_ID \
--member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
--role="roles/config.agent"
次のように置き換えます。
INFRA_MANAGER_PROJECT_ID: デプロイを作成するプロジェクトのプロジェクト ID。
SERVICE_ACCOUNT_EMAIL: サービス アカウントのメールアドレス。
サービス アカウントに権限を付与する方法については、サービス アカウントに対するアクセス権の管理をご覧ください。
ストレージ バケットの読み取り権限を付与する
ストレージ バケットを使用して、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 サービスが実行されているプロジェクトとは異なるプロジェクトにある場合は、追加の権限が必要です。
これらの追加の権限を付与するには:
サービス アカウントに、Infra Manager を実行しているプロジェクトの Infra Manager エージェント(
roles/config.agent)ロールがあることを確認します。権限を付与する手順については、Infra Manager の権限を付与するをご覧ください。省略可: Developer Connect を使用して Terraform 構成をデプロイする場合は、サービス アカウントに
roles/iam.serviceAccountTokenCreatorロールを付与します。サービス アカウントがあるプロジェクトで、
iam.disableCrossProjectServiceAccountUsage組織のポリシー制約が適用されていないことを確認します。この制約はデフォルトで適用されます。この組織のポリシーの制約を無効にするには、次のコマンドを実行します。
gcloud resource-manager org-policies disable-enforce iam.disableCrossProjectServiceAccountUsage --project=SERVICE_ACCOUNT_PROJECT_IDSERVICE_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
デプロイを作成するプロジェクトの Cloud Build サービス エージェントに、サービス アカウント トークン作成者(
roles/iam.serviceAccountTokenCreator)ロールを付与します。Infra Manager が Cloud Build を使用して Terraform を実行できるようにするには、サービス アカウントを含むプロジェクトの Cloud Build サービス エージェントに、プロジェクト間の設定の一部として追加の権限が必要です。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 を使用してインフラストラクチャをデプロイする。
- デプロイを更新する。
- デプロイの状態を表示する。