授予及撤銷身分與存取權管理角色

本頁說明如何將身分與存取權管理 (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-projectus-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 政策中定義授權策略。如要進一步瞭解屬性對應,請參閱「屬性對應」。

授予或撤銷執行個體角色

如要授予或撤銷執行個體角色,請使用「讀取 - 修改 - 寫入」模式更新資源的允許政策:

  1. 呼叫 getIamPolicy() 讀取目前的允許政策。
  2. 使用文字編輯器或透過程式編輯允許政策,藉此新增或移除任何主體或角色繫結。
  3. 呼叫 setIamPolicy() 寫入更新後的允許政策。

gcloud

  1. 如要讀取目前的允許政策並儲存至 /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="
    }
    
  2. 透過程式或使用文字編輯器修改執行個體允許政策的本機副本,以反映您要授予或撤銷的角色。

    為確保不會覆寫其他變更,請勿編輯或移除「允許政策」的 etag 欄位。etag 欄位會指出允許政策的目前狀態。設定更新後的允許政策時,IAM 會比較要求中的 etag 值與現有的 etag,並且只會在兩個值相符時才寫入允許政策。

    如要編輯允許政策授予的角色,請編輯允許政策中的角色繫結。角色繫結的格式如下:

    {
      "role": "ROLE_NAME",
      "members": [
        "PRINCIPAL_1",
        "PRINCIPAL_2",
        ...
        "PRINCIPAL_N"
      ]
    }
    

    預留位置的值如下:

    • ROLE_NAME:要授予的角色名稱。請使用下列格式: roles/securesourcemanager.IDENTIFIER

    • PRINCIPAL_1PRINCIPAL_2...PRINCIPAL_N:要授予角色的主體 ID。

    舉例來說,下列政策會將 instanceOwner 角色授予 user1@gmail.com,並將 instanceManager 角色授予使用者 user2@gmail.comuser3@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"
            ]
        }
        ]
    }
    
  3. 修改已儲存的允許政策,授予及撤銷所選角色後,請執行下列指令,更新執行個體允許政策:

    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

  1. 執行下列 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="
    }
    
  2. 透過程式或使用文字編輯器修改執行個體允許政策的本機副本,以反映您要授予或撤銷的角色。

    為確保不會覆寫其他變更,請勿編輯或移除「允許政策」的 etag 欄位。etag 欄位會指出允許政策的目前狀態。設定更新後的允許政策時,IAM 會比較要求中的 etag 值與現有的 etag,並且只會在兩個值相符時才寫入允許政策。

    如要編輯允許政策授予的角色,請編輯允許政策中的角色繫結。角色繫結的格式如下:

    {
      "role": "ROLE_NAME",
      "members": [
        "PRINCIPAL_1",
        "PRINCIPAL_2",
        ...
        "PRINCIPAL_N"
      ]
    }
    

    預留位置的值如下:

    • ROLE_NAME:要授予的角色名稱。請使用下列格式: roles/securesourcemanager.IDENTIFIER

    • PRINCIPAL_1PRINCIPAL_2...PRINCIPAL_N:要授予角色的主體 ID。

    舉例來說,下列政策會將 instanceOwner 角色授予 user1@gmail.com,並將 instanceManager 角色授予使用者 user2@gmail.comuser3@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"
            ]
        }
        ]
    }
    }
    
  3. 修改允許政策以授予及撤銷所選角色後,請呼叫 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。

使用者必須先取得執行個體角色,才能取得存放區角色。如要瞭解如何授予執行個體角色,請參閱授予或撤銷執行個體角色

網頁介面

如要使用網頁介面授予使用者或服務帳戶存放區層級角色,請按照下列步驟操作:

  1. 前往 Google 聯絡窗口提供的執行個體網址。
  2. 在「我的存放區」頁面中,選取您的存放區。
  3. 按一下「Permissions」(權限) 分頁標籤。
  4. 在「使用者和權限」部分,按一下「新增使用者」
  5. 在「新增主體」欄位中,輸入要授予角色的使用者或服務帳戶電子郵件地址。
  6. 在「指派角色」選單中,選取要指派的角色。
  7. 按一下 [儲存]

如要新增其他角色,請按一下「編輯」圖示,然後使用「指派角色」選單新增角色。

API

Secure Source Manager API repositories.getIamPolicy 方法會取得存放區的允許政策。

  1. 執行下列 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="
}
  1. 透過程式或使用文字編輯器修改儲存在 /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_1PRINCIPAL_2...PRINCIPAL_N:要授予角色的主體 ID。

    以下範例會將 repoAdmin 角色授予使用者 email1@gmail.com,並將 repoWriter 角色授予使用者 email2@gmail.comgroup1@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"
            ]
        }
        ]
    }
    }
    
  2. 儲存編輯過的 /tmp/repository.json 檔案。

  3. 使用 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。

後續步驟