Em organizações grandes, pode ser útil permitir que as equipas geram independentemente as políticas de autorização para os respetivos recursos. No entanto, permitir que um principal conceda ou revogue todas as funções do IAM pode aumentar significativamente o risco de segurança.
Pode definir limites nas funções que um principal pode conceder e revogar com as condições de gestão de identidade e de acesso (IAM) e o atributo da API iam.googleapis.com/modifiedGrantsByRole
. Estes limites permitem-lhe
criar administradores da IAM limitados que podem gerir as políticas de autorização da sua própria equipa, mas apenas dentro dos limites que definiu.
Antes de começar
Enable the Resource Manager API.
Familiarize-se com a estrutura das políticas de autorização.
Compreenda as condições do IAM.
Autorizações necessárias
Para receber as autorizações de que precisa para criar administradores do IAM limitados para um projeto, uma pasta ou uma organização, peça ao seu administrador que lhe conceda as seguintes funções do IAM no recurso para o qual quer criar um administrador do IAM limitado (projeto, pasta ou organização):
-
Para criar um administrador de IAM limitado para um projeto:
Administrador de IAM do projeto (
roles/resourcemanager.projectIamAdmin
) -
Para criar um administrador de IAM limitado para uma pasta:
Administrador da pasta (
roles/resourcemanager.folderAdmin
) -
Para criar um administrador de IAM limitado para um projeto, uma pasta ou uma organização:
Administrador da organização (
roles/resourcemanager.organizationAdmin
)
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Estas funções predefinidas contêm as autorizações necessárias para criar administradores do IAM limitados para um projeto, uma pasta ou uma organização. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:
Autorizações necessárias
São necessárias as seguintes autorizações para criar administradores do IAM limitados para um projeto, uma pasta ou uma organização:
-
Para criar um administrador de IAM limitado para um projeto:
-
resourcemanager.projects.getIamPolicy
-
resourcemanager.projects.setIamPolicy
-
-
Para criar um administrador do IAM limitado para uma pasta:
-
resourcemanager.folders.getIamPolicy
-
resourcemanager.folders.setIamPolicy
-
-
Para criar um administrador do IAM limitado para uma organização:
-
resourcemanager.organizations.getIamPolicy
-
resourcemanager.organizations.setIamPolicy
-
Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.
Exemplos de utilização comuns
As secções seguintes descrevem como pode usar a concessão de funções limitada para ativar a gestão de autosserviço das políticas de autorização.
Crie administradores de IAM limitados
Considere um cenário em que quer permitir que um utilizador, o Noam, atue como administrador do IAM limitado para o seu projeto. Quer que o Noam possa conceder e revogar apenas as funções de administrador do App Engine (roles/appengine.appAdmin
) e visualizador do App Engine (roles/appengine.appViewer
) para o seu projeto.
Para conceder esta capacidade limitada, concede condicionalmente a Noam a função de administrador de IAM do projeto (roles/resourcemanager.projectIamAdmin
). A função de administrador de IAM do projeto permite a Noam conceder e revogar funções de IAM, e a condição limita as funções que Noam pode conceder e revogar:
{ "version": 3, "etag": "BwWKmjvelug=", "bindings": [ { "members": [ "user:owner@example.com" ], "role": "roles/owner" }, { "members": [ "user:noam@example.com" ], "role": "roles/resourcemanager.projectIamAdmin", "condition": { "title": "only_appengine_admin_viewer_roles", "description": "Only allows changes to role bindings with the App Engine Admin or Viewer roles", "expression": "api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(['roles/appengine.appAdmin', 'roles/appengine.appViewer'])" } } ] }
Esta associação de funções condicional permite que o Noam faça o seguinte:
- Conceda as funções de administrador do App Engine e leitor do App Engine para o projeto.
- Revogue as funções de administrador do App Engine e leitor do App Engine para o projeto.
- Adicione, remova ou modifique condições para associações de funções ao nível do projeto que concedem as funções de administrador e visualizador do App Engine.
- Executar outras ações permitidas pela função de administrador do IAM do projeto que não
modificam a política de permissão do projeto. Por exemplo, o Noam pode usar o método
projects.getIamPolicy
para obter a política de permissão do projeto.
Esta associação de funções condicional não permite que o Noam faça nenhuma das seguintes ações:
- Modificar políticas de permissão para recursos que não sejam o projeto.
- Conceder funções que não sejam as funções de administrador ou leitor do App Engine.
- Revogue funções que não sejam as funções de administrador do App Engine ou leitor do App Engine.
- Adicionar, remover ou modificar condições para associações de funções que não concedem as funções de administrador ou visualizador do App Engine.
Permitir que os utilizadores façam a gestão de administradores da IAM limitados
Considere um cenário em que quer tornar a utilizadora Lila um administrador do IAM limitado para a respetiva equipa. Quer que a Lila possa conceder e revogar apenas a função de administrador de computação (roles/compute.admin
) para o respetivo projeto.
No entanto, também quer permitir que a Lila selecione outros utilizadores para atuarem como administradores do IAM limitados. Por outras palavras, quer permitir que a Lila permita que outros utilizadores concedam e revoguem apenas a função de administrador de computação.
Pode pensar que a solução é conceder à Lila a função de administrador de IAM do projeto (roles/resourcemanager.projectIamAdmin
) e, em seguida, dar-lhe a capacidade de conceder ou revogar essa função para outras pessoas. No entanto, se conceder à Lila a função de administrador do IAM do projeto, ela pode remover a condição da sua própria função e conceder a si própria a capacidade de conceder ou revogar qualquer função do IAM.
Para ajudar a evitar esta escalada de privilégios, crie um grupo Google, iam-compute-admins
, para os administradores do IAM limitados do projeto. Em seguida, adiciona a Lila ao grupo e torna-a gestora do grupo.
Depois de criar o grupo, concede condicionalmente ao grupo a função de administrador de IAM do projeto (roles/resourcemanager.projectIamAdmin
). A função de administrador de IAM do projeto permite que os membros do grupo concedam e revoguem funções de IAM, e a condição limita as funções que podem conceder e revogar:
{ "version": 3, "etag": "BwWKmjvelug=", "bindings": [ { "members": [ "user:owner@example.com" ], "role": "roles/owner" }, { "members": [ "group:iam-compute-admins@example.com" ], "role": "roles/resourcemanager.projectIamAdmin", "condition": { "title": "only_compute_admin_role", "description": "Only allows changes to role bindings for the Compute Admin role", "expression": "api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(['roles/compute.admin'])" } } ] }
Enquanto membro do grupo iam-compute-admins
, a Lila pode fazer o seguinte:
- Conceda a função de administrador de computação para o projeto adicionando uma nova associação para a função ou adicionando um principal a uma associação existente para a função.
- Revogue a função de administrador de computação removendo uma associação existente para a função ou removendo um principal de uma associação existente para a função.
- Modificar concessões para a função de administrador de computação adicionando, removendo ou modificando condições anexadas a associações para a função.
- Realizar outras ações permitidas pela função de administrador de IAM do projeto que não modifiquem a política de autorização do projeto. Por exemplo, pode usar o método
projects.getIamPolicy
para obter a política de permissão do projeto.
Enquanto gestora do grupo iam-compute-admins
, a Lila pode permitir que outros utilizadores concedam ou revoguem a função de administrador de computação adicionando-os ao grupo iam-compute-admins
.
O Lila não pode fazer o seguinte:
- Conceder a si própria a capacidade de atribuir ou revogar outras funções.
- Modificar políticas de permissão para recursos que não sejam o projeto.
- Conceder funções que não sejam a função de administrador de computação.
- Revogue funções que não sejam a função de administrador de computação.
- Adicione, remova ou modifique condições para associações de funções que não concedem a função de administrador de computação.
Limite a concessão de funções
As secções seguintes explicam como permitir que os principais concedam ou revoguem apenas determinadas funções.
Escreva uma expressão de condição para limitar a concessão de funções
Para limitar a capacidade de um principal de conceder funções, escreva uma expressão de condição que especifique as funções que um principal pode conceder ou revogar.
Use o seguinte formato para a expressão de condição:
api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(roles)
Esta expressão faz o seguinte:
Obtém o atributo da API
iam.googleapis.com/modifiedGrantsByRole
através da funçãoapi.getAttribute()
.Para um pedido de definição da política de autorização de um recurso, este atributo contém os nomes das funções das associações que o pedido modifica. Para outros tipos de pedidos, o atributo não está definido. Nestes casos, a função devolve o valor predefinido (
[]
).Usa a função
hasOnly()
Idioma de expressão comum (IEC) para definir e aplicar as funções que o principal tem autorização para conceder ou revogar.A entrada para a função
hasOnly()
é uma lista das funções que o principal tem autorização para conceder ou revogar. Se as funções no atributoiam.googleapis.com/modifiedGrantsByRole
estiverem incluídas nesta lista, a função devolvetrue
. Se não forem, a função devolvefalse
.Se o atributo
iam.googleapis.com/modifiedGrantsByRole
contiver o valor predefinido ([]
), a função devolvetrue
, porque[]
não contém funções não incluídas na lista.
Para personalizar esta expressão, substitua roles
por uma lista das funções que o principal tem autorização para conceder ou revogar. Por exemplo, para permitir que o principal conceda ou revogue apenas as funções de editor do Pub/Sub (roles/pubsub.editor
) e publicador do Pub/Sub (roles/pubsub.publisher
), use o valor ['roles/pubsub.editor', 'roles/pubsub.publisher']
.
Pode incluir até 10 valores na lista de funções permitidas. Todos estes valores têm de ser constantes de string.
Operadores lógicos para declarações hasOnly()
Não use os operadores &&
ou ||
para juntar várias declarações hasOnly()
numa única condição. Se o fizer, os pedidos que concedem ou revogam várias funções podem falhar, mesmo que o principal possa conceder ou revogar essas funções individualmente.
Por exemplo, considere a seguinte condição:
api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []) .hasOnly(['roles/pubsub.editor']) || api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []) .hasOnly(['roles/pubsub.publisher'])
Esta condição é avaliada como true
se um pedido conceder a função roles/pubsub.editor
ou a função roles/pubsub.publisher
, mas é avaliada como false
se um pedido conceder ambas as funções roles/pubsub.editor
e roles/pubsub.publisher
.
Limite a concessão de funções com associações de funções condicionais
Para permitir que um principal conceda ou revogue apenas determinadas funções, use a expressão de condição da secção anterior para criar uma associação de funções condicional. Em seguida, adicione a associação de funções condicional à política de autorização de um recurso.
Selecione um recurso que represente o âmbito para o qual quer permitir que um principal conceda e revoque funções:
- Se quiser permitir que um principal conceda e revogue determinadas funções para todos os recursos numa organização, selecione uma organização.
- Se quiser permitir que um principal conceda e revogue determinadas funções para todos os recursos numa pasta, selecione uma pasta.
- Se quiser permitir que um principal conceda e revogue determinadas funções para todos os recursos num projeto, selecione um projeto.
Selecione uma função que permita a um principal definir a política de permissão para o tipo de recurso que selecionou (projeto, pasta ou organização). Para seguir o princípio do menor privilégio, escolha uma das seguintes funções predefinidas:
- Projetos: administrador de IAM de projetos (
roles/resourcemanager.projectIamAdmin
) - Pastas: administrador da IAM de pastas (
roles/resourcemanager.folderIamAdmin
) Organizações: administrador da organização (
roles/resourcemanager.organizationAdmin
).
Em alternativa, escolha uma função personalizada que inclua as autorizações
resourcemanager.resource-type.setIamPolicy
eresourcemanager.resource-type.getIamPolicy
, em queresource-type
éproject
,folder
ouorganization
.- Projetos: administrador de IAM de projetos (
Conceder condicionalmente a um principal a função escolhida no projeto, na pasta ou na organização que selecionou.
A nova política de autorização é aplicada e o seu principal pode modificar associações apenas para as funções que permitiu.
Consola
Na Google Cloud consola, aceda à página IAM.
Certifique-se de que o nome do seu projeto, pasta ou organização aparece no seletor de recursos na parte superior da página. O seletor de recursos indica em que projeto, pasta ou organização está a trabalhar atualmente.
Se não vir o nome do seu recurso, clique no seletor de recursos e, de seguida, selecione o recurso.
Na lista de responsáveis, localize o responsável que vai conceder e revogar funções e clique no botão
.No painel Editar autorizações, selecione a função que escolheu anteriormente. Em seguida, em Condição do IAM (opcional), clique em Adicionar condição do IAM.
No painel Editar condição, introduza um título e uma descrição opcional para a condição.
Clique no separador Editor de condições e introduza a expressão que escreveu em Escrever uma expressão de condição para limitar a concessão de funções. Esta expressão limita as funções que o principal pode conceder ou revogar.
Por exemplo, a seguinte expressão de condição limita o principal à concessão e revogação das funções de editor do Pub/Sub (
roles/pubsub.editor
) e publicador do Pub/Sub (roles/pubsub.publisher
):api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(['roles/pubsub.editor', 'roles/pubsub.publisher'])
Aviso: não inclua os seguintes tipos de funções na lista de funções permitidas:
-
Funções com autorizações para conceder e revogar funções de IAM (ou seja, funções com nomes de autorizações que terminam em
setIamPolicy
). -
Funções personalizadas que o administrador do IAM limitado pode modificar. Por exemplo, se o administrador de IAM limitado também tiver a função de administrador de funções (
roles/iam.roleAdmin
) num projeto, não lhe permita conceder nem revogar funções personalizadas ao nível do projeto.
Os administradores de IAM limitados que podem conceder e revogar estes tipos de funções podem conceder a si próprios autorização para conceder e revogar todas as funções de IAM. Consulte o artigo Escrever uma expressão de condição para limitar a concessão de funções para mais informações.
-
Funções com autorizações para conceder e revogar funções de IAM (ou seja, funções com nomes de autorizações que terminam em
Clique em Guardar para aplicar a condição.
Depois de fechar o painel Editar condição, clique em Guardar no painel Editar autorizações para atualizar a política de autorização.
gcloud
As políticas de permissão são definidas através do padrão read-modify-write.
Primeiro, leia a política de permissão para o recurso:
Execute o comando
get-iam-policy
. Este comando obtém a política de autorização atual para o recurso.Comando:
gcloud resource-type get-iam-policy resource-id --format=json > path
Substitua os seguintes valores:
resource-type
: o tipo de recurso para o qual quer permitir que um principal conceda ou revogue funções. Use uma das seguintes opções:projects
,resource-manager folders
ouorganizations
.resource-id
: o ID do Google Cloud projeto, da pasta ou da organização.path
: o caminho do ficheiro para transferir a política de permissão.
A política de permissão é guardada no formato JSON, por exemplo:
{ "bindings": [ { "members": [ "user:project-owner@example.com" ], "role": "roles/owner" } ], "etag": "BwWKmjvelug=", "version": 1 }
Em seguida, modifique a política de permissão.
Para permitir que um principal modifique apenas as associações de determinadas funções, adicione a associação de funções condicional realçada:
{ "bindings": [ { "members": [ "user:owner@example.com" ], "role": "roles/owner" }, { "members": [ "principal" ], "role": "role", "condition": { "title": "title", "description": "description", "expression": "expression" } } ], "etag": "BwWKmjvelug=", "version": 3 }
Substitua os seguintes valores:
principal
: o principal que vai conceder ou revogar determinadas funções. Por exemplo,user:my-user@example.com
. Para ver os formatos de cada tipo principal, consulte o artigo Identificadores de diretores.role
: a função que escolheu nos passos anteriores. Esta função tem de incluir a autorizaçãosetIamPolicy
para o tipo de recurso que escolheu.title
: uma string que descreve brevemente a condição. Por exemplo,only_pubsub_roles
.description
: opcional. Uma descrição adicional para a condição. Por exemplo,Only allows granting/revoking the Pub/Sub editor and publisher roles
.expression
: a expressão que escreveu em Escrever uma expressão de condição para limitar a concessão de funções. Esta expressão limita as funções que o principal pode conceder ou revogar.Por exemplo, a seguinte expressão de condição limita o principal à concessão e revogação das funções de editor do Pub/Sub (
roles/pubsub.editor
) e publicador do Pub/Sub (roles/pubsub.publisher
):api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(['roles/pubsub.editor', 'roles/pubsub.publisher'])
Aviso: não inclua os seguintes tipos de funções na lista de funções permitidas:
-
Funções com autorizações para conceder e revogar funções de IAM (ou seja, funções com nomes de autorizações que terminam em
setIamPolicy
). -
Funções personalizadas que o administrador do IAM limitado pode modificar. Por exemplo, se o administrador de IAM limitado também tiver a função de administrador de funções (
roles/iam.roleAdmin
) num projeto, não lhe permita conceder nem revogar funções personalizadas ao nível do projeto.
Os administradores de IAM limitados que podem conceder e revogar estes tipos de funções podem conceder a si próprios autorização para conceder e revogar todas as funções de IAM. Consulte o artigo Escrever uma expressão de condição para limitar a concessão de funções para mais informações.
-
Funções com autorizações para conceder e revogar funções de IAM (ou seja, funções com nomes de autorizações que terminam em
Por último, escreva a política de permissão atualizada:
Defina a nova política de permissão executando o comando
set-iam-policy
para o recurso:gcloud resource-type set-iam-policy resource-id path
Substitua os seguintes valores:
resource-type
: o tipo de recurso para o qual quer permitir que um principal conceda ou revogue funções. Use uma das seguintes opções:projects
,resource-manager folders
ouorganizations
.resource-id
: o ID do Google Cloud projeto, da pasta ou da organização.path
: um caminho para o ficheiro que contém a política de permissão atualizada.
A nova política de autorização é aplicada e o principal vai poder modificar as associações apenas para as funções que autorizou.
REST
As políticas de permissão são definidas através do padrão read-modify-write.
Primeiro, leia a política de permissão para o recurso:
O método
getIamPolicy
da API Resource Manager obtém a política de autorização de um projeto, uma pasta ou uma organização.Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
API_VERSION
: a versão da API a usar. Para projetos e organizações, usev1
. Para pastas, usev2
.RESOURCE_TYPE
: o tipo de recurso cuja política quer gerir. Use o valorprojects
,folders
ouorganizations
.RESOURCE_ID
: o ID do Google Cloud projeto, da organização ou da pasta. Os IDs dos projetos são strings alfanuméricas, comomy-project
. Os IDs das pastas e das organizações são numéricos, como123456789012
.POLICY_VERSION
: a versão da política a ser devolvida. Os pedidos devem especificar a versão da política mais recente, que é a versão 3 da política. Consulte o artigo Especificar uma versão da política ao obter uma política para ver detalhes.
Método HTTP e URL:
POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:getIamPolicy
Corpo JSON do pedido:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
Para enviar o seu pedido, expanda uma destas opções:
A resposta contém a política de autorização do recurso. Por exemplo:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/owner", "members": [ "user:my-user@example.com" ] } ] }
Em seguida, modifique a política de permissão.
Adicione uma associação de funções condicional que permita a um principal conceder e revogar apenas determinadas funções. Certifique-se de que altera o campo
version
para o valor3
:{ "version": 3, "etag": "BwWKmjvelug=", "bindings": [ { "members": [ "user:owner@example.com" ], "role": "roles/owner" }, { "members": [ "PRINCIPAL" ], "role": "ROLE", "condition": { "title": "TITLE", "description": "DESCRIPTION", "expression": "EXPRESSION" } } ] }
PRINCIPAL
: o principal que vai conceder ou revogar determinadas funções. Por exemplo,user:my-user@example.com
. Para ver os formatos de cada tipo principal, consulte o artigo Identificadores de diretores.ROLE
: a função que escolheu nos passos anteriores. Esta função tem de incluir a autorizaçãosetIamPolicy
para o tipo de recurso que escolheu.TITLE
: uma string que descreve brevemente a condição. Por exemplo,only_pubsub_roles
.DESCRIPTION
: opcional. Uma descrição adicional para a condição. Por exemplo,Only allows granting/revoking the Pub/Sub editor and publisher roles
.EXPRESSION
: a expressão que escreveu em Escrever uma expressão de condição para limitar a concessão de funções. Esta expressão limita as funções que o principal pode conceder ou revogar.Por exemplo, a seguinte expressão de condição limita o principal à concessão e revogação das funções de editor do Pub/Sub (
roles/pubsub.editor
) e publicador do Pub/Sub (roles/pubsub.publisher
):api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(['roles/pubsub.editor', 'roles/pubsub.publisher'])
Aviso: não inclua os seguintes tipos de funções na lista de funções permitidas:
-
Funções com autorizações para conceder e revogar funções de IAM (ou seja, funções com nomes de autorizações que terminam em
setIamPolicy
). -
Funções personalizadas que o administrador do IAM limitado pode modificar. Por exemplo, se o administrador de IAM limitado também tiver a função de administrador de funções (
roles/iam.roleAdmin
) num projeto, não lhe permita conceder nem revogar funções personalizadas ao nível do projeto.
Os administradores de IAM limitados que podem conceder e revogar estes tipos de funções podem conceder a si próprios autorização para conceder e revogar todas as funções de IAM. Consulte o artigo Escrever uma expressão de condição para limitar a concessão de funções para mais informações.
-
Funções com autorizações para conceder e revogar funções de IAM (ou seja, funções com nomes de autorizações que terminam em
Por último, escreva a política de permissão atualizada:
O método
setIamPolicy
da API Resource Manager define a política de permissão no pedido como a nova política de permissão para o projeto, a pasta ou a organização.Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
API_VERSION
: a versão da API a usar. Para projetos e organizações, usev1
. Para pastas, usev2
.RESOURCE_TYPE
: o tipo de recurso cuja política quer gerir. Use o valorprojects
,folders
ouorganizations
.RESOURCE_ID
: o ID do Google Cloud projeto, da organização ou da pasta. Os IDs dos projetos são strings alfanuméricas, comomy-project
. Os IDs das pastas e das organizações são numéricos, como123456789012
.-
POLICY
: Uma representação JSON da política que quer definir. Para mais informações sobre o formato de uma política, consulte a referência de políticas.Por exemplo, para definir a política apresentada no passo anterior, substitua
POLICY
pelo seguinte:{ "version": 3, "etag": "BwWKmjvelug=", "bindings": [ { "members": [ "user:owner@example.com" ], "role": "roles/owner" }, { "members": [ "principal" ], "role": "role", "condition": { "title": "title", "description": "description", "expression": "expression" } } ] }
Método HTTP e URL:
POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:setIamPolicy
Corpo JSON do pedido:
{ "policy": POLICY }
Para enviar o seu pedido, expanda uma destas opções:
A resposta contém a política de permissão atualizada.
O que se segue?
- Aplique o princípio do menor privilégio com recomendações de funções.
- Saiba como usar as condições do IAM para configurar o acesso temporário e configurar o acesso baseado em recursos.