Google Cloud oferece a gestão de identidade e de acesso (IAM), que lhe permite conceder acesso mais detalhado a recursos Google Cloud específicos e evitar o acesso indesejado a outros recursos. O IAM permite-lhe adotar o princípio de segurança do menor privilégio, pelo que concede apenas o acesso necessário aos seus recursos.
O IAM permite-lhe controlar quem (utilizadores) tem que acesso (funções) a que recursos definindo políticas de autorização. As políticas de permissão concedem funções específicas a um utilizador, o que lhe dá determinadas autorizações.
Esta página explica as funções do IAM disponíveis no recurso de organização e como criar e gerir políticas de autorização para recursos de organização através da API Cloud Resource Manager. Para mais informações, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Autorizações e funções
Para controlar o acesso aos recursos, Google Cloud é necessário que as contas que fazem pedidos de API tenham funções de IAM adequadas. As funções do IAM incluem autorizações que permitem aos utilizadores realizar ações específicas emGoogle Cloud recursos. Por exemplo, a autorização resourcemanager.organizations.get
permite que um utilizador obtenha detalhes sobre o recurso da respetiva organização.
Não concede autorizações diretamente aos utilizadores. Em vez disso, concede-lhes funções, que têm uma ou mais autorizações incluídas.
Pode conceder uma ou mais funções no mesmo recurso.
Usar funções predefinidas
A tabela seguinte lista as funções que pode conceder para aceder às propriedades de um recurso de organização, a descrição do que a função faz e as autorizações incluídas nessa função.
Função | Autorizações |
---|---|
Administrador organizacional( Acesso para gerir políticas IAM e ver políticas de organização para organizações, pastas e projetos. Recursos de nível mais baixo onde pode conceder esta função:
|
|
Visitante da organização( Fornece acesso para ver uma organização. Recursos de nível mais baixo onde pode conceder esta função:
|
|
Administrador da política da organização( Fornece acesso para definir as restrições que uma organização quer aplicar à configuração de recursos da nuvem através da definição de políticas organizacionais. Recursos de nível mais baixo onde pode conceder esta função:
|
|
Navegador( Acesso de leitura para procurar a hierarquia de um projeto, incluindo a pasta, a organização e a política de permissão. Esta função não inclui autorização para ver recursos no projeto. Recursos de nível mais baixo onde pode conceder esta função:
|
|
Criar funções personalizadas
Além das funções predefinidas descritas neste tópico, também pode criar funções personalizadas que são conjuntos de permissões que personaliza de acordo com as suas necessidades. Ao criar uma função personalizada para utilização com o Resource Manager, tenha em atenção os seguintes pontos:- As autorizações de listagem e obtenção, como
resourcemanager.projects.get/list
, devem ser sempre concedidas em conjunto. - Quando a sua função personalizada inclui as autorizações
folders.list
efolders.get
, também deve incluirprojects.list
eprojects.get
. - Tenha em atenção que a autorização
setIamPolicy
para recursos de organização, pasta e projeto permite ao utilizador conceder todas as outras autorizações e, por isso, deve ser atribuída com cuidado.
Ver o acesso existente para um recurso da organização
Pode ver as funções concedidas a um utilizador para um recurso de organização
obtendo a política de autorização desse recurso. Pode ver a política de autorização de um recurso de organização através da Google Cloud consola, da Google Cloud CLI ou do método getIamPolicy()
.
Consola
Para ver as funções concedidas ao nível do recurso da organização através da Google Cloud consola:
Aceda à página Gerir recursos na Google Cloud consola:
Na lista pendente Organização, selecione o recurso da sua organização.
Selecione a caixa de verificação do recurso da organização.
No painel de informações do lado direito, em Autorizações, clique para expandir uma função e apresentar todos os membros que têm essa função.
gcloud
Obtenha a política de permissão para o recurso da organização através do comando get-iam-policy:
gcloud alpha organizations get-iam-policy [ORGANIZATION_ID] --format json >
[FILENAME.JSON]
O comando produz a política de permissão, que é semelhante à seguinte:
bindings:
- members:
- user:testuser1@gcp-test.com
role: roles/editor
- members:
- user:admin@gcp-test.com
role:roles/resourcemanager.organizationAdmin
- members:
- user:testuser2@gcp-test.com
role: roles/resourcemanager.projectCreator
etag": "BwU1aRxWk30="
API
O seguinte fragmento do código devolve a política de permissão para o recurso
organization
https://cloudresourcemanager.googleapis.com/v3/organizations/12345
.
Pedido:
POST
https://cloudresourcemanager.googleapis.com/v3/organizations/12345:getIamPolicy
Resposta:
{
"bindings": [
{
"role": "roles/resourcemanager.organizationAdmin",
"members": [
"user:email1@gmail.com"
]
},
{
"role": "roles/resourcemanager.projectCreator",
"members": [
"user:email2@gmail.com",
"user:email3@gmail.com",
"serviceAccount:my-other-app@appspot.gserviceaccount.com"
]
}
]
"etag": "BwUjHYKHHiQ="
}
Python
O método
getIamPolicy()
permite-lhe obter uma política de autorização 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)
Conceder acesso a um recurso da organização
Os administradores da organização podem conceder funções da IAM aos membros da equipa
para que possam aceder aos recursos e às APIs de uma organização. Pode conceder
funções a um email de conta de utilizador, a um grupo Google, a uma conta de serviço ou a um domínio
do G Suite. Pode usar a Google Cloud consola, a CLI gcloud ou o método
setIamPolicy()
para conceder funções.
Consola
Para definir o controlo de acesso ao nível do recurso da organização através da Google Cloud consola:
Aceda à página Gerir recursos na Google Cloud consola:
Na lista pendente Organização, selecione o recurso da sua organização.
Selecione a caixa de verificação do recurso da organização. Se não tiver um recurso de pasta, o recurso de organização não fica visível. Para continuar, consulte as instruções para conceder funções através da página IAM.
Se o painel Painel de informações do lado direito estiver oculto, clique em Mostrar painel de informações no canto superior direito.
No painel Painel de informações, no separador Autorizações, clique em Adicionar membro.
No campo Novos membros, introduza os membros da equipa que quer adicionar. Pode designar um email de conta de utilizador, um grupo Google, uma conta de serviço ou um domínio do G Suite.
Na lista pendente Selecionar uma função, selecione a função que quer conceder aos membros da equipa.
Clique em Adicionar.
gcloud
Para definir uma política de permissão de um recurso da organização através do comando gcloud
:
Obtenha a política de permissão para o recurso da organização através do comando
get-iam-policy
e envie a política para um ficheiro JSON:gcloud alpha organizations get-iam-policy [ORGANIZATION_ID] --format json > [FILENAME.JSON]
O conteúdo do ficheiro JSON é semelhante ao seguinte:
{
"bindings": [
{
"members": [
"user:testuser1@gcp-test.com"
],
"role": "roles/editor"
},
{
"members": [
"user:admin@gcp-test.com",
],
"role": "roles/resourcemanager.organizationAdmin"
},
{
"members": [
"user:testuser2@gcp-test.com"
],
"role": "roles/resourcemanager.projectCreator"
},
],
"etag": "BwU1aRxWk30="
}
- Com um editor de texto, abra o ficheiro JSON e adicione uma nova entrada à matriz de associações que define o administrador da organização. Por exemplo, para tornar
anotheradmin@gcp-test.com
um administrador da organização, alteraria o exemplo anterior da seguinte forma:
{
"bindings": [
{
"members": [
"user:testuser1@gcp-test.com"
],
"role": "roles/editor"
},
{
"members": [
"user:admin@gcp-test.com",
"user:anotheradmin@gcp-test.com"
],
"role": "roles/resourcemanager.organizationAdmin"
},
{
"members": [
"user:testuser20@gcp-test.com"
],
"role": "roles/resourcemanager.projectCreator"
},
],
"etag": "BwU1aRxWk30="
}
- Atualize a política de permissão do recurso da organização executando o seguinte comando:
gcloud alpha organizations set-iam-policy [ORGANIZATION_ID] policy.json
API
Pedido:
POST https://cloudresourcemanager.googleapis.com/v3/organizations/12345:setIamPolicy
{
"policy": {
"version": "0",
"bindings": [
{
"role": "roles/resourcemanager.organizationAdmin",
"members": [
"user:email1@gmail.com"
]
},
{
"role": "roles/resourcemanager.projectCreator",
"members": [
"user:email2@gmail.com",
"user:email3@gmail.com",
"serviceAccount:my-other-app@appspot.gserviceaccount.com"
]
}
]
"etag": "BwUjHYKHHiQ="
}
}
Resposta:
{
"bindings": [
{
"role": "roles/resourcemanager.organizationAdmin",
"members": [
"user:email1@gmail.com"
]
},
{
"role": "roles/resourcemanager.projectCreator",
"members": [
"user:email2@gmail.com",
"user:email3@gmail.com",
"serviceAccount:my-other-app@appspot.gserviceaccount.com"
]
}
]
"etag": "BwUjHYKJUiQ="
}
O método setIamPolicy()
permite-lhe conceder funções aos utilizadores anexando uma política de autorização ao recurso da organização. A política de permissão é uma coleção de associações que definem .
Leitura-modificação-escrita: um padrão comum para atualizar os metadados de um recurso, como a política de autorização, consiste em ler o respetivo estado atual, atualizar os dados localmente e, em seguida, enviar os dados modificados para escrita. Este padrão pode resultar num conflito se dois ou mais processos independentes tentarem a sequência em simultâneo. Por exemplo, suponhamos que existem dois proprietários para um projeto e que ambos estão a tentar fazer alterações conflituosas à política de permissão ao mesmo tempo. As alterações feitas por um dos proprietários do projeto podem falhar em alguns casos. O IAM resolve este problema através de uma propriedade etag nas políticas de autorização. Esta propriedade é usada para verificar se a política de permissão foi alterada desde o último pedido. Quando faz um pedido com um valor etag, o valor etag no pedido é comparado com o valor etag existente associado à política. Escreve a política de permissão apenas se os valores etag corresponderem.
Quando atualiza uma política de autorização, primeiro, obtém a política de autorização através de getIamPolicy()
, atualiza-a e, em seguida, escreve a política de autorização atualizada através de setIamPolicy()
. Use o valor etag ao definir a política de permissão apenas se a política de permissão correspondente em GetPolicyResponse
contiver um valor etag.
Python
O método
setIamPolicy()
permite-lhe anexar uma política de autorização a um recurso. O método setIamPolicy
usa um SetIamPolicyRequest
, que contém uma política de autorização a ser
definida e o recurso ao qual a política de autorização está anexada. Devolve a política de autorização resultante. Recomendamos que siga o padrão read-modify-write quando atualizar uma política de permissão através da API setIamPolicy()
.
Segue-se um exemplo de código para definir uma política de permissão para um recurso de 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)
Restringir a visibilidade do projeto para os utilizadores
Os utilizadores podem ver todos os projetos aos quais têm acesso na Google Cloud consola e nas consultas de pesquisa, independentemente de estarem ou não no recurso de organização selecionado pelo utilizador. Pode usar o serviço de políticas de organização para restringir o conjunto de projetos devolvidos em consultas e na Google Cloud consola. Isto pode ser usado para restringir os utilizadores a verem apenas projetos no seu próprio domínio.
A restrição da política da organização
constraints/resourcemanager.accessBoundaries
é uma
restrição de lista
que é aplicada 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 que tornam os respetivos recursos visíveis para os utilizadores numa consulta ou na Google Cloud consola.
Os projetos aparecem em No organization
se o utilizador não tiver a autorização
resourcemanager.organizations.get
no recurso da organização principal
do projeto. Isto pode dar a impressão de que um projeto que não faz parte do recurso da sua organização não está associado a nenhum recurso da organização. Se usar a restrição resourcemanager.accessBoundaries
para não permitir um recurso de organização, os projetos pertencentes a esse recurso de organização não aparecem nas consultas nem na Google Cloud consola. Qualquer projeto que ainda não tenha sido migrado para um recurso de organização não é visível se esta restrição for aplicada.
Recomendamos que migre os projetos que estão em No organization
para o recurso da sua organização antes de aplicar esta restrição. Para ver informações sobre a migração de projetos para um recurso de organização, consulte o artigo
Mover um projeto.
Para ver informações sobre a definição de uma política de organização, consulte o artigo Usar restrições.
Conceder acesso condicional
Determinadas funções de IAM, como administrador da política da organização (roles/orgpolicy.policyAdmin
), só podem ser concedidas num recurso de organização.
Devido à herança de políticas, esta função é normalmente herdada por todos os recursos na organização.
Para ter mais controlo sobre os recursos nos quais a função é concedida, pode usar as condições do IAM. A utilização de etiquetas com condições permite-lhe conceder acesso a recursos apenas se estes tiverem a etiqueta especificada. Por exemplo, a seguinte política de autorização concede a função de administrador da política da organização apenas em recursos que tenham a etiqueta environment: dev
e não a concede em nenhum outro recurso:
{
"bindings": [
{
"members": [
"group:my-group@example.com"
],
"role": "roles/orgpolicy.policyAdmin",
"condition": {
"title": "Dev_environment_only",
"description": "Only granted in the development environment",
"expression":
"resource.matchTag('123456789012/env', 'dev')"
}
}
],
"etag": "BwWKmjvelug=",
"version": 3
}
A testar autorizações
Pode testar as autorizações de IAM num utilizador para um recurso de organização com o método testIamPermissions()
. Este método usa o URL do recurso e o conjunto de autorizações que quer testar como parâmetros de entrada e devolve o subconjunto destas autorizações às quais o utilizador tem acesso.
Normalmente, não invoca testIamPermission()
se estiver a usar a
Google Cloud consola diretamente para gerir autorizações. testIamPermissions()
destina-se à integração com o seu software proprietário, como uma interface do utilizador gráfica personalizada. Por exemplo, a Google Cloud consola usa
testIamPermissions()
internamente para determinar que IU deve estar disponível para o
utilizador com sessão iniciada.
API
Pode usar o método
testIamPermissions()
para verificar que das autorizações fornecidas o autor da chamada tem para o recurso
indicado. Este método usa um nome de recurso e um conjunto de autorizações como parâmetros e devolve o subconjunto de autorizações que o autor da chamada tem.
Segue-se um exemplo de código para testar as autorizações de 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)