設定服務的密鑰

您的服務可能需要 API 金鑰、密碼、憑證或其他機密資訊,才能滿足依附元件需求。對於 Cloud Run,Google 建議您將這類機密資訊儲存在 Secret Manager 中建立的密鑰。

您可以透過下列兩種方式,讓容器使用密鑰:

  • 將每個密鑰掛接為磁碟區,讓容器以檔案形式存取密鑰。讀取磁碟區時,系統一律會從 Secret Manager 擷取密鑰值,因此可搭配最新版本使用。這個方法也適用於密鑰輪替。
  • 使用環境變數傳遞密鑰。環境變數會在執行個體啟動時解析,因此如果您使用這個方法,Google 建議您將密鑰固定在特定版本,而不是使用 latest

詳情請參閱 Secret Manager 最佳做法文件。

部署和執行階段如何檢查密鑰

在服務部署期間,系統會檢查所有使用的密鑰 (無論是做為環境變數或以磁碟區形式掛接),確保用於執行容器的服務帳戶有權存取這些密鑰。如果任何檢查失敗,服務部署就會失敗。

在執行階段,當執行個體啟動時:

  • 如果密鑰是環境變數,系統會在啟動執行個體前擷取密鑰值,因此如果擷取失敗,執行個體就不會啟動。
  • 如果密鑰是掛接為磁碟區,執行個體啟動時不會進行檢查。不過,在執行階段,如果無法存取密鑰,嘗試讀取已掛接的磁碟區就會失敗。

磁碟區擁有權會因執行環境和部署類型而異

掛接 Secret 磁碟區時,檔案和目錄的擁有者身分會因工作負載的執行環境,以及部署作業是否包含一或多個容器而有所不同。

在部署單一容器的第一代執行環境中,密鑰磁碟區是由用於容器的身分所擁有。在所有其他情況下,磁碟區都由根目錄擁有。包括:

  • 您要部署多個容器的第一代執行環境
  • 第二代環境

事前準備

  1. Enable the Secret Manager API.

    Enable the API

  2. 使用現有的密鑰,或按照「 建立密鑰」一文的說明,在 Secret Manager 中建立密鑰。

必要的角色

如要取得設定密鑰所需的權限,請要求管理員授予下列 IAM 角色:

如要允許 Cloud Run 存取密鑰,服務身分必須具備下列角色:

如要瞭解如何將服務身分主體新增至 Secret Manager 密鑰存取者角色,請參閱「管理密鑰存取權」。

如需與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱 Cloud Run IAM 角色Cloud Run IAM 權限。如果 Cloud Run 服務與Google Cloud API (例如 Cloud 用戶端程式庫) 介接,請參閱服務身分設定指南。 如要進一步瞭解如何授予角色,請參閱部署權限管理存取權

讓 Cloud Run 存取密鑰

變更任何設定都會建立新的修訂版本。除非您明確做出更新,變更這項設定,否則後續的修訂版本也會自動取得這個設定。

部署新服務或更新現有服務並部署版本時,您可以使用 Google Cloud 控制台、Google Cloud CLI 或 YAML 檔案,讓服務存取密鑰。按一下所需的分頁標籤:

控制台

  1. 前往 Google Cloud 控制台的 Cloud Run:

    前往 Cloud Run

  2. 從選單中選取「服務」,然後按一下「部署容器」,設定新服務。填寫初始服務設定頁面,然後按一下「容器、磁碟區、網路與安全性」,展開服務設定頁面。

  3. 如要設定現有服務,請按一下該服務,然後點選「編輯並部署新修訂版本」

  4. 按照步驟將密鑰掛接為磁碟區,或以環境變數的形式公開密鑰。

    • 如要以環境變數形式公開密鑰,請按照下列步驟操作:

      1. 按一下「容器」分頁標籤。
      2. 在「變數和密鑰」分頁中,按一下「參照密鑰」
      3. 在「Name 1」(名稱 1) 欄位中,輸入環境變數的名稱。
      4. 從「祕密」清單中,選取要使用的祕密。
      5. 在「版本 1」清單中,選取要參照的密鑰版本。
      6. 按一下 [完成]
      7. 按一下 [Create] (建立) 或 [Deploy] (部署)
    • 如要將密鑰掛接為磁碟區,請按照下列步驟操作:

      1. 按一下「Volumes」(磁碟區) 分頁標籤,然後選取「Add volume」(新增磁碟區)
      2. 在「Volume type」(磁碟區類型) 清單中,選取「Secret」(密鑰)
      3. 在「Volume name」(磁碟區名稱) 欄位中輸入名稱,或接受預設名稱。
      4. 從「祕密」清單中,選取要使用的祕密。
      5. 在「Path 1」欄位中,輸入要掛接的檔案名稱。
      6. 在「Version 1」清單中,選取要參照的密鑰版本。系統預設會選取最新版本。如要選取特定版本,請點選「版本」。
      7. 按一下 [完成]
      8. 前往「容器」分頁,將密鑰掛接到容器。
      9. 在「Volume mounts」(磁碟區掛接) 分頁中,按一下「Mount volume」(掛接磁碟區)
      10. 從「名稱 1」清單中選取磁碟區名稱。
      11. 在「Mount path 1」(掛接路徑 1) 欄位中,輸入這個密鑰的掛接路徑。 這個目錄會存放所有版本的密鑰。
      12. 按一下 [完成]
      13. 按一下 [Create] (建立) 或 [Deploy] (部署)

gcloud

如要讓服務存取密鑰,請輸入下列其中一個指令。

  • 部署服務時,如要將密鑰掛接為磁碟區,請按照下列步驟操作:

    gcloud run deploy SERVICE --image IMAGE_URL  \ --update-secrets=PATH=SECRET_NAME:VERSION

    更改下列內容:

    • 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
    • PATH:磁碟區的掛接路徑和密鑰的檔案名稱。開頭必須為正斜線,例如:/etc/secrets/dbconfig/password,其中 /etc/secrets/dbconfig/ 是磁碟區的掛接路徑,password 則是密鑰的檔案名稱。
    • SECRET_NAME:同一專案中的密鑰名稱,例如 mysecret
    • VERSION:密鑰版本。使用 latest 代表最新版本,或使用數字,例如 2
  • 如要在部署服務時將密鑰公開為環境變數,請按照下列步驟操作:

    gcloud run deploy SERVICE \ --image IMAGE_URL \ --update-secrets=ENV_VAR_NAME=SECRET_NAME:VERSION

    更改下列內容:

    • 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
    • ENV_VAR_NAME:要搭配密鑰使用的環境變數名稱。
    • SECRET_NAME:同一專案中的密鑰名稱,例如 mysecret
    • VERSION:密鑰版本。使用 latest 代表最新版本,或使用數字,例如 2
  • 您可以同時更新多個密鑰。如要這麼做,請以半形逗號分隔每個密鑰的設定選項。下列指令會更新一個掛接為磁碟區的密鑰,以及另一個以環境變數形式公開的密鑰。

    如要更新現有密碼,請輸入下列指令:

    gcloud run deploy SERVICE --image IMAGE_URL \ --update-secrets=PATH=SECRET_NAME:VERSION,ENV_VAR_NAME=SECRET_NAME:VERSION
  • 如要清除現有密碼,並讓服務存取新密碼,請使用 --set-secrets 標記:

    gcloud run services update SERVICE \ --set-secrets="ENV_VAR_NAME=SECRET_NAME:VERSION"

YAML

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

    gcloud run services describe SERVICE --format export > service.yaml
  2. 如要以環境變數形式公開密鑰,請在 env 下方視需要更新 ENV_VARVERSION 和/或 SECRET_NAME。如果您有多個密鑰以環境變數的形式掛接,就會有多個這類屬性。

    apiVersion: serving.knative.dev/v1 kind: Service metadata:   name: SERVICE spec:   template:     metadata:       name: REVISION     spec:       containers:       - image: IMAGE_URL         env:         - name: ENV_VAR           valueFrom:             secretKeyRef:               key: VERSION               name: SECRET_NAME
  3. 如要更新以檔案路徑形式掛接的密鑰,請視需要更新 MOUNT_PATHVOLUME_NAMEVERSIONFILENAME 和/或 SECRET_NAME。如果有多個密鑰以檔案路徑形式掛接,您就會有多個這類屬性。

    apiVersion: serving.knative.dev/v1 kind: Service metadata:   name: SERVICE spec:   template:     metadata:       name: REVISION     spec:       containers:       - image: IMAGE_URL         volumeMounts:         - mountPath: MOUNT_PATH           name: VOLUME_NAME       volumes:       - name: VOLUME_NAME         secret:           items:           - key: VERSION             path: FILENAME           secretName: SECRET_NAME

    請注意,VOLUME_NAME 可以設為任何名稱。

    更改下列內容:

    • SERVICE:Cloud Run 服務的名稱。
    • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • REVISION,然後輸入新的修訂版本名稱,或刪除現有名稱。如果您提供新的修訂版本名稱,則必須符合下列條件:
      • 開頭為「SERVICE-
      • 只能包含小寫字母、數字和 -
      • 結尾不是 -
      • 不超過 63 個半形字元
  4. 使用下列指令,以新設定取代服務:

    gcloud run services replace service.yaml

Terraform

  1. 建立密鑰和密鑰版本。

    resource "google_secret_manager_secret" "default" {   secret_id = "my-secret"   replication {     auto {}   } }  resource "google_secret_manager_secret_version" "default" {   secret      = google_secret_manager_secret.default.name   secret_data = "this is secret data" }
  2. 建立服務帳戶並授予密鑰存取權:

    resource "google_service_account" "default" {   account_id   = "cloud-run-service-account"   display_name = "Service account for Cloud Run" }  resource "google_secret_manager_secret_iam_member" "default" {   secret_id = google_secret_manager_secret.default.id   role      = "roles/secretmanager.secretAccessor"   # Grant the new deployed service account access to this secret.   member     = "serviceAccount:${google_service_account.default.email}"   depends_on = [google_secret_manager_secret.default] }
  3. 您可以透過掛接的檔案路徑或環境變數,從 Cloud Run 存取 Secret Manager 密鑰。

    1. 如要將密鑰掛接為檔案路徑,請在 volumes 參數中參照 Secret Manager 資源。name 會對應至 volume_mounts 參數中的項目:

      resource "google_cloud_run_v2_service" "mounted_secret" {   name     = "service-with-mounted-secret"   location = "us-central1"   ingress  = "INGRESS_TRAFFIC_ALL"    deletion_protection = false # set to "true" in production    template {     volumes {       name = "my-service-volume"       secret {         secret = google_secret_manager_secret.default.secret_id         items {           version = "latest"           path    = "my-secret"           mode    = 0 # use default 0444         }       }     }     containers {       image = "us-docker.pkg.dev/cloudrun/container/hello"       volume_mounts {         name       = "my-service-volume"         mount_path = "/secrets"       }     }     service_account = google_service_account.default.email   }   depends_on = [google_secret_manager_secret_version.default] }
    2. 如要以環境變數形式公開密鑰,請在 env 參數中參照 Secret Manager 資源:

      resource "google_cloud_run_v2_service" "env_variable_secret" {   name     = "service-with-env-var-secret"   location = "us-central1"   ingress  = "INGRESS_TRAFFIC_ALL"    deletion_protection = false # set to "true" in production    template {     containers {       image = "us-docker.pkg.dev/cloudrun/container/hello"       env {         name = "MY_SECRET"         value_source {           secret_key_ref {             secret  = google_secret_manager_secret.default.secret_id             version = "latest"           }         }       }     }     service_account = google_service_account.default.email   }   depends_on = [google_secret_manager_secret_version.default] }

參照其他專案中的密鑰

如要參照其他專案的密鑰,請確認專案的服務帳戶有權存取該密鑰

控制台

  1. 前往 Google Cloud 控制台的 Cloud Run:

    前往 Cloud Run

  2. 從選單中選取「服務」,然後按一下「部署容器」,設定新服務。填寫初始服務設定頁面,然後按一下「容器、磁碟區、網路與安全性」,展開服務設定頁面。

  3. 如要設定現有服務,請按一下該服務,然後點選「編輯並部署新修訂版本」

  4. 按照步驟將密鑰掛接為磁碟區,或以環境變數的形式公開密鑰。

    • 如要以環境變數形式公開密鑰,請按照下列步驟操作:

      1. 按一下「容器」分頁標籤。
      2. 在「變數和密鑰」分頁中,按一下「參照密鑰」
      3. 在「Name 1」(名稱 1) 欄位中,輸入環境變數的名稱。
      4. 在「密鑰」清單中,按一下「手動輸入密鑰」
      5. 請以以下格式輸入密鑰的資源 ID:

        projects/PROJECT_NUMBER/secrets/SECRET_NAME 

        更改下列內容:

        • PROJECT_NUMBER 改成您的 Google Cloud 專案編號。如需如何找出專案編號的詳細操作說明,請參閱「建立及管理專案」。

        • SECRET_NAME:Secret Manager 中的密碼名稱。

      6. 在「版本 1」清單中,選取要參照的密鑰版本。

      7. 按一下 [完成]

      8. 按一下 [Create] (建立) 或 [Deploy] (部署)

    • 如要將密鑰掛接為磁碟區,請按照下列步驟操作:

      1. 按一下「Volumes」(磁碟區) 分頁標籤,然後選取「Add volume」(新增磁碟區)
      2. 在「Volume type」(磁碟區類型) 清單中,選取「Secret」(密鑰)
      3. 在「Volume name」(磁碟區名稱) 欄位中輸入名稱,或接受預設名稱。
      4. 在「密鑰」清單中,按一下「手動輸入密鑰」
      5. 請以以下格式輸入密鑰的資源 ID:

        projects/PROJECT_NUMBER/secrets/SECRET_NAME 

        更改下列內容:

        • PROJECT_NUMBER 改成您的 Google Cloud 專案編號。如需如何找出專案編號的詳細操作說明,請參閱「建立及管理專案」。

        • SECRET_NAME:Secret Manager 中的密碼名稱。

      6. 在「Path 1」欄位中,輸入要掛接的檔案名稱。

      7. 在「Version 1」清單中,選取要參照的密鑰版本。系統預設會選取最新版本。如要選取特定版本,請點選「版本」。

      8. 按一下 [完成]

      9. 前往「容器」分頁,將密鑰掛接到容器。

      10. 在「Volume mounts」(磁碟區掛接) 分頁中,按一下「Mount volume」(掛接磁碟區)

      11. 從「名稱 1」清單中選取磁碟區名稱。

      12. 在「Mount path 1」(掛接路徑 1) 欄位中,輸入這個密鑰的掛接路徑。 這個目錄會存放所有版本的密鑰。

      13. 按一下 [完成]

      14. 按一下 [Create] (建立) 或 [Deploy] (部署)

gcloud

  • 如要在部署服務時將密鑰掛接為磁碟區,請按照下列步驟操作:

    gcloud run deploy SERVICE --image IMAGE_URL  \ --update-secrets=PATH=projects/PROJECT_NUMBER/secrets/SECRET_NAME:VERSION

    更改下列內容:

    • 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
    • PATH:磁碟區的掛接路徑和密鑰的檔案名稱。開頭必須為正斜線,例如:/etc/secrets/dbconfig/password,其中 /etc/secrets/dbconfig/ 是磁碟區的掛接路徑,password 則是密鑰的檔案名稱。
    • PROJECT_NUMBER 替換為建立密鑰的專案編號。
    • SECRET_NAME:密鑰名稱,例如 mysecret
    • VERSION,並提供密鑰版本。使用 latest 代表最新版本,或使用數字,例如 2

YAML

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

    gcloud run services describe SERVICE --format export > service.yaml

由於 API 相容性限制,密鑰位置必須儲存在註解中。

  1. 以環境變數形式公開的密鑰:

    apiVersion: serving.knative.dev/v1 kind: Service metadata:   name: SERVICE spec:   template:     metadata:       annotations:         run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME     spec:       containers:       - image: IMAGE_URL         env:         - name: ENV_VAR           valueFrom:             secretKeyRef:               key: VERSION               name: SECRET_LOOKUP_NAME

    更改下列內容:

    • 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
    • ENV_VAR
    • PROJECT_NUMBER:建立密鑰的專案專案編號。
    • SECRET_NAME:密鑰名稱,例如 mysecret
    • VERSION:密鑰版本。使用 latest 代表最新版本,或使用數字,例如 2
    • SECRET_LOOKUP_NAME:任何具有有效密鑰名稱語法的名稱,例如 my-secret,可以與 SECRET_NAME 相同。
  2. 如要將密鑰掛接為檔案路徑,請按照下列步驟操作:

    apiVersion: serving.knative.dev/v1 kind: Service metadata:   name: SERVICE spec:   template:     metadata:       annotations:         run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME     spec:       containers:       - image: IMAGE_URL         volumeMounts:         - mountPath: MOUNT_PATH           name: VOLUME_NAME       volumes:       - name: VOLUME_NAME         secret:           items:           - key: VERSION             path: FILENAME           secretName: SECRET_LOOKUP_NAME

    更改下列內容:

    • 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
    • PATH:磁碟區的掛接路徑和密鑰的檔案名稱。開頭必須為正斜線,例如:/etc/secrets/dbconfig/password,其中 /etc/secrets/dbconfig/ 是磁碟區的掛接路徑,password 則是密鑰的檔案名稱。
    • PROJECT_NUMBER:建立密鑰的專案專案編號。
    • SECRET_NAME:密鑰名稱,例如 mysecret
    • VERSION:密鑰版本。使用 latest 代表最新版本,或使用數字,例如 2
    • SECRET_LOOKUP_NAME:任何具有有效密鑰名稱語法的名稱,例如 my-secret,可以與 SECRET_NAME 相同。
    • VOLUME_NAME:任何名稱,例如 my-volume,可以與 SECRET_NAME 相同。

Terraform

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

在 Terraform 設定中,將下列內容新增至 google_cloud_run_v2_service 資源:

以環境變數形式公開的密鑰:

resource "google_cloud_run_v2_service" "default" {   name     = "SERVICE_NAME"   location = "REGION"    template {     containers {       image = "IMAGE_URL"       env {         name = "SECRET_NAME"         value_source {           secret_key_ref {             secret = "projects/PROJECT_ID/secrets/SECRET_NAME"             version = "VERSION"           }         }       }     }   } } 

更改下列內容:

  • SERVICE_NAME:Cloud Run 工作的名稱。
  • REGION: Google Cloud 區域。例如:europe-west1
  • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • SECRET_NAME:密鑰名稱,例如 mysecret
  • PROJECT_ID:建立密鑰的專案 ID。
  • VERSION:密鑰版本。使用 latest 代表最新版本,或使用數字 (例如 2)。

對於以檔案路徑形式掛接的密鑰:

resource "google_cloud_run_v2_service" "default" {   name     = "SERVICE_NAME"   location = "REGION"    template {     containers {       image = "IMAGE_URL"        volume_mounts {         name       = "VOLUME_NAME"         mount_path = "MOUNT_PATH"       }     }      volumes {       name = "VOLUME_NAME"       secret {         secret = "projects/PROJECT_ID/secrets/SECRET_NAME"       }     }   } } 

更改下列內容:

  • SERVICE_NAME:Cloud Run 工作的名稱。
  • REGION 替換成 Google Cloud 地區。例如:europe-west1
  • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • VOLUME_NAME:任何名稱,例如 my-volume,可以與 SECRET_NAME 相同
  • MOUNT_PATH:磁碟區的掛接路徑和密鑰的檔案名稱。開頭必須為正斜線,例如:/etc/secrets/dbconfig/password,其中 /etc/secrets/dbconfig/ 是磁碟區的掛接路徑,password 則是密鑰的檔案名稱。
  • PROJECT_ID:建立密鑰的專案 ID。
  • SECRET_NAME:密鑰名稱,例如 mysecret

查看密鑰設定

如要查看 Cloud Run 服務目前的密鑰設定:

控制台

  1. 前往 Google Cloud 控制台的 Cloud Run:

    前往 Cloud Run

  2. 按一下感興趣的服務,開啟「服務詳細資料」頁面。

  3. 按一下「Revisions」(修訂版本) 分頁標籤。

  4. 在右側的詳細資料面板中,密鑰設定會列在「容器」分頁下方。

gcloud

  1. 使用下列指令:

    gcloud run services describe SERVICE
  2. 在傳回的設定中找出密鑰設定。

從服務中移除密鑰

如要從服務中移除密鑰,可以使用 Google Cloud 控制台或 gcloud CLI:

主控台

  1. 前往 Google Cloud 控制台的 Cloud Run:

    前往 Cloud Run

  2. 從清單中選取服務,然後按一下「Edit and deploy new revision」(編輯及部署新版本)

  3. 按一下「容器」分頁標籤。

  4. 如要刪除以磁碟區形式掛接的密鑰,請選取「磁碟區掛接」分頁標籤, 將指標懸停在要移除的密鑰上,然後按一下「刪除」

  5. 如要刪除以環境變數形式公開的密鑰,請選取「變數和密鑰」分頁,將指標懸停在要移除的密鑰上,然後按一下「刪除」圖示

  6. 按一下 [Deploy] (部署)

gcloud

您可以從服務中移除所有密鑰,或指定要移除的一或多個密鑰:

  • 如要移除所有密鑰,請執行下列指令:

    gcloud run deploy SERVICE --image IMAGE_URL \ --clear-secrets 

    更改下列內容:

    • 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
  • 如要指定要移除的密鑰清單,請使用 --remove-secrets 旗標。下列指令會移除一個以磁碟區形式掛接的密鑰,以及另一個以環境變數形式公開的密鑰:

    gcloud run deploy SERVICE --image IMAGE_URL \ --remove-secrets=ENV_VAR_NAME,SECRET_FILE_PATH 

    更改下列內容:

    • 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
    • ENV_VAR_NAME:環境變數的名稱。
    • SECRET_FILE_PATH:密鑰的完整路徑。舉例來說,/mnt/secrets/primary/latest,其中 /mnt/secrets/primary/ 是掛接路徑,latest 則是密鑰路徑。您也可以分別指定掛接路徑和密鑰路徑:

          --set-secrets MOUNT_PATH:SECRET_PATH=SECRET:VERSION 

在程式碼中使用密鑰

如需在程式碼中以環境變數形式存取密鑰的範例,請參閱使用者驗證教學課程,特別是「使用 Secret Manager 處理機密設定」一節。

不允許的路徑和限制

Cloud Run 不允許您在 /dev/proc/sys 或其子目錄中掛接密鑰。

如果您要在 /tmp 上掛接密鑰,且使用第一代執行環境,請參閱/tmp 上掛接密鑰的已知問題。

Cloud Run 不允許您在同一路徑掛接多個密鑰,因為兩個磁碟區掛接點無法掛接在同一位置。

覆寫目錄

如果密鑰在 Cloud Run 中以磁碟區形式掛接,且磁碟區掛接路徑中的最後一個目錄已存在,則現有目錄中的任何檔案或資料夾都會無法存取。

舉例來說,如果名為 my-secret 的密鑰已掛接至路徑 /etc/app_data,則 app_data 目錄中的所有內容都會遭到覆寫,且只會顯示 /etc/app_data/my-secret 檔案。

為避免覆寫現有目錄中的檔案,請建立新目錄來掛接密鑰,例如 /etc/app_data/secrets,這樣密鑰的掛接路徑就會是 /etc/app_data/secrets/my-secret