Auf dieser Seite wird erläutert, wie Sie Richtlinien für die Identitäts- und Zugriffsverwaltung asynchron analysieren und die Ergebnisse in BigQuery schreiben. Der Vorgang ähnelt dem Analysieren von IAM-Richtlinien, nur dass das Analyseergebnis in BigQuery-Tabellen geschrieben wird.
Hinweise
Cloud Asset API aktivieren.
Sie müssen die API in dem Projekt oder der Organisation aktivieren, die Sie zum Senden der Abfrage verwenden. Dies muss nicht dieselbe Ressource sein, auf die Sie den Bereich der Abfrage festlegen.
Erforderliche Rollen und Berechtigungen
Die folgenden Rollen und Berechtigungen sind erforderlich, um eine Richtlinienanalyse auszuführen und die Ergebnisse nach BigQuery zu exportieren.
Erforderliche IAM-Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt, den Ordner oder die Organisation zu gewähren, auf die Sie die Abfrage beschränken möchten, um die Berechtigungen zu erhalten, die Sie zum Analysieren einer Richtlinie und Exportieren der Ergebnisse nach BigQuery benötigen:
-
BigQuery-Dateneditor (
roles/bigquery.dataEditor
) -
Betrachter von Cloud-Assets (
roles/cloudasset.viewer
) -
So analysieren Sie Richtlinien mit benutzerdefinierten IAM-Rollen:
Rollenbetrachter (
roles/iam.roleViewer
) -
So verwenden Sie die Google Cloud CLI zum Analysieren von Richtlinien:
Service Usage-Nutzer (
roles/serviceusage.serviceUsageConsumer
)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.
Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Analysieren einer Richtlinie und Exportieren der Ergebnisse nach BigQuery erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:
Erforderliche Berechtigungen
Die folgenden Berechtigungen sind erforderlich, um eine Richtlinie zu analysieren und die Ergebnisse nach BigQuery zu exportieren:
-
bigquery.datasets.create
-
bigquery.jobs.create
-
bigquery.tables.create
-
bigquery.tables.get
-
bigquery.tables.updateData
-
bigquery.tables.update
-
cloudasset.assets.analyzeIamPolicy
-
cloudasset.assets.searchAllResources
-
cloudasset.assets.searchAllIamPolicies
-
So analysieren Sie Richtlinien mit benutzerdefinierten IAM-Rollen:
iam.roles.get
-
So verwenden Sie die Google Cloud CLI zum Analysieren von Richtlinien:
serviceusage.services.use
Möglicherweise können Sie diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Erforderliche Google Workspace-Berechtigungen
Wenn Sie sehen möchten, ob ein Hauptkonto aufgrund seiner Mitgliedschaft in einer Google Workspace-Gruppe bestimmte Rollen oder Berechtigungen hat, benötigen Sie die Google Workspace-Berechtigung groups.read
. Diese Berechtigung ist in der Rolle „Gruppenleser-Administrator“ und in leistungsstärkeren Rollen wie den Rollen „Gruppenadministrator“ und „Super Admin“ enthalten. Weitere Informationen finden Sie unter Bestimmte Administratorrollen zuweisen.
Richtlinien analysieren und Ergebnisse exportieren
Console
Rufen Sie in der Google Cloud Console die Seite „Policy Analyzer“ auf.
Suchen Sie im Abschnitt Richtlinien analysieren die Abfragevorlage, die Sie verwenden möchten, und klicken Sie dann auf Abfrage erstellen. Wenn Sie eine benutzerdefinierte Abfrage erstellen möchten, klicken Sie auf Benutzerdefinierte Abfrage erstellen.
Wählen Sie im Feld Abfragebereich auswählen das Projekt, den Ordner oder die Organisation aus, auf die Sie die Abfrage beschränken möchten. Policy Analyzer analysiert den Zugriff auf dieses Projekt, diesen Ordner oder diese Organisation sowie alle Ressourcen in diesem Projekt, Ordner oder dieser Organisation.
Überprüfen Sie, ob Ihre Abfrageparameter festgelegt sind:
- Wenn Sie eine Abfragevorlage verwenden, prüfen Sie die vorausgefüllten Suchparameter.
- Wenn Sie eine benutzerdefinierte Abfrage erstellen, legen Sie die Ressourcen, Hauptkonten, Rollen und Berechtigungen fest, die Sie abfragen möchten.
Weitere Informationen zu den Abfragetypen, die Sie erstellen können, finden Sie unter IAM-Richtlinien analysieren.
Klicken Sie im Bereich mit dem Namen der Abfrage auf Analysieren > Nur vollständiges Ergebnis exportieren. Der Bereich Vollständige Ergebnisse exportieren wird geöffnet.
Geben Sie im Bereich Exportziel festlegen die folgenden Informationen ein:
- Projekt: Das Projekt, in dem sich das BigQuery-Dataset befindet.
- Dataset: Das BigQuery-Dataset, in das Sie Ergebnisse exportieren möchten.
- Tabelle: Das Präfix der BigQuery-Tabellen, in die die Analyseergebnisse geschrieben werden. Wenn keine Tabelle mit dem angegebenen Präfix vorhanden ist, erstellt BigQuery eine neue Tabelle.
Klicken Sie auf Weiter.
Optional: Wählen Sie im Abschnitt Zusätzliche Einstellungen konfigurieren die gewünschten Optionen aus:
- Partitionierung: Gibt an, ob die Tabelle partitioniert werden soll. Weitere Informationen zu partitionierten Tabellen finden Sie unter Einführung in partitionierte Tabellen.
- Schreibeinstellung: Gibt die Aktion an, die ausgeführt wird, wenn die Zieltabelle oder -partition bereits vorhanden ist. Wenn die Tabelle oder Partition bereits vorhanden ist, hängt BigQuery die Daten standardmäßig an die Tabelle oder die neueste Partition an.
Klicken Sie auf Exportieren.
Policy Analyzer führt Ihre Abfrage aus und exportiert die vollständigen Ergebnisse in die angegebene Tabelle.
gcloud
Mit der Methode AnalyzeIamPolicyLongrunning
können Sie eine Analyseanfrage senden und Ergebnisse im angegebenen BigQuery-Ziel abrufen.
Bevor Sie die folgenden Befehlsdaten verwenden, ersetzen Sie die folgenden Werte:
RESOURCE_TYPE
: Der Ressourcentyp, auf den Sie die Suche beschränken möchten. Es werden nur IAM-Zulassungsrichtlinien analysiert, die an diese Ressource und an ihre Nachfolger angehängt sind. Verwenden Sie den Wertproject
,folder
oderorganization
.RESOURCE_ID
: Die ID des Google Cloud-Projekts, des Ordners oder der Organisation, auf die Sie die Suche beschränken möchten. Es werden nur IAM-Zulassungsrichtlinien analysiert, die mit dieser Ressource und ihren Nachfolger verknüpft sind. Projekt-IDs sind alphanumerische Strings, wiemy-project
. Ordner- und Organisations-IDs sind numerisch, z. B.123456789012
.PRINCIPAL
: Das Hauptkonto, dessen Zugriff Sie analysieren möchten, im FormatPRINCIPAL_TYPE:ID
, z. B.user:my-user@example.com
. Eine vollständige Liste der Hauptkontentypen finden Sie unter Hauptkontenkennungen.PERMISSIONS
: Eine durch Kommas getrennte Liste der Berechtigungen, die Sie prüfen möchten, z. B.compute.instances.get,compute.instances.start
. Wenn Sie mehrere Berechtigungen auflisten, sucht Policy Analyzer nach einer der aufgeführten Berechtigungen.DATASET
: Das BigQuery-Dataset im Formatprojects/PROJECT_ID/datasets/DATASET_ID
, wobeiPROJECT_ID
die alphanumerische ID Ihres Google Cloud-Projekts undDATASET_ID
die ID Ihres Datasets ist.TABLE_PREFIX
: Das Präfix der BigQuery-Tabellen, in die die Analyseergebnisse geschrieben werden. Wenn keine Tabelle mit dem angegebenen Präfix vorhanden ist, erstellt BigQuery eine neue Tabelle.PARTITION_KEY
: Optional. Der Partitionsschlüssel für eine BigQuery-partitionierte Tabelle. Policy Analyzer unterstützt nurREQUEST_TIME
-Partitionsschlüssel.WRITE_DISPOSITION
: Optional. Gibt die Aktion an, die ausgeführt wird, wenn die Zieltabelle oder -partition bereits vorhanden ist. Eine Liste der möglichen Werte finden Sie unterwriteDisposition
. Wenn die Tabelle oder Partition bereits vorhanden ist, hängt BigQuery die Daten standardmäßig an die Tabelle oder die neueste Partition an.
Führen Sie den Befehl gcloud asset analysis-iam-policy-longrunning aus:
Linux, macOS oder Cloud Shell
gcloud asset analyze-iam-policy-longrunning --RESOURCE_TYPE=RESOURCE_ID \ --full-resource-name=FULL_RESOURCE_NAME \ --identity=PRINCIPAL \ --permissions='PERMISSIONS' \ --bigquery-dataset=DATASET \ --bigquery-table-prefix=TABLE_PREFIX \ --bigquery-partition-key=PARTITION_KEY \ --bigquery-write-disposition=WRITE_DISPOSITION
Windows (PowerShell)
gcloud asset analyze-iam-policy-longrunning --RESOURCE_TYPE=RESOURCE_ID ` --full-resource-name=FULL_RESOURCE_NAME ` --identity=PRINCIPAL ` --permissions='PERMISSIONS' ` --bigquery-dataset=DATASET ` --bigquery-table-prefix=TABLE_PREFIX ` --bigquery-partition-key=PARTITION_KEY ` --bigquery-write-disposition=WRITE_DISPOSITION
Windows (cmd.exe)
gcloud asset analyze-iam-policy-longrunning --RESOURCE_TYPE=RESOURCE_ID ^ --full-resource-name=FULL_RESOURCE_NAME ^ --identity=PRINCIPAL ^ --permissions='PERMISSIONS' ^ --bigquery-dataset=DATASET ^ --bigquery-table-prefix=TABLE_PREFIX ^ --bigquery-partition-key=PARTITION_KEY ^ --bigquery-write-disposition=WRITE_DISPOSITION
Sie sollten eine Antwort ähnlich der folgenden erhalten:
Analyze IAM Policy in progress. Use [gcloud asset operations describe projects/my-project/operations/AnalyzeIamPolicyLongrunning/1195028485971902504711950280359719028666] to check the status of the operation.
REST
Mit der Methode AnalyzeIamPolicyLongrunning
können Sie eine Analyseanfrage senden und Ergebnisse im angegebenen BigQuery-Ziel abrufen.
Verwenden Sie die Methode analyzeIamPolicyLongrunning
der Cloud Asset Inventory API, um eine IAM-Zulassungsrichtlinie zu analysieren und die Ergebnisse nach BigQuery zu exportieren.
Bevor Sie die Anfragedaten verwenden, ersetzen Sie die folgenden Werte:
RESOURCE_TYPE
: Der Ressourcentyp, auf den Sie die Suche beschränken möchten. Es werden nur IAM-Zulassungsrichtlinien analysiert, die an diese Ressource und an ihre Nachfolger angehängt sind. Verwenden Sie den Wertprojects
,folders
oderorganizations
.RESOURCE_ID
: Die ID des Google Cloud-Projekts, des Ordners oder der Organisation, auf die Sie die Suche beschränken möchten. Es werden nur IAM-Zulassungsrichtlinien analysiert, die mit dieser Ressource und ihren Nachfolger verknüpft sind. Projekt-IDs sind alphanumerische Strings, wiemy-project
. Ordner- und Organisations-IDs sind numerisch, z. B.123456789012
.-
FULL_RESOURCE_NAME
: Optional. Der vollständige Ressourcenname der Ressource, deren Zugriff Sie analysieren möchten. Eine Liste der vollständigen Formate für Ressourcennamen finden Sie unter Format von Ressourcennamen. PRINCIPAL
: Optional. Das Hauptkonto, dessen Zugriff Sie analysieren möchten, im FormatPRINCIPAL_TYPE:ID
, z. B.user:my-user@example.com
. Eine vollständige Liste der Hauptkontentypen finden Sie unter Hauptkontenkennungen.PERMISSION_1
,PERMISSION_2
...PERMISSION_N
: Optional. Die Berechtigungen, die Sie prüfen möchten, z. B.compute.instances.get
. Wenn Sie mehrere Berechtigungen auflisten, sucht Policy Analyzer nach einer der aufgeführten Berechtigungen.DATASET
: Das BigQuery-Dataset im Formatprojects/PROJECT_ID/datasets/DATASET_ID
, wobeiPROJECT_ID
die alphanumerische ID Ihres Google Cloud-Projekts undDATASET_ID
die ID Ihres Datasets ist.TABLE_PREFIX
: Das Präfix der BigQuery-Tabellen, in die die Analyseergebnisse geschrieben werden. Wenn keine Tabelle mit dem angegebenen Präfix vorhanden ist, erstellt BigQuery eine neue Tabelle.PARTITION_KEY
: Optional. Der Partitionsschlüssel für eine BigQuery-partitionierte Tabelle. Policy Analyzer unterstützt nurREQUEST_TIME
-Partitionsschlüssel.WRITE_DISPOSITION
: Optional. Gibt die Aktion an, die ausgeführt wird, wenn die Zieltabelle oder -partition bereits vorhanden ist. Eine Liste der möglichen Werte finden Sie unterwriteDisposition
. Wenn die Tabelle oder Partition bereits vorhanden ist, hängt BigQuery die Daten standardmäßig an die Tabelle oder die neueste Partition an.
HTTP-Methode und URL:
POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicyLongrunning
JSON-Text der Anfrage:
{ "analysisQuery": { "resourceSelector": { "fullResourceName": "FULL_RESOURCE_NAME" }, "identitySelector": { "identity": "PRINCIPAL" }, "accessSelector": { "permissions": [ "PERMISSION_1", "PERMISSION_2", "PERMISSION_N" ] } }, "outputConfig": { "bigqueryDestination": { "dataset": "DATASET", "tablePrefix": "TABLE_PREFIX", "partitionKey": "PARTITION_KEY", "writeDisposition": "WRITE_DISPOSITION" } } }
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten in etwa folgende JSON-Antwort erhalten:
{ "name": "projects/my-project/operations/AnalyzeIamPolicyLongrunning/1206385342502762515812063858425027606003", "metadata": { "@type": "type.googleapis.com/google.cloud.asset.v1.AnalyzeIamPolicyLongrunningMetadata", "createTime": "2022-04-12T21:31:10.753173929Z" } }
Ergebnisse der IAM-Richtlinienanalyse ansehen
So rufen Sie die Analyse der IAM-Richtlinien auf:
Console
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Um die Tabellen und Ansichten im Dataset anzuzeigen, öffnen Sie den Navigationsbereich. Wählen Sie im Bereich Explorer Ihr Projekt aus, um es zu maximieren, und wählen Sie dann ein Dataset aus.
Wählen Sie in der Liste die Tabellen mit Ihrem Präfix aus. Die Tabelle mit dem Suffix
analysis
enthält die Abfrage und Metadaten (z. B. Vorgangsname, Anfragezeit und nicht kritische Fehler). Die Tabelle mit dem Suffixanalysis_result
ist das Ergebnis, das Tupel von{identity, role(s)/permission(s), resource}
zusammen mit IAM-Richtlinien auflistet, die diese Tupel generieren.Einen Beispieldatensatz finden Sie auf dem Tab Vorschau.
API
Rufen Sie tabledata.list
auf, um die Daten in Ihrer Tabelle zu durchsuchen.
Geben Sie im Parameter tableId
den Namen Ihrer Tabelle an.
Sie können die folgenden optionalen Parameter konfigurieren, um die Ausgabe zu steuern.
maxResults
ist die maximale Anzahl von zurückzugebenden Ergebnissen.selectedFields
ist eine durch Kommas getrennte Liste von Spalten, die zurückgegeben werden sollen. Wenn nichts angegeben ist, werden alle Spalten zurückgegeben.startIndex
ist der nullbasierte Index der Startzeile, die gelesen werden soll.
Die Werte werden zusammengefasst in einem JSON-Objekt zurückgegeben. Dieses Objekt muss dann wie in der Referenzdokumentation zu tabledata.list
beschrieben geparst werden.
BigQuery abfragen
Dieser Abschnitt enthält Beispiel-SQL-Abfragen, die Ihnen zeigen, wie Sie BigQuery-Tabellen verwenden, die von AnalyzeIamPolicyLongrunning
geschrieben wurden. Weitere Informationen zur BigQuery-Syntax finden Sie unter
Standard-SQL-Abfragesyntax.
OP_ID ist für die meisten Abfragen erforderlich. Sie erhalten ihn unter Antwort von AnalyzeIamPolicyLongrunning
. Sie sehen in gcloud beispielsweiseOP_ID als 123456
unter „[gcloud asset operations describe organizations/123456789/operations/AnalyzeIamPolicyLongrunning/123456]
verwenden, um den Status des Vorgangs zu überprüfen.“
Vorgänge auflisten
Die Tabelle könnte Ergebnisse mehrerer AnalyzeIamPolicyLongrunning
-Vorgänge speichern. Sie können die folgende Abfrage verwenden, um alle aufzulisten:
SELECT DISTINCT requestTime, opName FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis` ORDER BY 1 DESC ;
Analysten in einem Vorgang auflisten
In einem AnalyzeIamPolicyLongrunning
-Vorgang können mehrere Analysedatensätze generiert werden. Wenn Sie beispielsweise die Option analyze_service_account_impersonation
in Ihrer Anfrage aktivieren, enthält das Ergebnis möglicherweise eine Hauptanalyse (mit analysisId 0) und mehrere Identitäten zur Dienstkontoidentität.
Sie können die folgende Abfrage verwenden, um alle Analysen zu ermitteln. Geben Sie dazu einen Vorgangsnamen ein.
DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID"; SELECT analysisId, requestTime, TO_JSON_STRING(analysis.analysisQuery, true) as analysisQuery, analysis.fullyExplored, TO_JSON_STRING(analysis.nonCriticalErrors, true) as nonCriticalErrors FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis` WHERE opName=_opName ORDER BY 1 ;
ACEs(Access Control Entries) in einer Analyse auflisten
Ein ACE ist eine Zugriffssteuerung {identity, role(s)/permission(s), resource}
.
Sie können die folgende Abfrage verwenden, um ACE in einer einzigen Analyse aufzulisten.
DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID"; SELECT DISTINCT ids.name AS identity, resources.fullResourceName AS resource, accesses.role AS role, accesses.permission AS permission FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`, UNNEST(analysisResult.identityList.identities) AS ids, UNNEST(analysisResult.accessControlLists) AS acls, UNNEST(acls.accesses) AS accesses, UNNEST(acls.resources) AS resources WHERE opName=_opName AND analysisId = 0 ORDER BY 1,2,3,4 ;
ACEs(Access Control Entries) mit IAM-Richtlinienbindung in einer Analyse auflisten
In dieser Abfrage sind sowohl die ACE- als auch die IAM-Richtlinienbindung aufgelistet, die diese ACE für eine Analyse generiert.
DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID"; SELECT ids.name AS identity, resources.fullResourceName AS resource, accesses.role AS role, accesses.permission AS permission, analysisResult.attachedResourceFullName as iam_policy_attached_resource, TO_JSON_STRING(analysisResult.iamBinding, true) as iam_policy_binding FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`, UNNEST(analysisResult.identityList.identities) AS ids, UNNEST(analysisResult.accessControlLists) AS acls, UNNEST(acls.accesses) AS accesses, UNNEST(acls.resources) AS resources WHERE opName=_opName AND analysisId = 0 ORDER BY 1,2,3,4 ;
IAM-Richtlinienbindungen in einer Analyse auflisten
In dieser Abfrage listen wir die IAM-Richtlinienbindungen auf, die in einer Analyse enthalten waren.
DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID"; SELECT DISTINCT analysisResult.attachedResourceFullName as iam_policy_attached_resource, TO_JSON_STRING(analysisResult.iamBinding, true) as iam_policy_binding FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result` WHERE opName=_opName AND analysisId = 0 ORDER BY 1, 2 ;
IAM-Richtlinienbindungen mit ACE(Access Control Entry) in einer Analyse auflisten
In dieser Abfrage listen wir die IAM-Richtlinienbindungen mit ihren abgeleiteten ACEs in einer Analyse auf.
DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID"; SELECT analysisResult.attachedResourceFullName as iam_policy_attached_resource, TO_JSON_STRING(analysisResult.iamBinding, true) as iam_policy_binding, TO_JSON_STRING(analysisResult.identityList.identities, true) as identities, TO_JSON_STRING(acls.accesses, true) as accesses, TO_JSON_STRING(acls.resources, true) as resources FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`, UNNEST(analysisResult.accessControlLists) AS acls WHERE opName=_opName AND analysisId = 0 ORDER BY 1,2 ;