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 da organização   (
roles/resourcemanager.organizationAdmin) na organização - 
            Para gerenciar o acesso a quase todos os recursos do Google Cloud :
              
  
  
    
      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.getIamPolicyno projeto - 
                      
resourcemanager.projects.setIamPolicyno projeto 
 - 
                      
 - 
                Para gerenciar o acesso às pastas:
                
- 
                      
resourcemanager.folders.getIamPolicyna pasta - 
                      
resourcemanager.folders.setIamPolicyna pasta 
 - 
                      
 - 
                Para gerenciar o acesso a organizações:
                
- 
                      
resourcemanager.organizations.getIamPolicyna organização - 
                      
resourcemanager.organizations.setIamPolicyna 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 , acesse 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:my-user@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "group:my-group@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:my-user@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "group:my-group@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 do grupo vai 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:my-user@example.com"
      ]
    },
    {
      "role": "roles/iam.securityReviewer",
      "members": [
        "group:my-group@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:my-user@example.com"
      ]
    },
    {
      "role": "roles/iam.securityReviewer",
      "members": [
        "group:my-group@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:my-user@example.com"
        ]
      },
      {
        "role": "roles/iam.securityReviewer",
        "members": [
          "group:my-group@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 oGoogle 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 , acesse 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") <= 5Depois 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:my-user@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "group:my-group@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:my-user@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "group:my-group@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 do grupo permitirá o acesso entre os dias e horários especificados.
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:my-user@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "members": [
        "group:my-group@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:my-user@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "members": [
        "group:my-group@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:my-user@example.com"
        ]
      },
      {
        "role": "roles/bigquery.dataViewer",
        "members": [
          "group:my-group@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.