使用工作负载身份,在Terraform Cloud上创建Google Cloud部署环境,无需服务账号密钥
背景
在Google Cloud Platform(GCP)上部署的环境中,通常会使用服务账号密钥来对诸如Terraform之类的基础架构管理工具进行身份验证。为了提高安全性并简化密钥管理,可以使用Workload Identity来避免使用服务账号密钥。现在我们尝试通过使用Workload Identity来创建无需服务账号密钥的Terraform云部署环境。
前期准备
需要设置GCP和Terraform Cloud。详细步骤不在此说明,但我们将按照以下流程进行预先准备。
设置GCP账户
-
- 如果您没有GCP账号,可以在GCP官方网站上创建一个账号。
-
- 创建项目并启用所需的API和服务。
- 安装Google Cloud SDK,以便从命令行访问GCP。
访问Terraform Cloud
1. 在Terraform Cloud上创建或登录账户。如果您没有账户,可以通过Terraform Cloud的网站进行注册。
2. 创建Terraform Cloud的工作区并与项目关联。
操作步骤
以下是使用Terraform Cloud在GCP上设置工作负载身份并构建无需服务帐户密钥的部署环境的基本步骤。
在Google Cloud上创建工作负载身份池和身份池提供者。
GoogleOIDCgoogle.subjectassertion.subattribute.terraform_full_workspaceassertion.terraform_full_workspaceattribute.terraform_workspace_idassertion.terraform_workspace_id
为了进行验证,我们这次没有输入属性条件,但可以通过输入Terraform的组织ID和工作区名称等CEL条件来限制认证。
创建服务帐号并授予权限
创建服务帐号,并使用以下命令添加IAM绑定。
gcloud iam service-accounts add-iam-policy-binding [id]@[プロジェクトID].iam.gserviceaccount.com \
--role="roles/iam.workloadIdentityUser" \
--member="principalSet://iam.googleapis.com/projects/[プロジェクト番号]/locations/global/workloadIdentityPools/[プールID]/attribute.terraform_workspace_id/[terraformのworkspace ID]"
Terraform Cloud 的安装和执行
- 在Terraform Cloud的工作区变量中定义三个变量。
keyvalueTFC_GCP_PROVIDER_AUTHtrueTFC_GCP_RUN_SERVICE_ACCOUNT_EMAIL[サービスアカウント]TFC_GCP_WORKLOAD_PROVIDER_NAME[Workload Identityプロバイダ名(*1)(*2)]
(*1) 形式为projects/[项目编号]/locations/global/workloadIdentityPools/[池ID]/providers/[提供者ID]
(*2) 勾选”敏感”
利用 Terraform Cloud 创建 Terraform 代码并执行部署。Terraform 通过 Workload Identity 访问 GCP,并使用服务账号密钥进行部署,无需使用。部署成功后,将在 Terraform Cloud 上显示如下内容。