TL; DR 。无法确定需要在堡垒实例上启用哪些API范围。还有,关于建造堡垒实例的任何建议吗?
我正在研究要从中运行terraform plan
/ terraform apply
命令的堡垒实例。
我对堡垒实例的计划是这样:
- 设置OS Login,
- 设置two-factor authentication,
-
确保默认服务帐户有权访问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
我正在寻找以下问题的答案:
- 我应该启用什么API范围才能读取/写入服务帐户资源?
- 如果我通过“ OS Login”功能(取决于我自己的用户的IAM角色)通过SSH进入堡垒,是我自己的帐户用于访问API,还是默认服务帐户? (这只是为了帮助我理解),
- 有关建造堡垒实例的一般建议吗?