本指南面向 Cloud Source Repositories (CSR) 用户,介绍了 CSR 的访问权限控制如何转换为 Secure Source Manager (SSM)。如需按照本指南操作,您应了解 IAM 和 CSR,并对 SSM 有基本的了解。
资源模型
CSR 有一个 Google Cloud 资源,该资源是项目的子资源:
- 代码库,
projects/<var>project</var>/repositories/<var>repo</var>
SSM 有两种资源是项目的区域化子资源:
- 一个实例,
projects/<var>project</var>/locations/<var>location</var>/instances/<var>instance</var> - 代码库,与 CSR 代码库最直接的等效项,必须附加到(但不是子级)同一项目和位置中的 SSM 实例,
projects/<var>project</var>/locations/<var>location</var>/repositories/<var>repo</var>
SSM 还有其他资源,但它们被建模为代码库的子项。 本指南将它们视为代码库的一部分。
角色
CSR 有三个角色:roles/source.reader、roles/source.writer 和 roles/source.admin。您可以将读取者和写入者角色绑定到代码库或项目。您应仅将管理员角色绑定到项目,因为 source.repos.create 权限仅在项目范围内适用。
SSM 为用户主账号提供了 11 个角色,与 Cloud Source Repositories 相比,角色数量大幅增加。您可以将这些角色分为两类(外加一个超级用户角色)。
超级用户角色 (roles/securesourcemanager.admin) 授予所有 SSM 权限。您必须将此角色绑定到项目,因为如果将实例权限绑定到代码库,则这些权限不会生效;如果将代码库权限绑定到实例,则这些权限也不会生效。
SSM 实例角色
实例角色授予了以下权限:访问 Secure Source Manager 实例的界面,以及使用 Git 连接到该实例。您必须向用户授予至少一个实例角色,才能允许他们访问实例上的代码库。您可以将这些角色绑定到实例资源或项目。
| 角色 | 权限 |
|---|---|
roles/securesourcemanager.instanceAccessor |
访问实例及其代码库。必须设置此属性,代码库级角色才能生效。 |
roles/securesourcemanager.instanceManager |
管理实例级配置。 |
roles/securesourcemanager.instanceOwner |
对实例配置拥有完全控制权。 |
roles/securesourcemanager.instanceRepoCreator |
在实例上创建代码库。 |
roles/securesourcemanager.sshKeyUser |
管理用于对实例进行身份验证的 SSH 密钥。本身不授予实例访问权限。 |
SSM 代码库角色
代码库角色可授予对 Secure Source Manager 实例中代码库的权限。您可以将这些角色绑定到代码库资源或项目,但 repoCreator 必须绑定到项目。
| 角色 | 权限 |
|---|---|
roles/securesourcemanager.repoAdmin |
对代码库拥有完全控制权,包括代码库设置和用户访问权限。 |
roles/securesourcemanager.repoPullRequestApprover |
对代码库中的拉取请求进行审批。 |
roles/securesourcemanager.repoReader |
读取代码库内容,以及查看拉取请求和问题。 |
roles/securesourcemanager.repoWriter |
读取和写入代码库内容,以及管理拉取请求和问题。 |
roles/securesourcemanager.repoCreator |
在项目中创建新代码库。 |
将 CSR 角色映射到 SSM
如需有效使用 SSM,您至少需要两个角色:一个实例角色和一个代码库角色。CSR 角色与 SSM 角色之间没有一一对应的映射关系。这些配方仅为源代码控制提供对等访问权限,而不为 SSM 功能(例如拉取请求、问题或实例管理)提供对等访问权限。
在 CSR 中,您可以在多个项目中创建代码库。在 Secure Source Manager 中,实例上的所有代码库都属于与该实例相同的项目。如果您在 Secure Source Manager 中绑定任何项目级层角色,则会向该实例上的每个代码库授予该角色的权限。如果您只需要向特定代码库授予权限,请使用代码库级绑定。
映射 source.reader
如果您在代码库级层绑定了此角色,请在代码库资源上绑定 securesourcemanager.repoReader,并在宿主实例上绑定 securesourcemanager.instanceAccessor,以重新创建相同的访问权限级别。如果您在项目级层绑定了角色,则在项目级层绑定 repoReader 和 instanceAccessor 会授予对实例上所有代码库的读取权限。
映射 source.writer
如果您在代码库级层绑定了此角色,请在代码库资源上绑定 securesourcemanager.repoWriter,并在宿主实例上绑定 securesourcemanager.instanceAccessor,以重新创建相同的访问权限级别。如果您在项目级层绑定了角色,则在项目级层绑定 repoWriter 和 instanceAccessor 会授予对实例上所有代码库的写入权限。
映射 source.admin
您只能在项目级层绑定此角色。您可以在项目级层绑定 securesourcemanager.instanceAccessor、securesourcemanager.repoAdmin、securesourcemanager.instanceRepoCreator 和 securesourcemanager.repoCreator 的组合,从而重新创建该角色。此角色组合授予了在项目中的任何实例上创建代码库的权限,并授予了管理员对项目中任何实例上的所有代码库的权限。如需授予所有 SSM 权限(与 source.admin 授予所有 CSR 权限的方式相同),请在项目级层绑定超级用户角色 securesourcemanager.admin。
SSM 与 CSR 之间的区别
本部分概述了 Secure Source Manager 在处理角色和权限方面与 Cloud Source Repositories 相比的主要变化。
隐式角色授予
创建新的代码库资源时,调用方主账号会自动获得对新创建的代码库资源的 repoAdmin 角色。
新资源类型
SSM 比 CSR 具有更多功能,这些功能以新的资源类型为模型。
这些功能包括分支保护规则、钩子、问题和拉取请求,以及针对问题和拉取请求的评论。这些资源是代码库资源的子资源。代码库角色包含针对这些资源的权限。
例如,repoAdmin 和 repoWriter 提供写入权限,而 repoReader 仅授予读取权限。
精细的角色
SSM 包含可提供精细访问权限控制的精细角色。
roles/securesourcemanager.repoPullRequestApprover仅授予批准拉取请求的权限。将此角色与repoReader和instanceAccessor搭配使用,可让用户访问实例、浏览代码库和批准拉取请求,而无需修改其他数据。roles/securesourcemanager.repoCreator仅授予在项目中创建代码库的权限。由于代码库必须附加到实例,因此您还必须拥有roles/securesourcemanager.instanceRepoCreator才能将代码库附加到实例。将roles/securesourcemanager.repoCreator与instanceRepoCreator搭配使用,以授予创建代码库并将其附加到实例的权限。