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 Prozess ähnelt der IAM-Richtlinien analysieren mit Ausnahme der Analyseergebnisse werden in BigQuery-Tabellen geschrieben.

Hinweise

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. Dabei muss es sich nicht um die Ressource handeln, auf die Sie den Bereich der Abfrage beschränken.

Erforderliche Rollen und Berechtigungen

Die folgenden Rollen und Berechtigungen sind zum Ausführen einer Richtlinienanalyse und und exportieren Sie die Ergebnisse nach BigQuery.

Erforderliche IAM-Rollen

Um die Berechtigungen zu erhalten, die Sie zum Analysieren einer Richtlinie und Exportieren der Ergebnisse in BigQuery bitten Sie Ihren Administrator, Ihnen folgenden IAM-Rollen für das Projekt, den Ordner oder die Organisation, die Sie festlegen an:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.

Diese vordefinierten Rollen enthalten die erforderlichen Berechtigungen zum Analysieren einer Richtlinie und zum Exportieren der Ergebnisse nach BigQuery 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 zu exportieren BigQuery:

  • 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 analysieren Sie Richtlinien mit der Google Cloud CLI: 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 damit bestimmte Rollen oder Berechtigungen hat ihrer Mitgliedschaft in einer Google Workspace-Gruppe benötigen Sie die groups.read Google Workspace-Berechtigung. Diese Berechtigung ist im Google Groups-Leser enthalten. Administratorrolle und in leistungsstärkeren Rollen wie Gruppenadministrator oder Super Admin Rollen. Weitere Informationen finden Sie unter Bestimmte Administratorrollen zuweisen. Informationen.

Richtlinien analysieren und Ergebnisse exportieren

Console

  1. Rufen Sie in der Google Cloud Console die Seite „Policy Analyzer“ auf.

    Policy Analyzer aufrufen

  2. Suchen Sie im Bereich Richtlinien analysieren die Abfragevorlage, die Sie verwenden möchten, Klicken Sie dann auf Abfrage erstellen. Wenn Sie eine benutzerdefinierte Abfrage erstellen möchten, klicken Sie auf Benutzerdefinierte Abfrage erstellen

  3. 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.

  4. Stellen Sie sicher, dass Ihre Suchparameter festgelegt sind:

    • Wenn Sie eine Abfragevorlage verwenden, prüfen Sie die vorausgefüllten Abfrageparameter.
    • Wenn Sie eine benutzerdefinierte Abfrage erstellen, legen Sie die Ressourcen, Hauptkonten, Rollen und Berechtigungen, die Sie abfragen möchten.

    Weitere Informationen zu den Abfragetypen, die Sie erstellen können, finden Sie unter IAM-Richtlinien analysieren

  5. In dem Bereich mit dem Namen der Abfrage Klicken Sie auf Analysieren > Nur Ergebnis exportieren. Die Funktion Export .

  6. Geben Sie im Abschnitt Exportziel festlegen die folgenden Informationen ein:

    • Projekt: Das Projekt, in dem sich Ihr BigQuery-Dataset befindet. befindet.
    • Dataset: Das BigQuery-Dataset, das Sie exportieren möchten. Ergebnisse angezeigt.
    • Tabelle: Das Präfix der BigQuery-Tabellen, für die die Analyseergebnisse vorliegen werden geschrieben. Wenn keine Tabelle mit dem angegebenen Präfix vorhanden ist, BigQuery erstellt eine neue Tabelle.
  7. Klicken Sie auf Weiter.

  8. Optional: Wählen Sie im Bereich Weitere Einstellungen konfigurieren das gewünschte die gewünschten Optionen:

    • Partitionierung: Gibt an, ob die Tabelle partitioniert werden soll. Weitere Informationen über siehe Einführung in partitionierte Tabellen Tabellen.
    • Schreibeinstellung: Gibt die Aktion an, die eintritt, wenn das Ziel Tabelle oder Partition ist bereits vorhanden. Wenn die Tabelle oder Partition bereits vorhanden ist, hängt BigQuery die Daten an die Tabelle oder der neuesten Partition.
  9. Klicken Sie auf Exportieren.

Policy Analyzer führt Ihre Abfrage aus und exportiert die Ergebnisse in den die angegebene Tabelle enthält.

gcloud

Methode AnalyzeIamPolicyLongrunning können Sie eine Analyseanfrage senden und Ergebnisse im BigQuery-Ziel.

Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

  • RESOURCE_TYPE: Der Typ der Ressource, auf die Sie die Suche beschränken möchten. Nur IAM-Zulassungsrichtlinien die an diese Ressource und ihre Nachfolger angehängt sind, analysiert werden. Wert verwenden project, folder oder organization.
  • RESOURCE_ID: Die ID des Google Cloud-Projekt, -Ordner oder -Organisation, auf das bzw. die Sie die Suche beschränken möchten. Nur An diese Ressource und ihre Nachfolger gebundene IAM-Zulassungsrichtlinien werden analysiert. Projekt-IDs sind alphanumerische Strings, wie my-project. Ordner- und Organisations-IDs sind numerisch, z. B. 123456789012.
  • PRINCIPAL: das Hauptkonto, dessen die Sie analysieren möchten, in der Form PRINCIPAL_TYPE:ID, z. B. user:my-user@example.com Eine vollständige Liste der Haupttypen finden Sie unter Haupt-IDs.
  • PERMISSIONS: A kommagetrennte Liste der Berechtigungen, die Sie prüfen möchten, z. B. compute.instances.get,compute.instances.start. Wenn Sie mehrere überprüft Policy Analyzer nach allen aufgeführten Berechtigungen.
  • DATASET: Das BigQuery-Dataset im Format projects/PROJECT_ID/datasets/DATASET_ID, wobei PROJECT_ID ist die alphanumerische ID Ihres Google Cloud-Projekts und DATASET_ID ist die ID des Datasets.
  • TABLE_PREFIX: Das Präfix des BigQuery-Tabellen, in die die Analyseergebnisse geschrieben werden. Wenn eine Tabelle mit dem angegebenes Präfix nicht vorhanden ist, erstellt BigQuery eine neue Tabelle.
  • PARTITION_KEY: Optional. Partitionierungsschlüssel für Nach BigQuery partitionierte Tabelle. Policy Analyzer unterstützt nur REQUEST_TIME-Partitionsschlüssel.
  • WRITE_DISPOSITION: Optional. Angaben Die Aktion, die auftritt, wenn die Zieltabelle oder -partition bereits vorhanden ist. Eine Liste möglicher finden Sie unter writeDisposition. Wenn die Tabelle oder Partition bereits vorhanden ist, hängt BigQuery die Daten standardmäßig an der Tabelle oder der letzten Partition.
<ph type="x-smartling-placeholder">

Führen Sie den gcloud asset Analyzer-iam-policy-longrunning Befehl:

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

Methode AnalyzeIamPolicyLongrunning können Sie eine Analyseanfrage senden und Ergebnisse im BigQuery-Ziel.

Analysieren Sie eine IAM-Zulassungsrichtlinie und exportieren Sie die Ergebnisse nach BigQuery, verwenden Sie die analyzeIamPolicyLongrunning .

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • RESOURCE_TYPE: Der Typ der Ressource, auf die Sie die Suche beschränken möchten. Nur IAM-Zulassungsrichtlinien die an diese Ressource und ihre Nachfolger angehängt sind, analysiert werden. Wert verwenden projects, folders oder organizations.
  • RESOURCE_ID: Die ID des Google Cloud-Projekt, -Ordner oder -Organisation, auf das bzw. die Sie die Suche beschränken möchten. Nur An diese Ressource und ihre Nachfolger gebundene IAM-Zulassungsrichtlinien 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, die deren Zugriff Sie analysieren möchten. Eine Liste aller Formate für Ressourcennamen finden Sie unter Format des Ressourcennamens:
  • 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 Haupttypen finden Sie unter Haupt-IDs.
  • 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 allen aufgeführten Berechtigungen.
  • DATASET: Das BigQuery-Dataset im Format projects/PROJECT_ID/datasets/DATASET_ID, wobei PROJECT_ID ist die alphanumerische ID Ihres Google Cloud-Projekts und DATASET_ID ist die ID des Datasets.
  • TABLE_PREFIX: Das Präfix des BigQuery-Tabellen, in die die Analyseergebnisse geschrieben werden. Wenn eine Tabelle mit dem angegebenes Präfix nicht vorhanden ist, erstellt BigQuery eine neue Tabelle.
  • PARTITION_KEY: Optional. Partitionierungsschlüssel für Nach BigQuery partitionierte Tabelle. Policy Analyzer unterstützt nur REQUEST_TIME-Partitionsschlüssel.
  • WRITE_DISPOSITION: Optional. Angaben Die Aktion, die auftritt, wenn die Zieltabelle oder -partition bereits vorhanden ist. Eine Liste möglicher finden Sie unter writeDisposition. Wenn die Tabelle oder Partition bereits vorhanden ist, hängt BigQuery die Daten standardmäßig an der Tabelle oder der letzten Partition.
<ph type="x-smartling-placeholder">

HTTP-Methode und URL:

POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicyLongrunning

JSON-Text anfordern:

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

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    Zu BigQuery

  2. 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 klicken Sie dann wählen Sie ein Dataset aus.

  3. Wählen Sie in der Liste die Tabellen mit Ihrem Präfix aus. Die Tabelle mit einem Das Suffix analysis enthält die Abfrage und die Metadaten, z. B. den Vorgang Name, Anfragezeit und nicht kritische Fehler). Die Tabelle mit Das Suffix analysis_result ist die Ergebnisauflistung der Tupel von {identity, role(s)/permission(s), resource} zusammen mit IAM-Richtlinien, die diese Tupel generieren

  4. Wählen Sie den Tab Vorschau aus, um einen Beispieldatensatz zu sehen.

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 SQL-Beispielabfragen, die Ihnen zeigen, wie Sie BigQuery-Tabellen, die von AnalyzeIamPolicyLongrunning geschrieben wurden. Weitere Informationen 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
;