Revisar y aplicar recomendaciones de roles para los conjuntos de datos de BigQuery

En esta página, se explica cómo ver, comprender y aplicar las recomendaciones de funciones de IAM para los conjuntos de datos de BigQuery. Las recomendaciones de funciones te ayudan a aplicar el principio de privilegio mínimo, ya que garantizan que las principales solo tengan los permisos que en verdad necesitan.

Antes de comenzar

Roles de IAM obligatorios

Si quieres obtener los permisos que necesitas para administrar las recomendaciones de roles a nivel del conjunto de datos, pídele a tu administrador que te otorgue los siguientes roles de IAM:

Si quieres obtener más información para otorgar funciones, consulta Administra el acceso.

Estos roles predefinidos contienen los permisos necesarios para administrar las recomendaciones de roles a nivel del conjunto de datos. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para administrar las recomendaciones de roles a nivel del conjunto de datos:

  • Para ver las recomendaciones, haz lo siguiente:
    • iam.roles.get en tu proyecto
    • iam.roles.list en tu proyecto
    • recommender.iamPolicyRecommendations.get en tu proyecto
    • recommender.iamPolicyRecommendations.list en tu proyecto
    • recommender.iamPolicyInsights.get en tu proyecto
    • recommender.iamPolicyInsights.list en tu proyecto
    • bigquery.datasets.getIamPolicy en tu conjunto de datos
  • Para aplicar y descartar las recomendaciones, haz lo siguiente:
    • recommender.iamPolicyRecommendations.update en tu proyecto
    • bigquery.datasets.setIamPolicy en tu conjunto de datos

Es posible que también puedas obtener estos permisos con funciones personalizadas o con otras funciones predefinidas.

Revisa y aplica recomendaciones

Puedes revisar y aplicar recomendaciones de roles a nivel de conjunto de datos con Google Cloud CLI y la API de Recommender.

gcloud

Revisa las recomendaciones:

Para enumerar tus recomendaciones a nivel de conjunto de datos, ejecuta el comando gcloud recommender recommendations list y filtra solo las recomendaciones de conjunto de datos de 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"

Reemplaza los siguientes valores:

  • LOCATION: Es la región en la que se encuentran los conjuntos de datos de Cloud Storage, por ejemplo, us o us-central1.
  • PROJECT_ID: Es el ID del proyecto de Google Cloud que contiene tus conjuntos de datos de BigQuery. Los ID de proyecto son strings alfanuméricas, como my-project.

La respuesta es similar al ejemplo a continuación. En este ejemplo, todos los usuarios con el rol de editor en el proyecto my-project (projectEditor:my-project) tienen el rol de editor de datos de BigQuery (roles/bigquery.dataEditor) en el conjunto de datos dataset-1. Sin embargo, esta función no se usó en los últimos 90 días. Como resultado, la recomendación de función sugiere que revoques el rol:

[
  {
    "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"
    ]
  }
]

Revisa cada recomendación con atención y considera cómo cambiará el acceso de las principales a los recursos de Google Cloud. Para aprender a revisar las recomendaciones de la CLI de gcloud, consulta Revisa las recomendaciones en esta página.

Para aplicar una recomendación, sigue estos pasos:

  1. Usa el comando gcloud recommender recommendations mark-claimed para cambiar el estado de la recomendación a CLAIMED,, lo que evita que la recomendación cambie mientras la aplicas:

    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
    

    Reemplaza los siguientes valores:

    • RECOMMENDATION_ID: El identificador único de la recomendación. Este valor aparece al final del campo name en la recomendación. Por ejemplo, si el campo name es projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, el ID de recomendación es fb927dc1-9695-4436-0000-f0f285007c0f.
    • LOCATION: Es la región en la que se encuentra el conjunto de datos de BigQuery, por ejemplo, us o us-central1.
    • PROJECT_ID: Es el ID del proyecto de Google Cloud que contiene tus conjuntos de datos de BigQuery. Los ID del proyecto son strings alfanuméricas, como my-project.
    • FORMAT: El formato de la respuesta. Usa json o yaml
    • ETAG: El valor del campo etag en la recomendación, como "dd0686e7136a4cbb". Ten en cuenta que este valor puede incluir comillas
    • STATE_METADATA: Opcional. Pares clave-valor separados por comas que contienen la selección de metadatos sobre la recomendación. Por ejemplo: --state-metadata=reviewedBy=alice,priority=high. Los metadatos reemplazan el campo stateInfo.stateMetadata en la recomendación.

    Si el comando se ejecuta de forma correcta, la respuesta muestra la recomendación en un estado CLAIMED, como se muestra en el siguiente ejemplo. Para mayor claridad, en el ejemplo, se omiten la mayoría de los campos:

    ...
    "priority": "P1",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    "stateInfo": {
      "state": "CLAIMED"
    }
    ...
    
  2. Obtén la política de permisos del conjunto de datos y, luego, modifica y establece la política de permisos para que refleje la recomendación.

  3. Actualiza el estado de la recomendación a SUCCEEDED, si pudiste aplicar la recomendación, o FAILED, si no pudiste aplicarla:

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

    Reemplaza los siguientes valores:

    • COMMAND: Usa mark-succeeded si pudiste aplicar la recomendación o mark-failed si no pudiste aplicarla.
    • RECOMMENDATION_ID: El identificador único de la recomendación. Este valor aparece al final del campo name en la recomendación. Por ejemplo, si el campo name es projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, el ID de recomendación es fb927dc1-9695-4436-0000-f0f285007c0f.
    • LOCATION: Es la región en la que se encuentra el conjunto de datos de BigQuery, por ejemplo, us o us-central1.
    • PROJECT_ID: Es el ID del proyecto de Google Cloud que contiene tus conjuntos de datos de BigQuery. Los ID del proyecto son strings alfanuméricas, como my-project.
    • FORMAT: El formato de la respuesta. Usa json o yaml
    • ETAG: El valor del campo etag en la recomendación, como "dd0686e7136a4cbb". Ten en cuenta que este valor puede incluir comillas
    • STATE_METADATA: Opcional. Pares clave-valor separados por comas que contienen la selección de metadatos sobre la recomendación. Por ejemplo: --state-metadata=reviewedBy=alice,priority=high. Los metadatos reemplazan el campo stateInfo.stateMetadata en la recomendación.

    Por ejemplo, si marcaste la recomendación como correcta, la respuesta muestra la recomendación en un estado SUCCEEDED. Para mayor claridad, en este ejemplo, se omiten la mayoría de los campos:

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

REST

En estas instrucciones, se supone que autenticaste y configuraste la variable de entorno GOOGLE_APPLICATION_CREDENTIALS.

Revisa las recomendaciones:

Si deseas enumerar todas las recomendaciones disponibles para tus conjuntos de datos de BigQuery, usa el método recommendations.list de la API de recomendador.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: Es el ID del proyecto de Google Cloud que contiene tus conjuntos de datos de BigQuery. Los ID de proyecto son strings alfanuméricas, como my-project.
  • LOCATION: Es la región en la que se encuentran los conjuntos de datos de BigQuery, por ejemplo, us o us-central1.
  • PAGE_SIZE: Opcional La cantidad máxima de resultados que se mostrarán con esta solicitud. Si no se especifica, el servidor determinará la cantidad de resultados que se mostrarán. Si la cantidad de recomendaciones es mayor que el tamaño de la página, la respuesta contiene un token de paginación que puedes usar para recuperar la siguiente página de resultados.
  • PAGE_TOKEN: Opcional Es el token de paginación que se mostró en una respuesta anterior de este método. Si se especifica, la lista de recomendaciones comenzará donde finalizó la solicitud anterior.
  • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-project.

HTTP method and 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

Para enviar tu solicitud, expande una de estas opciones:

La respuesta es similar al ejemplo a continuación. En este ejemplo, todos los usuarios con el rol de editor en el proyecto “my-project” (projectEditor:my-project) tienen el rol de editor de datos de BigQuery (roles/bigquery.dataEditor) en el conjunto de datos dataset-1. Sin embargo, esta función no se ha usado en los últimos 90 días. Como resultado, la recomendación de rol sugiere que revoques el rol:

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

Revisa cada recomendación con atención y considera cómo cambiará el acceso de las principales a los recursos de Google Cloud. Para obtener información sobre cómo revisar las recomendaciones de la API de REST, consulta Revisa las recomendaciones en esta página.

Para aplicar una recomendación, sigue estos pasos:

  1. Marca la recomendación como CLAIMED:

    Para marcar una recomendación como CLAIMED, que evita que cambie mientras la aplicas, usa el método recommendations.markClaimed de la API de recomendador.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: Es el ID del proyecto de Google Cloud que contiene tus conjuntos de datos de BigQuery. Los ID de proyecto son strings alfanuméricas, como my-project.
    • LOCATION: Es la región en la que se encuentra el conjunto de datos de BigQuery, por ejemplo, us o us-central1.
    • RECOMMENDATION_ID: El identificador único de la recomendación. Este valor aparece al final del campo name en la recomendación. Por ejemplo, si el campo name es projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, el ID de recomendación es fb927dc1-9695-4436-0000-f0f285007c0f.
    • ETAG: El valor del campo etag en la recomendación, como "dd0686e7136a4cbb". Usa barras inversas para escapar las comillas, por ejemplo, "\"df7308cca9719dcc\"".
    • STATE_METADATA: Opcional Un objeto que contiene pares clave-valor con tu elección de metadatos sobre la recomendación. Por ejemplo, {"reviewedBy": "alice", "priority": "high"} Los metadatos reemplazan el campo stateInfo.stateMetadata en la recomendación.

    HTTP method and URL:

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

    Cuerpo JSON de la solicitud:

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

    Para enviar tu solicitud, expande una de estas opciones:

    La respuesta muestra la recomendación en un estado CLAIMED, como se muestra en el siguiente ejemplo. Para mayor claridad, en este ejemplo, se omiten la mayoría de los campos:

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

  2. Obtén la política de permisos para el proyecto y, luego, modifica la política de permisos a fin de que refleje la recomendación.

  3. Actualiza el estado de la recomendación a SUCCEEDED, si pudiste aplicar la recomendación, o FAILED, si no pudiste aplicarla:

    SUCCEEDED

    Para marcar una recomendación como SUCCEEDED, lo que indica que pudiste aplicarla, usa el método recommendations.markSucceeded de la API de recomendador.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: Es el ID del proyecto de Google Cloud que contiene tus conjuntos de datos de BigQuery. Los ID de proyecto son strings alfanuméricas, como my-project.
    • LOCATION: Es la región en la que se encuentra el conjunto de datos de BigQuery, por ejemplo, us o us-central1.
    • RECOMMENDATION_ID: El identificador único de la recomendación. Este valor aparece al final del campo name en la recomendación. Por ejemplo, si el campo name es projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, el ID de recomendación es fb927dc1-9695-4436-0000-f0f285007c0f.
    • ETAG: El valor del campo etag en la recomendación, como "dd0686e7136a4cbb". Usa barras inversas para escapar las comillas, por ejemplo, "\"df7308cca9719dcc\"".
    • STATE_METADATA: Opcional Un objeto que contiene pares clave-valor con tu elección de metadatos sobre la recomendación. Por ejemplo, {"reviewedBy": "alice", "priority": "high"} Los metadatos reemplazan el campo stateInfo.stateMetadata en la recomendación.

    HTTP method and URL:

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

    Cuerpo JSON de la solicitud:

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

    Para enviar tu solicitud, expande una de estas opciones:

    La respuesta muestra la recomendación en un estado SUCCEEDED, como se muestra en el siguiente ejemplo. Para mayor claridad, en este ejemplo, se omiten la mayoría de los campos:

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

    FAILED

    Para marcar una recomendación como FAILED, lo que indica que no pudiste aplicarla, usa el método recommendations.markFailed de la API de recomendador.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: Es el ID del proyecto de Google Cloud que contiene tus conjuntos de datos de BigQuery. Los ID de proyecto son strings alfanuméricas, como my-project.
    • LOCATION: Es la región en la que se encuentra el conjunto de datos de BigQuery, por ejemplo, us o us-central1.
    • RECOMMENDATION_ID: El identificador único de la recomendación. Este valor aparece al final del campo name en la recomendación. Por ejemplo, si el campo name es projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, el ID de recomendación es fb927dc1-9695-4436-0000-f0f285007c0f.
    • ETAG: El valor del campo etag en la recomendación, como "dd0686e7136a4cbb". Usa barras inversas para escapar las comillas, por ejemplo, "\"df7308cca9719dcc\"".
    • STATE_METADATA: Opcional Un objeto que contiene pares clave-valor con tu elección de metadatos sobre la recomendación. Por ejemplo, {"reviewedBy": "alice", "priority": "high"} Los metadatos reemplazan el campo stateInfo.stateMetadata en la recomendación.

    HTTP method and URL:

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

    Cuerpo JSON de la solicitud:

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

    Para enviar tu solicitud, expande una de estas opciones:

    La respuesta muestra la recomendación en un estado FAILED, como se muestra en el siguiente ejemplo. Para mayor claridad, en este ejemplo, se omiten la mayoría de los campos:

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

Información sobre las recomendaciones

Cada recomendación incluye información para ayudarte a comprender por qué se hizo la recomendación.

Para obtener detalles sobre los campos de una recomendación, consulta la referencia de Recommendation.

Para ver el uso de permisos en el que se basa esta recomendación, consulta las estadísticas de políticas asociadas con la recomendación. Estas estadísticas se enumeran en el campo associatedInsights. Para ver una estadística de políticas asociada con la recomendación, haz lo siguiente:

  1. Copia el ID de la estadística asociado. El ID es todo lo que se encuentra después de insights/ en el campo insight. Por ejemplo, si el campo insight lee projects/123456789012/locations/us/insightTypes/google.iam.policy.Insight/insights/7849add9-73c0-419e-b169-42b3671173fb, el ID de estadística es 7849add9-73c0-419e-b169-42b3671173fb.
  2. Sigue las instrucciones para obtener una estadística de política con el ID de estadística que copiaste.

¿Qué sigue?