TL; DR 。无法确定需要在堡垒实例上启用哪些API范围。还有,关于建造堡垒实例的任何建议吗?
我正在研究要从中运行terraform plan
/ terraform apply
命令的堡垒实例。
我对堡垒实例的计划是这样:
确保默认服务帐户有权访问GCP资源(以使Terraform能够访问资源):
如果您是从GCE实例运行Terraform,默认凭据将自动可用。有关更多详细信息,请参见为实例创建和启用服务帐户。
在实例上存储地形配置,能够terraform plan
/ terraform apply
完成上面列出的项目1、3和4后,我在Terraform访问服务帐户管理API时遇到问题-运行terraform plan
会导致以下结果:
$ terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.
google_service_account.terraform_state_user: Refreshing state... [id=projects/xxxxxxxx-xxxxxx-xxxxxx/serviceAccounts/terraform-state-user@xxxxxxxx-xxxxxx-xxxxxx.iam.gserviceaccount.com]
google_storage_bucket.access_logs: Refreshing state... [id=xxxxxxxx-bucket-access-logs]
google_storage_bucket.terraform_state_storage: Refreshing state... [id=xxxxxxxx-terraform-state-storage]
Error: Error reading Service Account "projects/xxxxxxxx-xxxxxx-xxxxxx/serviceAccounts/terraform-state-user@xxxxxxxx-xxxxxx-xxxxxx.iam.gserviceaccount.com": googleapi: Error 403: Request had insufficient authentication scopes., forbidden
作为PoC修复程序,我已将堡垒VM上的 Cloud API访问范围列表更改为允许对所有Cloud API的完全访问权限。这样做之后,terraform plan
和terraform apply
命令成功。下一步,我决定限制实例可以访问的API范围的数量,但发现自己无法找到正确的API范围集来访问服务帐户API(我收到上述错误)。
经过几次尝试terraform plan
和terraform apply
才能工作。这是我目前拥有的API范围的list:
Bigtable Admin Disabled
Bigtable Data Disabled
Cloud Datastore Disabled
Cloud Debugger Disabled
Cloud Pub/Sub Disabled
Cloud Source Repositories Disabled
Cloud SQL Disabled
Compute Engine Read Write
Service Control Enabled
Service Management Read Write
Stackdriver Logging API Write Only
Stackdriver Monitoring API Write Only
Stackdriver Trace Write Only
Storage Read Write
Task queue Disabled
User info Enabled
我正在寻找以下问题的答案:
答案 0 :(得分:0)
使用专用VM部署Terraform脚本通常是一个问题,这就是为什么我不喜欢Terraform的原因。但是我找到了一种在无服务器上执行此操作,从而避免创建和维护VM的方法:我使用Cloud Build和Terraform容器。
如果您想了解更多,我wrote this article。