En esta página, se explica cómo ver, comprender y aplicar las recomendaciones de roles de IAM para los conjuntos de datos de BigQuery. Las recomendaciones de roles 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
Enable the IAM and Recommender APIs.
Aprende sobre las recomendaciones de funciones.
Roles de IAM obligatorios
Para 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:
-
Visualizador de roles (
roles/iam.roleViewer
) en tu proyecto -
Administrador del recomendador de IAM (
roles/recommender.iamAdmin
) en tu proyecto -
Propietario de datos de BigQuery (
roles/bigquery.dataOwner
) en tu conjunto de datos
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
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 recomendaciones, sigue estos pasos:
-
recommender.iamPolicyRecommendations.update
en tu proyecto -
bigquery.datasets.setIamPolicy
en tu conjunto de datos
-
También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.
Revisa y aplica recomendaciones
Puedes revisar y aplicar recomendaciones de roles a nivel del conjunto de datos con Google Cloud CLI y la API de Recommender.
gcloud
Revisa las recomendaciones:
Para enumerar tus recomendaciones a nivel del conjunto de datos, ejecuta el comando gcloud recommender recommendations list
y filtra solo las recomendaciones de conjuntos 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 tus conjuntos de datos de Cloud Storage, por ejemplo,us
ous-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, comomy-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, este rol 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:
Usa el comando
gcloud recommender recommendations mark-claimed
para cambiar el estado de la recomendación aCLAIMED,
, 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 camponame
en la recomendación. Por ejemplo, si el camponame
esprojects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f
, el ID de recomendación esfb927dc1-9695-4436-0000-f0f285007c0f
. -
LOCATION
: Es la región en la que se encuentra tu conjunto de datos de BigQuery, por ejemplo,us
ous-central1
. -
PROJECT_ID
: Es el ID del proyecto de Google Cloud que contiene tus conjuntos de datos de BigQuery. Los IDs de proyecto son cadenas alfanuméricas, comomy-project
. -
FORMAT
: El formato de la respuesta. Usajson
oyaml
-
ETAG
: El valor del campoetag
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 campostateInfo.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" } ...
-
Obtén la política de permisos para el conjunto de datos y, luego, modifica y establece la política de permisos para que refleje la recomendación.
Actualiza el estado de la recomendación a
SUCCEEDED
, si pudiste aplicar la recomendación, oFAILED
, 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
: Usamark-succeeded
si pudiste aplicar la recomendación omark-failed
si no pudiste aplicarla.-
RECOMMENDATION_ID
: El identificador único de la recomendación. Este valor aparece al final del camponame
en la recomendación. Por ejemplo, si el camponame
esprojects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f
, el ID de recomendación esfb927dc1-9695-4436-0000-f0f285007c0f
. -
LOCATION
: Es la región en la que se encuentra tu conjunto de datos de BigQuery, por ejemplo,us
ous-central1
. -
PROJECT_ID
: Es el ID del proyecto de Google Cloud que contiene tus conjuntos de datos de BigQuery. Los IDs de proyecto son cadenas alfanuméricas, comomy-project
. -
FORMAT
: El formato de la respuesta. Usajson
oyaml
-
ETAG
: El valor del campoetag
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 campostateInfo.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:
Para enumerar todas las recomendaciones disponibles para tus conjuntos de datos de BigQuery, usa el método recommendations.list
de la API de Recommender.
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, comomy-project
.LOCATION
: Es la región en la que se encuentran tus conjuntos de datos de BigQuery, por ejemplo,us
ous-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, comomy-project
.
Método HTTP y 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, este rol no se usó en los últimos 90 días. Como resultado, la recomendación de función sugiere que revoques la función:
{ "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:
Marca la recomendación como
CLAIMED
:Para marcar una recomendación como
CLAIMED
, lo que evita que la recomendación cambie mientras la aplicas, usa el métodorecommendations.markClaimed
de la API de Recommender.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, comomy-project
.LOCATION
: Es la región en la que se encuentra tu conjunto de datos de BigQuery, por ejemplo,us
ous-central1
.RECOMMENDATION_ID
: El identificador único de la recomendación. Este valor aparece al final del camponame
en la recomendación. Por ejemplo, si el camponame
esprojects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f
, el ID de recomendación esfb927dc1-9695-4436-0000-f0f285007c0f
.ETAG
: El valor del campoetag
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 campostateInfo.stateMetadata
en la recomendación.
Método HTTP y 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", ...
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.
Actualiza el estado de la recomendación a
SUCCEEDED
, si pudiste aplicar la recomendación, oFAILED
, si no pudiste aplicarla:SUCCEEDED
Para marcar una recomendación como
SUCCEEDED
, lo que indica que pudiste aplicarla, usa el métodorecommendations.markSucceeded
de la API de Recommender.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, comomy-project
.LOCATION
: Es la región en la que se encuentra tu conjunto de datos de BigQuery, por ejemplo,us
ous-central1
.RECOMMENDATION_ID
: El identificador único de la recomendación. Este valor aparece al final del camponame
en la recomendación. Por ejemplo, si el camponame
esprojects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f
, el ID de recomendación esfb927dc1-9695-4436-0000-f0f285007c0f
.ETAG
: El valor del campoetag
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 campostateInfo.stateMetadata
en la recomendación.
Método HTTP y 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étodorecommendations.markFailed
de la API de Recommender.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, comomy-project
.LOCATION
: Es la región en la que se encuentra tu conjunto de datos de BigQuery, por ejemplo,us
ous-central1
.RECOMMENDATION_ID
: El identificador único de la recomendación. Este valor aparece al final del camponame
en la recomendación. Por ejemplo, si el camponame
esprojects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f
, el ID de recomendación esfb927dc1-9695-4436-0000-f0f285007c0f
.ETAG
: El valor del campoetag
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 campostateInfo.stateMetadata
en la recomendación.
Método HTTP y 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", ...
Comprende 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:
- Copia el ID de la estadística asociada. El ID es todo lo que se encuentra después de
insights/
en el campoinsight
. Por ejemplo, si el campoinsight
diceprojects/123456789012/locations/us/insightTypes/google.iam.policy.Insight/insights/7849add9-73c0-419e-b169-42b3671173fb
, el ID de la estadística es7849add9-73c0-419e-b169-42b3671173fb
. - Sigue las instrucciones para obtener una estadística de política con el ID de estadística que copiaste.
¿Qué sigue?
- Obtén más información sobre el recomendador.
- Obtén información para usar las estadísticas de la política de permisos para conjuntos de datos de BigQuery.