O Google Cloud oferece o gerenciamento de identidade e acesso (IAM), que permite a concessão de acesso mais granular a recursos específicos do Google Cloud e impede o acesso indesejado a outros recursos. Com o IAM, é possível adotar o princípio de segurança do menor privilégio para conceder apenas o acesso necessário aos recursos.
Por meio da definição de políticas do IAM, você pode controlar quem (usuários) tem qual acesso (funções) a quais recursos. As políticas de IAM concedem papéis específicos a um usuário, que recebe determinadas permissões.
Nesta página, explicamos os papéis do IAM que estão disponíveis no nível de recursos da organização e como criar e gerenciar Políticas do IAM para recursos da organização usando a API Cloud Resource Manager. Para uma descrição detalhada do IAM, leia Documentação do IAM. Consulte, especificamente, Como conceder, alterar e revogar acesso.
Permissões e papéis
Para controlar o acesso aos recursos, o Google Cloud exige que as contas que fazem solicitações de API
tenham papéis do IAM apropriados. Os papéis do IAM
incluem permissões que permitem que os usuários realizem ações específicas nos
recursos do Google Cloud. Por exemplo, o
Com a permissão resourcemanager.organizations.get
, o usuário tem acesso a detalhes
sobre o recurso da organização.
Não é possível conceder permissões diretamente aos usuários. É preciso conceder papéis aos usuários que têm uma ou mais permissões integradas a eles.
É possível conceder um ou mais papéis no mesmo recurso.
Como usar papéis predefinidos
A tabela a seguir lista os papéis que você pode conceder para acessar uma as propriedades do recurso da organização, a descrição do que o papel faz e as permissões agrupadas nesse papel.
Papel | Permissões |
---|---|
Administrador da organização( Acesso para gerenciar as políticas do IAM e ver as políticas da organização, pastas e projetos. Recursos de nível mais baixo em que você pode conceder esse papel:
|
|
Leitor da organização( Concede acesso para visualizar uma organização. Recursos de nível mais baixo em que você pode conceder esse papel:
|
|
Administrador da política da organização( Concede acesso para definir quais restrições uma organização quer aplicar à configuração de recursos do Cloud com a definição de políticas da organização. Recursos de nível mais baixo em que você pode conceder esse papel:
|
|
Navegador( Acesso de leitura para navegar na hierarquia de um projeto, incluindo a pasta, a organização e a política de permissão. Este papel não inclui permissão para ver recursos no projeto. Recursos de nível mais baixo em que você pode conceder esse papel:
|
|
Como criar papéis personalizados
Além dos papéis predefinidos descritos neste tópico, também é possível criar papéis personalizados que são coleções de personalizadas de acordo com suas necessidades. Ao criar um papel personalizado para uso com o Resource Manager, lembre-se dos seguintes pontos:- as permissões list e get, como
resourcemanager.projects.get/list
, devem sempre ser concedidas como um par; - Quando seu papel personalizado inclui
folders.list
efolders.get
ela também precisa incluirprojects.list
eprojects.get
. - A permissão
setIamPolicy
para organização, pasta e recursos do projeto permite que o usuário conceda todas as outras permissões e, portanto, devem ser atribuídas com cuidado.
Como visualizar o acesso atual a um recurso da organização
Para saber quais papéis um usuário pode atribuir a um recurso da organização,
a política do IAM no nível do recurso da organização. É possível consultar uma política
de um recurso da organização usando o console do Google Cloud, a Google Cloud CLI,
ou o getIamPolicy()
.
Console
Para conferir os papéis concedidos no nível do recurso da organização usando o console do Google Cloud:
Acesse a página Gerenciar recursos no console do Google Cloud:
Na lista suspensa Organização, selecione o recurso da organização.
Marque a caixa de seleção correspondente ao recurso da organização.
No Painel de informações ao lado direito, em Permissões, clique para expandir um papel e exiba todos os membros que têm esse papel.
gcloud
Consiga a política do IAM para o recurso da organização usando o get-iam-policy:
gcloud alpha organizations get-iam-policy [ORGANIZATION_ID] --format json >
[FILENAME.JSON]
O comando emite a política, que será semelhante à seguinte:
bindings:
- members:
- user:[email protected]
role: roles/editor
- members:
- user:[email protected]
role:roles/resourcemanager.organizationAdmin
- members:
- user:[email protected]
role: roles/resourcemanager.projectCreator
etag": "BwU1aRxWk30="
API
O snippet de código a seguir retorna a política do recurso da organização
https://cloudresourcemanager.googleapis.com/v3/organizations/12345
:
Solicitação:
POST
https://cloudresourcemanager.googleapis.com/v3/organizations/12345:getIamPolicy
Resposta:
{
"bindings": [
{
"role": "roles/resourcemanager.organizationAdmin",
"members": [
"user:[email protected]"
]
},
{
"role": "roles/resourcemanager.projectCreator",
"members": [
"user:[email protected]",
"user:[email protected]",
"serviceAccount:[email protected]"
]
}
]
"etag": "BwUjHYKHHiQ="
}
Python
O método getIamPolicy()
permite que você receba uma política que foi definida anteriormente.
crm = discovery.build(
'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))
policy = crm.organizations().getIamPolicy(
resource=flags.organizationId, body={}).execute()
print json.dumps(policy, indent=2)
Como conceder acesso a um recurso da organização
Os administradores da organização podem conceder papéis do IAM a membros da equipe
para que possam acessar os recursos e as APIs da organização. É possível conceder
funções a um e-mail da Conta do Google, um Grupo do Google, uma conta de serviço ou uma conta do
domínio. É possível usar o console do Google Cloud, a CLI gcloud ou
as
setIamPolicy()
para conceder papéis.
Console
Para definir o controle de acesso no nível de recurso da organização usando o console do Google Cloud:
Acesse a página Gerenciar recursos no console do Google Cloud:
Na lista suspensa Organização, selecione o recurso da organização.
Marque a caixa de seleção correspondente ao recurso da organização. Se você não tiver um Pasta, o recurso da organização não ficará visível. Para continuar, veja as instruções para conceder papéis na página do IAM.
Se o Painel de informações à direita estiver oculto, clique em Exibir painel de informações, no canto superior direito.
No Painel de informações, localizado na guia Permissões, clique em Adicionar membro.
No campo Novos membros, digite os membros da equipe que você quer adicionar. Você pode designar um e-mail da Conta do Google, um Grupo do Google, uma conta de serviço ou um domínio do G Suite.
Na lista suspensa Selecionar um papel, selecione o papel que você quer conceder aos membros da equipe.
Clique em Adicionar.
gcloud
Para definir a política do IAM de um recurso da organização usando o comando gcloud
:
Consiga a política do IAM para o recurso da organização usando o comando
get-iam-policy
e gere como saída a política em um arquivo JSON:gcloud alpha organizations get-iam-policy [ORGANIZATION_ID] --format json > [FILENAME.JSON]
O conteúdo do arquivo JSON será semelhante ao seguinte:
{ "bindings": [ { "members": [ "user:[email protected]" ], "role": "roles/editor" }, { "members": [ "user:[email protected]", ], "role": "roles/resourcemanager.organizationAdmin" }, { "members": [ "user:[email protected]" ], "role": "roles/resourcemanager.projectCreator" }, ], "etag": "BwU1aRxWk30=" }
Usando um editor de texto, abra o arquivo JSON e adicione uma nova entrada ao matriz de vinculações que define o administrador da organização. Por exemplo, para tornar
[email protected]
um administrador da organização, você alteraria o exemplo mostrado acima da seguinte maneira:{ "bindings": [ { "members": [ "user:[email protected]" ], "role": "roles/editor" }, { "members": [ "user:[email protected]", "user:[email protected]" ], "role": "roles/resourcemanager.organizationAdmin" }, { "members": [ "user:[email protected]" ], "role": "roles/resourcemanager.projectCreator" }, ], "etag": "BwU1aRxWk30=" }
Atualize a política do recurso da organização executando o seguinte comando:
gcloud alpha organizations set-iam-policy [ORGANIZATION_ID] policy.json
API
Solicitação:
POST https://cloudresourcemanager.googleapis.com/v3/organizations/12345:setIamPolicy
{
"policy": {
"version": "0",
"bindings": [
{
"role": "roles/resourcemanager.organizationAdmin",
"members": [
"user:[email protected]"
]
},
{
"role": "roles/resourcemanager.projectCreator",
"members": [
"user:[email protected]",
"user:[email protected]",
"serviceAccount:[email protected]"
]
}
]
"etag": "BwUjHYKHHiQ="
}
}
Resposta:
{
"bindings": [
{
"role": "roles/resourcemanager.organizationAdmin",
"members": [
"user:[email protected]"
]
},
{
"role": "roles/resourcemanager.projectCreator",
"members": [
"user:[email protected]",
"user:[email protected]",
"serviceAccount:[email protected]"
]
}
]
"etag": "BwUjHYKJUiQ="
}
O método setIamPolicy()
permite que você conceda papéis a usuários anexando um
política do IAM para o recurso da organização. Essa política
é um conjunto de instruções que define o acesso de cada um.
Leitura-Modificação-Gravação: um padrão comum para atualizar os metadados de um recurso, como a Política, é ler o estado atual, modificar os dados localmente e depois enviá-los para gravação. Esse padrão pode gerar conflito se dois ou mais processos independentes tentarem fazer a sequência simultaneamente. Por exemplo, vamos supor que haja dois proprietários de um projeto, e ambos estejam tentando fazer alterações conflitantes na política ao mesmo tempo. As alterações feitas por um dos proprietários do projeto podem falhar em alguns casos. Esse problema é resolvido pelo IAM com a propriedade ETag das políticas de IAM. Essa propriedade é usada para verificar se a política foi alterada desde a última solicitação. Quando você faz uma solicitação ao IAM com um valor ETag, o IAM compara o valor ETag na solicitação com o valor ETag existente associado à política. A política é gravada somente se esses valores de etag forem correspondentes.
Ao atualizar uma política, primeiro consiga a política usando getIamPolicy()
, atualize a política e, em seguida, grave a política atualizada usando setIamPolicy()
.
Use o valor etag ao definir a política somente se a política correspondente em GetPolicyResponse
contiver um valor de etag.
Python
O método setIamPolicy()
permite que você anexe uma política a um recurso. O método setIamPolicy
usa um SetIamPolicyRequest
, que contém uma política a ser definida e o recurso ao qual a política está anexada. Ele retorna a política resultante. É recomendável seguir o padrão ler-modificar-gravar ao atualizar uma política usando setIamPolicy()
.
Veja um exemplo de código para definir uma política para um recurso da organização:
crm = discovery.build(
'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))
policy = crm.organizations().getIamPolicy(
resource=flags.organizationId, body={}).execute()
admin_binding = next(
(binding
for binding in policy['bindings']
if binding['role'] == 'roles/resourcemanager.organizationAdmin'),
None)
# Add an empty Organization Administrator binding if not present.
if not admin_binding:
admin_binding = {
'role': 'roles/resourcemanager.organizationAdmin',
'members': []
}
policy['bindings'].append(admin_binding)
# Add the new Admin (if necessary).
new_admin = 'user:' + flags.adminEmail
if new_admin not in admin_binding['members']:
admin_binding['members'].append(new_admin)
policy = crm.organizations().setIamPolicy(
resource=flags.organizationId,
body={
'resource': flags.organizationId,
'policy': policy
}).execute()
print json.dumps(policy, indent=2)
Como restringir a visibilidade do projeto para usuários
Os usuários podem conferir todos os projetos a que têm acesso no console do Google Cloud e em consultas de pesquisa, independentemente de estarem ou não na campanha recurso selecionado da organização. É possível usar o Organization Policy Service para restringir os conjunto de projetos retornados nas consultas e no console do Google Cloud. Isso pode ser usado para restringir os usuários que veem apenas projetos no seu domínio.
A restrição da política da organização
constraints/resourcemanager.accessBoundaries
é um
restrição de lista
que é aplicado ao recurso da sua organização. A restrição aceita uma lista de
IDs de recursos da organização, que definem o conjunto de recursos da organização
tornar os recursos visíveis para os usuários em uma consulta ou no console do Google Cloud.
Os projetos vão aparecer em No organization
se o usuário não tiver a
Permissão resourcemanager.organizations.get
na organização pai
recurso do projeto. Isso pode fazer parecer um projeto que não faz parte
de seu recurso de organização não está associado a um recurso de organização em
tudo. Se você usar a restrição resourcemanager.accessBoundaries
para proibir um
recurso da organização, os projetos que pertencem a ele
nem aparecem nas consultas ou no console do Google Cloud. Qualquer projeto que
ainda não foi migrado para um recurso de organização não ficará visível se
essa restrição é aplicada.
Recomendamos migrar os projetos que estão abaixo de No organization
para sua
recurso da organização antes de aplicar essa restrição. Para informações sobre
migrar projetos para um recurso da organização, consulte
Como mover um projeto.
Para informações sobre como definir uma política da organização, consulte Como usar restrições.
Teste de permissões
É possível testar as permissões do IAM em um usuário de uma organização
com o
testIamPermissions()
. Esse método usa como parâmetros de entrada o URL do recurso e o conjunto de permissões que você quer testar e retorna o subconjunto das permissões para as quais o usuário tem acesso.
Normalmente, você não invocará testIamPermission()
se estiver usando o
o console do Google Cloud diretamente para gerenciar permissões. A testIamPermissions()
se destina à integração com o software reservado, como uma interface gráfica personalizada do usuário. Por exemplo, o console do Google Cloud usa
testIamPermissions()
internamente para determinar qual UI deve estar disponível para
o usuário conectado.
API
Você pode usar o método testIamPermissions()
para verificar qual das permissões ao autor tem para o recurso fornecido. Esse método usa um nome de recurso e um conjunto de permissões como parâmetros. Em seguida, retorna o conjunto de permissões concedidas para o solicitante.
Veja um exemplo de código para testar permissões para um recurso de organização:
Request:
POST https://cloudresourcemanager.googleapis.com/v3/organizations/12345:testIamPermissions
{
"permissions": [
"resourcemanager.organizations.get",
"resourcemanager.organizations.setIamPolicy"
]
}
Response:
{
"permissions": [
"resourcemanager.organizations.get"
]
}
Python
crm = discovery.build(
'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))
response = crm.organizations().testIamPermissions(
resource=flags.organizationId,
body={
'resource': flags.organizationId,
'permissions': [
'resourcemanager.organizations.setIamPolicy',
'resourcemanager.projects.patch'
]
}).execute()
print json.dumps(response, indent=2)