本頁說明如何將身分與存取權管理 (IAM) 角色授予主體,以存取 Secure Source Manager 資源。如要瞭解如何授予其他 Google Cloud 資源的角色,請參閱「管理專案、資料夾和機構的存取權」一文。
Secure Source Manager 執行個體和存放區有各自的角色。首次在專案中授予執行個體角色時,必須使用 gcloud CLI 工具或 REST API。您可以使用 gcloud CLI 工具、REST API 或 Secure Source Manager 網頁介面,授予存放區角色。
使用 gcloud CLI、網頁介面或 REST API 授予 Secure Source Manager 角色後,該角色就會顯示在 Google Cloud 控制台的專案中。
必要的角色
如要取得更新執行個體或存放區 IAM 政策所需的權限,請要求管理員授予下列 IAM 角色:
-
授予執行個體 IAM 角色:
Secure Source Manager 執行個體擁有者 (
roles/securesourcemanager.instanceOwner
) 在 Secure Source Manager 執行個體上 -
授予存放區 IAM 角色:
存放區的Secure Source Manager 存放區管理員 (
roles/securesourcemanager.repoAdmin
)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
如要瞭解如何授予 Secure Source Manager 角色,請參閱「使用 IAM 控管存取權」和「授予使用者執行個體存取權」。
指定主體
主體代表可存取資源的身分。每個主體都有專屬的 ID。主體 ID 的格式如下:
PRINCIPAL-TYPE:ID
例如,user:my-user@example.com
。如要進一步瞭解主體,請參閱「身分與存取權管理的運作方式」。
如果是 user
主體類型,除非您使用員工身分聯盟,否則 ID 中的網域名稱必須是 Google Workspace 網域或 Cloud Identity 網域。如要瞭解如何設定 Cloud Identity 網域,請參閱 Cloud Identity 總覽。
員工身分聯盟主體
如果您使用員工身分聯盟存取 Secure Source Manager,主體會以不同方式表示。如要進一步瞭解如何授予代表身分群組的主體存取權,請參閱「在 IAM 政策中代表工作團隊集區使用者」。
舉例來說,下列指令會將專案 my-project
中 us-central1
地區的執行個體 my-instance
上的 Workforce Pool my-pool
中的執行個體存取者角色 (roles/securesourcemanager.instanceAccessor
) 授予使用者 user@example.com
:
gcloud beta source-manager instances add-iam-policy-binding my-instance \
--project=my-project \
--region=us-central1 \
--member=principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/user@example.com \
--role=roles/securesourcemanager.instanceAccessor
您可以根據身分識別提供者 (IdP) 屬性,授予工作人員身分識別集區內的使用者或群組存取權,也可以使用通用運算式語言 (CEL) 將 OIDC 屬性對應至自訂屬性,以便在 IAM 政策中定義授權策略。如要進一步瞭解屬性對應,請參閱「屬性對應」。
授予或撤銷執行個體角色
如要授予或撤銷執行個體角色,請使用「讀取 - 修改 - 寫入」模式更新資源的允許政策:
- 呼叫
getIamPolicy()
讀取目前的允許政策。 - 使用文字編輯器或透過程式編輯允許政策,藉此新增或移除任何主體或角色繫結。
- 呼叫
setIamPolicy()
寫入更新後的允許政策。
gcloud
如要讀取目前的允許政策並儲存至
/tmp/instances.json
,請執行下列指令:gcloud beta source-manager instances get-iam-policy INSTANCE_ID \ --project=PROJECT_ID \ --region=REGION \ --format=json > /tmp/instance.json
更改下列內容:
- 將
INSTANCE_ID
替換為執行個體 ID。 - 將
PROJECT_ID
替換為執行個體的專案 ID 或專案編號。 REGION
,其中包含執行個體所在的區域。如要瞭解可用的 Secure Source Manager 地區,請參閱位置說明文件。
輸出內容會包含所有現有繫結,如果沒有任何繫結,則會包含類似下列內容的
etag
值:{ "etag": "BwUjHYKJUiQ=" }
- 將
透過程式或使用文字編輯器修改執行個體允許政策的本機副本,以反映您要授予或撤銷的角色。
為確保不會覆寫其他變更,請勿編輯或移除「允許政策」的
etag
欄位。etag
欄位會指出允許政策的目前狀態。設定更新後的允許政策時,IAM 會比較要求中的etag
值與現有的etag
,並且只會在兩個值相符時才寫入允許政策。如要編輯允許政策授予的角色,請編輯允許政策中的角色繫結。角色繫結的格式如下:
{ "role": "ROLE_NAME", "members": [ "PRINCIPAL_1", "PRINCIPAL_2", ... "PRINCIPAL_N" ] }
預留位置的值如下:
ROLE_NAME
:要授予的角色名稱。請使用下列格式:roles/securesourcemanager.IDENTIFIER
PRINCIPAL_1
、PRINCIPAL_2
、...PRINCIPAL_N
:要授予角色的主體 ID。
舉例來說,下列政策會將
instanceOwner
角色授予user1@gmail.com
,並將instanceManager
角色授予使用者user2@gmail.com
、user3@gmail.com
和服務帳戶my-other-app@appspot.gserviceaccount.com
。{ "etag": "BwUjHYKJUiQ=", "bindings": [ { "role": "roles/securesourcemanager.instanceOwner", "members": [ "user:user1@gmail.com" ] }, { "role": "roles/resourcemanager.instanceManager", "members": [ "user:user2@gmail.com", "user:user3@gmail.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com" ] } ] }
修改已儲存的允許政策,授予及撤銷所選角色後,請執行下列指令,更新執行個體允許政策:
gcloud beta source-manager instances set-iam-policy INSTANCE_ID \ --project=PROJECT_ID \ --region=REGION \ /tmp/instance.json
更改下列內容:
- 將
INSTANCE_ID
替換為執行個體 ID。 - 將
PROJECT_ID
替換為執行個體的專案 ID 或專案編號。 REGION
,其中包含執行個體所在的區域。如要瞭解可用的 Secure Source Manager 地區,請參閱位置說明文件。
- 將
API
執行下列
instances.getIamPolicy
指令,讀取目前的政策:curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://securesourcemanager.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/instances/INSTANCE_ID:getIamPolicy > /tmp/instance.json
更改下列內容:
PROJECT_ID
執行個體的專案 ID 或專案編號。REGION
執行個體所在的區域。如要瞭解可用的 Secure Source Manager 地區,請參閱位置說明文件。INSTANCE_ID
執行個體 ID。
輸出內容會包含所有現有繫結,如果沒有任何繫結,則會包含類似下列內容的
etag
值:{ "etag": "BwUjHYKJUiQ=" }
透過程式或使用文字編輯器修改執行個體允許政策的本機副本,以反映您要授予或撤銷的角色。
為確保不會覆寫其他變更,請勿編輯或移除「允許政策」的
etag
欄位。etag
欄位會指出允許政策的目前狀態。設定更新後的允許政策時,IAM 會比較要求中的etag
值與現有的etag
,並且只會在兩個值相符時才寫入允許政策。如要編輯允許政策授予的角色,請編輯允許政策中的角色繫結。角色繫結的格式如下:
{ "role": "ROLE_NAME", "members": [ "PRINCIPAL_1", "PRINCIPAL_2", ... "PRINCIPAL_N" ] }
預留位置的值如下:
ROLE_NAME
:要授予的角色名稱。請使用下列格式:roles/securesourcemanager.IDENTIFIER
PRINCIPAL_1
、PRINCIPAL_2
、...PRINCIPAL_N
:要授予角色的主體 ID。
舉例來說,下列政策會將
instanceOwner
角色授予user1@gmail.com
,並將instanceManager
角色授予使用者user2@gmail.com
、user3@gmail.com
和服務帳戶my-other-app@appspot.gserviceaccount.com
。{ "policy": { "etag": "BwUjHYKJUiQ=", "bindings": [ { "role": "roles/securesourcemanager.instanceOwner", "members": [ "user:user1@gmail.com" ] }, { "role": "roles/resourcemanager.instanceManager", "members": [ "user:user2@gmail.com", "user:user3@gmail.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com" ] } ] } }
修改允許政策以授予及撤銷所選角色後,請呼叫
instances.setIamPolicy()
以進行更新。使用下列
instances.setIamPolicy
指令,在執行個體上設定新政策。curl \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://securesourcemanager.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/instances/INSTANCE_ID:setIamPolicy \ -d @/tmp/instance.json
更改下列內容:
PROJECT_ID
執行個體的專案 ID 或專案編號。REGION
執行個體所在的區域。如要瞭解可用的 Secure Source Manager 地區,請參閱位置說明文件。INSTANCE_ID
執行個體 ID。
授予或撤銷存放區角色
如要授予或撤銷使用者和服務帳戶的存放區角色,您可以透過 Secure Source Manager 網頁介面指派角色,也可以使用 Secure Source Manager API 更新存放區允許政策。如要授予群組存放區角色,請使用 Secure Source Manager API。
使用者必須先取得執行個體角色,才能取得存放區角色。如要瞭解如何授予執行個體角色,請參閱授予或撤銷執行個體角色。
網頁介面
如要使用網頁介面授予使用者或服務帳戶存放區層級角色,請按照下列步驟操作:
- 前往 Google 聯絡窗口提供的執行個體網址。
- 在「我的存放區」頁面中,選取您的存放區。
- 按一下「Permissions」(權限) 分頁標籤。
- 在「使用者和權限」部分,按一下「新增使用者」。
- 在「新增主體」欄位中,輸入要授予角色的使用者或服務帳戶電子郵件地址。
- 在「指派角色」選單中,選取要指派的角色。
- 按一下 [儲存]。
如要新增其他角色,請按一下「編輯」圖示,然後使用「指派角色」選單新增角色。
API
Secure Source Manager API repositories.getIamPolicy
方法會取得存放區的允許政策。
- 執行下列
repositories.getIamPolicy
指令,讀取目前的政策並儲存至/tmp/repository.json
:
curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://securesourcemanager.googleapis.com/v1/projects/REPOSITORY_PROJECT/locations/REGION/repositories/REPOSITORY_ID:getIamPolicy > /tmp/repository.json
更改下列內容:
REPOSITORY_PROJECT
:存放區的專案 ID 或專案編號。REGION
存放區所在的地區。REPOSITORY_ID
存放區 ID。
輸出內容會包含所有現有繫結,如果沒有任何繫結,則會包含類似下列內容的 etag
值:
{
"etag": "BwUjHYKJUiQ="
}
透過程式或使用文字編輯器修改儲存在
/tmp/repository.json
的存放區允許政策本機副本,反映您要授予或撤銷的角色。為確保不會覆寫其他變更,請勿編輯或移除「允許政策」的
etag
欄位。etag
欄位會指出允許政策的目前狀態。設定更新後的允許政策時,IAM 會比較要求中的etag
值與現有的etag
,並且只會在兩個值相符時才寫入允許政策。如要編輯允許政策授予的角色,請編輯允許政策中的角色繫結。角色繫結的格式如下:
{ "role": "ROLE_NAME", "members": [ "PRINCIPAL_1", "PRINCIPAL_2", ... "PRINCIPAL_N" ] }
預留位置的值如下:
ROLE_NAME
:要授予的角色名稱。請使用下列格式:roles/securesourcemanager.<var>IDENTIFIER</var>
PRINCIPAL_1
、PRINCIPAL_2
、...PRINCIPAL_N
:要授予角色的主體 ID。
以下範例會將
repoAdmin
角色授予使用者email1@gmail.com
,並將repoWriter
角色授予使用者email2@gmail.com
、group1@gmail.com
和服務帳戶my-other-app@appspot.gserviceaccount.com
。{ "policy": { "etag": "BwUjHYKJUiQ=", "bindings": [ { "role": "roles/securesourcemanager.repoAdmin", "members": [ "user:email1@gmail.com" ] }, { "role": "roles/resourcemanager.repoWriter", "members": [ "user:email2@gmail.com", "group:group1@gmail.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com" ] } ] } }
儲存編輯過的
/tmp/repository.json
檔案。使用
setIamPolicy
指令設定新政策:curl \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://securesourcemanager.googleapis.com/v1/projects/REPOSITORY_PROJECT/locations/REGION/repositories/REPOSITORY_ID:setIamPolicy \ -d @/tmp/repository.json
更改下列內容:
REPOSITORY_PROJECT
:存放區的專案 ID 或專案編號。REGION
存放區所在的地區。如要瞭解可用的 Secure Source Manager 地區,請參閱位置說明文件。REPOSITORY_ID
存放區 ID。