【问题标题】:(Terraform, Cloud Run) Error: Forbidden Your client does not have permission to get URL / from this server(Terraform, Cloud Run) 错误:禁止您的客户端无权从该服务器获取 URL /
【发布时间】:2022-07-20 18:00:38
【问题描述】:

我正在尝试使用以下 Terraform 代码在 Cloud Run 上运行 docker 映像:

provider "google" {
  credentials = file("myCredentials.json")
  project     = "myproject-214771"
  region      = "asia-northeast1"
}

resource "google_cloud_run_service" "default" {
  name     = "hello-world"
  location = "asia-northeast1"

  template {
    spec {
      containers {
        image = "gcr.io/myproject-214771/hello-world:latest"
      }
    }
  }

  traffic {
    percent         = 100
    latest_revision = true
  }
}

然后,docker镜像运行成功:

但是当我访问 URL 时,它会显示:

错误:禁止您的客户端无权获取 URL / 从这个服务器

我的 Terraform 代码中是否有任何错误?

【问题讨论】:

    标签: google-cloud-platform terraform devops google-cloud-run terraform-provider-gcp


    【解决方案1】:

    将此代码添加(复制并粘贴)到您的 Terraform 代码中以允许对公共 API 或网站进行未经身份验证的调用

    data "google_iam_policy" "noauth" {
      binding {
        role = "roles/run.invoker"
        members = [
          "allUsers",
        ]
      }
    }
    
    resource "google_cloud_run_service_iam_policy" "noauth" {
      location    = google_cloud_run_service.default.location
      project     = google_cloud_run_service.default.project
      service     = google_cloud_run_service.default.name
    
      policy_data = data.google_iam_policy.noauth.policy_data
    }
    

    这是完整的代码

    provider "google" {
      credentials = file("myCredentials.json")
      project     = "myproject-214771"
      region      = "asia-northeast1"
    }
    
    resource "google_cloud_run_service" "default" {
      name     = "hello-world"
      location = "asia-northeast1"
    
      template {
        spec {
          containers {
            image = "gcr.io/myproject-214771/hello-world:latest"
          }
        }
      }
    
      traffic {
        percent         = 100
        latest_revision = true
      }
    }
    
    data "google_iam_policy" "noauth" {
      binding {
        role = "roles/run.invoker"
        members = [
          "allUsers",
        ]
      }
    }
    
    resource "google_cloud_run_service_iam_policy" "noauth" {
      location    = google_cloud_run_service.default.location
      project     = google_cloud_run_service.default.project
      service     = google_cloud_run_service.default.name
    
      policy_data = data.google_iam_policy.noauth.policy_data
    }
    

    最后,您的 URL 可以正确显示您的网站:

    此外,现在 "Authentication""Allow unauthenticated"

    不要忘记将角色“Cloud Run Admin”添加到您的服务帐号

    否则,您不能允许对公共 API 或网站进行未经身份验证的调用,那么您将在下面收到此错误:

    为 cloudrun 服务设置 IAM 政策时出错 “v1/projects/myproject-214771/locations/asia-northeast1/services/hello-world”: googleapi:错误 403:权限“run.services.setIamPolicy”被拒绝 资源 'projects/myproject-214771/locations/asia-northeast1/services/hello-world' (或资源可能不存在)。

    此外,对于以下这些角色,您不能允许对公共 API 或网站进行未经身份验证的调用

    只有角色 “Cloud Run Admin” 可以允许对公共 API 或网站进行未经身份验证的调用

    【讨论】:

      猜你喜欢
      • 2020-06-07
      • 2020-07-16
      • 2018-05-10
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-09
      • 2013-10-23
      相关资源
      最近更新 更多