Sie können Identity and Access Management (IAM)-Richtlinien zur Zugriffsbeschränkung zusammen mit Tags verwenden, um bestimmte Vorgänge für die Git-Repository-Links in einer Developer Connect-Verbindung zu blockieren.
Sie hängen ein Tag an eine Verbindung an und erstellen dann eine Ablehnungsrichtlinie, deren Bedingung mit diesem Tag übereinstimmt. Jeder Git-Repository-Link in der Verbindung übernimmt das Tag, sodass die Ablehnungsrichtlinie für alle Repositories gilt, die über diese Verbindung verknüpft sind.
Wann Tags und Ablehnungsrichtlinien verwendet werden sollten
IAM-Zulassungsrichtlinien gewähren Berechtigungen. Mit Ablehnungsrichtlinien können Sie Schutzmaßnahmen festlegen, die Vorrang vor Zulassungsrichtlinien haben, unabhängig davon, welche Rollen ein Hauptkonto hat. Wenn Sie Ablehnungsrichtlinien mit Tags kombinieren, können Sie diese Schutzmaßnahmen auf ausgewählte Verbindungen anwenden, anstatt auf jede Verbindung in einem Projekt.
Sie können diesen Ansatz beispielsweise für Folgendes verwenden:
- Sie können einem KI-Agenten oder einem Automatisierungsdienstkonto erlauben, Commits und Pull-Anfragen über Developer Connect zu lesen, aber verhindern, dass er Pull-Anfragen in Produktions-Repositories öffnet, ändert oder kommentiert.
- Blockieren Sie alle Repository-Vorgänge für eine Gruppe von Hauptkonten für Verbindungen, die mit sensiblen Repositories verknüpft sind, während Sie ihren Zugriff auf andere Verbindungen im selben Projekt beibehalten.
- Sie können einen einheitlichen Satz von Einschränkungen auf viele Projekte anwenden, indem Sie das Tag und die Ablehnungsrichtlinie auf Organisationsebene erstellen.
Anwendung von Tags auf Git-Repository-Links
In Developer Connect können Sie Tags an Verbindungen anhängen, aber nicht direkt an Git-Repository-Links.
Ein Git-Repository-Link ist eine untergeordnete Ressource der zugehörigen Verbindung. Wenn IAM eine Ablehnungsrichtlinie für einen Vorgang für einen Git-Repository-Link auswertet, wird die Bedingung anhand der effektiven Tags des Links ausgewertet. Die effektiven Tags umfassen die Tags, die an die übergeordnete Verbindung angehängt sind, und die Tags, die vom Projekt, Ordner und der Organisation der Verbindung übernommen werden.
Da Git-Repository-Links Tags von ihrer Verbindung übernehmen, gelten die Steuerelemente in diesem Dokument pro Verbindung. Wenn Sie unterschiedliche Einstellungen für verschiedene Repositories benötigen, verknüpfen Sie diese Repositories über verschiedene Verbindungen und taggen Sie jede Verbindung separat.
Hinweis
- Sie benötigen eine Developer Connect-Verbindung mit mindestens einem verknüpften Git-Repository.
- Sie müssen Ihre Organisations-ID und die Projektnummer des Projekts kennen, das die Verbindung enthält.
- Wenn Sie die Befehlszeilenbeispiele in diesem Dokument verwenden möchten, installieren und konfigurieren Sie die Google Cloud CLI.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für die Organisation zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen von Tags, zum Anhängen von Tags an Verbindungen und zum Erstellen von Ablehnungsrichtlinien benötigen:
-
Zum Erstellen und Verwalten von Tag-Schlüsseln und Tag-Werten: Tag-Administrator (
roles/resourcemanager.tagAdmin) -
Zum Anhängen eines Tag-Werts an eine Verbindung: Tag-Nutzer (
roles/resourcemanager.tagUser) für den Tag-Wert und Developer Connect-Administrator (roles/developerconnect.admin) für die Verbindung -
Zum Erstellen, Aktualisieren und Löschen von Ablehnungsrichtlinien:
Ablehnungs-Administrator (
roles/iam.denyAdmin)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Berechtigungen, die Sie ablehnen können
Sie können die folgenden Berechtigungen für Git-Repository-Links ablehnen. Verwenden Sie in einer Ablehnungsrichtlinie das Format developerconnect.googleapis.com/gitRepositoryLinks.PERMISSION.
Repository-Daten lesen
| Berechtigung | Ermöglicht einem Hauptkonto, |
|---|---|
developerconnect.googleapis.com/gitRepositoryLinks.fetchCommit |
Commit abrufen. |
developerconnect.googleapis.com/gitRepositoryLinks.fetchCommitList |
Commits auflisten |
developerconnect.googleapis.com/gitRepositoryLinks.diffCommit |
Rufen Sie den Unterschied zwischen Commits ab. |
developerconnect.googleapis.com/gitRepositoryLinks.fetchFileBlame |
Blame-Informationen für eine Datei abrufen. |
developerconnect.googleapis.com/gitRepositoryLinks.fetchPullRequest |
Pull-Anfrage abrufen |
developerconnect.googleapis.com/gitRepositoryLinks.fetchPullRequestList |
Pull-Anfragen auflisten. |
developerconnect.googleapis.com/gitRepositoryLinks.fetchGitRefs |
Zweige und Tags auflisten. |
Repository-Daten ändern
| Berechtigung | Ermöglicht einem Hauptkonto, |
|---|---|
developerconnect.googleapis.com/gitRepositoryLinks.openPullRequest |
Öffnen Sie eine Pull-Anfrage. |
developerconnect.googleapis.com/gitRepositoryLinks.modifyPullRequest |
Pull-Anfrage ändern, z. B. Titel, Beschreibung oder Status. |
developerconnect.googleapis.com/gitRepositoryLinks.addPullRequestComment |
Kommentar zu einer Pull-Anfrage hinzufügen |
developerconnect.googleapis.com/gitRepositoryLinks.addPullRequestReviewComment |
Fügen Sie einer Pull-Anfrage einen Überprüfungskommentar hinzu. |
Zugriffstokens und der Git-Proxy
| Berechtigung | Ermöglicht einem Hauptkonto, |
|---|---|
developerconnect.googleapis.com/gitRepositoryLinks.fetchReadToken |
Rufen Sie ein Zugriffstoken mit Lesezugriff für das Repository ab. |
developerconnect.googleapis.com/gitRepositoryLinks.fetchReadWriteToken |
Rufen Sie ein Zugriffstoken mit Lese-/Schreibzugriff für das Repository ab. |
developerconnect.googleapis.com/gitRepositoryLinks.gitProxyRead |
Über den Developer Connect-Proxy aus dem Repository lesen. |
developerconnect.googleapis.com/gitRepositoryLinks.gitProxyWrite |
Über den Developer Connect-Proxy in das Repository schreiben. |
Eine vollständige Liste der Berechtigungen, die von Ablehnungsrichtlinien unterstützt werden, finden Sie unter In Ablehnungsrichtlinien unterstützte Berechtigungen.
Tag erstellen und an eine Verbindung anhängen
In diesem Beispiel erstellen Sie einen Tag-Schlüssel mit dem Namen scm-agent-access und einen Tag-Wert mit dem Namen read-only und hängen den Tag-Wert dann an eine Verbindung an.
Erstellen Sie den Tag-Schlüssel. Mit dem folgenden Befehl wird der Tag-Schlüssel in Ihrer Organisation erstellt, damit Sie ihn für Verbindungen in jedem Projekt verwenden können:
gcloud resource-manager tags keys create scm-agent-access \ --parent=organizations/ORGANIZATION_ID \ --description="Controls agent access to Developer Connect repositories"
Ersetzen Sie ORGANIZATION_ID durch Ihre Organisations-ID.
Sie können den Tag-Schlüssel auch in einem Projekt erstellen, indem Sie
--parentaufprojects/PROJECT_IDsetzen. Ein Tag-Schlüssel auf Projektebene kann nur an Ressourcen in diesem Projekt angehängt werden.Erstellen Sie den Tag-Wert:
gcloud resource-manager tags values create read-only \ --parent=ORGANIZATION_ID/scm-agent-access
Hängen Sie den Tag-Wert an die Verbindung an:
gcloud resource-manager tags bindings create \ --tag-value=ORGANIZATION_ID/scm-agent-access/read-only \ --parent=//developerconnect.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/connections/CONNECTION_ID \ --location=LOCATION
Ersetzen Sie Folgendes:
- PROJECT_NUMBER: die Projektnummer des Projekts, das die Verbindung enthält.
- LOCATION: die Region der Verbindung, z. B.
us-central1. - CONNECTION_ID: die ID der Verbindung.
Prüfen Sie, ob das Tag an die Verbindung angehängt ist:
gcloud resource-manager tags bindings list \ --parent=//developerconnect.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/connections/CONNECTION_ID \ --location=LOCATION
Weitere Informationen zum Erstellen und Anhängen von Tags finden Sie unter Tags erstellen und verwalten.
Ablehnungsrichtlinie erstellen
Die folgende Ablehnungsrichtlinie verhindert, dass ein Dienstkonto Pull-Anfragen öffnet, ändert oder kommentiert, Lese-/Schreib-Tokens abruft oder über den Developer Connect-Proxy in einen Git-Repository-Link schreibt, dessen Verbindung das Tag scm-agent-access auf read-only gesetzt hat. Das Dienstkonto kann weiterhin Commits und Pull-Anfragen lesen, wenn ihm diese Berechtigungen durch eine Zulassungsrichtlinie gewährt werden.
Erstellen Sie eine Datei mit dem Namen
policy.jsonund dem folgendem Inhalt:{ "displayName": "Read-only Developer Connect access for agents", "rules": [ { "denyRule": { "deniedPrincipals": [ "principal://iam.googleapis.com/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL" ], "deniedPermissions": [ "developerconnect.googleapis.com/gitRepositoryLinks.openPullRequest", "developerconnect.googleapis.com/gitRepositoryLinks.modifyPullRequest", "developerconnect.googleapis.com/gitRepositoryLinks.addPullRequestComment", "developerconnect.googleapis.com/gitRepositoryLinks.addPullRequestReviewComment", "developerconnect.googleapis.com/gitRepositoryLinks.fetchReadWriteToken", "developerconnect.googleapis.com/gitRepositoryLinks.gitProxyWrite" ], "denialCondition": { "title": "Connection is tagged scm-agent-access=read-only", "expression": "resource.matchTag('ORGANIZATION_ID/scm-agent-access', 'read-only')" } } } ] }
Ersetzen Sie SERVICE_ACCOUNT_EMAIL durch die E-Mail-Adresse des Dienstkontos, das Sie einschränken möchten. Informationen zum Einschränken anderer Arten von Hauptkonten, z. B. Nutzer oder Gruppen, finden Sie unter Hauptkonto-Kennungen.
Erstellen Sie die Ablehnungsrichtlinie und hängen Sie sie an Ihre Organisation an:
gcloud iam policies create scm-agent-read-only \ --attachment-point=cloudresourcemanager.googleapis.com/organizations/ORGANIZATION_ID \ --kind=denypolicies \ --policy-file=policy.json
Sie können die Ablehnungsrichtlinie auch an einen Ordner oder ein Projekt anhängen. Eine Ablehnungsrichtlinie gilt für alle Ressourcen unter ihrem Anhangspunkt.
Weitere Informationen zum Erstellen von Ablehnungsrichtlinien finden Sie unter Zugriff auf Ressourcen verweigern.
Ablehnungsrichtlinie prüfen
Änderungen an Tags und Ablehnungsrichtlinien sind letztendlich konsistent. Es kann einige Minuten dauern, bis eine neue Tag-Bindung oder Ablehnungsrichtlinie wirksam wird. Weitere Informationen finden Sie unter Auswirkungen von Tag-Änderungen und Zugriffsänderungsverteilung.
Nachdem die Änderungen übernommen wurden, schlägt eine Anfrage des abgelehnten Hauptkontos für eine abgelehnte Berechtigung für einen Git-Repository-Link in der getaggten Verbindung mit dem HTTP-Fehler 403 PERMISSION_DENIED fehl. In der Fehlermeldung werden die Berechtigung und der Link zum Git-Repository genannt und es wird angegeben, dass der Zugriff durch eine IAM-Ablehnungsrichtlinie verweigert wurde. Beispiel:
Permission 'developerconnect.gitRepositoryLinks.openPullRequest' denied on resource '//developerconnect.googleapis.com/projects/my-project/locations/us-central1/connections/my-connection/gitRepositoryLinks/my-repo' due to an IAM deny policy.
Anfragen für Berechtigungen, die nicht durch die Ablehnungsrichtlinie abgelehnt werden, und Anfragen für Git-Repository-Links in Verbindungen, die das Tag nicht haben, sind von der Ablehnungsrichtlinie nicht betroffen.
Mit der Policy Troubleshooter können Sie prüfen, ob die Ablehnungsrichtlinie für einen Prinzipal und einen Git-Repository-Link gilt:
gcloud policy-intelligence troubleshoot-policy iam \ //developerconnect.googleapis.com/projects/PROJECT_ID/locations/LOCATION/connections/CONNECTION_ID/gitRepositoryLinks/GIT_REPOSITORY_LINK_ID \ --principal-email=SERVICE_ACCOUNT_EMAIL \ --permission=developerconnect.googleapis.com/gitRepositoryLinks.openPullRequest
Einschränkung entfernen
Wenn Sie die Einschränkung für eine einzelne Verbindung entfernen möchten, löschen Sie die Tag-Bindung aus der Verbindung:
gcloud resource-manager tags bindings delete \ --tag-value=ORGANIZATION_ID/scm-agent-access/read-only \ --parent=//developerconnect.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/connections/CONNECTION_ID \ --location=LOCATION
Wenn Sie die Einschränkung für alle Verbindungen aufheben möchten, löschen Sie die Ablehnungsrichtlinie:
gcloud iam policies delete scm-agent-read-only \ --attachment-point=cloudresourcemanager.googleapis.com/organizations/ORGANIZATION_ID \ --kind=denypolicies
Beschränkungen
- Tags werden pro Verbindung angehängt. Sie können Tags an Verbindungen anhängen, aber nicht an Git-Repository-Links. Alle Git-Repository-Links in einer Verbindung haben dieselben Tags wie die Verbindung.
- Ablehnungsbedingungen unterstützen nur Tags. In der Bedingung einer Ablehnungsregel können nur Tag-Funktionen wie
resource.matchTag()undresource.hasTagKey()verwendet werden. Sie können keine Ablehnungsbedingung basierend auf dem Repository-Namen oder anderen Ressourcenattributen schreiben. Weitere Informationen finden Sie unter Ablehnungsbedingungen. - Tag-Schlüssel müssen mit einem Namespace versehen sein. Identifizieren Sie in
resource.matchTag()den Tag-Schlüssel anhand seines Namespace-Namens, z. B.ORGANIZATION_ID/scm-agent-accessoderPROJECT_ID/scm-agent-access, und nicht anhand seines Kurznamens. - Es dauert eine Weile, bis die Änderungen übernommen werden. Neue Tag-Bindungen, geänderte Tag-Werte und Ablehnungsrichtlinien werden nicht sofort wirksam. Wenn Sie ein Tag entfernen, wird der Zugriff nicht sofort wiederhergestellt. Warten Sie nach jeder Änderung einige Minuten und testen Sie die Konfiguration, bevor Sie sich darauf verlassen.
- Geltende Tags werden für Verbindungen aufgeführt. Wenn Sie die Tags für einen Git-Repository-Link aufrufen möchten, listen Sie die effektiven Tags der übergeordneten Verbindung auf.
Nächste Schritte
- Weitere Informationen zu Ablehnungsrichtlinien
- Weitere Informationen zu Tags und bedingtem Zugriff
- Developer Connect-Rollen und -Berechtigungen