Private Service Connect 執行個體不會向公用網際網路公開任何端點。建立 Private Service Connect 執行個體時,系統會建立端點,為執行個體提供 SSH (Git) 和 HTTPS (Git、網頁介面、API) 存取權。端點必須在私人網路上指派 IP 位址。Private Service Connect 執行個體的所有流量都會通過 Private Service Connect 端點。
如要進一步瞭解如何使用 Private Service Connect,從虛擬私有雲網路內部私下存取代管服務,請參閱「Private Service Connect」。
Secure Source Manager 是單一租戶服務。單一 Secure Source Manager 執行個體應只包含來自一個Google Cloud 客戶的使用者,除非有多家公司有合約關係,需要使用單一執行個體進行協作。
如果您與多間公司合作,並想與他們協作原始碼,建議您為每間公司建立個別執行個體。
事前準備
-
登入 Google 帳戶。
如果還沒有帳戶,請 註冊新帳戶。
-
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.
Enable the Secure Source Manager API, if it is not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init -
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.
Enable the Secure Source Manager API, if it is not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
必要的角色
如要取得建立 Private Service Connect Secure Source Manager 執行個體所需的權限,請要求管理員授予您下列 IAM 角色:
- 組織的 Access Context Manager 管理員角色 (
roles/accesscontextmanager.policyAdmin) - 執行個體的執行個體擁有者角色 (
roles/securesourcemanager.instanceOwner) -
如要建立服務身分和憑證授權單位集區,請在機構中指派 CA 服務作業管理員 (
roles/privateca.caManager)。
建立服務身分和憑證授權單位集區
本節說明如何使用自己的 CA 憑證。如要搭配私人執行個體使用自訂網域,則必須使用自己的 CA 憑證。如要使用 Google代管憑證,但不使用自訂網域,則不必建立服務身分和 CA 集區,只要執行gcloud source-manager instances create
指令即可。詳情請參閱「建立 Private Service Connect Secure Source Manager 執行個體」。
如果您使用自己的 CA 憑證,則必須在建立私人 Secure Source Manager 執行個體時,指定憑證授權單位 (CA) 集區名稱。系統會將簽署執行個體 HTTPS SSL 憑證的要求傳送至 CA 集區。
執行下列指令,在專案中為 Secure Source Manager API 建立服務身分:
gcloud beta services identity create \ --service=securesourcemanager.googleapis.com \ --project=PROJECT_ID其中 PROJECT_ID 是您的專案 ID。
輸出結果會與下列內容相似:
Service identity created: service-PROJECT_NUM@gcp-sa-sourcemanager.iam.gserviceaccount.com其中
service-PROJECT_NUM@gcp-sa-sourcemanager.iam.gserviceaccount.com是 Secure Source Manager 服務代理,PROJECT_NUM 則是專案編號。建立憑證授權單位 (CA) 集區,並啟用以 CSR 為基礎的憑證要求。
建立 CA。您可以視需求建立根或從屬 CA。
- 如要建立根 CA,請按照「建立根 CA」中的操作說明進行。
- 如要從 Google Cloud中的上層 CA 建立從屬 CA,請按照「建立從屬 CA」中的操作說明進行
- 如要從外部 CA 建立從屬 CA,請按照「從外部 CA 建立從屬 CA」一文中的指示操作。
如要進一步瞭解根 CA 和從屬 CA 的差異,請參閱「判斷憑證授權單位設定」。
授予 Secure Source Manager API 服務身分權限,以便在 CA 集區中要求新憑證:
gcloud privateca pools add-iam-policy-binding CA_POOL_NAME \ --location=CA_LOCATION \ --member='serviceAccount:service-PROJECT_NUMBER@gcp-sa-sourcemanager.iam.gserviceaccount.com' \ --role='roles/privateca.certificateRequester' \ --project=CA_PROJECT_ID更改下列內容:
- CA_POOL_NAME:CA 集區的名稱。
- CA_LOCATION,並指定 CA 集區的區域或可用區。
- PROJECT_NUMBER:已啟用 Secure Source Manager 的專案編號。如要找出專案編號,請參閱「識別專案」。
- CA_PROJECT_ID,並將其替換為您建立 CA 集區的專案 ID。
建立 Private Service Connect Secure Source Manager 執行個體
您可以為私人執行個體的 HTML、API、Git HTTP 和 Git SSH 端點指派自訂網域。自訂網域需要您自己的 CA 憑證。因此,使用自訂網域建立執行個體時,必須提供 CA 集區。您只能在建立執行個體時,使用 API 設定自訂網域。執行個體建立後,就無法修改這些設定。
gcloud
使用下列指令建立 Private Service Connect 執行個體:
gcloud source-manager instances create INSTANCE_ID \
--region=LOCATION \
--project=PROJECT_ID \
--is-private \
--ca-pool=projects/CA_PROJECT/locations/CA_LOCATION/caPools/CA_POOL_NAME
更改下列內容:
- INSTANCE_ID,並將執行個體命名為您想要的名稱。
- LOCATION:要建立執行個體的區域。如要查看支援的位置,請參閱「位置」。
- PROJECT_ID,並換成您要在其中建立執行個體的專案名稱。
- CA_PROJECT:CA 集區專案名稱。如果您使用自己的 CA 憑證,則必須提供這個值。
- CA_LOCATION,並替換為您建立 CA 集區的區域。 如果使用自己的 CA 憑證,則必須提供這個值。
- CA_POOL_NAME:CA 集區名稱。如果您使用自己的 CA 憑證,則必須提供這個值。
API
使用下列指令建立 Private Service Connect 執行個體:
curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://securesourcemanager.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances?instance_id=INSTANCE_ID \
-H "Content-Type: application/json" \
-d '{"private_config":{"is_private":true,"ca_pool":"projects/CA_PROJECT/locations/CA_LOCATION/caPools/CA_POOL_NAME","custom_host_config":{"api":"API_CUSTOM_DOMAIN", "html":"HTML_CUSTOM_DOMAIN", "git_ssh":"GIT_SSH_CUSTOM_DOMAIN", "git_http":"GIT_HTTP_CUSTOM_DOMAIN"}}}'
更改下列內容:
- INSTANCE_ID,並將執行個體命名為您想要的名稱。
- LOCATION,並將其替換為要建立執行個體的區域。如要查看支援的位置,請參閱「位置」。
- PROJECT_ID:要建立執行個體的專案名稱。
- CA_PROJECT:CA 集區專案名稱。如果您使用自己的 CA 憑證或自訂網域,則必須提供這項資訊。
- CA_LOCATION:建立 CA 集區的區域。如果您使用自己的 CA 憑證或自訂網域,就必須提供這項資訊。
- CA_POOL_NAME:CA 集區名稱。如果您使用自己的 CA 憑證或自訂網域,則必須提供這項資訊。
- API_CUSTOM_DOMAIN,並提供用於 API 存取的自訂網域,例如
api.source.example.com。只有在使用自訂網域時才須提供。 - HTML_CUSTOM_DOMAIN,並使用自訂網域存取網頁使用者介面,例如
source.example.com。只有在使用自訂網域時才須提供。 - GIT_SSH_CUSTOM_DOMAIN:Git SSH 存取的自訂網域,例如
ssh.source.example.com。只有在使用自訂網域時才須提供。 - GIT_HTTP_CUSTOM_DOMAIN,並使用自訂網域進行 Git HTTP 存取,例如
git.source.example.com。只有在使用自訂網域時才須提供。
Terraform
如要使用 Terraform 建立 Private Service Connect 執行個體,請使用 google_secure_source_manager_instance 資源,並將 private_config.is_private 欄位設為 true。
系統會開始執行長時間執行的執行個體建立作業。執行個體最多需要 60 分鐘才能建立。輸出結果會與下列內容相似:
Create request issued for [my-instance].
done: false
metadata:
'@type': type.googleapis.com/google.cloud.securesourcemanager.v1.OperationMetadata
apiVersion: v1
createTime: '2023-02-27T20:57:52.315609549Z'
requestedCancellation: false
target: projects/my-project/locations/us-central1/instances/my-instance
verb: create
name: projects/my-project/locations/us-central1/operations/operation-1234567894561-5ec69948c0f2b-60dd727f-a9b97a2e
其中
projects/my-project/locations/us-central1/operations/operation-1234567894561-5ec69948c0f2b-60dd727f-a9b97a2e
是 OPERATION_NAME。
您需要 OPERATION_NAME 才能查看作業狀態。
如要檢查作業狀態,請執行下列指令:
gcloud source-manager operations describe OPERATION_NAME \
--region=LOCATION
更改下列內容:
- OPERATION_NAME:建立指令回應中的作業名稱。
- LOCATION,並將其替換為要建立執行個體的區域。如要查看支援的位置,請參閱「位置」。
建立執行個體後,輸出內容會列出 Private Service Connect 端點 httpServiceAttachment 和 sshServiceAttachment,以及 html、api、gitHttp 和 gitSsh 的主機名稱。
存取私人執行個體
您可以根據轉送規則建立 Private Service Connect 端點,或根據負載平衡器建立 Private Service Connect 後端,藉此存取 Private Service Connect 執行個體。
以負載平衡器為基礎的 Private Service Connect 後端較有彈性,可與 Cloud Build 等其他 Google Cloud 服務整合,但較為複雜,且會產生額外費用。
以轉送規則為基礎的 Private Service Connect 端點較為簡單,費用也較低。不過,您無法連線至 Cloud Build 或其他Google Cloud 服務。
如要為 Private Service Connect 執行個體設定以負載平衡器為基礎的 Private Service Connect 後端,並將其連線至 Cloud Build,請參閱「將 Cloud Build 連線至 Private Service Connect 執行個體」。
根據轉送規則設定 Private Service Connect 端點
如要建立 Private Service Connect 端點,請按照「透過端點存取已發布的服務」中的操作說明操作。
如要取得 Secure Source Manager 執行個體的 HTTP 和 SSH 服務連結 URI,請執行下列指令:
gcloud source-manager instances describe INSTANCE_ID \ --region=LOCATION更改下列內容:
- INSTANCE_ID 替換為執行個體名稱。如要列出特定區域中的執行個體,請執行
gcloud source-manager instances list --region=LOCATION。 - LOCATION,並將其換成執行個體的位置。如要查看支援的位置,請參閱「位置」。
輸出內容包括:
createTime: '2023-09-22T18:21:35.729454612Z' hostConfig: api: my-project-012345678901-api.us-central1.p.sourcemanager.dev gitHttp: my-project-012345678901-git.us-central1.p.sourcemanager.dev gitSsh: my-project-012345678901-ssh.us-central1.p.sourcemanager.dev html: my-project-012345678901.us-central1.p.sourcemanager.dev name: projects/my-project/locations/us-central1/instances/my-instance privateConfig: caPool: projects/my-project/locations/us-central1/caPools/my-ca-pool httpServiceAttachment: projects/abc12345d1a1234a0a-tp/regions/us-central1/serviceAttachments/http-psc isPrivate: true sshServiceAttachment: projects/abc12345d1a1234a0a-tp/regions/us-central1/serviceAttachments/ssh-psc state: ACTIVE updateTime: '2023-09-22T18:39:53.390563549Z'projects/abc12345d1a1234a0a-tp/regions/us-central1/serviceAttachments/http-psc是執行個體的 HTTP 服務連結 URI。projects/abc12345d1a1234a0a-tp/regions/us-central1/serviceAttachments/ssh-psc是執行個體的 SSH 服務連結 URI。
- INSTANCE_ID 替換為執行個體名稱。如要列出特定區域中的執行個體,請執行
建立 Private Service Connect 端點後,您需要設定私人 DNS 記錄。如要瞭解如何設定私人 DNS 記錄,請參閱「手動設定 DNS」。如果您為執行個體設定了自訂網域,請建立 DNS 記錄,將自訂網域對應至服務附件的內部 IP 位址。否則,請使用執行個體
hostConfig欄位中的主機名稱:- 將
hostConfig.html(或您的 HTML 自訂網域)、hostConfig.api(或您的 API 自訂網域) 和hostConfig.gitHttp(或您的 Git HTTP 自訂網域) 的值,對應至 HTTP 服務附件的內部 IP 位址。 - 將
hostConfig.ssh(或 Git SSH 自訂網域) 的值對應至 SSH 服務連結的內部 IP 位址。
舉例來說,在上述範例輸出中,
hostConfig.html的值為my-project-012345678901.us-central1.p.sourcemanager.dev。- 將
使用自訂網域進行 Git 驗證
如果您為私人執行個體使用自訂網域,請在每部機器上執行下列用戶端設定,以便透過 HTTPS 使用 Git。這項設定會將 Git 連結至 gcloud 憑證輔助程式,以便對自訂網域進行驗證。
設定 Git,為自訂 Git HTTP 網域使用
gcloud輔助程式:git config --global credential.'https://GIT_HTTP_CUSTOM_DOMAIN'.helper gcloud.sh將 GIT_HTTP_CUSTOM_DOMAIN 替換為您為 Git HTTP 存取設定的自訂網域。
在
gcloud中授權自訂網域:gcloud config set core/credentialed_hosted_repo_domains GIT_HTTP_CUSTOM_DOMAIN如要授權多個網域,請以逗號分隔的清單提供網域。
搭配使用 CA 與 Secure Source Manager API
Secure Source Manager 包含控制層和資料層。資料平面端點是由 Secure Source Manager 執行個體直接代管,因此您必須連線至執行個體的 API 主機名稱,才能存取這些端點。
如要使用私有 Secure Source Manager 執行個體,請使用您在「建立服務身分和憑證授權單位集區」一節中建立的 CA。
如要下載 CA,請執行下列指令:
gcloud privateca pools get-ca-certs CA_POOL \ --location LOCATION \ --output-file=root-cert.pem \ --project PROJECT如要對執行個體發出 API 呼叫,請將 CA 憑證傳遞至資料層 Secure Source Manager API。
舉例來說,下列指令會將 CA 憑證
root-cert.pem傳遞至 Secure Source Manager API,列出位置us-central1中私人執行個體my-instance的存放區。curl \ --cacert root-cert.pem \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://my-instance-01234567890-api.us-central1.sourcemanager.dev/v1/projects/01234567890/locations/us-central1/repositories
後續步驟
- 將 Cloud Build 連線至 Private Service Connect Secure Source Manager 執行個體。
- 在 VPC Service Controls 範圍內設定 Secure Source Manager。