Como configurar o acesso temporário

Este tópico descreve como definir o acesso temporário (expirando) aos recursos do Google Cloud usando vinculações de papéis condicionais nas suas políticas de gerenciamento de identidade e acesso (IAM, na sigla em inglês). 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 IAM.
  • Revise os atributos de data/hora que podem ser usados em uma expressão condicional.
  • Atualmente, os atributos de data/hora são compatíveis com todos os serviços do Google Cloud.

Como 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 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

  1. No Console do Cloud, acesse a página IAM.

    Acessar a página "IAM"

  2. Na lista de membros, localize o membro desejado e clique no botão .

  3. No painel Editar permissões, localize o papel cuja condição você quer configurar. Em seguida, em Condição, clique em Adicionar condição.

  4. No painel Editar condição, insira um título e uma descrição opcional para a condição.

  5. É possível adicionar uma expressão de condição 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:

    1. Na lista suspensa Tipo de condição, selecione Acesso expirado.
    2. Na lista suspensa Operador, selecione até.
    3. Na lista suspensa Horário, clique no botão para selecionar um intervalo de data e hora.
    4. Clique em Salvar para aplicar a condição.
    5. 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:

    1. 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")
    2. 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.

    3. Clique em Salvar para aplicar a condição.

    4. 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 do IAM para o projeto. No exemplo a seguir, a versão JSON da política é 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 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
}

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). Se você não estiver usando a versão 263.0.0 ou mais recente da ferramenta gcloud, certifique-se de atualizar o valor version para 3. Se você estiver usando uma versão mais recente da ferramenta gcloud, o valor máximo da política será definido automaticamente para você:

{
  "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 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 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:

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 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, grave a política 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.

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 atualizada.


Como 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

  1. No Console do Cloud, acesse a página IAM.

    Acessar a página "IAM"

  2. Na lista de membros, localize o membro desejado e clique no botão .

  3. No painel Editar permissões, localize o papel cuja condição você quer configurar. Em seguida, em Condição, clique em Adicionar condição.

  4. No painel Editar condição, insira um título e uma descrição opcional para a condição.

  5. É possível adicionar uma expressão de condição 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:

    1. Clique em Adicionar.
    2. Na lista suspensa Tipo de condição, selecione Horário Programar Dia da semana.
    3. Na lista suspensa Operador, selecione Após ou Em.
    4. Na lista suspensa Dia da semana, selecione Segunda-feira.
    5. Na lista suspensa Escolher um fuso horário, selecione o fuso horário que você quer na lista.
    6. Verifique se o operador E está selecionado à esquerda e clique em Adicionar novamente.
    7. Na lista suspensa Tipo de condição, selecione Horário Programar Dia da semana.
    8. Na lista suspensa Operador, selecione Antes ou Em.
    9. Na lista suspensa Dia da semana, selecione Sexta-feira.
    10. 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.

    1. Verifique se o operador E está selecionado à esquerda e clique em Adicionar novamente.
    2. Na lista suspensa Tipo de condição, selecione Horário Programar Hora do dia.

      1. Na lista suspensa Operador, selecione Após ou Em.
      2. Na lista suspensa Hora do dia, selecione 9h.
      3. Na lista suspensa Escolher um fuso horário, selecione o fuso horário que você quer na lista.
      4. Na lista suspensa Tipo de condição, selecione Horário Programar Hora do dia.
      5. 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.
      6. Na lista suspensa Hora do dia, selecione 17h.
      7. Na lista suspensa Escolher um fuso horário, selecione o fuso horário que você quer na lista.
      8. Clique em Salvar para aplicar a condição.
      9. Quando o painel Editar condição for fechado, clique em Salvar novamente no painel Editar permissões para atualizar a política do IAM.

      Agora, você configurou o acesso para segunda a sexta-feira, das 9h às 17h.

      Editor da condição:

      1. Clique na guia Editor de condições e insira a expressão a seguir (substituindo os valores de marcador 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
        
      2. 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.

      3. Clique em Salvar para aplicar a condição.

      4. 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 do IAM para o projeto. No exemplo a seguir, a versão JSON da política é 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 do IAM 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 com acesso programado, adicione a expressão condicional destacada a seguir (substituindo o carimbo de data/hora pelo seu). Se você não estiver usando a versão 263.0.0 ou mais recente da ferramenta gcloud, certifique-se de atualizar o valor version para 3. Se você estiver usando uma versão mais recente da ferramenta gcloud, o valor máximo da política será definido automaticamente para você:

{
  "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 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 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:

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 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 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.

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 atualizada.


Próximas etapas