透過 SSH,您可以與執行中的容器執行個體建立安全互動式殼層連線。這項功能可直接存取容器的檔案系統和執行階段環境,方便您檢查系統資源、驗證設定及排解問題。
Cloud Run 的 SSH 功能會自動將必要的 sshd 二進位檔新增至容器的檔案系統。這些二進位檔只能在 SSH 工作階段期間存取,工作階段結束後就會移除。Cloud Run SSH 會忽略現有的 SSH 設定 (包括 /etc/passwd 項目),改用 Google 管理的設定。
在下列路徑建立 SSH 工作階段時,系統會在容器內掛接 Google 管理的 SSH 依附元件第三方開放原始碼著作權聲明:/usr/share/licenses/google_ssh/THIRD_PARTY_NOTICES。
限制
SSH 有以下限制:
- SSH 僅適用於在 Cloud Run 的第 2 代環境和 Cloud Run 執行個體上執行的服務。
- 使用 SSH 時,映像檔中的主機金鑰會遭到覆寫。 SSH 工作階段結束後,金鑰仍會遭到覆寫,直到服務執行個體重新啟動為止。
- Windows:不支援 PuTTY。使用 OpenSSH 用戶端。
- 使用 SSH 時,請務必格外小心,確保容器安全無虞。請考慮採用安全性最佳做法,例如以非根使用者身分執行應用程式程式碼。
事前準備
- 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自體驗產品的實際應用成效。新客戶還能獲得價值 $300 美元的免費抵免額,能用於執行、測試及部署工作負載。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
啟用 Cloud Run Admin API、Cloud Resource Manager API、Identity-Aware Proxy API 和 Cloud OS 登入 API:
gcloud services enable run.googleapis.com \ iap.googleapis.com \ oslogin.googleapis.com
- 安裝並初始化 gcloud CLI。
-
更新元件:
gcloud components update
-
Windows:確認已安裝 OpenSSH 用戶端。
Windows 10 以上版本通常會預先安裝 OpenSSH 用戶端。如未安裝,請在 PowerShell 中以管理員身分執行下列指令來安裝:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
詳情請參閱「安裝 OpenSSH」。
- 查看 Cloud Run 定價頁面。如要根據預測用量估算費用,請使用 Pricing Calculator。SSH 網路輸出位元組的費用。
-
如果專案使用 VPC Service Controls (VPC-SC),請注意,通道程序會檢查
iaptunnel.googleapis.com這個服務名稱,而不是run.googleapis.com。
必要的角色
如要取得完成這些步驟所需的權限,請要求管理員授予您下列 IAM 角色:
- 服務帳戶的服務帳戶使用者 (
roles/iam.serviceAccountUser) - Cloud Run SSH 超級使用者存取權 (
roles/run.sshRoot) 服務 - 服務的「Cloud Run 檢視者」 (
roles/run.viewer) - 受 IAP 保護的通道使用者 (
roles/iap.tunnelResourceAccessor) 服務 - 服務的 Cloud Run 開發人員 (
roles/run.developer) - 記錄檔檢視存取者 (
roles/logging.viewAccessor) 專案 - 瀏覽器 (
roles/browser) 專案 - 專案的服務使用情形消費者 (
roles/serviceusage.serviceUsageConsumer) - IAP 政策管理員 (
roles/iap.admin) 專案,用於 IAP 管理作業
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
如果您不是專案所屬機構的成員,Cloud Run 會封鎖 SSH 存取權。如要取得 SSH 存取權,請新增 roles/compute.osLoginExternalUser 角色,或使用具備 compute.oslogin.updateExternalUser 權限的自訂角色。
您可以在專案層級授予「受 IAP 保護的通道使用者」角色,如要限制特定 Cloud Run 服務或執行個體的角色,請執行下列指令:
特定服務
gcloud beta iap tcp add-iam-policy-binding \
--resource-type=cloud-run \
--service=SERVICE \
--region=REGION \
--member=MEMBER \
--role=roles/iap.tunnelResourceAccessor
更改下列內容:
SERVICE:服務名稱。REGION:服務部署所在的區域。MEMBER:要授予存取權的身分。
針對特定執行個體
gcloud beta iap tcp add-iam-policy-binding \
--resource-type=cloud-run \
--instance=INSTANCE \
--region=REGION \
--member=MEMBER \
--role=roles/iap.tunnelResourceAccessor
更改下列內容:
INSTANCE:執行個體的名稱。REGION:服務部署所在的區域。MEMBER:要授予存取權的身分。
如要在專案和區域層級授予 roles/iap.tunnelResourceAccessor,請參閱「設定 IAP 存取權政策」。
搭配使用 SSH 與 Cloud Run 服務
設定服務層級的 SSH 存取權,並使用 SSH 連線至服務。
設定服務層級的 SSH 存取權
您可以使用 gcloud CLI 或 YAML,允許特定服務的檢查存取權:
gcloud
如要為現有服務啟用存取權,請使用下列指令:
gcloud beta run services update SERVICE --ssh
您也可以在部署服務時使用 --ssh 旗標,允許檢查服務的存取權。
YAML
如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
以下範例包含 YAML 設定:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/ssh-enabled: "true" run.googleapis.com/launch-stage: BETA spec: template: spec: containers: image: IMAGE_URL更改下列內容:
SERVICE:Cloud Run 服務名稱。REGION: Google Cloud 區域,例如us-central1。IMAGE_URL:容器映像檔的參照,例如us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
使用下列指令建立或更新服務:
gcloud run services replace service.yaml
gcloud run services replace指令預設會使用service.yaml檔案 (如有)。
您可以使用 gcloud CLI 或 YAML,依服務停用 SSH 存取權:
gcloud
如要停用服務的存取權,請使用下列指令:
gcloud beta run services update SERVICE --no-ssh
YAML
如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
以下範例包含 YAML 設定:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/ssh-enabled: "false" run.googleapis.com/launch-stage: BETA spec: template: spec: containers: image: IMAGE_URL更改下列內容:
SERVICE:Cloud Run 服務名稱。REGION: Google Cloud 區域,例如us-central1。IMAGE_URL:容器映像檔的參照,例如us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
使用下列指令建立或更新服務:
gcloud run services replace service.yaml
gcloud run services replace指令預設會使用service.yaml檔案 (如有)。
使用 SSH 連線至服務
如要使用 SSH 連線至服務,請使用 gcloud CLI:
如要使用 SSH 連線至服務,請使用下列 Google Cloud CLI 指令:
gcloud beta run services ssh SERVICE --region=REGION --project=PROJECT_ID
更改下列內容:
SERVICE:服務名稱。REGION:服務部署所在的區域。PROJECT_ID: Google Cloud 專案 ID。如果系統提示您輸入安全殼層金鑰的通關密語,可以留空。不過,如果您輸入密碼片語,請務必在同一個工作區的後續 SSH 工作階段中使用相同的密碼片語。
SSH 工作階段成功完成後,Cloud Run 會顯示以下訊息:
Project: my-project Region:REGIONService: busybox Revision: busybox-REVISION Instance: INSTANCE-ID Container: busybox-1 Image: IMAGE如要結束 SSH 工作階段,請輸入
exit。只要容器保持運作,您對容器所做的任何變更都會保留。結束工作階段不會重新啟動或終止容器。
指定服務執行個體
如要使用 SSH 連線至特定服務執行個體,請使用 Google Cloud CLI。
如要使用 SSH 連線至 Cloud Run 服務執行個體,請使用下列 Google Cloud CLI 指令:
gcloud beta run services ssh SERVICE --region=REGION --project=PROJECT_ID --instance=INSTANCE_ID
更改下列內容:
SERVICE:服務名稱。REGION:服務部署所在的區域。PROJECT_ID: Google Cloud 專案 ID。INSTANCE_ID:執行個體 ID。如要找出服務執行個體 ID,請前往「可觀測性」部分的「記錄」頁面。執行個體 ID 位於記錄項目的labels欄位中。如果您在連線前終止特定執行個體,就找不到執行個體 ID。
指定修訂版本
如要使用 SSH 連線至特定修訂版本,請使用 Google Cloud CLI。
如要使用 SSH 連線至 Cloud Run 服務修訂版本,請使用下列 Google Cloud CLI 指令:
gcloud beta run services ssh SERVICE --region=REGION --project=PROJECT_ID --revision=REVISION
更改下列內容:
SERVICE:服務名稱。REGION:服務部署所在的區域。PROJECT_ID: Google Cloud 專案 ID。REVISION:修訂版本名稱。
透過 SSH 連入 Cloud Run 執行個體
設定執行個體層級的 SSH 存取權,並使用 SSH 連線至執行個體。
設定執行個體層級的 SSH 存取權
執行個體預設會啟用 SSH。
您可以使用 gcloud CLI 或 YAML,依執行個體停用 SSH 存取權:
gcloud
如要在執行個體上停用存取權,請使用下列指令:
gcloud beta run instances update INSTANCE --no-ssh
YAML
如果您要建立新的執行個體,請跳過這個步驟。 如要更新現有執行個體,請下載其 YAML 設定:
gcloud beta run instances describe INSTANCE --format export > instance.yaml
以下範例包含 YAML 設定:
apiVersion: run.googleapis.com/v1 kind: Instance metadata: name: INSTANCE labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/ssh-enabled: "false" run.googleapis.com/launch-stage: BETA spec: containers: image: IMAGE_URL更改下列內容:
INSTANCE:Cloud Run 執行個體的名稱。REGION: Google Cloud 區域,例如us-central1。IMAGE_URL:容器映像檔的參照,例如us-docker.pkg.dev/cloudrun/container/hello:latest。
使用下列指令建立或更新執行個體:
gcloud beta run instances replace instance.yaml
您可以使用 gcloud CLI 或 YAML,允許檢查特定執行個體。
gcloud
如要在現有執行個體上啟用存取權,請使用下列指令:
gcloud beta run instances update INSTANCE --ssh
您也可以在部署執行個體時使用 --ssh 標記,允許檢查執行個體。
YAML
如果您要建立新的執行個體,請跳過這個步驟。 如要更新現有執行個體,請下載其 YAML 設定:
gcloud beta run instances describe INSTANCE --format export > instance.yaml
以下範例包含 YAML 設定:
apiVersion: run.googleapis.com/v1 kind: Instance metadata: name: INSTANCE labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/ssh-enabled: "true" run.googleapis.com/launch-stage: BETA spec: containers: image: IMAGE_URL更改下列內容:
INSTANCE:Cloud Run 執行個體的名稱。REGION: Google Cloud 區域,例如us-central1。IMAGE_URL:容器映像檔的參照,例如us-docker.pkg.dev/cloudrun/container/hello:latest。
使用下列指令建立或更新執行個體:
gcloud beta run instances replace instance.yaml
透過 SSH 連線至執行個體
如要使用 SSH 連線至執行個體,請使用下列 Google Cloud CLI 指令:
gcloud beta run instances ssh INSTANCE --region=REGION --project=PROJECT_ID
更改下列內容:
INSTANCE:執行個體的名稱。REGION:服務部署所在的區域。PROJECT_ID: Google Cloud 專案 ID。
如果系統提示您輸入安全殼層金鑰的通關密語,可以留空。不過,如果您輸入密碼片語,請務必在同一個工作區的後續 SSH 工作階段中使用相同的密碼片語。
SSH 工作階段成功完成後,Cloud Run 會顯示以下訊息:
Project: my-project
Region: REGION
Instance: INSTANCE
Revision: REVISION
Container: CONTAINER
Image: IMAGE
如要結束 SSH 工作階段,請輸入 exit。
使用 OpenSSH 用戶端連線
如要使用 OpenSSH 用戶端連線,請按照下列步驟操作:
- 在目標服務上執行
gcloud beta run services ssh指令。 - 啟動 SSH 通道並產生憑證。
在 SSH 設定中新增下列內容:
Host cloud-run-ssh HostName cloud-run-default User root IdentityFile /Users/USER/.ssh/google_compute_engine CertificateFile /Users/USER/.ssh/google_compute_engine_cert/PROJECT_ID_REGION_SERVICE-cert.pub CheckHostIP no HashKnownHosts no HostKeyAlias cloud-run-default IdentitiesOnly yes StrictHostKeyChecking no UserKnownHostsFile /dev/null ProxyUseFdpass no ProxyCommand /usr/local/bin/python3 -S /Users/USER/google-cloud-sdk/lib/gcloud.py alpha run start-iap-tunnel --project_number=PROJECT_NUMBER --project_id=PROJECT_ID --workload_type=service --deployment_name=SERVICE --region=REGION更改下列內容:
USER:本機的使用者名稱。PROJECT_ID: Google Cloud 專案 ID。PROJECT_NUMBER: Google Cloud 專案編號。REGION:服務部署所在的區域。SERVICE:服務名稱。
如果 gcloud CLI 安裝在其他資料夾,您可能需要更新最後一行中的位置。
執行下列指令:
ssh cloud-run-ssh
SSH 憑證會在五分鐘後失效。如果五分鐘後嘗試與服務建立 SSH 連線,請務必重新執行 gcloud beta run services ssh,重新產生憑證。
SSH 存取記錄
如要擷取 SSH 金鑰管理作業的稽核記錄,請為 Cloud OS 登入 API 啟用稽核記錄。請參閱「查看 OS 登入稽核記錄」。 如要存取 Cloud Run 資源的 SSH 記錄,您必須有該專案的 Cloud 稽核記錄存取權。
以下範例會查詢過去一天的所有 Cloud Run 服務:
gcloud logging read '
logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access" AND
protoPayload.serviceName="oslogin.googleapis.com" AND
protoPayload.request.instance:"run.googleapis.com"
' --project=PROJECT_ID \
--freshness=1d \
--format="table(timestamp, protoPayload.authenticationInfo.principalSubject:label=USER, protoPayload.request.instance:label=CLOUD_RUN_SERVICE)"
保護及控管 SSH 存取權
您可以控管哪些人可以使用 SSH,以及在環境中如何限制 SSH。
使用機構政策停用 SSH 存取權
如要設定組織政策來停用 SSH,請使用自訂限制,禁止在 Cloud Run 服務上啟用 SSH 偵錯存取權。
後續步驟
- 進一步瞭解如何排解 Cloud Run 問題。
- 進一步瞭解如何排解 Cloud Run 服務問題。
- 瞭解 Cloud Run 的已知問題。