Como 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

Como 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 existente usando o Console do Cloud, a ferramenta de linha de comando gcloud e a API REST.

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

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 desejado para configurar uma condição. 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("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.

Comando 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 > 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, que é 1. Para configurar a política com acesso expirável, adicione a expressão de condição 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_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.

API 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"
      ]
    }
  ]
}

Observe o version atual da política, 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, 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.


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 existente usando o Console do Cloud, a ferramenta de linha de comando gcloud e a API REST.

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

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 desejado para configurar uma condição. Em seguida, em Condição, clique no nome da condição existente 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.

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

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

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, 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": {
    "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 atualizada.


Como remover uma vinculação de papel condicional

Quando você remove a vinculação de papel condicional em uma política do IAM, o acesso ao recurso é restrito apenas à vinculação de papel. Esta seção mostra como remover uma condição baseada em tempo de uma política usando o Console do Cloud, a ferramenta de linha de comando gcloud e a API REST.

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

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 a vinculação de papel desejada. Em seguida, em Condição, clique no nome de uma condição existente.

  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.

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

Observe que version ainda está definido como 3, apesar de as vinculações de papel não condicionais exigirem apenas a versão 1 da política. Recomendamos que você sempre use a versão mais recente da política ao defini-la, tanto para vinculações de papéis condicionais quanto não condicionais. Veja os requisitos de versão para mais informações. Se você estiver usando a versão 263.0.0 ou mais recente da ferramenta gcloud, a versão mais recente da política será atualizada para você.

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.

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

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"
      ]
    }
  ]
}

Observe que version ainda está definido como 3, apesar de as vinculações de papel não condicionais exigirem apenas a versão 1 da política. Recomendamos que você sempre use a versão mais recente da política ao defini-la, tanto para vinculações de papéis condicionais quanto não condicionais. Veja os requisitos de versão para mais informações.

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