Gerenciar vinculações de papéis condicionais

Neste tópico, descrevemos como adicionar, modificar e remover vinculações de papéis condicionais nas políticas de gerenciamento de identidade e acesso (IAM, na sigla em inglês).

Antes de começar

  • Ative a IAM API.

    Ative a API

  • Leia a Visão geral das condições do IAM para entender os princípios básicos das vinculações de papéis condicionais do IAM.

  • Revise a referência sobre atributo para saber mais sobre os diferentes atributos condicionais que podem ser usados em uma expressão.

Funções exigidas

Para gerenciar vinculações de papéis condicionais na política do IAM de um recurso, você precisa de permissões para acessar o recurso e receber e definir a política do IAM para o recurso. Essas permissões têm o seguinte formato, em que SERVICE é o nome do serviço que possui o recurso e RESOURCE_TYPE é o nome do tipo de recurso para o qual você quer gerenciar o acesso:

  • SERVICE.RESOURCE_TYPE.get
  • SERVICE.RESOURCE_TYPE.getIamPolicy
  • SERVICE.RESOURCE_TYPE.setIamPolicy

Por exemplo, para gerenciar vinculações de papéis condicionais na política de IAM de um projeto, você precisa das seguintes permissões:

  • resourcemanager.projects.get
  • resourcemanager.projects.getIamPolicy
  • resourcemanager.projects.setIamPolicy

Para receber as permissões necessárias, peça ao administrador para conceder a você um papel predefinido ou personalizado que inclua as permissões. Por exemplo, o administrador pode conceder a você o papel de Administrador de segurança (roles/iam.securityAdmin), que inclui permissões para receber quase todos os recursos do Google Cloud e gerenciar as políticas do IAM.

Adicionar uma vinculação de papel condicional a uma política

As vinculações de papéis condicionais podem ser adicionadas a políticas novas ou atuais do IAM para controlar ainda mais o acesso aos recursos do Google Cloud. Esta seção mostra como adicionar uma condição baseada em tempo a uma política usando o Console do Google Cloud, a Google Cloud CLI e a API REST.

Para adicionar uma vinculação de papel condicional a uma política existente:

Console

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

    Acessar a página do IAM

  2. Na lista de participantes, localize o participante desejado e clique no botão .

  3. No painel Editar permissões, localize o papel desejado para configurar uma condição. 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. Na lista suspensa 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. 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("2019-12-31T12: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 de permissão 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 > file-path

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

Observe o version atual da política de permissão, que é 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). 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_2019",
          "description": "Expires at noon on 2019-12-31",
          "expression":
            "request.time < timestamp('2019-12-31T12:00:00Z')"
      }
    }
  ],
  "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 file-path

A nova política será aplicada, e a vinculaçã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:

  • 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:project-owner@example.com"
      ]
    },
    {
      "role": "roles/iam.securityReviewer",
      "members": [
        "user:travis@example.com"
      ]
    }
  ]
}

Observe o version atual da política de permissão, que é 1.

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:

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/iam.securityReviewer",
      "condition": {
        "title": "Expires_2019",
        "description": "Expires at noon on 2019-12-31",
        "expression": "request.time < timestamp('2019-12-31T12:00:00Z')"
      },
      "members": [
        "user:travis@example.com"
      ]
    }
  ]
}

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


Modificar uma vinculação de papel condicional existente

Depois de criar uma vinculação de papel condicional, é possível alterar a expressão de condição a qualquer momento. Esta seção mostra como atualizar uma condição baseada em tempo em uma política usando o Console do Google Cloud, a Google Cloud CLI e a API REST.

Para modificar uma vinculação de papel condicional de uma política existente:

Console

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

    Acessar a página do IAM

  2. Na lista de participantes, localize o participante desejado e clique no botão .

  3. No painel Editar permissões, localize o papel desejado para configurar uma condição. Em seguida, em Condição do IAM (opcional), clique no nome da condição atual para editá-la.

  4. No painel Editar condição, é possível manter ou atualizar o título e a descrição da condição.

  5. Edite a expressão de condição existente ou adicione uma nova 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. Adicione uma nova expressão de condição ou modifique a expressão de condição existente.
    2. Clique em Salvar para aplicar a condição.
    3. 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 adicione uma nova expressão de condição ou modifique a expressão de condição existente.
    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 de permissão 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 > file-path

É feito o download da política do IAM no formato JSON:

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:fatima@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_3_months",
        "description": "Expires in 3 months on 2019-10-12",
        "expression":
          "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Neste exemplo, atualizaremos os valores de title, description e do carimbo de data/hora na expressão para alterar a duração da condição de acesso programado. Atualize a parte destacada da condição a seguir (substituindo os valores pelos seus):

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:fatima@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_5_months",
        "description": "Expires in 5 months on 2020-01-12",
        "expression":
          "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07: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 file-path

A política atualizada foi aplicada, e a vinculação de papéis de fatima@example.com expirará no novo horário.

REST

Use o padrão read-mod-write para modificar a vinculação de papel condicional.

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:

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

Corpo JSON da solicitação:

{
  "options": {
    "requestedPolicyVersion": 3
  }
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_3_months",
        "description": "Expires in 3 months on 2019-10-12",
        "expression":
          "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
      },
      "members": [
        "user:fatima@example.com"
      ]
    }
  ]
}

Em seguida, modifique a vinculação de papel condicional na política. Neste exemplo, atualizaremos os valores do carimbo de data/hora para alterar a duração da condição de acesso programado. Atualize a parte destacada da expressão de condição a seguir (substituindo o carimbo de data/hora pelo seu):

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_5_months",
        "description": "Expires in 5 months on 2020-01-12",
        "expression":
          "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')"
      },
      "members": [
        "user:fatima@example.com"
      ]
    }
  ]
}

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": {
    "etag": "BwWKmjvelug=",
    "version": 3,
    "bindings": [
      {
        "role": "roles/owner",
        "members": [
          "user:project-owner@example.com"
        ]
      },
      {
        "role": "roles/bigquery.dataViewer",
        "condition": {
          "title": "Duration_5_months",
          "description": "Expires in 5 months on 2020-01-12",
          "expression":
            "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')"
        },
        "members": [
          "user:fatima@example.com"
        ],
      }
    ]
  }
}

Para enviar a solicitação, expanda uma destas opções:

A resposta contém a política de permissão atualizada.


Remover uma condição de uma vinculação de papel

Remover uma condição de uma vinculação de papel não revoga o papel. Em vez disso, ele permite que todos os principais nessa vinculação de papel usem as permissões no papel incondicionalmente.

Esta seção mostra como remover uma condição baseada em tempo de uma política de permissão usando o console do Google Cloud, a CLI do Google Cloud e a API REST.

Para remover uma condição de uma vinculação de papel em uma política de permissão:

Console

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

    Acessar a página do IAM

  2. Na lista de participantes, localize o participante desejado e clique no botão .

  3. No painel Editar permissões, localize a vinculação de papel desejada. Em seguida, em Condição do IAM (opcional), clique no nome de uma condição atual.

  4. No painel Editar condição, clique no botão para remover a condição. Você será solicitado a confirmar a exclusão da 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.

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

É feito o download da política do IAM no formato JSON:

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:fatima@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_3_months",
        "description": "Expires in 3 months on 2019-10-12",
        "expression":
          "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Para remover a vinculação de papel condicional da política, remova o bloco condition, conforme mostrado abaixo:

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:fatima@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

O version ainda está definido como 3, apesar de as vinculações de papel não condicionais exigirem apenas uma política de permissão de versão 1. Recomendamos que você sempre use o número de versão mais alto ao definir uma política de permissão, tanto para vinculações de papéis condicionais quantos para vinculações de papéis incondicionais. Veja os requisitos de versão para mais informações. A CLI do gcloud atualiza automaticamente o número da versão da política de permissão.

Em seguida, defina a política atualizada executando o comando gcloud projects set-iam-policy:

gcloud projects set-iam-policy project-id file-path

A política atualizada é aplicada, removendo a vinculação de papel condicional para fatima@example.com. A vinculação de papéis não expirará mais.

REST

Use o padrão read-modify-write para remover a vinculação de papel condicional.

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:

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

Corpo JSON da solicitação:

{
  "options": {
    "requestedPolicyVersion": 3
  }
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_3_months",
        "description": "Expires in 3 months on 2019-10-12",
        "expression":
          "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
      },
      "members": [
        "user:fatima@example.com"
      ]
    }
  ]
}

Em seguida, modifique a política removendo a vinculação de papel condicional:

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "members": [
        "user:fatima@example.com"
      ]
    }
  ]
}

O version ainda está definido como 3, apesar de as vinculações de papel não condicionais exigirem apenas uma política de permissão de versão 1. Recomendamos que você sempre use o número de versão mais alto ao definir uma política de permissão, tanto para vinculações de papéis condicionais quantos para vinculações de papéis incondicionais. Veja os requisitos de versão para mais informações.

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": {
    "etag": "BwWKmjvelug=",
    "version": 3,
    "bindings": [
      {
        "role": "roles/owner",
        "members": [
          "user:project-owner@example.com"
        ]
      },
      {
        "role": "roles/bigquery.dataViewer",
        "members": [
          "user:fatima@example.com"
        ]
      }
    ]
  }
}

Para enviar a solicitação, expanda uma destas opções:

A resposta contém a política de permissão atualizada.


A seguir