Auf dieser Seite wird beschrieben, wie Sie bestimmte Lese-, Schreib- oder Administratorberechtigungen (Identity and Access Management, IAM) für verschiedene verwaltete Zonen unter demselben Projekt einrichten.
Ausführliche Informationen zu IAM-Richtlinien finden Sie unter Informationen zu Richtlinien für Zulassungen. Informationen zur IAM Policy API finden Sie unter Policy. Informationen zum Erstellen benutzerdefinierter IAM-Rollen, die Sie in Ihren verwalteten Zonen verwenden können, finden Sie unter Informationen zu benutzerdefinierten IAM-Rollen.
Bei diesem Verfahren wird davon ausgegangen, dass Sie eine verwaltete Zone in einem Projekt erstellt haben. Eine Anleitung zum Erstellen einer verwalteten Zone finden Sie unter Zonen erstellen, ändern und löschen.
IAM-Richtlinie für eine verwaltete Zone festlegen
Führen Sie die folgenden Schritte aus, um die IAM-Richtlinie für eine bestimmte verwaltete Zone festzulegen.
Console
Rufen Sie in der Google Cloud Console die Seite Cloud DNS-Zonen auf.
Wählen Sie eine oder mehrere Zonen aus, für die Sie Berechtigungen für die Zugriffssteuerung hinzufügen möchten.
Klicken Sie auf der Seite Berechtigungen für Ressourcen auf Hauptkonto hinzufügen.
Fügen Sie auf der Seite Zugriff auf Ressource gewähren unter Neue Prinzipale die E‑Mail-Adresse des Nutzers, der Gruppe, der Domain oder des Dienstkontos hinzu, das Sie als neues Prinzipal hinzufügen möchten.
Wählen Sie in der Liste Rollen zuweisen die Rolle aus, die Sie dem Hauptkonto zuweisen möchten.
Wenn Sie weitere Rollen zuweisen möchten, klicken Sie auf Weitere Rolle hinzufügen.
Klicken Sie auf Speichern.
gcloud
Führen Sie den
gcloud dns managed-zones set-iam-policy-Befehl aus:
gcloud dns managed-zones set-iam-policy NAME \ --policy-file=POLICY-FILE
Dabei gilt:
NAME: Name der verwalteten Zone, für die Sie die IAM-Berechtigung festlegen möchtenPOLICY-FILE: Datei mit der IAM-Richtlinie, die Sie für die verwaltete Zone angeben möchten Eine Beispielrichtliniendatei finden Sie unter Richtlinie.
Wenn dieser Befehl erfolgreich ausgeführt wird, gibt er die IAM-Richtlinie zurück. Andernfalls wird eine Fehlermeldung zurückgegeben, die den Fehler angibt.
API
Senden Sie eine POST-Anfrage mit der Methode managedZone.setIamPolicy:
POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/MANAGED_ZONE:setIamPolicy
Dabei gilt:
PROJECT_ID: Name oder ID des ProjektsMANAGED_ZONE: Name der verwalteten Zone, für die Sie die IAM-Berechtigung festlegen möchten
Ausführliche Informationen zu diesem API-Aufruf finden Sie unter Bindung auf der IAM-API-Seite Policy.
Zugriff auf bestimmte Ressourceneinträge gewähren
Cloud DNS unterstützt die Verwendung von IAM-Bedingungen, um eine detaillierte Zugriffssteuerung für bestimmte Ressourcendatensätze (RRsets) innerhalb einer verwalteten Zone zu ermöglichen.
Sie können die detaillierte Zugriffssteuerung mit einer der folgenden Methoden konfigurieren:
- Standardrolle (empfohlen): Verwenden Sie die Standardrolle
roles/dns.adminmit einer bestimmten IAM-Bedingung, die erforderliche Vorgänge ohne Datensatz zulässt. Dies ist der einfachste Ansatz, da keine benutzerdefinierten Rollen erstellt werden müssen. - Benutzerdefinierte Rollen:Erstellen Sie zwei benutzerdefinierte Rollen, um die Verwaltung von Datensätzen von anderen administrativen Aufgaben zu trennen.
Methode 1: Standardrolle (empfohlen)
Wenn Sie die Standardrolle roles/dns.admin verwenden möchten, müssen Sie zusätzliche Ressourcen in Ihre IAM-Bedingung aufnehmen. Das liegt daran, dass das Hauptkonto zum erfolgreichen Ändern von DNS-Einträgen die Berechtigung haben muss, sowohl die Änderung des Eintrags selbst als auch die zugehörigen Vorgänge für Änderungsressourcen auszuführen.
Je nach Ihren Sicherheitsanforderungen können Sie eine der folgenden Bedingungsstrukturen auswählen:
- Kulanz:Ermöglicht alle anderen administrativen DNS-Aktionen. Das entspricht dem Ansatz mit benutzerdefinierten Rollen, wenn die ergänzende Rolle alle anderen administrativen Standardberechtigungen enthält.
none (resource.type == 'dns.googleapis.com/ResourceRecordSet' && <RRSET_CONDITION>) || (resource.type != 'dns.googleapis.com/ResourceRecordSet') - Restriktiv:Ermöglicht nur Änderungen an Datensätzen und Vorgänge für Change-Ressourcen. Andere administrative Aktionen, einschließlich des Auflistens von Datensatzgruppen (
dns.resourceRecordSets.list) und der Beschreibung der verwalteten Zone, werden blockiert.none (resource.type == 'dns.googleapis.com/ResourceRecordSet' && <RRSET_CONDITION>) || (resource.type == 'dns.googleapis.com/Change')
Ersetzen Sie <RRSET_CONDITION> durch Ihre spezifischen Zugriffsanforderungen (siehe Beispielbedingungen).
So erteilen Sie Berechtigungen:
1. Weisen Sie dem Prinzipal in der verwalteten Zone die Rolle roles/dns.admin zu.
- Fügen Sie der Bindung die Bedingung (permissiv oder restriktiv) hinzu.
Methode 2: Benutzerdefinierte Rollen
Wenn Sie keine komplexen Bedingungen verwenden möchten, können Sie benutzerdefinierte Rollen erstellen, um Berechtigungen zu trennen.
Voraussetzung: Benutzerdefinierte Rollen erstellen
Erstellen Sie eine Rolle für die Verwaltung von Datensätzen (z. B.
DnsRecordSetAdmin), die die folgenden Berechtigungen enthält:dns.resourceRecordSets.createdns.resourceRecordSets.deletedns.resourceRecordSets.getdns.resourceRecordSets.update
Erstellen Sie eine ergänzende Rolle (z. B.
DnsNonRecordSetAdmin), die alle verbleibenden Berechtigungen der Standardrolleroles/dns.adminenthält. Diese zusätzlichen Berechtigungen (z. B.dns.changes.createunddns.managedZones.get) sind für die allgemeine Verwaltung der Zone und für die Erfüllung der erforderlichen Prüfungen beim Ändern von Datensätzen erforderlich.
Berechtigungen erteilen
Damit Ihre bedingten Richtlinien wie erwartet funktionieren, müssen Sie dem Prinzipal die folgenden Rollen zuweisen:
- Weisen Sie die ergänzende Rolle bedingungslos zu: Weisen Sie dem Prinzipal bedingungslos in der verwalteten Zone die Rolle zu, die die verbleibenden administrativen Berechtigungen enthält (z. B.
DnsNonRecordSetAdmin). - Rolle für die Verwaltung von Datensätzen bedingt zuweisen:Weisen Sie dem Prinzipal die Rolle mit den Berechtigungen für Datensätze (z. B.
DnsRecordSetAdmin) bedingt basierend auf Ihren spezifischen Zugriffsanforderungen zu.
Beispielbedingungen
Die folgenden Beispiele zeigen, wie Sie den Zugriff mit den Attributen resource.name und resource.type einschränken.
Wenn Sie Methode 1 (Standardrolle) verwenden, müssen Sie diesen Ausdrücken die entsprechende Klausel für Nicht-Datensatzgruppen anhängen, z. B. || (resource.type != 'dns.googleapis.com/ResourceRecordSet').
Exakte Datensatzübereinstimmung:Gewähren Sie die Berechtigung, nur den A-Eintrag für
api.example.com.zu verwalten.- Benutzerdefinierte Rollen / Rohbedingung:
none (resource.type == 'dns.googleapis.com/ResourceRecordSet' && resource.name.endsWith('/rrsets/api.example.com./A')) - Standardrolle (permissiv):
none (resource.type == 'dns.googleapis.com/ResourceRecordSet' && resource.name.endsWith('/rrsets/api.example.com./A')) || (resource.type != 'dns.googleapis.com/ResourceRecordSet') - Standardrolle (restriktiv):
none (resource.type == 'dns.googleapis.com/ResourceRecordSet' && resource.name.endsWith('/rrsets/api.example.com./A')) || (resource.type == 'dns.googleapis.com/Change')
- Benutzerdefinierte Rollen / Rohbedingung:
Subdomaindelegierung:Gewähren Sie die Berechtigung zum Verwalten aller Einträge in der Subdomain
p.example.com..- Benutzerdefinierte Rollen / Rohbedingung:
none (resource.type == 'dns.googleapis.com/ResourceRecordSet' && resource.name.extract('/rrsets/{name}/').endsWith('.p.example.com.')) - Standardrolle (permissiv):
none (resource.type == 'dns.googleapis.com/ResourceRecordSet' && resource.name.extract('/rrsets/{name}/').endsWith('.p.example.com.')) || (resource.type != 'dns.googleapis.com/ResourceRecordSet')
- Benutzerdefinierte Rollen / Rohbedingung:
Alle Einträge eines bestimmten Typs verwalten:Gewährt die Berechtigung zum Verwalten aller
A-Einträge in der Zone.- Benutzerdefinierte Rollen / Rohbedingung:
none (resource.type == 'dns.googleapis.com/ResourceRecordSet' && resource.name.endsWith('/A')) - Standardrolle (permissiv):
none (resource.type == 'dns.googleapis.com/ResourceRecordSet' && resource.name.endsWith('/A')) || (resource.type != 'dns.googleapis.com/ResourceRecordSet')
- Benutzerdefinierte Rollen / Rohbedingung:
IAM-Richtlinie für eine verwaltete Zone abrufen
So rufen Sie die IAM-Richtlinie für eine bestimmte verwaltete Zone ab:
gcloud
Führen Sie den Befehl gcloud dns managed-zones get-iam-policy aus:
gcloud dns managed-zones get-iam-policy NAME
Ersetzen Sie NAME durch den Namen der verwalteten Zone, für die Sie die IAM-Richtlinie abrufen möchten.
Wenn dieser Befehl erfolgreich ausgeführt wird, gibt er die IAM-Richtlinie zurück. Andernfalls wird eine Fehlermeldung zurückgegeben, die den Fehler angibt.
API
Senden Sie eine POST-Anfrage mit der Methode managedZone.getIamPolicy:
POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/ManagedZone:getIamPolicy
Dabei gilt:
PROJECT_ID: Name oder ID des ProjektsMANAGED_ZONE: Name der verwalteten Zone, für die Sie die IAM-Berechtigung festlegen möchten
IAM-Berechtigungen für eine verwaltete Zone prüfen
Senden Sie eine POST-Anfrage mit der Methode managedZone.testIamPermissions:
POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/ManagedZone:testIamPermissions
Dabei gilt:
PROJECT_ID: Name oder ID des ProjektsMANAGED_ZONE: Name der verwalteten Zone, für die Sie die IAM-Berechtigung prüfen möchten
Nächste Schritte
- Informationen zum Arbeiten mit verwalteten Zonen finden Sie unter Zonen erstellen, ändern und löschen.
- Informationen zu Lösungen für häufige Probleme, die bei der Verwendung von Cloud DNS auftreten können, finden Sie in den Informationen zur Fehlerbehebung.
- Eine Übersicht über Cloud DNS finden Sie in der Cloud DNS-Übersicht.