Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 构建bastion实例以运行terraform:API访问问题_Google Cloud Platform_Terraform_Service Accounts_Terraform Provider Gcp - Fatal编程技术网

Google cloud platform 构建bastion实例以运行terraform:API访问问题

Google cloud platform 构建bastion实例以运行terraform:API访问问题,google-cloud-platform,terraform,service-accounts,terraform-provider-gcp,Google Cloud Platform,Terraform,Service Accounts,Terraform Provider Gcp,TL;DR。无法确定bastion实例上需要启用哪些API作用域。还有,有没有关于建造堡垒的建议 我正在处理一个bastion实例,我想从中运行terraform plan/terraform apply命令 我对堡垒实例的计划如下: 成立, 成立, 确保默认服务帐户可以访问GCP资源(terraform可以访问资源): 如果您从GCE实例运行Terraform,默认凭据将自动可用。有关更多详细信息,请参阅为实例创建和启用服务帐户 将地形配置存储在实例上,可以地形规划/地形应用 完成上面列

TL;DR。无法确定bastion实例上需要启用哪些API作用域。还有,有没有关于建造堡垒的建议


我正在处理一个bastion实例,我想从中运行
terraform plan
/
terraform apply
命令

我对堡垒实例的计划如下:

  • 成立,
  • 成立,
  • 确保默认服务帐户可以访问GCP资源(terraform可以访问资源):

    如果您从GCE实例运行Terraform,默认凭据将自动可用。有关更多详细信息,请参阅为实例创建和启用服务帐户

  • 将地形配置存储在实例上,可以
    地形规划
    /
    地形应用

  • 完成上面列表中的第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修复,我已将bastion VM上的云API访问范围列表更改为允许完全访问所有云API。执行此操作后,
    terraform plan
    terraform apply
    命令成功执行。作为下一步,我决定限制实例可以访问的API作用域的数量,但发现自己无法找到正确的API作用域集来访问服务帐户API(我得到的错误如上所述)

    经过几次尝试后,
    地形规划
    地形应用
    。这是我目前在bastion上使用的API作用域:

    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登录”功能(取决于IAM角色我自己的用户)进入bastion,我自己的帐户是用来访问API的,还是默认的服务帐户?(这只是为了帮助我理解)
  • 有关于建造堡垒的一般建议吗

  • 使用专用VM部署Terraform脚本通常是个问题,这就是我不喜欢Terraform的原因。但我发现了一种在无服务器环境下执行此操作的方法,从而避免了创建VM和维护VM:我使用云构建和Terraform容器


    如果你想知道更多的话,我会在这个问题上发表意见。

    1)每篇文章问一个问题。2) 您试图控制错误的项(范围)。您应该管理分配给计算引擎默认服务帐户的角色。但是,Terraform需要您正在构建的服务所需的任何权限。这因脚本而异。花些时间学习什么是服务帐户、IAM角色和Terraform。然后,您将能够为每种类型的Terraform活动配置正确的权限。在这种情况下,可能需要创建一个专门用于此用途的服务帐户,该帐户具有您所需的确切权限,并将实例作为该服务帐户运行,你应该在答案中加入该链接的摘要,否则当该链接不再工作时,这是没有帮助的。