Visão geral das condições do Cloud IAM

Introdução

Nesta página, descreveremos o recurso Condições do Gerenciamento de identidade e acesso do Cloud (Cloud IAM, na sigla em inglês). Esse recurso permite que você defina e aplique o controle de acesso condicional e baseado em atributos para recursos do Google Cloud Platform (GCP).

Com as Condições do Cloud IAM, você pode optar por conceder permissões a identidades (membros) somente se as condições configuradas forem atendidas. Por exemplo, isso pode ser feito para configurar o acesso temporário para usuários no caso de um problema de produção ou para limitar o acesso a recursos somente para funcionários localizados no escritório corporativo.

As condições são especificadas nas vinculações de papéis da política do Cloud IAM de um recurso. Quando uma condição existe, o papel é concedido somente se a expressão de condição for avaliada como true. Cada expressão é definida como um conjunto de instruções lógicas que permitem especificar um ou vários atributos a serem verificados.

Como inscrever-se na versão Beta particular

Atualmente, para usar as condições do Cloud IAM, é preciso ser aceito na versão Beta particular. Preencha este formulário para se inscrever.

Políticas do Cloud IAM com condições

As políticas do Cloud IAM são compostas por uma ou mais vinculações de papéis, que têm a estrutura a seguir:

"bindings": [
  {
    "role": ...
    "members": ...
    "condition": ...
  },
  ...
]

O objeto de condition é opcional e cada vinculação de papel pode conter apenas um. No entanto, a expressão de condição pode conter várias instruções que avaliam vários atributos diferentes. Uma vinculação de papel sem objeto de condition sempre será concedida aos membros especificados, já que nenhuma verificação de condição é necessária. O objeto condition tem esta estrutura:

"condition": {
    "title": ...
    "description": ...
    "expression": ...
}

O title da condição é obrigatório, mas a description é opcional. Tanto o título quanto a descrição são campos puramente informativos para ajudá-lo a identificar e descrever a condição. O campo expression define uma expressão lógica baseada em atributo que usa um subconjunto do Common Express Language (CEL). Para mais informações, consulte a especificação do CEL (em inglês) e a respectiva definição de linguagem (em inglês).

Em geral, uma expressão de condição consiste em uma ou mais cláusulas que são unidas usando operadores lógicos (&&, || ou !). Cada cláusula expressa uma regra de controle baseada em atributo que se aplica à vinculação.

Atributos de condição

Para esta versão Beta particular, os atributos de condição compatíveis são baseados no recurso solicitado (por exemplo, o tipo ou nome) ou com base nos detalhes sobre a solicitação (por exemplo, o registro de data/hora, o endereço IP de origem ou de destino da instância de computação de destino). Veja abaixo exemplos e descrições de ambos os tipos de atributos.

Atributos de recurso

Os atributos de recurso fornecem restrições com base no recurso na solicitação de acesso, como o tipo de recurso, o nome ou o serviço do GCP que está sendo usado.

Exemplos de expressões:

Permitir acesso a instâncias de computação, mas não a outro tipo de recurso:

resource.type == “google.cloud.compute.Instance”

Permitir acesso a recursos do Cloud Storage, mas não a outros recursos do serviço:

resource.service == “google.cloud.storage”

Permitir acesso apenas a recursos com nomes que iniciam com uma string especificada:

resource.name.startsWith("projects/_/buckets/exampleco-site-assets-")

Atributos de solicitação

Os atributos de solicitação fornecem restrições com base nos detalhes sobre a solicitação de acesso, como data/hora, host/caminho do URL esperado (para o Cloud IAP), endereço IP e porta de destino (para encapsulamento TCP do Cloud IAP) ou níveis de acesso. Os níveis de acesso são derivados da configuração de uma organização e, atualmente, permitem restrições aos endereços IP de origem permitidos. Consulte a documentação do Access Context Manager para mais informações.

Exemplo de expressões de data/hora

Permitir acesso temporariamente até uma data/hora de validade especificada:

request.time < timestamp("2019-01-01T07:00:00Z")

Permitir acesso somente durante horários de trabalho especificados:

request.time.getHours("Europe/Berlin") >= 9 &&
request.time.getHours("Europe/Berlin") <= 17 &&
request.time.getDayOfWeek("Europe/Berlin") >= 1 &&
request.time.getDayOfWeek("Europe/Berlin") <= 5

Permitir acesso apenas para um mês e ano especificados:

request.time.getFullYear("Europe/Berlin") == 2018
request.time.getMonth("Europe/Berlin") < 6

Alguns formatos válidos:

Exemplo de expressões de host/caminho de URL (para o Cloud IAP)

Permitir acesso apenas a determinados subdomínios ou caminhos de URL na solicitação:

request.host == "hr.example.com"
request.host.endsWith(".example.com")
request.path == "/admin/payroll.js"
request.path.startsWith("/admin")

Exemplo de expressões de IP/porta de destino (para Cloud IAP para tunelamento TCP)

Permitir acesso a determinado IP ou porta de destino na solicitação:

destination.ip == "14.0.0.1"
destination.ip != "127.0.0.1"
destination.port == 22
destination.port > 21 && destination.port <= 23

Exemplo de expressão de nível de acesso

Permitir acesso somente se a solicitação atender a um nível de acesso definido pelo cliente, caso em que os intervalos de IP da rede corporativa são especificados no nível de acesso "TrustedCorpNet":

"accessPolicies/199923665455/accessLevels/TrustedCorpNet" in
request.auth.access_levels

Exemplo de expressão com atributos diferentes

Permitir acesso quando a solicitação é feita durante um horário específico, correspondendo a um prefixo de nome de recurso, com o nível de acesso pretendido e para um tipo de recurso específico:

request.time > timestamp("2018-08-03T16:00:00-07:00") &&
request.time < timestamp("2018-08-03T16:05:00-07:00") &&
((resource.name.startsWith("projects/project-123/zones/us-east1-b/instances/dev") ||
 (resource.name.startsWith("projects/project-123/zones/us-east1-b/instances/prod") &&
  "accessPolicies/34569256/accessLevels/CorpNetwork2" in request.auth.access_levels)) ||
 resource.type != "google.cloud.compute.Instance")

Como definir condições

As vinculações de papéis condicionais são definidas usando o mesmo método setIamPolicy que é usado para configurar qualquer outra vinculação. Por exemplo, para definir uma vinculação de papel com uma condição em um projeto, use a API REST, a ferramenta de linha de comando gcloud ou a página do IAM no Console do Cloud.

No exemplo JSON a seguir, demonstramos uma condição no contexto de uma política completa do Cloud IAM:

{
  "bindings": [
    {
      "role": "roles/storage.objectViewer",
      "members": "user:jane@example.com",
      "condition": {
          "title": "expires_end_of_2018",
          "description": "Expires at midnight on 2018-12-31",
          "expression": "request.time < timestamp(\"2019-01-01T00:00:00Z\")"
      }
    }
  ]
}
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Cloud IAM