将 Cloud Source Repositories 角色和权限转换为 Secure Source Manager

本指南面向 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.readerroles/source.writerroles/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,以重新创建相同的访问权限级别。如果您在项目级层绑定了角色,则在项目级层绑定 repoReaderinstanceAccessor 会授予对实例上所有代码库的读取权限。

映射 source.writer

如果您在代码库级层绑定了此角色,请在代码库资源上绑定 securesourcemanager.repoWriter,并在宿主实例上绑定 securesourcemanager.instanceAccessor,以重新创建相同的访问权限级别。如果您在项目级层绑定了角色,则在项目级层绑定 repoWriterinstanceAccessor 会授予对实例上所有代码库的写入权限。

映射 source.admin

您只能在项目级层绑定此角色。您可以在项目级层绑定 securesourcemanager.instanceAccessorsecuresourcemanager.repoAdminsecuresourcemanager.instanceRepoCreatorsecuresourcemanager.repoCreator 的组合,从而重新创建该角色。此角色组合授予了在项目中的任何实例上创建代码库的权限,并授予了管理员对项目中任何实例上的所有代码库的权限。如需授予所有 SSM 权限(与 source.admin 授予所有 CSR 权限的方式相同),请在项目级层绑定超级用户角色 securesourcemanager.admin

SSM 与 CSR 之间的区别

本部分概述了 Secure Source Manager 在处理角色和权限方面与 Cloud Source Repositories 相比的主要变化。

隐式角色授予

创建新的代码库资源时,调用方主账号会自动获得对新创建的代码库资源的 repoAdmin 角色。

新资源类型

SSM 比 CSR 具有更多功能,这些功能以新的资源类型为模型。 这些功能包括分支保护规则、钩子、问题和拉取请求,以及针对问题和拉取请求的评论。这些资源是代码库资源的子资源。代码库角色包含针对这些资源的权限。 例如,repoAdminrepoWriter 提供写入权限,而 repoReader 仅授予读取权限。

精细的角色

SSM 包含可提供精细访问权限控制的精细角色。

  • roles/securesourcemanager.repoPullRequestApprover 仅授予批准拉取请求的权限。将此角色与 repoReaderinstanceAccessor 搭配使用,可让用户访问实例、浏览代码库和批准拉取请求,而无需修改其他数据。
  • roles/securesourcemanager.repoCreator 仅授予在项目中创建代码库的权限。由于代码库必须附加到实例,因此您还必须拥有 roles/securesourcemanager.instanceRepoCreator 才能将代码库附加到实例。将 roles/securesourcemanager.repoCreatorinstanceRepoCreator 搭配使用,以授予创建代码库并将其附加到实例的权限。

后续步骤