Trusted Cloud by S3NS oferece o gerenciamento de identidade e acesso (IAM), que permite conceder acesso mais granular a recursos específicos do Trusted Cloud e impede o acesso indesejado a outros recursos. Com o IAM, é possível adotar o princípio de segurança de privilégio mínimo para conceder apenas o acesso necessário aos recursos.
Por meio da definição de políticas do IAM, é possível atribuir papéis aos usuários para que eles acessem recursos específicos. As políticas de permissão concedem papéis específicos a um usuário, que recebe determinadas permissões.
Nesta página, explicamos os papéis do IAM disponíveis no recurso de organização e como criar e gerenciar políticas de permissão para recursos de organização usando a API Cloud Resource Manager. Para mais informações, consulte Gerenciar o acesso a projetos, pastas e organizações.
Permissões e papéis
Para controlar o acesso aos recursos,o Trusted Cloud by S3NS 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 doTrusted Cloud . Por exemplo, a
permissão resourcemanager.organizations.get
permite que um usuário receba detalhes
sobre o recurso da organização dele.
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 as propriedades de um recurso de organização, a descrição do que o papel faz e as permissões incluídas nele.
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, é possível criar papéis personalizados. Eles são conjuntos de permissões que você adapta de acordo com suas necessidades. Ao criar um papel personalizado para usar com o Gerenciador de recursos, 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 as permissões
folders.list
efolders.get
, ela também deve incluirprojects.list
eprojects.get
; - Atribua com cuidado a permissão
setIamPolicy
para recursos de organização, pasta e projeto. Com ela, o usuário pode conceder todas as outras permissões.
Como visualizar o acesso existente de um recurso da organização
Você pode ver quais papéis um usuário recebe para um recurso da organização ao
receber a política de permissão desse recurso. É possível conferir a política de permissão de um recurso de organização usando o console Trusted Cloud , a Google Cloud CLI ou o método getIamPolicy()
.
Console
Para ver os papéis concedidos no nível do recurso da organização usando o console Trusted Cloud :
Acesse a página Gerenciar recursos no console do Trusted Cloud :
Na lista suspensa Organização, selecione o recurso da sua organização.
Marque a caixa de seleção do recurso de 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 de permissão do recurso da organização usando o comando get-iam-policy:
gcloud alpha organizations get-iam-policy [ORGANIZATION_ID] --format json >
[FILENAME.JSON]
O comando gera a política de permissão, que é semelhante a esta:
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 snippet de código a seguir retorna a política de permissão para o recurso de 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:email1@gmail.com"
]
},
{
"role": "roles/resourcemanager.projectCreator",
"members": [
"user:email2@gmail.com",
"user:email3@gmail.com",
"serviceAccount:my-other-app@appspot.s3ns-system.iam.gserviceaccount.com"
]
}
]
"etag": "BwUjHYKHHiQ="
}
Python
O método
getIamPolicy()
permite receber uma política de permissão 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)
Concessão de acesso a um recurso da organização
Os administradores da organização podem conceder papéis do IAM aos membros da equipe
para que eles possam acessar os recursos e as APIs de uma organização. É possível atribuir
papéis a um e-mail de conta de usuário, um Grupo do Google, uma conta de serviço ou um domínio do G Suite. É possível usar o console Trusted Cloud , a CLI gcloud ou
o método
setIamPolicy()
para conceder papéis.
Console
Para definir o controle de acesso no nível do recurso da organização usando o console Trusted Cloud :
Acesse a página Gerenciar recursos no console do Trusted Cloud :
Na lista suspensa Organização, selecione o recurso da sua organização.
Marque a caixa de seleção do recurso de organização. Se você não tiver um recurso Pasta, o recurso Organização não vai aparecer. 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 de conta de usuário, 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 de permissão de um recurso da organização usando o comando gcloud
:
Receba a política de permissão para o recurso da organização usando o comando
get-iam-policy
e envie a política para 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: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="
}
- Usando um editor de texto, abra o arquivo JSON e adicione uma nova entrada à matriz de vinculações que define o Administrador da organização. Por exemplo, para tornar
anotheradmin@gcp-test.com
um administrador da organização, você alteraria o exemplo anterior da seguinte maneira:
{
"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
Solicitação:
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.s3ns-system.iam.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.s3ns-system.iam.gserviceaccount.com"
]
}
]
"etag": "BwUjHYKJUiQ="
}
O método setIamPolicy()
permite conceder papéis aos usuários anexando uma
política de permissão ao recurso da organização. A política de permissão é um conjunto
de vinculações que definem .
Leitura-Modificação-Gravação: um padrão comum para atualizar os metadados de um recurso, como a política de permissão, é ler o estado atual, atualizar os dados localmente e depois enviá-los para gravação. Esse padrão pode gerar um 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 de permissão ao mesmo tempo. As mudanças feitas por um dos proprietários do projeto podem falhar em alguns casos. O IAM resolve esse problema usando uma propriedade etag nas políticas de permissão. Essa propriedade é usada para verificar se a política de permissão foi alterada desde a última solicitação. Quando você faz uma solicitação com um valor ETag, o valor ETag na solicitação é comparado com o valor ETag existente associado à política. A política de permissão é gravada somente se os valores de etag forem correspondentes.
Ao atualizar uma política de permissão, 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 de permissão somente se a política de permissão correspondente em GetPolicyResponse
contiver um valor de etag.
Python
O método setIamPolicy()
permite anexar uma política de permissão a um recurso. O método setIamPolicy
usa um SetIamPolicyRequest
, que contém uma política de permissão a ser definida e o recurso ao qual a política está anexada. Ele retorna a política de permissão resultante. É recomendável seguir o padrão
ler-modificar-gravar
ao atualizar uma política de permissão usando setIamPolicy()
.
Confira 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)
Como restringir a visibilidade do projeto para usuários
Os usuários podem ver todos os projetos a que têm acesso no console do Trusted Cloud e nas consultas de pesquisa, independentemente de estarem ou não no recurso de organização selecionado. É possível usar o serviço de políticas da organização para restringir o conjunto de projetos retornados em consultas e no console Trusted Cloud . Isso pode ser usado para restringir os usuários que veem apenas projetos no seu domínio.
A restrição constraints/resourcemanager.accessBoundaries
da política da organização
é uma
restrição de lista
aplicada ao recurso da 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 recursos visíveis para os usuários em uma consulta ou no console Trusted Cloud .
Os projetos aparecem em No organization
se o usuário não tiver a permissão resourcemanager.organizations.get
no recurso da organização pai do projeto. Isso pode fazer parecer que um projeto que não faz parte do recurso da sua organização não está associado a nenhum recurso de organização. Se você usar a restrição resourcemanager.accessBoundaries
para proibir um recurso de organização, os projetos que pertencem a ele não vão aparecer nas consultas ou no console Trusted Cloud . Qualquer projeto que ainda não
tenha sido migrado para um recurso de organização não ficará visível se essa restrição for
aplicada.
Recomendamos migrar os projetos que estão abaixo de No organization
para o recurso da sua organização antes de aplicar essa restrição. Para informações sobre
como 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.
Conceder acesso condicional
Alguns papéis do IAM, como Administrador de políticas da organização (roles/orgpolicy.policyAdmin
), só podem ser concedidos em um recurso da organização.
Devido à herança de políticas, essa função é normalmente herdada por todos os recursos da organização.
Para ter mais controle sobre quais recursos o papel é concedido, use as
condições do IAM. Usar tags com
condições permite conceder acesso a recursos somente se eles tiverem a tag especificada. Por exemplo, a política de permissão a seguir concede o papel de administrador da política da organização apenas em recursos que têm a tag environment: dev
, e não em nenhum outro recurso:
{
"bindings": [
{
"members": [
"principalSet://iam.googleapis.com/locations/global/workforcePools/my-pool/group/my-group"
],
"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
}
Teste de permissões
É possível testar as permissões do IAM em um usuário para um recurso
da organização com o método
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 invoca testIamPermission()
se estiver usando o
consoleTrusted 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 Trusted Cloud usa
testIamPermissions()
internamente para determinar qual UI precisa estar disponível ao
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.
Confira um exemplo de código para testar as permissõ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)