Este tópico descreve como definir o acesso temporário (expirando) aos recursos do Google Cloud usando vinculações de papéis condicionais nas políticas de permissão. Com os atributos de data/hora, é possível aplicar controles baseados em tempo ao acessar um determinado recurso. Por exemplo, é possível conceder acesso temporário a um projeto em um horário específico ou de forma programada e recorrente.
Antes de começar
- Leia Visão geral das condições para entender os princípios básicos das vinculações de papéis condicionais do Identity and Access Management (IAM).
- Revise os atributos de data/hora que podem ser usados em uma expressão condicional. Os atributos de data/hora são reconhecidos por todos os serviços do Google Cloud.
Funções exigidas
Para conseguir as permissões necessárias para gerenciar vinculações de papéis condicionais, peça ao administrador para conceder a você os seguintes papéis do IAM:
-
Para gerenciar o acesso aos projetos:
Administrador do IAM do projeto (
roles/resourcemanager.projectIamAdmin
) no projeto -
Para gerenciar o acesso às pastas:
Administrador de pastas (
roles/resourcemanager.folderAdmin
) na pasta -
Para gerenciar o acesso a projetos, pastas e organizações:
Administrador de organização (
roles/resourcemanager.organizationAdmin
) na organização -
Para gerenciar o acesso a quase todos os recursos do Google Cloud:
o Administrador de segurança (
roles/iam.securityAdmin
) no projeto, na pasta ou na organização com os recursos que você quer gerenciar
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 vinculações de papéis condicionais. 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 vinculações de papéis condicionais:
-
Para gerenciar o acesso aos projetos:
-
resourcemanager.projects.getIamPolicy
no projeto -
resourcemanager.projects.setIamPolicy
no projeto
-
-
Para gerenciar o acesso às pastas:
-
resourcemanager.folders.getIamPolicy
na pasta -
resourcemanager.folders.setIamPolicy
na pasta
-
-
Para gerenciar o acesso a organizações:
-
resourcemanager.organizations.getIamPolicy
na organização -
resourcemanager.organizations.setIamPolicy
na organização
-
Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.
Conceder acesso temporário
É possível usar uma vinculação de papel condicional para conceder acesso temporário a um recurso, garantindo que um usuário não possa mais acessá-lo após a data e a hora de expiração especificadas.
Considere o seguinte cenário: a política de segurança de informações de empresa da ExampleCo enfatiza que nenhum funcionário pode ter acesso indefinido aos recursos de projetos de produção. Anteriormente, os administradores definiam e excluíam manualmente as vinculações de papéis do IAM para atender às necessidades de emergência dos engenheiros. Agora, para reduzir a sobrecarga da administração, a ExampleCo pode definir uma data de término para a vinculação de papel condicional configurando uma condição de data/hora.
Para conceder acesso expirável a um recurso de projeto:
Console
No Console do Google Cloud, abra a página IAM.
Na lista de principais, localize o principal desejado e clique no botão
.No painel Editar permissões, localize o papel cuja condição você quer configurar. 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:
- No menu suspenso 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.
- Após o painel Editar condição for fechado, clique em Salvar novamente no painel Editar permissões para atualizar a política de permissão.
Editor de condições:
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("2020-07-01T00: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.
Após o painel Editar condição for fechado, clique em Salvar novamente no painel Editar permissões para atualizar a política de permissão.
gcloud
As políticas de permissão são definidas usando o padrão read-modify-write.
Execute o comando gcloud projects get-iam-policy
para descobrir a política de permissão atual 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 > filepath
É feito o download da política de permissão 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
}
Para configurar a política de permissão 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_July_1_2020",
"description": "Expires on July 1, 2020",
"expression":
"request.time < timestamp('2020-07-01T00: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 filepath
A nova política de permissão será aplicada e a concessã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 de permissão 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" ] } ] }
Em seguida, modifique a política de permissão para que ela permita o acesso até um horário específico. Altere o campo version
para o valor
3
:
{
"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')"
}
}
]
}
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.
Gerenciar o acesso com base em dias e horas da semana
É possível usar uma vinculação de papel condicional para conceder acesso a um recurso somente em determinados dias ou horas da semana de maneira recorrente.
Considere o seguinte cenário: a empresa ExampleCo tem um projeto de controle de qualidade. É necessário que toda a equipe do controle de qualidade tenha papéis altamente privilegiados para concluir o trabalho. A ExampleCo precisa obedecer às leis trabalhistas nos seus locais, que limitam o horário de trabalho das 9h às 17h, de segunda a sexta-feira. A ExampleCo pode usar as condições de data e hora para garantir que os funcionários só possam acessar o Google Cloud durante a semana de trabalho e durante o horário de trabalho programado.
Para conceder acesso a um recurso de projeto somente em determinados dias ou horas da semana de forma recorrente:
Console
No Console do Google Cloud, abra a página IAM.
Na lista de principais, localize o principal desejado e clique no botão
.No painel Editar permissões, localize o papel cuja condição você quer configurar. 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:
- Clique em Adicionar.
- Na lista suspensa Tipo de condição, selecione Horário Programar Dia da semana.
- Na lista suspensa Operador, selecione Após ou Em.
- Na lista suspensa Dia da semana, selecione Segunda-feira.
- Na lista suspensa Escolher um fuso horário, selecione o fuso horário que você quer na lista.
- Verifique se o operador E está selecionado à esquerda e clique em Adicionar novamente.
- Na lista suspensa Tipo de condição, selecione Horário Programar Dia da semana.
- Na lista suspensa Operador, selecione Antes ou Em.
- Na lista suspensa Dia da semana, selecione Sexta-feira.
- Na lista suspensa Escolher um fuso horário, selecione o fuso horário que você quer na lista.
Até aqui, você configurou somente o acesso de segunda a sexta-feira. Agora, você configurará o acesso das 9h às 17h.
- Verifique se o operador E está selecionado à esquerda e clique em Adicionar novamente.
Na lista suspensa Tipo de condição, selecione Horário
Programar Hora do dia.- Na lista suspensa Operador, selecione Após ou Em.
- Na lista suspensa Hora do dia, selecione 9h.
- Na lista suspensa Escolher um fuso horário, selecione o fuso horário que você quer na lista.
- Na lista suspensa Tipo de condição, selecione Horário Programar Hora do dia.
- Na lista suspensa Operador, selecione Antes ou Em. Observe que, com essa seleção, "em" será avaliado logicamente para todos os horários entre as 17h e as 17h59. Para que o acesso expire às 16h59, verifique se a hora está definida como 16h em vez de 17h.
- Na lista suspensa Hora do dia, selecione 17h.
- Na lista suspensa Escolher um fuso horário, selecione o fuso horário que você quer na lista.
- 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 de permissão.
Agora, você configurou o acesso para segunda a sexta-feira, das 9h às 17h.
Editor de condições:
Clique na guia Editor de condições e insira a expressão a seguir (substituindo os valores de marcador de posição por seus próprios valores):
request.time.getHours("Europe/Berlin") >= 9 && request.time.getHours("Europe/Berlin") <= 17 && request.time.getDayOfWeek("Europe/Berlin") >= 1 && request.time.getDayOfWeek("Europe/Berlin") <= 5
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 de permissão.
gcloud
As políticas de permissão são definidas usando o padrão read-modify-write.
Execute o comando gcloud projects get-iam-policy
para descobrir a política de permissão atual 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 > filepath
É feito o download da política de permissão no formato JSON:
{
"bindings": [
{
"members": [
"user:project-owner@example.com"
],
"role": "roles/owner"
},
{
"members": [
"user:rita@example.com"
],
"role": "roles/bigquery.dataViewer"
}
],
"etag": "BwWKmjvelug=",
"version": 1
}
Para configurar a política de permissão com acesso programado, 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:rita@example.com"
],
"role": "roles/bigquery.dataViewer",
"condition": {
"title": "Business_hours",
"description": "Business hours Monday-Friday",
"expression": "request.time.getHours('Europe/Berlin') >= 9 && request.time.getHours('Europe/Berlin') <= 17 && request.time.getDayOfWeek('Europe/Berlin') >= 1 && request.time.getDayOfWeek('Europe/Berlin') <= 5"
}
}
],
"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 filepath
A nova política de permissão será aplicada e a concessão de papel de rita@example.com
permitirá o acesso entre os dias e horários determinados.
REST
Use o padrão read-modify-write para permitir o acesso programado.Primeiro, leia a política de permissão 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/bigquery.dataViewer", "members": [ "user:rita@example.com" ] } ] }
Em seguida, modifique a política de permissão para permitir o acesso programado.
Adicione a expressão de condição destacada a seguir (substituindo o carimbo de data/hora pelo
seu próprio). Verifique se você atualizou o valor version
para3
:
{
"etag": "BwWKmjvelug=",
"version": 3,
"bindings": [
{
"role": "roles/owner",
"members": [
"user:project-owner@example.com"
]
},
{
"role": "roles/bigquery.dataViewer",
"members": [
"user:rita@example.com"
],
"condition": {
"title": "Business_hours",
"description": "Business hours Monday-Friday",
"expression":
"request.time.getHours('Europe/Berlin') >= 9 &&
request.time.getHours('Europe/Berlin') <= 17 &&
request.time.getDayOfWeek('Europe/Berlin') >= 1 &&
request.time.getDayOfWeek('Europe/Berlin') <= 5"
}
}
]
}
O método projects.setIamPolicy
da API Resource Manager
define a política de permissão na solicitação como a nova política de permissão 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:rita@example.com" ], "condition": { "title": "Business_hours", "description": "Business hours Monday-Friday", "expression": "request.time.getHours('Europe/Berlin') >= 9 && request.time.getHours('Europe/Berlin') <= 17 && request.time.getDayOfWeek('Europe/Berlin') >= 1 && request.time.getDayOfWeek('Europe/Berlin') <= 5" } } ] } }
Para enviar a solicitação, expanda uma destas opções:
A resposta contém a política de permissão atualizada.
A seguir
- Saiba como gerenciar vinculações de papéis condicionais.
- Saiba como inspecionar políticas de permissão.
- Saiba como usar vinculações de papéis condicionais para Gerenciar o acesso privilegiado just-in-time e imediato aos projetos.