Nesta página, explicamos como visualizar, entender e aplicar recomendações de função do IAM para conjuntos de dados do BigQuery. As recomendações de papéis ajudam a aplicar o princípio de privilégio mínimo, garantindo que os participantes tenham apenas as permissões de que realmente precisam.
Antes de começar
Enable the IAM and Recommender APIs.
Entenda as recomendações por papel.
Papéis do IAM obrigatórios
Para conseguir as permissões necessárias para gerenciar recomendações de função no nível do conjunto de dados, peça ao administrador para conceder a você os seguintes papéis do IAM:
-
Leitor de papel (
roles/iam.roleViewer
) no projeto -
Administrador de recomendações do IAM (
roles/recommender.iamAdmin
) no projeto -
Proprietário de dados do BigQuery (
roles/bigquery.dataOwner
) no seu conjunto de dados
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Esses papéis predefinidos contêm as permissões necessárias para gerenciar recomendações de função no nível do conjunto de dados. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
As permissões a seguir são necessárias para gerenciar recomendações de função no nível do conjunto de dados:
-
Para conferir as recomendações:
-
iam.roles.get
no seu projeto -
iam.roles.list
no seu projeto -
recommender.iamPolicyRecommendations.get
no seu projeto -
recommender.iamPolicyRecommendations.list
no seu projeto -
recommender.iamPolicyInsights.get
no seu projeto -
recommender.iamPolicyInsights.list
no seu projeto -
bigquery.datasets.getIamPolicy
no conjunto de dados
-
-
Para aplicar e dispensar recomendações:
-
recommender.iamPolicyRecommendations.update
no seu projeto -
bigquery.datasets.setIamPolicy
no conjunto de dados
-
Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.
Analisar e aplicar recomendações
É possível analisar e aplicar recomendações de função no nível do conjunto de dados com a Google Cloud CLI e a API Recommender.
gcloud
Revisar suas recomendações:
Para listar as recomendações no nível do conjunto de dados, execute o comando
gcloud recommender recommendations list
, filtrando apenas as recomendações do conjunto de dados do 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"
Substitua os seguintes valores:
LOCATION
: a região em que seus conjuntos de dados do Cloud Storage estão localizados. Por exemplo,us
ouus-central1
.PROJECT_ID
: o ID do projeto do Google Cloud que contém seus conjuntos de dados do BigQuery. Os IDs do projeto são strings alfanuméricas, comomy-project
.
A resposta é semelhante ao exemplo a seguir. Neste exemplo, todos os usuários
com a função de editor no projeto my-project
(projectEditor:my-project
) têm a função de editor de dados do BigQuery
(roles/bigquery.dataEditor
) no conjunto de dados dataset-1
.
No entanto, esse papel não foi usado nos últimos
90 dias. Por isso, a recomendação de função sugere que
você revogue o papel:
[ { "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" ] } ]
Avalie cada recomendação com cuidado e veja como isso mudará o acesso do participante aos recursos do Google Cloud. Para saber como analisar as recomendações na CLI gcloud, consulte Revisar recomendações nesta página.
Para aplicar uma recomendação:
Use o comando
gcloud recommender recommendations mark-claimed
para alterar o estado da recomendação paraCLAIMED,
, o que impede que a recomendação seja alterada enquanto você a aplica: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
Substitua os seguintes valores:
-
RECOMMENDATION_ID
: o identificador exclusivo da recomendação. Esse valor é exibido no final do camponame
na recomendação. Por exemplo, se o camponame
forprojects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f
, o ID de recomendação seráfb927dc1-9695-4436-0000-f0f285007c0f
. -
LOCATION
: a região em que o conjunto de dados do BigQuery está localizado, por exemplo,us
ouus-central1
. -
PROJECT_ID
: o ID do projeto do Google Cloud que contém seus conjuntos de dados do BigQuery. Os IDs do projeto são strings alfanuméricas, comomy-project
. -
FORMAT
: o formato da resposta. Usejson
ouyaml
. -
ETAG
: o valor do campoetag
na recomendação, como"dd0686e7136a4cbb"
. Observe que esse valor pode incluir aspas. -
STATE_METADATA
: opcional. Pares de chave-valor separados por vírgula que contenham a opção de metadados sobre a recomendação. Por exemplo,--state-metadata=reviewedBy=alice,priority=high
. Os metadados substituem o campostateInfo.stateMetadata
na recomendação.
Se o comando for bem-sucedido, a resposta mostrará a recomendação em um estado
CLAIMED
, conforme mostrado no exemplo a seguir. Para esclarecer, o exemplo omite a maioria dos campos:... "priority": "P1", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", "stateInfo": { "state": "CLAIMED" } ...
-
Receba a política de permissão do conjunto de dados e, em seguida, modifique e defina a política de permissão para que ela reflita a recomendação.
Se você tiver conseguido aplicar a recomendação, atualize o estado dela para
SUCCEEDED
. Caso contrário, atualize o estado paraFAILED
:gcloud recommender recommendations COMMAND \ RECOMMENDATION_ID \ --location=LOCATION \ --recommender=google.iam.policy.Recommender \ --project=PROJECT_ID \ --format=FORMAT \ --etag=ETAG \ --state-metadata=STATE_METADATA
Substitua os seguintes valores:
COMMAND
: usemark-succeeded
se tiver conseguido aplicar a recomendação. Caso contrário, usemark-failed
.-
RECOMMENDATION_ID
: o identificador exclusivo da recomendação. Esse valor é exibido no final do camponame
na recomendação. Por exemplo, se o camponame
forprojects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f
, o ID de recomendação seráfb927dc1-9695-4436-0000-f0f285007c0f
. -
LOCATION
: a região em que o conjunto de dados do BigQuery está localizado, por exemplo,us
ouus-central1
. -
PROJECT_ID
: o ID do projeto do Google Cloud que contém seus conjuntos de dados do BigQuery. Os IDs do projeto são strings alfanuméricas, comomy-project
. -
FORMAT
: o formato da resposta. Usejson
ouyaml
. -
ETAG
: o valor do campoetag
na recomendação, como"dd0686e7136a4cbb"
. Observe que esse valor pode incluir aspas. -
STATE_METADATA
: opcional. Pares de chave-valor separados por vírgula que contenham a opção de metadados sobre a recomendação. Por exemplo,--state-metadata=reviewedBy=alice,priority=high
. Os metadados substituem o campostateInfo.stateMetadata
na recomendação.
Por exemplo, se você tiver marcado a recomendação como bem-sucedida, a resposta mostrará a recomendação em um estado
SUCCEEDED
. Para esclarecer, este exemplo omite a maioria dos campos:... "priority": "P1", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", "stateInfo": { "state": "SUCCEEDED" } ...
REST
Estas instruções presumem que você tenha se autenticado
e definido a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS
.
Revisar suas recomendações:
Para listar todas as recomendações disponíveis para seus conjuntos de dados do BigQuery, use o método
recommendations.list
da API Recommender.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud que contém seus conjuntos de dados do BigQuery. Os IDs do projeto são strings alfanuméricas, comomy-project
.LOCATION
: a região em que os conjuntos de dados do BigQuery estão localizados, por exemplo,us
ouus-central1
.-
PAGE_SIZE
: opcional. O número máximo de resultados a serem retornados a partir dessa solicitação. Se não especificado, o servidor determinará o número de resultados a serem retornados. Se o número de recomendações for maior que o tamanho da página, a resposta conterá um token de paginação que é possível usar para recuperar a próxima página de resultados. -
PAGE_TOKEN
: opcional. O token de paginação retornado em uma resposta anterior desse método. Se especificada, a lista de recomendações começará onde a solicitação anterior foi finalizada. PROJECT_ID
: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.
Método 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
Para enviar a solicitação, expanda uma destas opções:
A resposta é semelhante ao exemplo a seguir. Neste exemplo, todos os usuários
com a função de editor no projeto "my-project"
(projectEditor:my-project
) têm a função de editor de dados do BigQuery
(roles/bigquery.dataEditor
) no conjunto de dados dataset-1
.
No entanto, esse papel não foi usado nos últimos
90 dias. Por isso, a recomendação do papel sugere que
você revogue o papel:
{ "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" ] } ] }
Avalie cada recomendação com cuidado e veja como isso mudará o acesso do participante aos recursos do Google Cloud. Para saber como analisar as recomendações da API REST, consulte Revisar recomendações nesta página.
Para aplicar uma recomendação:
Marque a recomendação como
CLAIMED
:Para marcar uma recomendação como
CLAIMED
, o que impede que ela seja alterada enquanto você a aplica, use o métodorecommendations.markClaimed
da API Recommender.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud que contém seus conjuntos de dados do BigQuery. Os IDs do projeto são strings alfanuméricas, comomy-project
.LOCATION
: a região em que o conjunto de dados do BigQuery está localizado, por exemplo,us
ouus-central1
.RECOMMENDATION_ID
: o identificador exclusivo da recomendação. Esse valor é exibido no final do camponame
na recomendação. Por exemplo, se o camponame
forprojects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f
, o ID de recomendação seráfb927dc1-9695-4436-0000-f0f285007c0f
.ETAG
: o valor do campoetag
na recomendação, como"dd0686e7136a4cbb"
. Use barras invertidas para escapar das aspas, por exemplo,"\"df7308cca9719dcc\""
.STATE_METADATA
: opcional. Um objeto que contém pares de chave-valor com a opção de metadados sobre a recomendação. Por exemplo,{"reviewedBy": "alice", "priority": "high"}
. Os metadados substituem o campostateInfo.stateMetadata
na recomendação.
Método 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 da solicitação:
{ "etag": "ETAG", "stateMetadata": { "STATE_METADATA" } }
Para enviar a solicitação, expanda uma destas opções:
A resposta mostra a recomendação em um estado
CLAIMED
, conforme mostrado no exemplo a seguir. Para esclarecer, este exemplo omite a maioria dos campos:... "stateInfo": { "state": "CLAIMED" }, "etag": "\"7caf4103d7669e12\"", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", ...
Verifique a política de permissão do projeto e modifique a política de permissão para que ela reflita a recomendação.
Se você tiver conseguido aplicar a recomendação, atualize o estado dela para
SUCCEEDED
. Caso contrário, atualize o estado paraFAILED
:SUCCEEDED
Para marcar uma recomendação como
SUCCEEDED
, indicando que você conseguiu aplicá-la, use o métodorecommendations.markSucceeded
da API Recommender.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud que contém seus conjuntos de dados do BigQuery. Os IDs do projeto são strings alfanuméricas, comomy-project
.LOCATION
: a região em que o conjunto de dados do BigQuery está localizado, por exemplo,us
ouus-central1
.RECOMMENDATION_ID
: o identificador exclusivo da recomendação. Esse valor é exibido no final do camponame
na recomendação. Por exemplo, se o camponame
forprojects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f
, o ID de recomendação seráfb927dc1-9695-4436-0000-f0f285007c0f
.ETAG
: o valor do campoetag
na recomendação, como"dd0686e7136a4cbb"
. Use barras invertidas para escapar das aspas, por exemplo,"\"df7308cca9719dcc\""
.STATE_METADATA
: opcional. Um objeto que contém pares de chave-valor com a opção de metadados sobre a recomendação. Por exemplo,{"reviewedBy": "alice", "priority": "high"}
. Os metadados substituem o campostateInfo.stateMetadata
na recomendação.
Método 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 da solicitação:
{ "etag": "ETAG", "stateMetadata": { "STATE_METADATA" } }
Para enviar a solicitação, expanda uma destas opções:
A resposta mostra a recomendação em um estado
SUCCEEDED
, conforme mostrado no exemplo a seguir. Para esclarecer, este exemplo omite a maioria dos campos:... "stateInfo": { "state": "SUCCEEDED" }, "etag": "\"7caf4103d7669e12\"", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", ...
FAILED
Para marcar uma recomendação como
FAILED
, indicando que não foi possível aplicá-la, use o métodorecommendations.markFailed
da API Recommender.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud que contém seus conjuntos de dados do BigQuery. Os IDs do projeto são strings alfanuméricas, comomy-project
.LOCATION
: a região em que o conjunto de dados do BigQuery está localizado, por exemplo,us
ouus-central1
.RECOMMENDATION_ID
: o identificador exclusivo da recomendação. Esse valor é exibido no final do camponame
na recomendação. Por exemplo, se o camponame
forprojects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f
, o ID de recomendação seráfb927dc1-9695-4436-0000-f0f285007c0f
.ETAG
: o valor do campoetag
na recomendação, como"dd0686e7136a4cbb"
. Use barras invertidas para escapar das aspas, por exemplo,"\"df7308cca9719dcc\""
.STATE_METADATA
: opcional. Um objeto que contém pares de chave-valor com a opção de metadados sobre a recomendação. Por exemplo,{"reviewedBy": "alice", "priority": "high"}
. Os metadados substituem o campostateInfo.stateMetadata
na recomendação.
Método 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 da solicitação:
{ "etag": "ETAG", "stateMetadata": { "STATE_METADATA" } }
Para enviar a solicitação, expanda uma destas opções:
A resposta mostra a recomendação em um estado
FAILED
, conforme mostrado no exemplo a seguir. Para esclarecer, este exemplo omite a maioria dos campos:... "stateInfo": { "state": "FAILED" }, "etag": "\"7caf4103d7669e12\"", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", ...
Entender as recomendações
Cada recomendação inclui informações para ajudar você a entender por que ela foi feita.
Para detalhes sobre os campos de
uma recomendação, consulte a referência Recommendation
.
Para ver o uso da permissão na qual essa recomendação se baseia, consulte os
insights associados a ela.
Esses insights
são listados no campo associatedInsights
. Para visualizar um insight de política associado à recomendação, faça o seguinte:
- Copie o ID do insight associado. O ID é tudo depois de
insights/
no campoinsight
. Por exemplo, se o campoinsight
forprojects/123456789012/locations/us/insightTypes/google.iam.policy.Insight/insights/7849add9-73c0-419e-b169-42b3671173fb
, o ID do insight será7849add9-73c0-419e-b169-42b3671173fb
. - Siga as instruções para receber um insight de política usando o ID do insight que você copiou.
A seguir
- Saiba mais sobre o Recomendador.
- Saiba como usar permitir insights de política para conjuntos de dados do BigQuery.