Mit Identity and Access Management (IAM) können Sie detaillierten Zugriff auf bestimmte Ressourcen von Google Cloud gewähren und gleichzeitig unerwünschten Zugriff auf andere Ressourcen verhindern. Wenn Sie das Prinzip der geringsten Berechtigung anwenden, gewähren Sie nur die Berechtigungen, die für Ihre Arbeitslasten erforderlich sind.
Mit IAM können Sie durch Zulassungsrichtlinien steuern, wer (Nutzer) welchen Zugriff (Rollen) auf welche Ressourcen hat. Diese Richtlinien binden bestimmte Rollen an Nutzer. Wenn Sie den Zugriff in Ihrer Ressourcenhierarchie verwalten möchten, können Sie mit der Cloud Resource Manager API IAM-Rollen und Zulassungsrichtlinien auf Organisationsebene konfigurieren. Sie können auch Ablehnungsrichtlinien definieren, um zu verhindern, dass Hauptkonten bestimmte Berechtigungen verwenden. Weitere Informationen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Berechtigungen und Rollen
Um den Zugriff auf Ressourcen zu steuern, müssen Konten, die API-Anfragen stellen, in Google Cloud die entsprechenden IAM-Rollen haben. IAM-Rollen enthalten Berechtigungen, mit denen Nutzer bestimmte Aktionen fürGoogle Cloud -Ressourcen ausführen können. Mit der Berechtigung resourcemanager.organizations.get kann ein Nutzer beispielsweise Details zu seiner Organisationsressource abrufen.
Sie erteilen den Nutzern die Berechtigungen nicht direkt, sondern Sie weisen ihnen Rollen zu, die eine oder mehrere Berechtigungen enthalten.
Sie können für dieselbe Ressource eine oder mehrere Rollen zuweisen.
Vordefinierte Rollen verwenden
In der folgenden Tabelle sind die Rollen aufgeführt, die Sie für den Zugriff auf die Attribute einer Organisationsressource zuweisen können, sowie eine Beschreibung der jeweiligen Rolle und die damit verbundenen Berechtigungen.
| Rolle | Berechtigungen |
|---|---|
Organization Administrator( Kann IAM-Richtlinien verwalten und Organisationsrichtlinien für Organisationen, Ordner und Projekte aufrufen. Ressourcen auf der niedrigsten Ebene, für die Sie diese Rolle zuweisen können:
|
|
Organisationsbetrachter( Berechtigung zum Anzeigen einer Organisation Ressourcen auf der niedrigsten Ebene, für die Sie diese Rolle zuweisen können:
|
|
Administrator für Organisationsrichtlinien( Ermöglicht den Zugriff, um festzulegen, welche Einschränkungen eine Organisation auf die Konfiguration von Cloud-Ressourcen durchführen möchte, indem sie Organisationsrichtlinien festlegt. Ressourcen auf der niedrigsten Ebene, für die Sie diese Rolle zuweisen können:
|
|
Browser( Lesezugriff zum Suchen in der Hierarchie nach einem Projekt, einschließlich Ordner, Organisation und "allow"-Richtlinie. Diese Rolle berechtigt nicht zum Ansehen der Ressourcen im Projekt. Ressourcen auf der niedrigsten Ebene, für die Sie diese Rolle zuweisen können:
|
|
Benutzerdefinierte Rollen erstellen
Zusätzlich zu den in diesem Thema beschriebenen vordefinierten Rollen können Sie auch benutzerdefinierte Rollen erstellen. Diese sind Sammlungen von Berechtigungen, die Sie an Ihre Anforderungen anpassen. Beachten Sie beim Erstellen einer benutzerdefinierten Rolle für die Verwendung mit Resource Manager die folgenden Punkte:- Berechtigungen zum Auflisten und Abrufen, z. B.
resourcemanager.projects.get/list, sollten immer als Paar von Berechtigungen zugewiesen werden. - Wenn Ihre benutzerdefinierte Rolle die Berechtigungen
folders.listundfolders.getenthält, sollte sie auchprojects.listundprojects.getenthalten. - Beachten Sie, dass die Berechtigung
setIamPolicyfür Organisations-, Ordner- und Projektressourcen es dem Nutzer ermöglicht, alle anderen Berechtigungen zu gewähren. Sie sollte daher mit Bedacht zugewiesen werden.
Vorhandenen Zugriff für eine Organisationsressource ansehen
Sie können sich die Rollen ansehen, die einem Nutzer für eine Organisationsressource zugewiesen wurden, indem Sie die Zulassungsrichtlinie dieser Ressource abrufen. Sie können die Zulassungsrichtlinie für eine Organisationsressource mit der Google Cloud Console, der Google Cloud CLI oder der Methode getIamPolicy() aufrufen.
Console
So rufen Sie zugewiesene Rollen auf Ebene der Organisationsressource mit der Google Cloud Console auf:
Rufen Sie in der Google Cloud Console die Seite Ressourcen verwalten auf:
Wählen Sie im Drop-down-Menü Organisation Ihre Organisationsressource aus.
Klicken Sie auf das Kästchen für die Organisationsressource.
Klicken Sie im Infofeld unter Berechtigungen auf Maximieren, um eine Rolle zu maximieren und alle Mitglieder mit dieser Rolle anzuzeigen.
gcloud
Rufen Sie die Zulassungsrichtlinie für die Organisationsressource mit dem Befehl „get-iam-policy“ ab:
gcloud organizations get-iam-policy \
ORGANIZATION_ID --format json > \
FILENAME.JSON
Die Befehlsausgabe gibt die Zulassungsrichtlinie aus, die in etwa so aussieht:
bindings:
- members:
- user:testuser1@gcp-test.com
role: roles/editor
- members:
- user:admin@gcp-test.com
role:roles/resourcemanager.organizationAdmin
- members:
- user:testuser2@gcp-test.com
role: roles/resourcemanager.projectCreator
etag": "BwU1aRxWk30="
API
Das folgende Code-Snippet gibt die Zulassungsrichtlinie für die Organisationsressource https://cloudresourcemanager.googleapis.com/v3/organizations/12345 zurück.
Anfrage:
POST
https://cloudresourcemanager.googleapis.com/v3/organizations/12345:getIamPolicy
Antwort:
{
"bindings": [
{
"role": "roles/resourcemanager.organizationAdmin",
"members": [
"user:email1@gmail.com"
]
},
{
"role": "roles/resourcemanager.projectCreator",
"members": [
"user:email2@gmail.com",
"user:email3@gmail.com",
"serviceAccount:my-other-app@appspot.gserviceaccount.com"
]
}
]
"etag": "BwUjHYKHHiQ="
}
Python
Mit der Methode getIamPolicy() können Sie eine zuvor festgelegte Zulassungsrichtlinie abrufen.
crm = discovery.build(
'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))
policy = crm.organizations().getIamPolicy(
resource=flags.organizationId, body={}).execute()
print json.dumps(policy, indent=2)
Zugriff auf eine Organisationsressource gewähren
Organization Administrators können Teammitgliedern IAM-Rollen zuweisen, damit sie auf die Ressourcen und APIs einer Organisation zugreifen können. Sie können Rollen einer Nutzerkonto-E-Mail-Adresse, einer Google-Gruppe, einem Dienstkonto oder einer G Suite-Domain zuweisen. Sie können die Google Cloud Console, die gcloud CLI oder die Methode setIamPolicy() verwenden, um Rollen zuzuweisen.
Console
So legen Sie die Zugriffssteuerung auf Ebene der Organisationsressource mit der Google Cloud Console fest:
Rufen Sie in der Google Cloud Console die Seite Ressourcen verwalten auf:
Wählen Sie im Drop-down-Menü Organisation Ihre Organisationsressource aus.
Klicken Sie auf das Kästchen für die Organisationsressource. Wenn Sie keine Ordnerressource haben, ist die Organisationsressource nicht sichtbar. Weitere Informationen finden Sie in der Anleitung zum Gewähren von Rollen auf der Seite IAM.
Wenn das Infofeld auf der rechten Seite ausgeblendet ist, klicken Sie oben rechts auf Infofeld ansehen.
Klicken Sie im Infofeld auf dem Tab Berechtigungen auf Mitglied hinzufügen.
Geben Sie in das Feld Neue Mitglieder die Teammitglieder ein, die Sie hinzufügen möchten. Sie können die E-Mail-Adresse eines Nutzerkontos, eine Google-Gruppe, ein Dienstkonto oder eine G Suite-Domain angeben.
Wählen Sie im Drop-down-Menü Rolle auswählen die Rolle aus, die Sie den Teammitgliedern zuweisen möchten.
Klicken Sie auf Hinzufügen.
gcloud
So legen Sie die Zulassungsrichtlinie einer Organisationsressource mit dem Befehl gcloud fest:
Rufen Sie die Zulassungsrichtlinie für die Organisationsressource mit dem Befehl
get-iam-policyab und geben Sie die Richtlinie in eine JSON-Datei aus:gcloud organizations get-iam-policy \ ORGANIZATION_ID \ --format json > FILENAME.JSONDer Inhalt der JSON-Datei sieht in etwa so aus:
{
"bindings": [
{
"members": [
"user:testuser1@gcp-test.com"
],
"role": "roles/editor"
},
{
"members": [
"user:admin@gcp-test.com",
],
"role": "roles/resourcemanager.organizationAdmin"
},
{
"members": [
"user:testuser2@gcp-test.com"
],
"role": "roles/resourcemanager.projectCreator"
},
],
"etag": "BwU1aRxWk30="
}
- Öffnen Sie die JSON-Datei in einem Texteditor. Fügen Sie dann dem Array
bindingseinen neuen Eintrag hinzu, um einen Organisationsadministrator zu definieren. Wenn Sie beispielsweiseanotheradmin@gcp-test.comzu Organisationsadministrator machen möchten, ändern Sie das vorherige Beispiel so:
{
"bindings": [
{
"members": [
"user:testuser1@gcp-test.com"
],
"role": "roles/editor"
},
{
"members": [
"user:admin@gcp-test.com",
"user:anotheradmin@gcp-test.com"
],
"role": "roles/resourcemanager.organizationAdmin"
},
{
"members": [
"user:testuser20@gcp-test.com"
],
"role": "roles/resourcemanager.projectCreator"
},
],
"etag": "BwU1aRxWk30="
}
- Aktualisieren Sie die Zulassungsrichtlinie der Organisationsressource mit dem folgenden Befehl:
gcloud organizations set-iam-policy \
ORGANIZATION_ID policy.json
API
Anfrage
POST https://cloudresourcemanager.googleapis.com/v3/organizations/12345:setIamPolicy
{
"policy": {
"version": "0",
"bindings": [
{
"role": "roles/resourcemanager.organizationAdmin",
"members": [
"user:email1@gmail.com"
]
},
{
"role": "roles/resourcemanager.projectCreator",
"members": [
"user:email2@gmail.com",
"user:email3@gmail.com",
"serviceAccount:my-other-app@appspot.gserviceaccount.com"
]
}
]
"etag": "BwUjHYKHHiQ="
}
}
Response:
{
"bindings": [
{
"role": "roles/resourcemanager.organizationAdmin",
"members": [
"user:email1@gmail.com"
]
},
{
"role": "roles/resourcemanager.projectCreator",
"members": [
"user:email2@gmail.com",
"user:email3@gmail.com",
"serviceAccount:my-other-app@appspot.gserviceaccount.com"
]
}
]
"etag": "BwUjHYKJUiQ="
}
Mit der Methode setIamPolicy() können Sie Nutzern Rollen zuweisen, indem Sie der Organisationsressource eine Zulassungsrichtlinie anhängen. Die Zulassungsrichtlinie ist eine Sammlung von Bindungen, die definieren,
Read-Modify-Write: Ein gängiges Muster zum Aktualisieren der Metadaten einer Ressource, z. B. der Zulassungsrichtlinie, besteht darin, den aktuellen Status zu lesen, die Daten lokal zu aktualisieren und dann die geänderten Daten zum Schreiben zu senden. Dabei kann es jedoch zu Konflikten kommen, wenn zwei oder mehr voneinander unabhängige Prozesse gleichzeitig nach diesem Muster verfahren. Wenn beispielsweise zwei Project Owner gleichzeitig versuchen, Änderungskonflikte an der Zulassungsrichtlinie vorzunehmen, könnten die Änderungen eines Inhabers fehlschlagen. IAM löst dieses Problem durch die Verwendung des Attributs etag in Zulassungsrichtlinien. Mit diesem Attribut wird überprüft, ob sich die Zulassungsrichtlinie seit der letzten Anfrage geändert hat. Wenn Sie eine Anfrage mit einem etag-Wert stellen, vergleicht das System den etag-Wert in der Anfrage mit dem vorhandenen etag-Wert, der der Richtlinie zugeordnet ist. Die Zulassungsrichtlinie wird nur geschrieben, wenn die etag-Werte übereinstimmen.
Wenn Sie eine Zulassungsrichtlinie aktualisieren, rufen Sie sie zuerst mit getIamPolicy() ab, aktualisieren Sie sie und schreiben Sie dann die aktualisierte Zulassungsrichtlinie mit setIamPolicy(). Verwenden Sie beim Festlegen der Zulassungsrichtlinie den Wert etag nur, wenn die entsprechende Zulassungsrichtlinie in GetPolicyResponse einen etag-Wert enthält.
Python
Mit der Methode setIamPolicy() können Sie eine Zulassungsrichtlinie an eine Ressource anhängen. Die Methode setIamPolicy verwendet eine SetIamPolicyRequest, die eine festzulegende Zulassungsrichtlinie und die Ressource enthält, an die die Zulassungsrichtlinie angehängt ist. Die resultierende Zulassungsrichtlinie wird zurückgegeben. Wir empfehlen, beim Aktualisieren einer Zulassungsrichtlinie mit setIamPolicy() das Muster read-modify-write zu verwenden.
Hier ist ein Beispielcode zum Festlegen einer Zulassungsrichtlinie für eine Organisationsressource:
crm = discovery.build(
'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))
policy = crm.organizations().getIamPolicy(
resource=flags.organizationId, body={}).execute()
admin_binding = next(
(binding
for binding in policy['bindings']
if binding['role'] == 'roles/resourcemanager.organizationAdmin'),
None)
# Add an empty Organization Administrator binding if not present.
if not admin_binding:
admin_binding = {
'role': 'roles/resourcemanager.organizationAdmin',
'members': []
}
policy['bindings'].append(admin_binding)
# Add the new Admin (if necessary).
new_admin = 'user:' + flags.adminEmail
if new_admin not in admin_binding['members']:
admin_binding['members'].append(new_admin)
policy = crm.organizations().setIamPolicy(
resource=flags.organizationId,
body={
'resource': flags.organizationId,
'policy': policy
}).execute()
print json.dumps(policy, indent=2)
Sichtbarkeit von Projekten für Nutzer einschränken
Nutzer können alle Projekte, auf die sie Zugriff haben, in der Google Cloud Console und in Suchanfragen sehen, unabhängig davon, ob sie sich in der ausgewählten Organisationsressource des Nutzers befinden oder nicht. Mit dem Organisationsrichtliniendienst können Sie die Anzahl der Projekte einschränken, die in Abfragen und in der Google Cloud Console zurückgegeben werden. So können Sie Nutzer darauf beschränken, nur Projekte innerhalb Ihrer Domain zu sehen.
Die Einschränkung der Organisationsrichtlinie constraints/resourcemanager.accessBoundaries ist eine Listeneinschränkung, die für Ihre Organisationsressource erzwungen wird. Die Einschränkung akzeptiert eine Liste von Organisationsressourcen-IDs, die die Gruppe von Organisationsressourcen definieren, die ihre Ressourcen für Nutzer in einer Abfrage oder in der Google Cloud Console sichtbar machen.
Projekte werden unter No organization angezeigt, wenn der Nutzer nicht die Berechtigung resourcemanager.organizations.get für die übergeordnete Organisationsressource des Projekts hat. Dadurch kann ein Projekt, das nicht Teil Ihrer Organisationsressource ist, so aussehen, als wäre es mit keiner Organisationsressource verknüpft.
Wenn Sie die Einschränkung resourcemanager.accessBoundaries verwenden, um eine Organisationsressource zu verbieten, werden Projekte, die zu dieser Organisationsressource gehören, nicht in Abfragen oder in der Google Cloud Console angezeigt. Projekte, die noch nicht zu einer Organisationsressource migriert wurden, sind nicht sichtbar, wenn Sie diese Einschränkung erzwingen.
Wir empfehlen, Projekte, die sich unter No organization befinden, zu Ihrer Organisationsressource zu migrieren, bevor Sie diese Einschränkung erzwingen. Informationen zum Verschieben von Projekten in eine Organisationsressource finden Sie unter Projekt verschieben.
Informationen zum Festlegen einer Organisationsrichtlinie finden Sie unter Einschränkungen verwenden.
Bedingten Zugriff gewähren
Bestimmte IAM-Rollen, z. B. „Organization Policy Administrator“ (roles/orgpolicy.policyAdmin), können nur für eine Organisationsressource gewährt werden.
Aufgrund der Richtlinienübernahme übernehmen normalerweise alle Ressourcen in der Organisation diese Rolle.
Wenn Sie genauer steuern möchten, für welche Ressourcen die Rolle gewährt wird, können Sie IAM-Bedingungen verwenden. Wenn Sie Tags mit Bedingungen verwenden, können Sie Zugriff auf Ressourcen nur gewähren, wenn sie das angegebene Tag haben. In der folgenden Zulassungsrichtlinie wird beispielsweise die Rolle „Administrator für Organisationsrichtlinien“ nur für Ressourcen gewährt, die das Tag environment: dev haben, und nicht für andere Ressourcen:
{
"bindings": [
{
"members": [
"{dynamic print variables.examples.principal_group_api}"
],
"role": "roles/orgpolicy.policyAdmin",
"condition": {
"title": "Dev_environment_only",
"description": "Only granted in the development environment",
"expression":
"resource.matchTag('123456789012/env', 'dev')"
}
}
],
"etag": "BwWKmjvelug=",
"version": 3
}
Berechtigungen testen
Mit der Methode testIamPermissions() können Sie die IAM-Berechtigungen eines Nutzers für eine Organisationsressource testen. Diese Methode verwendet die Ressourcen-URL und die zu testenden Berechtigungen. Es wird die Teilmenge dieser Berechtigungen zurückgegeben, auf die der Nutzer zugreifen kann.
In der Regel rufen Sie testIamPermissions() nicht auf, wenn Sie dieGoogle Cloud Console direkt zum Verwalten von Berechtigungen verwenden. testIamPermissions() ist für die Integration in Ihre proprietäre Software vorgesehen, z. B. eine benutzerdefinierte grafische Benutzeroberfläche. In der Google Cloud Console wird beispielsweise intern testIamPermissions() verwendet, um zu bestimmen, welche Benutzeroberfläche für den angemeldeten Nutzer verfügbar ist.
API
Mit der Methode testIamPermissions() können Sie prüfen, welche Berechtigungen der Aufrufer für die angegebene Ressource hat. Diese Methode nimmt einen Ressourcennamen und eine Reihe von Berechtigungen als Parameter und gibt den Teil der Berechtigungen des Aufrufenden zurück.
Hier ist ein Beispielcode zum Testen von Berechtigungen für eine Organisationsressource:
Request:
POST https://cloudresourcemanager.googleapis.com/v3/organizations/12345:testIamPermissions
{
"permissions": [
"resourcemanager.organizations.get",
"resourcemanager.organizations.setIamPolicy"
]
}
Response:
{
"permissions": [
"resourcemanager.organizations.get"
]
}
Python
crm = discovery.build(
'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))
response = crm.organizations().testIamPermissions(
resource=flags.organizationId,
body={
'resource': flags.organizationId,
'permissions': [
'resourcemanager.organizations.setIamPolicy',
'resourcemanager.projects.patch'
]
}).execute()
print json.dumps(response, indent=2)