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

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

    Acessar a página do IAM

  2. Na lista de principais, localize o principal 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 do IAM (opcional), clique em Adicionar condição do IAM.

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

    1. No menu suspenso Tipo de condição, selecione Acesso temporário.
    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. 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:

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

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, como my-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, como my-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 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 Google Cloud, abra a página IAM.

    Acessar a página do IAM

  2. Na lista de principais, localize o principal 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 do IAM (opcional), clique em Adicionar condição do IAM.

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

    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 de permissão.

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

      Editor de condições:

      1. 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
        
      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 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, como my-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, como my-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