限制 Cloud Run 服務和執行個體的網路端點連入流量

本頁面說明如何使用輸入設定,限制 Cloud Run 服務的網路存取權。

在網路層級,Cloud Run 服務的 端點可透過下列網路輸入路徑連線:

  • 預設 s3nsrun.fr 網址,可停用
  • 任何已設定的網域對應
  • 任何已設定的外部應用程式負載平衡器或內部應用程式負載平衡器

所有網路輸入路徑都必須遵守資源的輸入設定。預設的輸入路徑和輸入設定允許網際網路上的任何資源存取 Cloud Run 資源。您可以使用自訂限制,限制組織或一組專案的輸入設定。IAM 驗證仍適用於從上述任何網路輸入路徑,傳送至服務 端點的要求。如要採用分層方式管理存取權,請同時使用網路輸入設定和 IAM 驗證。

使用網路標記限制連接器 VM 存取虛擬私有雲資源。

可用的網路輸入設定

可用的設定如下:

設定 說明
內部 最嚴格。允許來自下列來源的要求:
  • 內部應用程式負載平衡器,包括透過內部應用程式負載平衡器轉送的共用虛擬私有雲網路要求。
  • 包含 Cloud Run 服務的任何 VPC Service Controls 範圍允許的資源。Cloud Run 必須設為受限制的服務。
  • 與 Cloud Run 服務位於相同專案的虛擬私有雲網路。
  • 共用虛擬私有雲輸入:服務修訂版本 設定為將流量傳送至共用虛擬私有雲網路。如要瞭解 Shared VPC 流量何時會視為「內部」流量,請參閱「Shared VPC 的特殊考量」。
  • 下列 Cloud de Confiance 產品,如果與 Cloud Run 服務位於相同專案或 VPC Service Controls perimeter,且使用預設s3nsrun.fr網址,而非自訂網址或自訂網域:
即使這些來源存取您的服務 (位於 s3nsrun.fr 網址),其要求仍會保留在 Google 網路中。 來自其他來源 (包括網際網路) 的要求無法透過 s3nsrun.fr 網址、自訂網址或自訂網域連至您的服務 。

內部和 Cloud 負載平衡器 這項設定允許來自下列資源的要求:
  • 限制較嚴格的「內部」設定允許的資源
  • 外部應用程式負載平衡器
這項設定可用於:
  • 透過外部應用程式負載平衡器,接受來自網際網路的要求。不允許從網際網路直接向 s3nsrun.fr 網址提出要求。
  • 確保來自網際網路的要求受限於外部應用程式負載平衡器功能,例如 Identity-Aware Proxy、Google Cloud Armor 和 Cloud CDN。

注意:如要在 gcloud CLI 中啟用這項設定,請使用 internal-and-cloud-load-balancing。 如要在 Cloud de Confiance 控制台中啟用這項設定,請依序選取「Internal」(內部) >「Allow traffic from external Application Load Balancers」(允許外部應用程式負載平衡器傳出的流量)。
全部 最寬鬆。允許所有要求,包括直接從網際網路傳送至 s3nsrun.fr 網址的要求。

存取內部服務

其他注意事項如下:

  • 存取內部服務時,請按照一般方式使用網址呼叫服務,包括預設的 s3nsrun.fr 網址、自訂網址,或在 Cloud Run 中設定的自訂網域。

  • 如果是來自 Compute Engine VM 執行個體的要求,則具有外部 IP 位址或使用 Cloud NAT 的機器不需要進一步設定。否則,請參閱「接收來自虛擬私有雲網路的要求」。

  • 從 Cloud Run 或 App Engine 呼叫設為「Internal」(內部) 或「Internal and Cloud Load Balancers」(內部和 Cloud Load Balancer) 的 Cloud Run 服務時,流量必須透過視為內部的虛擬私有雲網路轉送。請參閱「接收來自其他 Cloud Run 服務或 App Engine 的要求」。

  • 即使來源資源具有外部 IP 位址,來自同一專案中虛擬私有雲網路內資源的要求仍視為「內部」。

  • 如果要求來自使用 Cloud VPN 和 Cloud Interconnect 連線至虛擬私有雲網路的地端部署資源,則屬於「內部」要求。

設定輸入

以下各節說明如何為 Cloud Run 服務設定輸入。

設定 Cloud Run 服務的輸入

您可以使用Cloud de Confiance 控制台、Google Cloud CLI、YAML 或 Terraform,為 Cloud Run 服務設定輸入。

控制台

  1. 前往 Cloud de Confiance 控制台的 Cloud Run「Services」(服務) 頁面:

    前往 Cloud Run。

  2. 如要設定新服務,請按一下「Deploy container」(部署容器),顯示「Create service」(建立服務) 表單。填寫初始服務設定頁面。

  3. 如要設定現有服務,請按一下該服務,然後按一下「Networking」(網路) 分頁標籤。

  4. 選取要允許的輸入流量。

  5. 按一下「建立」,建立新服務。依序點選「查看差異並重新部署」和「部署變更」,即可更新現有服務。

gcloud

  1. 如要部署新服務,請使用 --ingress 旗標部署服務:

    gcloud run deploy SERVICE \
        --image IMAGE_URL \
        --ingress INGRESS

    更改下列內容:

    • SERVICE:服務名稱。
    • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG。
    • INGRESS:可用的輸入設定之一:
      • all
      • internal
      • internal-and-cloud-load-balancing
  2. 如要變更現有服務輸入:

    gcloud run services update SERVICE \
        --ingress INGRESS

    更改下列內容:

    • SERVICE:服務名稱
    • INGRESS:可用的輸入設定之一:
      • all
      • internal
      • internal-and-cloud-load-balancing

YAML

  1. 如果您要建立新服務,請略過這個步驟。如要更新現有服務,請下載其 YAML 設定:

    gcloud run services describe SERVICE --format export > service.yaml
  2. 更新 run.googleapis.com/ingress: 註解:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      annotations:
        run.googleapis.com/ingress: INGRESS
    spec:
      template:
        metadata:
          name: REVISION

    更改下列內容:

    • SERVICE:Cloud Run 服務的名稱。
    • INGRESS:可用的輸入設定之一:
      • all
      • internal
      • internal-and-cloud-load-balancing
    • REVISION:新的修訂版本名稱,或刪除該名稱 (如有)。如果您提供新的修訂版本名稱,則必須符合下列條件:
      • 開頭為「SERVICE-」
      • 只能使用小寫英文字母、數字和 -
      • 結尾不是 -
      • 不超過 63 個字元
  3. 使用下列指令,以新設定取代服務:

    gcloud run services replace service.yaml

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

在 Terraform 設定中,將下列內容新增至 google_cloud_run_v2_service 資源:
resource "google_cloud_run_v2_service" "default" {
  provider = google-beta
  name     = "ingress-service"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  # For valid annotation values and descriptions, see
  # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service#ingress
  ingress = "INGRESS_TRAFFIC_INTERNAL_ONLY"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello" #public image for your service
    }
  }
}

停用預設網址

停用預設網址前,請注意下列Cloud de Confiance 服務 會使用預設s3nsrun.fr網址叫用 Cloud Run。停用預設 s3nsrun.fr 網址會導致下列服務 無法正常運作:

如要使用自訂網域對應,請先對應自訂網域,再停用 s3nsrun.fr 網址。

請參閱下列各節,瞭解如何停用 Cloud Run 服務的預設網址。

停用 Cloud Run 服務的預設網址

停用 Cloud Run 服務 的預設 s3nsrun.fr 網址,僅允許該項服務其他輸入路徑傳來的流量,例如 Cloud Load Balancing 和任何已設定的網域對應。

如要停用預設網址,請使用 Cloud de Confiance 控制台、Google Cloud CLI、YAML 或 Terraform 執行下列步驟。

控制台

  1. 前往 Cloud de Confiance 控制台的 Cloud Run「Services」(服務) 頁面:

    前往 Cloud Run。

  2. 按一下現有服務。

  3. 選取「網路」分頁標籤。

  4. 在「端點」資訊卡中,清除「預設 HTTPS 端點網址」下方的「啟用」。

  5. 依序點選「查看差異並重新部署」和「部署變更」。

如要還原預設網址,請選取「啟用」。

gcloud

  • 如為現有服務,請執行 gcloud run services update 指令並加上 --no-default-url 旗標,例如:

    gcloud run services update SERVICE_NAME --no-default-url
  • 如為新服務,請執行 gcloud run deploy 指令並加上 --no-default-url 旗標,例如:

    gcloud run deploy SERVICE_NAME --no-default-url

    將 SERVICE_NAME 替換為 Cloud Run 服務名稱。

    輸出內容中的網址會顯示為 None。

如要還原預設網址,請使用 --default-url 旗標。

YAML

  1. 如果您要建立新服務,請略過這個步驟。如要更新現有服務,請下載其 YAML 設定:

    gcloud run services describe SERVICE --format export > service.yaml
  2. 如要停用 s3nsrun.fr 網址,請使用 run.googleapis.com/default-url-disabled 註解:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/default-url-disabled: true
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION

    更改下列內容:

    • SERVICE:Cloud Run 服務的名稱。
    • REVISION:新的修訂版本名稱,或刪除該名稱 (如有)。如果您提供新的修訂版本名稱,則必須符合下列條件:
      • 開頭為「SERVICE-」
      • 只能使用小寫英文字母、數字和 -
      • 結尾不是 -
      • 不超過 63 個字元
  3. 使用下列指令建立或更新服務:

    gcloud run services replace service.yaml

    gcloud run services replace 指令預設會使用 service.yaml 檔案 (如有)。

如要還原預設網址,請移除 run.googleapis.com/default-url-disabled 註解。

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

在 Terraform 設定中,將下列內容新增至 google_cloud_run_v2_service 資源:
  resource "google_cloud_run_v2_service" "disable_default_url_service" {
    name     = "cloudrun-service"
    location = "europe-west1"
    default_uri_disabled = true

    template {
      containers {
        image = "us-docker.pkg.dev/cloudrun/container/hello"
      }
      annotations = {
        "run.googleapis.com/ingress" = "all"   # "all" or "internal-only"
      }

    }
  }

確認 main.tf 檔案中包含 launch_stage 和 default_uri_disabled 行。上述 google_cloud_run_v2_service 資源指定了 Cloud Run 服務,並在預先發布版中停用預設網址。

如要還原預設網址,請移除 default_uri_disabled 和 launch_stage 引數。

後續步驟