Richtlinienanalyse in BigQuery schreiben

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, mit der Ausnahme, dass das Analyseergebnis in BigQuery-Tabellen geschrieben wird.

Hinweis

Cloud Asset API aktivieren.

Aktivieren Sie die API

Sie müssen die API in dem Projekt oder der Organisation aktivieren, die Sie zum Senden der Abfrage verwenden möchten. Dies muss nicht die gleiche Ressource sein, auf die Sie Ihre Abfrage beschränken.

Erforderliche Rollen und Berechtigungen

Die folgenden Rollen und Berechtigungen sind erforderlich, um eine Richtlinienanalyse auszuführen und die Ergebnisse in BigQuery zu exportieren.

Erforderliche IAM-Rollen

Wenn Sie die Berechtigungen erhalten möchten, die Sie zum Analysieren einer Richtlinie und zum Exportieren der Ergebnisse nach BigQuery benötigen, bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt, den Ordner oder die Organisation zu gewähren, auf die sich Ihre Abfrage bezieht:

  • BigQuery Datenmitbearbeiter (roles/bigquery.dataEditor)
  • Cloud-Asset-Betrachter (roles/cloudasset.viewer)
  • So analysieren Sie Richtlinien mit benutzerdefinierten IAM-Rollen: Rollenbetrachter (roles/iam.roleViewer)
  • Zur Verwendung von Google Cloud CLI: Dienstnutzungsnutzer (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 zum Exportieren der Ergebnisse nach BigQuery erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

  • 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-Befehlszeile für die Analyse von Richtlinien: serviceusage.services.use

Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Erforderliche Google Workspace-Berechtigungen

Wenn Sie sehen möchten, ob ein Hauptkonto bestimmte Rollen oder Berechtigungen aufgrund seiner Mitgliedschaft in einer Google Workspace-Gruppe hat, benötigen Sie die Google Workspace-Berechtigung groups.read. Diese Berechtigung ist in der Rolle „Gruppenleser-Administrator“ und in leistungsstarken Rollen wie „Gruppenadministrator“ oder „Super Admin“ enthalten. Weitere Informationen finden Sie im Abschnitt Bestimmte Administratorrollen zuweisen.

AnalyzeIamPolicyLongrunning wird angerufen...

Mit der Methode AnalyzeIamPolicyLongrunning können Sie eine Analyseanfrage senden und Ergebnisse für das angegebene BigQuery-Ziel erhalten.

gcloud

Bevor Sie eine der folgenden Befehlsdaten verwenden, ersetzen Sie die folgenden Werte:

  • RESOURCE_TYPE: Der Ressourcentyp, auf den Sie die Suche beschränken möchten. Nur IAM-Richtlinien, die an diese Ressource und ihre Nachfolger angehängt sind, werden analysiert. Verwende den Wert project, folder oder organization.
  • RESOURCE_ID: Die ID des Google Cloud-Projekts, des Ordners oder der Organisation, auf die/die Ihre Suche angewendet werden soll. Nur IAM-Richtlinien, die an diese Ressource und ihre Nachfolger angehängt sind, werden analysiert. Projekt-IDs sind alphanumerische Strings, wie my-project. Ordner- und Organisations-IDs sind numerisch, z. B. 123456789012.
  • PRINCIPAL: Das Hauptkonto, dessen Zugriff Sie analysieren möchten, im Format PRINCIPAL_TYPE:ID, z. B. user:my-user@example.com. Eine vollständige Liste der Hauptkontotypen finden Sie unter Hauptkennungen.
  • 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, wird im Policy Analyzer eine der aufgeführten Berechtigungen gesucht.
  • DATASET: Das BigQuery-Dataset im Format projects/PROJECT_ID/datasets/DATASET_ID, wobei PROJECT_ID die alphanumerische ID Ihres Google Cloud-Projekts und DATASET_ID die ID Ihres Datasets ist.
  • TABLE_PREFIX: Das Präfix der BigQuery-Tabellen, in die die Analyseergebnisse geschrieben werden. Wenn eine Tabelle mit dem angegebenen Präfix nicht vorhanden ist, erstellt BigQuery eine neue Tabelle.
  • PARTITION_KEY: optional. Der Partitionsschlüssel für partitionierte BigQuery-Tabelle. Policy Analyzer unterstützt nur REQUEST_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 unter writeDisposition. Wenn die Tabelle oder Partition bereits vorhanden ist, werden die Daten in BigQuery standardmäßig an die Tabelle oder die letzte Partition angehängt.

Führen Sie den Befehl gcloud asset analytics-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

Wenn Sie eine IAM-Zulassungsrichtlinie analysieren und die Ergebnisse nach BigQuery exportieren möchten, verwenden Sie die Methode analyzeIamPolicyLongrunning der Cloud Asset Inventory API.

Bevor Sie eine der Anfragedaten verwenden, nehmen Sie folgende Ersetzungen vor:

  • RESOURCE_TYPE: Der Ressourcentyp, auf den Sie die Suche beschränken möchten. Nur IAM-Richtlinien, die an diese Ressource und ihre Nachfolger angehängt sind, werden analysiert. Verwende den Wert projects, folders oder organizations.
  • RESOURCE_ID: Die ID des Google Cloud-Projekts, des Ordners oder der Organisation, auf die/die Ihre Suche angewendet werden soll. Nur IAM-Richtlinien, die an diese Ressource und ihre Nachfolger angehängt sind, werden analysiert. Projekt-IDs sind alphanumerische Strings, wie my-project. Ordner- und Organisations-IDs sind numerisch, z. B. 123456789012.
  • FULL_RESOURCE_NAME: optional. Der vollständige Ressourcenname der Ressource, für die Sie den Zugriff analysieren möchten. Eine Liste der vollständigen Ressourcennamenformate finden Sie unter Ressourcennamen.
  • PRINCIPAL: optional. Das Hauptkonto, dessen Zugriff Sie analysieren möchten, im Format PRINCIPAL_TYPE:ID, z. B. user:my-user@example.com. Eine vollständige Liste der Hauptkontotypen finden Sie unter Hauptkennungen.
  • 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, ermittelt das Policy Analyzer eine der aufgeführten Berechtigungen.
  • DATASET: Das BigQuery-Dataset im Format projects/PROJECT_ID/datasets/DATASET_ID, wobei PROJECT_ID die alphanumerische ID Ihres Google Cloud-Projekts und DATASET_ID die ID Ihres Datasets ist.
  • TABLE_PREFIX: Das Präfix der BigQuery-Tabellen, in die die Analyseergebnisse geschrieben werden. Wenn eine Tabelle mit dem angegebenen Präfix nicht vorhanden ist, erstellt BigQuery eine neue Tabelle.
  • PARTITION_KEY: optional. Der Partitionsschlüssel für partitionierte BigQuery-Tabelle. Policy Analyzer unterstützt nur REQUEST_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 unter writeDisposition. Wenn die Tabelle oder Partition bereits vorhanden ist, werden die Daten in BigQuery standardmäßig an die Tabelle oder die letzte Partition angehängt.

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"
  }
}

IAM-Richtlinienanalyseergebnisse aufrufen

So rufen Sie die Analyse der IAM-Richtlinien auf:

Console

  1. Rufen Sie in der Cloud Console die Seite „BigQuery“ auf.
    Zur Seite "BigQuery"

  2. Um die Tabellen und Ansichten im Dataset anzuzeigen, öffnen Sie den Navigationsbereich. Wählen Sie im Abschnitt Ressourcen Ihr Projekt aus, um es zu maximieren, und wählen Sie dann ein Dataset aus.

  3. Wählen Sie in der Liste die Tabellen mit Ihrem Präfix aus. Die Tabelle mit dem Suffix analysis enthält die Abfrage und die Metadaten(z. B. Name des Vorgangs, Zeitpunkt der Anfrage, nicht kritische Fehler). Die Tabelle mit dem Suffix analysis_result ist das Ergebnis der Auflistung von Tupel von {identity, role(s)/permission(s), resource} zusammen mit IAM-Richtlinien, die diese Tupel generieren.

  4. Um einen Beispieldatensatz anzuzeigen, wählen Sie Vorschau aus.

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
;