Neste tópico, descrevemos como adicionar, modificar e remover vinculações de papéis condicionais nas políticas de gerenciamento de identidade e acesso (IAM, na sigla em inglês).
Antes de começar
Enable the IAM API.
Leia a Visão geral das condições do IAM para entender os princípios básicos das vinculações de papéis condicionais do IAM.
Revise a referência sobre atributo para saber mais sobre os diferentes atributos condicionais que podem ser usados em uma expressão.
Funções exigidas
Para gerenciar vinculações de papéis condicionais na política do IAM de um recurso, você precisa de permissões para acessar o recurso e receber e definir a
política do IAM para o recurso. Essas permissões têm o seguinte formato, em que SERVICE
é o nome do serviço que possui o recurso e
RESOURCE_TYPE
é o nome do tipo de recurso para o qual
você quer gerenciar o acesso:
SERVICE.RESOURCE_TYPE.get
SERVICE.RESOURCE_TYPE.getIamPolicy
SERVICE.RESOURCE_TYPE.setIamPolicy
Por exemplo, para gerenciar vinculações de papéis condicionais na política de IAM de um projeto, você precisa das seguintes permissões:
resourcemanager.projects.get
resourcemanager.projects.getIamPolicy
resourcemanager.projects.setIamPolicy
Para receber as permissões necessárias, peça ao administrador para conceder a você um
papel predefinido ou personalizado que inclua as permissões. Por exemplo, o
administrador pode conceder a você o papel de Administrador de segurança
(roles/iam.securityAdmin
), que inclui permissões para receber quase todos os
recursos do Google Cloud e gerenciar as políticas do IAM.
Adicionar uma vinculação de papel condicional a uma política
As vinculações de papéis condicionais podem ser adicionadas a políticas novas ou atuais do IAM para controlar ainda mais o acesso aos recursos do Google Cloud. Esta seção mostra como adicionar uma condição baseada em tempo a uma política usando o Console do Google Cloud, a Google Cloud CLI e a API REST.
Para adicionar uma vinculação de papel condicional a uma política existente:
Console
No Console do Google Cloud, abra a página IAM.
Na lista de participantes, localize o participante desejado e clique no botão
.No painel Editar permissões, localize o papel desejado para configurar uma condição. Em seguida, em Condição do IAM (opcional), clique em Adicionar condição do IAM.
No painel Editar condição, insira um título e uma descrição opcional para a condição.
É possível adicionar uma expressão de condição usando o Criador de condições ou o Editor da condição. O criador de condições fornece uma interface interativa para selecionar o tipo de condição desejado, o operador e outros detalhes aplicáveis sobre a expressão. O editor de condições fornece uma interface baseada em texto para inserir manualmente uma expressão usando a sintaxe CEL.
Criador de condições:
- Na lista suspensa Tipo de condição, selecione Acesso temporário.
- Na lista suspensa Operador, selecione até.
- Na lista suspensa Horário, clique no botão para selecionar um intervalo de data e hora.
- Clique em Salvar para aplicar a condição.
- Quando o painel Editar condição for fechado, clique em Salvar novamente no painel Editar permissões para atualizar a política do IAM.
Editor da condição:
Clique na guia Editor de condições e insira a expressão a seguir (substituindo o carimbo de data/hora pelo seu):
request.time < timestamp("2019-12-31T12:00:00.000Z")
Depois de inserir a expressão, será possível validar a sintaxe CEL clicando em Executar linter acima da caixa de texto, na parte superior direita.
Clique em Salvar para aplicar a condição.
Quando o painel Editar condição for fechado, clique em Salvar novamente no painel Editar permissões para atualizar a política do IAM.
gcloud
As políticas do IAM são definidas usando o padrão read-modify-write.
Execute o comando gcloud projects get-iam-policy
para descobrir a política atual de permissão para o projeto. No exemplo a seguir,
a versão JSON da política de permissão é transferida por download para um caminho no disco.
Comando:
gcloud projects get-iam-policy project-id --format json > file-path
É feito o download da política do IAM no formato JSON:
{ "bindings": [ { "members": [ "user:project-owner@example.com" ], "role": "roles/owner" }, { "members": [ "user:travis@example.com" ], "role": "roles/iam.securityReviewer" } ], "etag": "BwWKmjvelug=", "version": 1 }
Observe o version
atual da política de permissão, que é 1
. Para configurar a política com acesso expirável, adicione a expressão condicional destacada
a seguir (substituindo o carimbo de data/hora pelo seu). A CLI gcloud atualiza a versão
automaticamente:
{ "bindings": [ { "members": [ "user:project-owner@example.com" ], "role": "roles/owner" }, { "members": [ "user:travis@example.com" ], "role": "roles/iam.securityReviewer", "condition": { "title": "Expires_2019", "description": "Expires at noon on 2019-12-31", "expression": "request.time < timestamp('2019-12-31T12:00:00Z')" } } ], "etag": "BwWKmjvelug=", "version": 3 }
Em seguida, execute o comando gcloud projects set-iam-policy
para definir a nova política:
gcloud projects set-iam-policy project-id file-path
A nova política será aplicada, e a vinculação de papel de travis@example.com
expirará no horário determinado.
REST
Use o padrão read-modify-write para permitir o acesso até um momento específico.
Primeiro, leia a política do IAM para o projeto:
O método projects.getIamPolicy
da API Resource Manager recebe a política do IAM de um projeto.
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. Os IDs do projeto são strings alfanuméricas, comomy-project
.POLICY_VERSION
: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.
Método HTTP e URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
Corpo JSON da solicitação:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/owner", "members": [ "user:project-owner@example.com" ] }, { "role": "roles/iam.securityReviewer", "members": [ "user:travis@example.com" ] } ] }
Observe o version
atual da política de permissão, que é 1
.
Em seguida, modifique a política para que ela permita o acesso até um horário específico. Altere o campo version
para o valor
3
:
{ "etag": "BwWKmjvelug=", "version": 3, "bindings": [ { "role": "roles/owner", "members": [ "user:project-owner@example.com" ] }, { "role": "roles/iam.securityReviewer", "condition": { "title": "Expires_2019", "description": "Expires at noon on 2019-12-31", "expression": "request.time < timestamp('2019-12-31T12:00:00Z')" }, "members": [ "user:travis@example.com" ] } ] }
Por fim, escreva a política de permissão atualizada:
O método projects.setIamPolicy
da API Resource Manager define a política na solicitação como a nova política do IAM do projeto.
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. Os IDs do projeto são strings alfanuméricas, comomy-project
.
Método HTTP e URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
Corpo JSON da solicitação:
{ "policy": { "version": 3, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/owner", "members": [ "user:project-owner@example.com" ] }, { "role": "roles/iam.securityReviewer", "members": [ "user:travis@example.com" ], "condition": { "title": "Expires_July_1_2020", "description": "Expires on July 1, 2020", "expression": "request.time < timestamp('2020-07-01T00:00:00.000Z')" } } ] } }
Para enviar a solicitação, expanda uma destas opções:
A resposta contém a política de permissão atualizada.
Modificar uma vinculação de papel condicional existente
Depois de criar uma vinculação de papel condicional, é possível alterar a expressão de condição a qualquer momento. Esta seção mostra como atualizar uma condição baseada em tempo em uma política usando o Console do Google Cloud, a Google Cloud CLI e a API REST.
Para modificar uma vinculação de papel condicional de uma política existente:
Console
No Console do Google Cloud, abra a página IAM.
Na lista de participantes, localize o participante desejado e clique no botão
.No painel Editar permissões, localize o papel desejado para configurar uma condição. Em seguida, em Condição do IAM (opcional), clique no nome da condição atual para editá-la.
No painel Editar condição, é possível manter ou atualizar o título e a descrição da condição.
Edite a expressão de condição existente ou adicione uma nova usando o Criador de condições ou o Editor de condições. O criador de condições fornece uma interface interativa para selecionar o tipo de condição desejado, o operador e outros detalhes aplicáveis sobre a expressão. O editor de condições fornece uma interface baseada em texto para inserir manualmente uma expressão usando a sintaxe CEL.
Criador de condições:
- Adicione uma nova expressão de condição ou modifique a expressão de condição existente.
- Clique em Salvar para aplicar a condição.
- Quando o painel Editar condição for fechado, clique em Salvar novamente no painel Editar permissões para atualizar a política do IAM.
Editor da condição:
- Clique na guia Editor de condições e adicione uma nova expressão de condição ou modifique a expressão de condição existente.
- Depois de inserir a expressão, será possível validar a sintaxe CEL clicando em Executar linter acima da caixa de texto, na parte superior direita.
- Clique em Salvar para aplicar a condição.
- Quando o painel Editar condição for fechado, clique em Salvar novamente no painel Editar permissões para atualizar a política do IAM.
gcloud
As políticas do IAM são definidas usando o padrão read-modify-write.
Execute o comando gcloud projects get-iam-policy
para descobrir a política atual de permissão para o projeto. No exemplo a seguir,
a versão JSON da política de permissão é transferida por download para um caminho no disco.
Comando:
gcloud projects get-iam-policy project-id --format json > file-path
É feito o download da política do IAM no formato JSON:
{ "bindings": [ { "members": [ "user:project-owner@example.com" ], "role": "roles/owner" }, { "members": [ "user:fatima@example.com" ], "role": "roles/bigquery.dataViewer", "condition": { "title": "Duration_3_months", "description": "Expires in 3 months on 2019-10-12", "expression": "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")" } } ], "etag": "BwWKmjvelug=", "version": 3 }
Neste exemplo, atualizaremos os valores de title
,
description
e do carimbo de data/hora na expressão para alterar
a duração da condição de acesso programado. Atualize a parte destacada da condição a seguir (substituindo os valores pelos seus):
{ "bindings": [ { "members": [ "user:project-owner@example.com" ], "role": "roles/owner" }, { "members": [ "user:fatima@example.com" ], "role": "roles/bigquery.dataViewer", "condition": { "title": "Duration_5_months", "description": "Expires in 5 months on 2020-01-12", "expression": "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')" } } ], "etag": "BwWKmjvelug=", "version": 3 }
Em seguida, execute o comando gcloud projects set-iam-policy
para definir a nova política:
gcloud projects set-iam-policy project-id file-path
A política atualizada foi aplicada, e a vinculação de papéis de fatima@example.com
expirará no novo horário.
REST
Use o padrão read-mod-write para modificar a vinculação de papel condicional.
Primeiro, leia a política do IAM para o projeto:
O método projects.getIamPolicy
da API Resource Manager recebe a política do IAM de um projeto.
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. Os IDs do projeto são strings alfanuméricas, comomy-project
.
Método HTTP e URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
Corpo JSON da solicitação:
{ "options": { "requestedPolicyVersion": 3 } }
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "etag": "BwWKmjvelug=", "version": 3, "bindings": [ { "role": "roles/owner", "members": [ "user:project-owner@example.com" ] }, { "role": "roles/bigquery.dataViewer", "condition": { "title": "Duration_3_months", "description": "Expires in 3 months on 2019-10-12", "expression": "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")" }, "members": [ "user:fatima@example.com" ] } ] }
Em seguida, modifique a vinculação de papel condicional na política. Neste exemplo, atualizaremos os valores do carimbo de data/hora para alterar a duração da condição de acesso programado. Atualize a parte destacada da expressão de condição a seguir (substituindo o carimbo de data/hora pelo seu):
{ "etag": "BwWKmjvelug=", "version": 3, "bindings": [ { "role": "roles/owner", "members": [ "user:project-owner@example.com" ] }, { "role": "roles/bigquery.dataViewer", "condition": { "title": "Duration_5_months", "description": "Expires in 5 months on 2020-01-12", "expression": "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')" }, "members": [ "user:fatima@example.com" ] } ] }
Por fim, escreva a política de permissão atualizada:
O método projects.setIamPolicy
da API Resource Manager define a política na solicitação como a nova política do IAM do projeto.
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. Os IDs do projeto são strings alfanuméricas, comomy-project
.
Método HTTP e URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
Corpo JSON da solicitação:
{ "policy": { "etag": "BwWKmjvelug=", "version": 3, "bindings": [ { "role": "roles/owner", "members": [ "user:project-owner@example.com" ] }, { "role": "roles/bigquery.dataViewer", "condition": { "title": "Duration_5_months", "description": "Expires in 5 months on 2020-01-12", "expression": "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')" }, "members": [ "user:fatima@example.com" ], } ] } }
Para enviar a solicitação, expanda uma destas opções:
A resposta contém a política de permissão atualizada.
Remover uma condição de uma vinculação de papel
Remover uma condição de uma vinculação de papel não revoga o papel. Em vez disso, ele permite que todos os principais nessa vinculação de papel usem as permissões no papel incondicionalmente.
Esta seção mostra como remover uma condição baseada em tempo de uma política de permissão usando o console do Google Cloud, a CLI do Google Cloud e a API REST.
Para remover uma condição de uma vinculação de papel em uma política de permissão:
Console
No Console do Google Cloud, abra a página IAM.
Na lista de participantes, localize o participante desejado e clique no botão
.No painel Editar permissões, localize a vinculação de papel desejada. Em seguida, em Condição do IAM (opcional), clique no nome de uma condição atual.
No painel Editar condição, clique no botão
para remover a condição. Você será solicitado a confirmar a exclusão da condição.Quando o painel Editar condição for fechado, clique em Salvar novamente no painel Editar permissões para atualizar a política do IAM.
gcloud
As políticas do IAM são definidas usando o padrão read-modify-write.
Execute o comando gcloud projects get-iam-policy
para descobrir a política atual de permissão para o projeto. No exemplo a seguir,
a versão JSON da política de permissão é transferida por download para um caminho no disco.
Comando:
gcloud projects get-iam-policy project-id --format json > file-path
É feito o download da política do IAM no formato JSON:
{ "bindings": [ { "members": [ "user:project-owner@example.com" ], "role": "roles/owner" }, { "members": [ "user:fatima@example.com" ], "role": "roles/bigquery.dataViewer", "condition": { "title": "Duration_3_months", "description": "Expires in 3 months on 2019-10-12", "expression": "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")" } } ], "etag": "BwWKmjvelug=", "version": 3 }
Para remover a vinculação de papel condicional da política, remova o bloco condition
,
conforme mostrado abaixo:
{ "bindings": [ { "members": [ "user:project-owner@example.com" ], "role": "roles/owner" }, { "members": [ "user:fatima@example.com" ], "role": "roles/bigquery.dataViewer", } ], "etag": "BwWKmjvelug=", "version": 3 }
O version
ainda está definido como 3
, apesar de as vinculações de papel não condicionais exigirem apenas uma política de permissão de versão 1
. Recomendamos que você sempre use o
número de versão mais alto ao definir uma política de permissão, tanto para vinculações de papéis condicionais
quantos para vinculações de papéis incondicionais. Veja
os requisitos de versão para mais informações. A CLI do gcloud atualiza automaticamente o número da versão da política de permissão.
Em seguida, defina a política atualizada executando o comando gcloud projects set-iam-policy
:
gcloud projects set-iam-policy project-id file-path
A política atualizada é aplicada, removendo a vinculação de papel condicional para fatima@example.com
. A vinculação de papéis não expirará mais.
REST
Use o padrão read-modify-write para remover a vinculação de papel condicional.
Primeiro, leia a política do IAM para o projeto:
O método projects.getIamPolicy
da API Resource Manager recebe a política do IAM de um projeto.
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. Os IDs do projeto são strings alfanuméricas, comomy-project
.
Método HTTP e URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
Corpo JSON da solicitação:
{ "options": { "requestedPolicyVersion": 3 } }
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "etag": "BwWKmjvelug=", "version": 3, "bindings": [ { "role": "roles/owner", "members": [ "user:project-owner@example.com" ] }, { "role": "roles/bigquery.dataViewer", "condition": { "title": "Duration_3_months", "description": "Expires in 3 months on 2019-10-12", "expression": "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")" }, "members": [ "user:fatima@example.com" ] } ] }
Em seguida, modifique a política removendo a vinculação de papel condicional:
{ "etag": "BwWKmjvelug=", "version": 3, "bindings": [ { "role": "roles/owner", "members": [ "user:project-owner@example.com" ] }, { "role": "roles/bigquery.dataViewer", "members": [ "user:fatima@example.com" ] } ] }
O version
ainda está definido como 3
, apesar de as vinculações de papel não condicionais exigirem apenas uma política de permissão de versão 1
. Recomendamos que você sempre use o
número de versão mais alto ao definir uma política de permissão, tanto para vinculações de papéis condicionais
quantos para vinculações de papéis incondicionais. Veja
os requisitos de versão para mais informações.
Por fim, escreva a política de permissão atualizada:
O método projects.setIamPolicy
da API Resource Manager define a política na solicitação como a nova política do IAM do projeto.
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. Os IDs do projeto são strings alfanuméricas, comomy-project
.
Método HTTP e URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
Corpo JSON da solicitação:
{ "policy": { "etag": "BwWKmjvelug=", "version": 3, "bindings": [ { "role": "roles/owner", "members": [ "user:project-owner@example.com" ] }, { "role": "roles/bigquery.dataViewer", "members": [ "user:fatima@example.com" ] } ] } }
Para enviar a solicitação, expanda uma destas opções:
A resposta contém a política de permissão atualizada.
A seguir
- Referência de atributos para condições do IAM
- Tipos de recursos que aceitam vinculações de papéis condicionais