Esamina e applica i suggerimenti sui ruoli per i set di dati BigQuery

Questa pagina spiega come visualizzare, comprendere e applicare i suggerimenti sui ruoli IAM per i set di dati BigQuery. I suggerimenti sui ruoli ti aiutano ad applicare il principio del privilegio minimo garantendo che le entità dispongano solo delle autorizzazioni di cui hanno effettivamente bisogno.

Prima di iniziare

Ruoli IAM richiesti

Per ottenere le autorizzazioni necessarie per gestire i suggerimenti sui ruoli a livello di set di dati, chiedi all'amministratore di concederti i seguenti ruoli IAM:

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per gestire i suggerimenti sui ruoli a livello di set di dati. Per visualizzare esattamente le autorizzazioni necessarie, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per gestire i suggerimenti sui ruoli a livello di set di dati sono necessarie le seguenti autorizzazioni:

  • Per visualizzare i suggerimenti:
    • iam.roles.get nel tuo progetto
    • iam.roles.list nel tuo progetto
    • recommender.iamPolicyRecommendations.get nel tuo progetto
    • recommender.iamPolicyRecommendations.list nel tuo progetto
    • recommender.iamPolicyInsights.get nel tuo progetto
    • recommender.iamPolicyInsights.list nel tuo progetto
    • bigquery.datasets.getIamPolicy sul tuo set di dati
  • Per applicare e ignorare i consigli:
    • recommender.iamPolicyRecommendations.update nel tuo progetto
    • bigquery.datasets.setIamPolicy sul tuo set di dati

Potresti anche riuscire a ottenere queste autorizzazioni con i ruoli personalizzati o altri ruoli predefiniti.

Revisione e applicazione dei suggerimenti

Puoi esaminare e applicare i suggerimenti sul ruolo a livello di set di dati con Google Cloud CLI e l'API Recommender.

gcloud

Esamina i consigli:

Per elencare i suggerimenti a livello di set di dati, esegui il comando gcloud recommender recommendations list, filtrando solo i suggerimenti per i set di dati BigQuery:

gcloud recommender recommendations list \
    --location=LOCATION \
    --recommender=google.iam.policy.Recommender \
    --project=PROJECT_ID \
    --format=json \
    --filter="recommenderSubtype:REMOVE_ROLE_BIGQUERY_DATASET OR recommenderSubtype:REPLACE_ROLE_BIGQUERY_DATASET"

Sostituisci i seguenti valori:

  • LOCATION: la regione in cui si trovano i set di dati Cloud Storage, ad esempio us o us-central1.
  • PROJECT_ID: l'ID del progetto Google Cloud che contiene i tuoi set di dati BigQuery. Gli ID progetto sono stringhe alfanumeriche, come my-project.

La risposta è simile all'esempio seguente. In questo esempio, tutti gli utenti con il ruolo Editor nel progetto my-project (projectEditor:my-project) hanno il ruolo Editor dati BigQuery (roles/bigquery.dataEditor) nel set di dati dataset-1. Tuttavia, questo ruolo non è stato utilizzato negli ultimi 90 giorni. Di conseguenza, il suggerimento sul ruolo ti suggerisce di revocare il ruolo:

[
  {
    "associatedInsights": [
      {
        "insight": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/984eccca-0241-472f-baab-2557dd0d7282"
      }
    ],
    "content": {
      "operationGroups": [
        {
          "operations": [
            {
              "action": "remove",
              "path": "/iamPolicy/bindings/*/members/*",
              "pathFilters": {
                "/iamPolicy/bindings/*/condition/expression": "",
                "/iamPolicy/bindings/*/members/*": "projectEditor:my-project",
                "/iamPolicy/bindings/*/role": "roles/bigquery.dataEditor"
              },
              "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1",
              "resourceType": "bigquery.googleapis.com/Dataset"
            }
          ]
        }
      ],
      "overview": {
        "addedRoles": [],
        "member": "projectEditor:my-project",
        "minimumObservationPeriodInDays": "0",
        "removedRole": "roles/bigquery.dataEditor",
        "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
      }
    },
    "description": "This role has not been used during the observation window.",
    "etag": "\"3b123bc08d028128\"",
    "lastRefreshTime": "2024-02-04T08:00:00Z",
    "name": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/0e9831fe-6810-476b-b14d-2b64bda17288",
    "primaryImpact": {
      "category": "SECURITY",
      "securityProjection": {
        "details": {
          "revokedIamPermissionsCount": 37
        }
      }
    },
    "priority": "P4",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    "stateInfo": {
      "state": "ACTIVE"
    },
    "targetResources": [
      "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
    ]
  },
  {
    "associatedInsights": [
      {
        "insight": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/9d11057e-9c71-410f-ad55-fc82d87761d0"
      }
    ],
    "content": {
      "operationGroups": [
        {
          "operations": [
            {
              "action": "remove",
              "path": "/iamPolicy/bindings/*/members/*",
              "pathFilters": {
                "/iamPolicy/bindings/*/condition/expression": "",
                "/iamPolicy/bindings/*/members/*": "user:alicexz@google.com",
                "/iamPolicy/bindings/*/role": "roles/bigquery.dataOwner"
              },
              "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1",
              "resourceType": "bigquery.googleapis.com/Dataset"
            }
          ]
        }
      ],
      "overview": {
        "addedRoles": [],
        "member": "user:alicexz@google.com",
        "minimumObservationPeriodInDays": "0",
        "removedRole": "roles/bigquery.dataOwner",
        "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
      }
    },
    "description": "This role has not been used during the observation window.",
    "etag": "\"1da285f7aa6438f1\"",
    "lastRefreshTime": "2024-02-04T08:00:00Z",
    "name": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/56013294-cf81-402a-8cde-25489545777c",
    "primaryImpact": {
      "category": "SECURITY",
      "securityProjection": {
        "details": {
          "revokedIamPermissionsCount": 64
        }
      }
    },
    "priority": "P4",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    "stateInfo": {
      "state": "ACTIVE"
    },
    "targetResources": [
      "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
    ]
  }
]

Esamina attentamente ogni suggerimento e valuta come modificherà l'accesso dell'entità alle risorse Google Cloud. Per scoprire come esaminare i suggerimenti da gcloud CLI, consulta la pagina Rivedi i suggerimenti in questa pagina.

Per applicare un consiglio:

  1. Utilizza il comando gcloud recommender recommendations mark-claimed per modificare lo stato del consiglio in CLAIMED,, in modo da impedire che il consiglio venga modificato durante l'applicazione:

    gcloud recommender recommendations mark-claimed \
        RECOMMENDATION_ID \
        --location=LOCATION \
        --recommender=google.iam.policy.Recommender \
        --project=PROJECT_ID \
        --format=FORMAT \
        --etag=ETAG \
        --state-metadata=STATE_METADATA
    

    Sostituisci i seguenti valori:

    • RECOMMENDATION_ID: l'identificatore univoco per il suggerimento. Questo valore viene visualizzato alla fine del campo name nel suggerimento. Ad esempio, se il campo name è projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, l'ID suggerimento è fb927dc1-9695-4436-0000-f0f285007c0f.
    • LOCATION: la regione in cui si trova il set di dati BigQuery, ad esempio us o us-central1.
    • PROJECT_ID: l'ID del progetto Google Cloud che contiene i tuoi set di dati BigQuery. Gli ID progetto sono stringhe alfanumeriche, come my-project.
    • FORMAT: il formato della risposta. Utilizza json o yaml.
    • ETAG: il valore del campo etag nel suggerimento, ad esempio "dd0686e7136a4cbb". Tieni presente che questo valore può includere le virgolette.
    • STATE_METADATA: facoltativo. Coppie chiave-valore separate da virgole che contengono metadati a tua scelta relativi al suggerimento. Ad esempio, --state-metadata=reviewedBy=alice,priority=high. I metadati sostituiscono il campo stateInfo.stateMetadata nel suggerimento.

    Se il comando ha esito positivo, la risposta mostra il suggerimento in stato CLAIMED, come mostrato nell'esempio seguente. Per chiarezza, nell'esempio sono omessi la maggior parte dei campi:

    ...
    "priority": "P1",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    "stateInfo": {
      "state": "CLAIMED"
    }
    ...
    
  2. Recupera il criterio di autorizzazione per il set di dati, quindi modifica e imposta il criterio di autorizzazione in modo che rifletta il suggerimento.

  3. Aggiorna lo stato del consiglio a SUCCEEDED, se hai potuto applicare il consiglio oppure a FAILED, se non hai potuto applicarlo:

    gcloud recommender recommendations COMMAND \
        RECOMMENDATION_ID \
        --location=LOCATION \
        --recommender=google.iam.policy.Recommender \
        --project=PROJECT_ID \
        --format=FORMAT \
        --etag=ETAG \
        --state-metadata=STATE_METADATA
    

    Sostituisci i seguenti valori:

    • COMMAND: utilizza mark-succeeded, se hai potuto applicare il consiglio, oppure mark-failed, se non puoi applicare il consiglio.
    • RECOMMENDATION_ID: l'identificatore univoco per il suggerimento. Questo valore viene visualizzato alla fine del campo name nel suggerimento. Ad esempio, se il campo name è projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, l'ID suggerimento è fb927dc1-9695-4436-0000-f0f285007c0f.
    • LOCATION: la regione in cui si trova il set di dati BigQuery, ad esempio us o us-central1.
    • PROJECT_ID: l'ID del progetto Google Cloud che contiene i tuoi set di dati BigQuery. Gli ID progetto sono stringhe alfanumeriche, come my-project.
    • FORMAT: il formato della risposta. Utilizza json o yaml.
    • ETAG: il valore del campo etag nel suggerimento, ad esempio "dd0686e7136a4cbb". Tieni presente che questo valore può includere le virgolette.
    • STATE_METADATA: facoltativo. Coppie chiave-valore separate da virgole che contengono metadati a tua scelta relativi al suggerimento. Ad esempio, --state-metadata=reviewedBy=alice,priority=high. I metadati sostituiscono il campo stateInfo.stateMetadata nel suggerimento.

    Ad esempio, se hai contrassegnato il consiglio come riuscito, la risposta mostra il consiglio nello stato SUCCEEDED. Per chiarezza, questo esempio omette la maggior parte dei campi:

    ...
    "priority": "P1",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    "stateInfo": {
      "state": "SUCCEEDED"
    }
    ...
    

REST

Queste istruzioni presuppongono che tu abbia eseguito l'autenticazione e impostato la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS.

Esamina i consigli:

Per elencare tutti i suggerimenti disponibili per i set di dati BigQuery, utilizza il metodo recommendations.list dell'API Recommender.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: l'ID del progetto Google Cloud che contiene i tuoi set di dati BigQuery. Gli ID progetto sono stringhe alfanumeriche, come my-project.
  • LOCATION: la regione in cui si trovano i tuoi set di dati BigQuery, ad esempio us o us-central1.
  • PAGE_SIZE: facoltativo. Il numero massimo di risultati da restituire da questa richiesta. Se non specificato, il server determinerà il numero di risultati da restituire. Se il numero di suggerimenti è superiore alla dimensione della pagina, la risposta contiene un token di impaginazione che puoi utilizzare per recuperare la pagina successiva dei risultati.
  • PAGE_TOKEN: facoltativo. Il token di impaginazione restituito in una risposta precedente di questo metodo. Se specificato, l'elenco dei suggerimenti inizierà dove è terminata la richiesta precedente.
  • PROJECT_ID: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.

Metodo HTTP e URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations?filter=recommenderSubtype%20%3D%20REMOVE_ROLE_BIGQUERY_DATASET%20OR%20recommenderSubtype%20%3D%20REPLACE_ROLE_BIGQUERY_DATASET&pageSize=PAGE_SIZE&pageToken=PAGE_TOKEN

Per inviare la richiesta, espandi una delle seguenti opzioni:

La risposta è simile all'esempio seguente. In questo esempio, tutti gli utenti con il ruolo Editor nel progetto "my-project" (projectEditor:my-project) hanno il ruolo Editor dati BigQuery (roles/bigquery.dataEditor) nel set di dati dataset-1. Tuttavia, questo ruolo non è stato utilizzato negli ultimi 90 giorni. Di conseguenza, il suggerimento sul ruolo ti suggerisce di revocare il ruolo:

{
  "recommendations": [
    {
      "name": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/0e9831fe-6810-476b-b14d-2b64bda17288",
      "description": "This role has not been used during the observation window.",
      "lastRefreshTime": "2024-02-02T08:00:00Z",
      "primaryImpact": {
        "category": "SECURITY",
        "securityProjection": {
          "details": {
            "revokedIamPermissionsCount": 37
          }
        }
      },
      "content": {
        "operationGroups": [
          {
            "operations": [
              {
                "action": "remove",
                "resourceType": "bigquery.googleapis.com/Dataset",
                "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1",
                "path": "/iamPolicy/bindings/*/members/*",
                "pathFilters": {
                  "/iamPolicy/bindings/*/condition/expression": "",
                  "/iamPolicy/bindings/*/members/*": "projectEditor:my-project",
                  "/iamPolicy/bindings/*/role": "roles/bigquery.dataEditor"
                }
              }
            ]
          }
        ],
        "overview": {
          "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1",
          "member": "projectEditor:my-project",
          "removedRole": "roles/bigquery.dataEditor",
          "addedRoles": [],
          "minimumObservationPeriodInDays": "0"
        }
      },
      "stateInfo": {
        "state": "ACTIVE"
      },
      "etag": "\"d008ad3780bad5e0\"",
      "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
      "associatedInsights": [
        {
          "insight": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/984eccca-0241-472f-baab-2557dd0d7282"
        }
      ],
      "priority": "P4",
      "targetResources": [
        "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
      ]
    }
  ]
}

Esamina attentamente ogni suggerimento e valuta come modificherà l'accesso dell'entità alle risorse Google Cloud. Per scoprire come esaminare i suggerimenti dell'API REST, consulta la pagina Esamina i consigli in questa pagina.

Per applicare un consiglio:

  1. Contrassegna il consiglio come CLAIMED:

    Per contrassegnare un suggerimento come CLAIMED, impedendone la modifica durante l'applicazione, utilizza il metodo recommendations.markClaimed dell'API Recommender.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del progetto Google Cloud che contiene i tuoi set di dati BigQuery. Gli ID progetto sono stringhe alfanumeriche, come my-project.
    • LOCATION: la regione in cui si trova il set di dati BigQuery, ad esempio us o us-central1.
    • RECOMMENDATION_ID: l'identificatore univoco del suggerimento. Questo valore viene visualizzato alla fine del campo name nel suggerimento. Ad esempio, se il campo name è projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, l'ID consiglio è fb927dc1-9695-4436-0000-f0f285007c0f.
    • ETAG: il valore del campo etag nel consiglio, ad esempio "dd0686e7136a4cbb". Utilizza le barre rovesciate per evitare le virgolette, ad esempio "\"df7308cca9719dcc\"".
    • STATE_METADATA: facoltativo. Un oggetto che contiene coppie chiave-valore con i metadati che preferisci relativi al suggerimento. Ad esempio, {"reviewedBy": "alice", "priority": "high"}. I metadati sostituiscono il campo stateInfo.stateMetadata nel suggerimento.

    Metodo HTTP e URL:

    POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markClaimed

    Corpo JSON della richiesta:

    {
      "etag": "ETAG",
      "stateMetadata": {
        "STATE_METADATA"
      }
    }
    

    Per inviare la richiesta, espandi una delle seguenti opzioni:

    La risposta mostra il suggerimento in stato CLAIMED, come mostrato nell'esempio seguente. Per chiarezza, in questo esempio ometti la maggior parte dei campi:

    ...
    "stateInfo": {
      "state": "CLAIMED"
    },
    "etag": "\"7caf4103d7669e12\"",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    ...
    

  2. Recupera il criterio di autorizzazione per il progetto, quindi modifica il criterio di autorizzazione in modo che rifletta il suggerimento.

  3. Aggiorna lo stato del consiglio a SUCCEEDED, se hai potuto applicare il consiglio oppure a FAILED, se non hai potuto applicarlo:

    SUCCEEDED

    Per contrassegnare un suggerimento come SUCCEEDED e indicare che è stato possibile applicarlo, utilizza il metodo recommendations.markSucceeded dell'API Recommender.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del progetto Google Cloud che contiene i tuoi set di dati BigQuery. Gli ID progetto sono stringhe alfanumeriche, come my-project.
    • LOCATION: la regione in cui si trova il set di dati BigQuery, ad esempio us o us-central1.
    • RECOMMENDATION_ID: l'identificatore univoco del suggerimento. Questo valore viene visualizzato alla fine del campo name nel suggerimento. Ad esempio, se il campo name è projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, l'ID consiglio è fb927dc1-9695-4436-0000-f0f285007c0f.
    • ETAG: il valore del campo etag nel consiglio, ad esempio "dd0686e7136a4cbb". Utilizza le barre rovesciate per evitare le virgolette, ad esempio "\"df7308cca9719dcc\"".
    • STATE_METADATA: facoltativo. Un oggetto che contiene coppie chiave-valore con i metadati che preferisci relativi al suggerimento. Ad esempio, {"reviewedBy": "alice", "priority": "high"}. I metadati sostituiscono il campo stateInfo.stateMetadata nel suggerimento.

    Metodo HTTP e URL:

    POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markSucceeded

    Corpo JSON della richiesta:

    {
      "etag": "ETAG",
      "stateMetadata": {
        "STATE_METADATA"
      }
    }
    

    Per inviare la richiesta, espandi una delle seguenti opzioni:

    La risposta mostra il suggerimento in stato SUCCEEDED, come mostrato nell'esempio seguente. Per chiarezza, in questo esempio ometti la maggior parte dei campi:

    ...
    "stateInfo": {
      "state": "SUCCEEDED"
    },
    "etag": "\"7caf4103d7669e12\"",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    ...
    

    FAILED

    Per contrassegnare un suggerimento come FAILED e indicare che non è stato possibile applicarlo, utilizza il metodo recommendations.markFailed dell'API Recommender.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del progetto Google Cloud che contiene i tuoi set di dati BigQuery. Gli ID progetto sono stringhe alfanumeriche, come my-project.
    • LOCATION: la regione in cui si trova il set di dati BigQuery, ad esempio us o us-central1.
    • RECOMMENDATION_ID: l'identificatore univoco del suggerimento. Questo valore viene visualizzato alla fine del campo name nel suggerimento. Ad esempio, se il campo name è projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, l'ID consiglio è fb927dc1-9695-4436-0000-f0f285007c0f.
    • ETAG: il valore del campo etag nel consiglio, ad esempio "dd0686e7136a4cbb". Utilizza le barre rovesciate per evitare le virgolette, ad esempio "\"df7308cca9719dcc\"".
    • STATE_METADATA: facoltativo. Un oggetto che contiene coppie chiave-valore con i metadati che preferisci relativi al suggerimento. Ad esempio, {"reviewedBy": "alice", "priority": "high"}. I metadati sostituiscono il campo stateInfo.stateMetadata nel suggerimento.

    Metodo HTTP e URL:

    POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markFailed

    Corpo JSON della richiesta:

    {
      "etag": "ETAG",
      "stateMetadata": {
        "STATE_METADATA"
      }
    }
    

    Per inviare la richiesta, espandi una delle seguenti opzioni:

    La risposta mostra il suggerimento in stato FAILED, come mostrato nell'esempio seguente. Per chiarezza, in questo esempio ometti la maggior parte dei campi:

    ...
    "stateInfo": {
      "state": "FAILED"
    },
    "etag": "\"7caf4103d7669e12\"",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    ...
    

Comprendere i consigli

Ogni suggerimento include informazioni che ti aiutano a capire perché è stato fatto.

Per maggiori dettagli sui campi di un suggerimento, consulta la documentazione di riferimento di Recommendation.

Per visualizzare l'utilizzo delle autorizzazioni su cui si basa questo suggerimento, visualizza gli approfondimenti sui criteri associati al suggerimento. Questi approfondimenti sono elencati nel campo associatedInsights. Per visualizzare un approfondimento sui criteri associato al suggerimento:

  1. Copia l'ID dell'insight associato. L'ID è tutto ciò che segue insights/ nel campo insight. Ad esempio, se il campo insight indica projects/123456789012/locations/us/insightTypes/google.iam.policy.Insight/insights/7849add9-73c0-419e-b169-42b3671173fb, l'ID approfondimento è 7849add9-73c0-419e-b169-42b3671173fb.
  2. Segui le istruzioni per ricevere un approfondimento sui criteri utilizzando l'ID insight che hai copiato.

Passaggi successivi