授予和撤消 IAM 角色

本页面介绍了如何向 Secure Source Manager 资源上的主账号授予 Identity and Access Management (IAM) 角色。如需了解如何向其他 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 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

如需了解如何授予 Secure Source Manager 角色,请参阅使用 IAM 进行访问权限控制向用户授予实例访问权限

指定主账号

主账号代表可访问资源的身份。每个主账号都有自己的标识符。主账号标识符采用以下格式:

PRINCIPAL-TYPE:ID

例如 user:my-user@example.com。如需详细了解主账号,请参阅 IAM 的工作原理

对于主账号类型 user,标识符中的域名必须是 Google Workspace 网域或 Cloud Identity 网域,除非您使用的是员工身份联合。如需了解如何设置 Cloud Identity 网域,请参阅 Cloud Identity 概览

员工身份联合正文

如果您使用员工身份联合来访问 Secure Source Manager,则主账号的表示方式会有所不同。如需详细了解如何向表示身份群组的主账号授予访问权限,请参阅在 IAM 政策中表示员工池用户

例如,以下命令向用户 user@example.com 授予了工作组池 my-pool 中项目 my-projectus-central1 区域中实例 my-instance 的 Instance Accessor 角色 (roles/securesourcemanager.instanceAccessor):

  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:您要向其授予相应角色的主账号的标识符。

    例如,以下政策向 user1@gmail.com 授予 instanceOwner 角色,并向用户 user2@gmail.comuser3@gmail.com 和服务账号 my-other-app@appspot.gserviceaccount.com 授予 instanceManager 角色。

    {
        "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:您要向其授予相应角色的主账号的标识符。

    例如,以下政策向 user1@gmail.com 授予 instanceOwner 角色,并向用户 user2@gmail.comuser3@gmail.com 和服务账号 my-other-app@appspot.gserviceaccount.com 授予 instanceManager 角色。

    {
    "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。

用户必须先获得实例角色,然后才能获得代码库角色。如需了解如何授予实例角色,请参阅授予或撤消实例角色

网页界面

如需使用 Web 界面向用户或服务账号授予代码库级层角色,请执行以下操作:

  1. 前往 Google 联系人提供的实例网址。
  2. 我的代码库页面中,选择您的代码库。
  3. 点击权限标签页。
  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:您要向其授予相应角色的主账号的标识符。

    以下示例向用户 email1@gmail.com 授予 repoAdmin 角色,并向用户 email2@gmail.comgroup1@gmail.com 和服务账号 my-other-app@appspot.gserviceaccount.com 授予 repoWriter 角色。

    {
    "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。

后续步骤