Ao visualizar uma política de permissão, você verá nomes de papéis que incluem
a string withcond
, seguida de um valor de hash. Por exemplo, um nome de papel pode ser exibido como roles/iam.serviceAccountAdmin_withcond_2b17cc25d2cd9e2c54d8
.
Nesta página, explicamos quando e por que a string withcond
é exibida em uma política do IAM. Saiba também quais são as ações recomendadas caso essa string seja exibida.
Versões de política e vinculações de papéis condicionais
Uma política do IAM pode ser representada de várias formas diferentes. Cada formulário é conhecido como uma versão da política de permissão.
Em uma política do IAM que usa a versão 1
, algumas vinculações de papel podem conter a string withcond
em um nome de papel, seguido por um valor de hash:
{
"bindings": [
{
"members": [
"user:dana@example.com"
],
"role": "roles/iam.serviceAccountAdmin_withcond_2b17cc25d2cd9e2c54d8"
}
],
"etag": "BwUjMhCsNvY=",
"version": 1
}
Esse formato indica que a vinculação de papel é condicional. Em outras palavras, o papel é concedido apenas se condições específicas forem atendidas.
As políticas de versão 1
não mostram essas condições. Se você vir a string withcond
e um valor de hash, a vinculação de papel incluirá uma condição que não será exibida.
Solução: especifique a versão 3 da política
Para garantir que você possa visualizar e atualizar toda a política de permissões, incluindo as
condições dela, sempre especifique a versão 3
ao
receber ou definir uma política de permissão. Para especificar a versão 3
da política, conclua as tarefas nas seções a seguir.
Atualizar a ferramenta gcloud
Se você usar a CLI do Google Cloud, execute gcloud version
para verificar o número da versão. A saída inclui uma string semelhante a Google Cloud CLI 279.0.0
.
Se o número da versão for menor que 263.0.0, execute gcloud components update
para atualizar a CLI gcloud. Na versão
263.0.0 e posteriores, a CLI gcloud
especifica automaticamente uma versão da política de permissão que aceita condições.
Atualizar bibliotecas de clientes
Se seu aplicativo usa uma biblioteca de cliente, siga estas etapas:
Encontre o nome e o número da versão da biblioteca de cliente e, em seguida, consulte a lista de bibliotecas de cliente compatíveis com versões de política.
Se você já usa uma versão recente da biblioteca de cliente e ela é compatível com a versões de política, não é necessário atualizar sua biblioteca de cliente. Continue para a próxima etapa.
Se você usar uma versão mais antiga da biblioteca de cliente e uma versão mais recente for compatível com versões de política, atualize a biblioteca de cliente para a versão mais recente.
Se você usar uma biblioteca de cliente que não seja compatível com versões de políticas, poderá adicionar outra biblioteca de cliente que seja compatível com versões de política para seu aplicativo. Use essa biblioteca de cliente para trabalhar com as políticas do IAM. Como alternativa, é possível usar a API REST do IAM diretamente.
Atualize qualquer código no aplicativo que receba e defina políticas do IAM:
- Ao receber uma política de permissão, sempre
especifique a versão
3
na solicitação. Ao definir uma política de permissão, sempre Defina o
version
da política de permissão para3
e incluir oetag
campo na solicitação.
- Ao receber uma política de permissão, sempre
especifique a versão
Atualizar chamadas da API REST
Se o aplicativo usar a API REST do IAM diretamente, atualize qualquer código que receba e defina políticas do IAM:
- Ao receber uma política de permissão, sempre
especifique a versão
3
na solicitação. Ao definir uma política de permissão, sempre Defina o
version
da política de permissão para3
e incluir oetag
campo na solicitação.
Atualizar ferramentas de gerenciamento para políticas
Se você mantiver cópias locais das políticas do IAM, por exemplo, se armazená-las em um sistema de controle de versões e tratá-las como código, verifique se todas as ferramentas usadas atendem a estes critérios:
- Todas as solicitações para receber ou definir uma política de permissão especificam a versão
3
- Todas as solicitações para definir uma política de permissão incluem o campo
etag
.
Se uma ferramenta não atender a esses critérios, procure uma versão atualizada da ferramenta.
Além disso, verifique se suas ferramentas de gerenciamento preservam as concessões de papel condicional, em vez de adicionar uma concessão de papel duplicado que não inclua uma condição. Por exemplo, considere o seguinte cenário:
Você concede o papel Criar contas de serviço (
roles/iam.serviceAccountCreator
) para o usuáriovikram@example.com
na pastamy-folder
. A política do IAM para a pasta é semelhante a este exemplo:{ "bindings": [ { "members": [ "user:vikram@example.com" ], "role": "roles/iam.serviceAccountCreator" } ], "etag": "BuFmmMhCsNY=", "version": 1 }
Você usa uma ferramenta para recuperar a política do IAM e armazená-la em um sistema de controle de versões.
Você adiciona uma condição para que
vikram@example.com
crie contas de serviço somente durante a semana normal de trabalho, com base na data e hora em Berlim, na Alemanha. A política atualizada do IAM é semelhante a este exemplo:{ "bindings": [ { "members": [ "user:vikram@example.com" ], "role": "roles/iam.serviceAccountCreator", "condition": { "title": "work_week_only", "expression": "request.time.getDayOfWeek('Europe/Berlin') >= 1 && request.time.getDayOfWeek('Europe/Berlin') <= 5" } } ], "etag": "BwWcR/B3tNk=", "version": 3 }
Você usa uma ferramenta para recuperar a política do IAM atualizada. A ferramenta não especifica uma versão da política de permissão ao solicitar a política de permissão. Portanto, você recebe uma versão de política de permissão
1
com um nome de papel modificado:{ "bindings": [ { "members": [ "user:vikram@example.com" ], "role": "roles/iam.serviceAccountCreator_withcond_a75dc089e6fa084bd379" } ], "etag": "BwWcR/B3tNk=", "version": 1 }
Neste ponto, a ferramenta de gerenciamento pode decidir que a vinculação de vikram@example.com
ao papel roles/iam.serviceAccountCreator
desapareceu e que precisa restaurar a vinculação de papel original à política:
Evitar: vinculação de papel adicional sem condição
{
"bindings": [
{
"members": [
"user:vikram@example.com"
],
"role": "roles/iam.serviceAccountCreator_withcond_a75dc089e6fa084bd379"
},
{
"members": [
"user:vikram@example.com"
],
"role": "roles/iam.serviceAccountCreator"
}
],
"etag": "BwWd3HjhKxE=",
"version": 1
}
Esta alteração não está correta. Ela concede o papel roles/iam.serviceAccountCreator
a vikram@example.com
independentemente do dia da semana. Como resultado, a condição da primeira vinculação de papel não tem efeito.
Se suas ferramentas de gerenciamento tentarem fazer esse tipo de alteração, não aprove a alteração. Em vez disso, você precisa atualizar suas ferramentas de gerenciamento para especificar a versão 3
da política nas solicitações.
A seguir
- Saiba mais sobre as políticas de permissão.
- Saiba como especificar uma versão da política de permissão quando você receber uma política de permissão ou definir uma política de permissão.
- Entenda como conceder acesso condicionalmente com as Condições do IAM.