本页面介绍了如何向 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 角色:
-
授予实例 IAM 角色:
Secure Source Manager 实例的 Secure Source Manager Instance Owner (
roles/securesourcemanager.instanceOwner
) -
授予代码库 IAM 角色:
代码库的 Secure Source Manager Repo Admin (
roles/securesourcemanager.repoAdmin
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
如需了解如何授予 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-project
内 us-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 政策中定义授权策略。如需详细了解属性映射,请参阅属性映射。
授予或撤消实例角色
如需授予或撤消实例角色,请使用读取-修改-写入模式更新资源的允许政策:
- 通过调用
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
:您要向其授予相应角色的主账号的标识符。
例如,以下政策向
user1@gmail.com
授予instanceOwner
角色,并向用户user2@gmail.com
、user3@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" ] } ] }
修改保存的允许政策以授予和撤消所选角色后,请运行以下命令来更新实例允许政策:
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
:您要向其授予相应角色的主账号的标识符。
例如,以下政策向
user1@gmail.com
授予instanceOwner
角色,并向用户user2@gmail.com
、user3@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" ] } ] } }
修改允许政策以授予和撤消所选角色后,请调用
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 界面向用户或服务账号授予代码库级层角色,请执行以下操作:
- 前往 Google 联系人提供的实例网址。
- 在我的代码库页面中,选择您的代码库。
- 点击权限标签页。
- 在用户和权限部分中,点击添加用户。
- 在添加主账号字段中,输入要向其授予角色的用户或服务账号的电子邮件地址。
- 在分配角色菜单中,选择要分配的角色。
- 点击保存。
如需添加其他角色,请点击修改图标 修改,然后使用分配角色菜单添加角色。
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
:您要向其授予相应角色的主账号的标识符。
以下示例向用户
email1@gmail.com
授予repoAdmin
角色,并向用户email2@gmail.com
、group1@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" ] } ] } }
保存修改后的
/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。