このガイドでは、Cloud Source Repositories(CSR)ユーザー向けに、アクセス制御が Secure Source Manager(SSM)にどのように変換されるかについて説明します。このガイドに沿って作業を進めるには、IAM と CSR について理解し、SSM に関する基本的な知識が必要です。
リソースモデル
CSR には、プロジェクトの子である 1 つの Google Cloud リソースがあります。
- リポジトリ
projects/<var>project</var>/repositories/<var>repo</var>
SSM には、プロジェクトのリージョン化された子リソースが 2 つあります。
- インスタンス
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 の 3 つのロールがあります。閲覧者ロールと書き込みロールは、リポジトリまたはプロジェクトにバインドできます。source.repos.create 権限はプロジェクト スコープでのみ適用されるため、管理者ロールはプロジェクトにのみバインドする必要があります。
SSM にはユーザー プリンシパル用のロールが 11 個あり、Cloud Source Repositories と比較して大幅に増加しています。これらのロールは、2 つのカテゴリ(スーパーユーザー ロールを含む)に分類できます。
スーパーユーザー ロール(roles/securesourcemanager.admin)には、すべての SSM 権限が付与されます。インスタンス権限をリポジトリにバインドすると適用されず、リポジトリ権限をインスタンスにバインドすると適用されないため、このロールをプロジェクトにバインドする必要があります。
SSM インスタンス ロール
インスタンス ロールは、Secure Source Manager インスタンスの UI にアクセスし、Git を使用して接続する権限を付与します。インスタンスのユーザーがインスタンス上のリポジトリにアクセスできるようにするには、少なくとも 1 つのインスタンス ロールを付与する必要があります。これらのロールは、インスタンス リソースまたはプロジェクトにバインドできます。
| ロール | 権限 |
|---|---|
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 |
リポジトリ内の pull リクエストを承認します。 |
roles/securesourcemanager.repoReader |
リポジトリのコンテンツを読み取り、pull リクエストと問題を閲覧します。 |
roles/securesourcemanager.repoWriter |
リポジトリ コンテンツの読み取りと書き込み、pull リクエストと問題の管理。 |
roles/securesourcemanager.repoCreator |
プロジェクト内に新しいリポジトリを作成する。 |
CSR ロールを SSM にマッピングする
SSM を効果的に使用するには、少なくとも 2 つのロール(インスタンス ロールとリポジトリ ロール)が必要です。CSR ロールから SSM ロールへの 1 対 1 のマッピングはありません。これらのレシピは、ソース コントロールに対してのみ同等のアクセス権を付与します。プルリクエスト、問題、インスタンス管理などの 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 の組み合わせをバインドすることで、再作成できます。このロールの組み合わせにより、プロジェクト内の任意のインスタンスにリポジトリを作成する権限が付与され、プロジェクト内の任意のインスタンスのすべてのリポジトリに対する管理者権限が付与されます。source.admin がすべての CSR 権限を付与したのと同じ方法で、すべての SSM 権限を付与するには、プロジェクト レベルでスーパーユーザー ロール securesourcemanager.admin をバインドします。
SSM と CSR の違い
このセクションでは、Secure Source Manager が Cloud Source Repositories と比較してロールと権限を処理する方法の主な変更点について説明します。
暗黙的なロール付与
新しいリポジトリ リソースを作成すると、呼び出し元のプリンシパルに、新しく作成されたリポジトリ リソースに対する repoAdmin ロールが自動的に付与されます。
新しいリソースタイプ
SSM には CSR よりも多くの機能があり、これらの機能は新しいリソースタイプとしてモデル化されています。これらの機能には、問題とプルリクエストのコメントに加えて、ブランチ保護ルール、フック、問題、プルリクエストが含まれます。これらのリソースは、リポジトリ リソースの子です。リポジトリロールには、これらのリソースに対する権限が含まれます。たとえば、repoAdmin と repoWriter は書き込みアクセス権を付与しますが、repoReader は読み取りアクセス権のみを付与します。
きめ細かいロール
SSM には、特定のアクセス制御を提供するきめ細かいロールが含まれています。
roles/securesourcemanager.repoPullRequestApproverは、pull リクエストを承認する権限のみを付与します。このロールをrepoReaderおよびinstanceAccessorとともに使用すると、ユーザーは他のデータを変更することなく、インスタンスにアクセスし、リポジトリを閲覧して、プルリクエストを承認できます。roles/securesourcemanager.repoCreatorは、プロジェクトでリポジトリを作成する権限のみを付与します。リポジトリはインスタンスにアタッチする必要があるため、リポジトリをインスタンスにアタッチするroles/securesourcemanager.instanceRepoCreatorも必要です。roles/securesourcemanager.repoCreatorとinstanceRepoCreatorを使用して、リポジトリを作成してインスタンスに接続する権限を付与します。