Controle de acesso para organizações que usam o IAM

O Google Cloud Platform oferece o Cloud Identity and Access Management (IAM). Com ele, você fornece acesso mais granular a recursos específicos do Google Cloud Platform e impede o acesso não autorizado a outros recursos. O IAM possibilita a adoção do princípio de segurança do menor privilégio, para que você conceda 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 IAM concedem papéis específicos a um usuário, dando a ele certas permissões.

Esta página explica os papéis do gerenciamento de identidade e acesso (IAM, na sigla em inglês) disponíveis para organizações e como criar e gerenciar políticas do IAM para organizações que usam a API do Resource Manager. Para uma descrição detalhada do Cloud Identity and Access Management, leia a documentação do IAM. Consulte, especificamente, Como conceder, alterar e revogar acesso.

Permissões e papéis

Com o Cloud Identity and Access Management, a conta que faz a solicitação da API precisa ter as permissões apropriadas em todos os métodos do Google Cloud Platform para acessar o recurso. Com elas, os usuários podem realizar ações específicas nos recursos do Google Cloud. Por exemplo, com a permissão resourcemanager.organizations.list, o usuário pode listar as próprias organizações. Já com a permissão resourcemanager.organizations.update, é possível atualizar os metadados de uma organização.

A tabela a seguir lista as permissões que o solicitante precisa ter para chamar um método da organização:

Método Permissões exigidas
cloudresourcemanager.organizations.get() resourcemanager.organizations.get.
cloudresourcemanager.organizations.search() Retorna todas as organizações para as quais o usuário tem a permissão resourcemanager.organizations.get.
cloudresourcemanager.organizations.getIamPolicy() resourcemanager.organizations.getIamPolicy
cloudresourcemanager.organizations.setIamPolicy() resourcemanager.organizations.setIamPolicy
cloudresourcemanager.organizations.testIamPermissions() Não requer permissões.

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 podem ser concedidos para acessar as propriedades de uma organização, a descrição do que o papel faz e as permissões incluídas nele.

Papel Descrição Permissões
roles/
resourcemanager.organizationAdmin
Acesso para administrar todos os recursos que pertencem à organização. Por padrão, esse papel não inclui privilégios de faturamento ou administração de papéis da organização.
  • orgpolicy.policy.get
  • resourcemanager.folders.get
  • resourcemanager.folders.getIamPolicy
  • resourcemanager.folders.list
  • resourcemanager.folders.setIamPolicy
  • resourcemanager.organizations.get
  • resourcemanager.organizations.getIamPolicy
  • resourcemanager.organizations.setIamPolicy
  • resourcemanager.organizations.update
  • resourcemanager.projectInvites.get
  • resourcemanager.projects.get
  • resourcemanager.projects.getIamPolicy
  • resourcemanager.projects.list
  • resourcemanager.projects.setIamPolicy
roles/
resourcemanager.organizationViewer
Acesso para visualizar o nome de exibição da organização. Se essa função for concedida a um usuário, ele poderá ver a organização no Console do Cloud Platform sem ter acesso para visualizar todos os recursos dela.
  • resourcemanager.organizations.get
roles/
browser
Acesso para procurar recursos em uma organização
  • resourcemanager.folders.get
  • resourcemanager.folders.list
  • resourcemanager.organizations.get
  • resourcemanager.projectInvites.get
  • resourcemanager.projects.get
  • resourcemanager.projects.getIamPolicy
  • resourcemanager.projects.list

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 Resource Manager, lembre-se dos seguintes pontos:
  • Você precisa conceder as permissões "list" e "get", por exemplo resourcemanager.projects.get/list, sempre como um par.
  • Quando o papel personalizado tem as permissões folders.list e folders.get, ele também inclui projects.list e projects.get.
  • Atribua com cuidado a permissão setIamPolicy para organizações, pastas e projetos. Com ela, o usuário pode conceder todas as outras permissões.

Como visualizar o acesso existente de uma organização

Você pode ver quais papéis um usuário recebe para uma organização ao receber a política do IAM no nível da organização. É possível ver a política de uma organização usando o Console do Cloud Platform, a ferramenta de linha de comando gcloud ou o método getIamPolicy().

Console

Para ver os papéis concedidos no nível da organização usando o Console do Google Cloud Platform:

  1. Acesse a página Gerenciar recursos no Console do GCP:

    Abrir a página "Gerenciar recursos"

  2. Na lista suspensa Organização, selecione sua organização.

  3. Marque a caixa de seleção referente ao recurso "Organização".

  4. 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

Obtenha a política do IAM para a Organização usando o comando 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: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 para o recurso da organização https://cloudresourcemanager.googleapis.com/v1/organizations/12345.

Solicitação:

POST
https://cloudresourcemanager.googleapis.com/v1/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

Com o método getIamPolicy(), é possível receber uma política definida anteriormente.

...

crm = discovery.build(
    'cloudresourcemanager', 'v1', 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 uma organização

Os administradores da organização podem conceder acesso aos membros da equipe para acessar os recursos e as APIs de uma organização por meio da concessão de papéis do IAM a eles. É possível conceder um papel a um membro da equipe usando o Console do Cloud Platform, a ferramenta gcloud ou o método setIamPolicy().

Console

Para definir o controle de acesso no nível da organização usando o Console do Google Cloud Platform:

  1. Acesse a página Gerenciar recursos no Console do GCP:

    Abrir a página "Gerenciar recursos"

  2. Na lista suspensa Organização, selecione sua organização.

  3. Marque a caixa de seleção referente ao recurso Organização. Se você não tiver um recurso Pasta, o recurso Organização não estará visível. Para continuar, veja as instruções para conceder papéis na página do Cloud IAM.

  4. Se o Painel de informações à direita estiver oculto, selecione o botão Mostrar painel de informações no canto superior direito.

  5. No Painel de informações ao lado direito, em Permissões, insira os endereços de e-mail dos membros que você quer adicionar.

  6. Na lista suspensa Selecionar papel, escolha o papel que você quer conceder a esse usuário.

  7. Clique em Adicionar. Aparecerá uma caixa de diálogo para confirmar a adição ou atualização do novo papel do membro.

gcloud

Para definir a política do IAM de uma organização usando o comando gcloud:

  1. Descubra a política do IAM da organização usando o comando get-iam-policy e insira-a em um arquivo JSON:

    gcloud alpha organizations get-iam-policy [ORGANIZATION_ID]
    --format json > [FILENAME.JSON]
    
  2. 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="
    }
    
  3. 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 definir anotheradmin@gcp-test.com como um Administrador da Organização, mude o exemplo mostrado acima 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="
    }
    
  4. Atualize a política 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/v1/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 atribuir papéis a usuários ao anexar uma política do Cloud IAM à 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. O Cloud Identity and Access Management resolve esse problema usando uma propriedade etag nas políticas dele. Ela é usada para verificar se a política foi alterada desde a última solicitação. Quando você faz uma solicitação ao Cloud IAM com um valor de etag, ele o compara na solicitação com o valor de etag existente associado à política. A política é gravada somente se esses valores de etag forem correspondentes.

Primeiro, adquira a política usando getIamPolicy(), depois atualize-a e grave-a com setIamPolicy(). Na configuração, use o valor etag somente se a política correspondente no GetPolicyResponse também tiver esse valor.

Python

Com o método setIamPolicy(), é possível anexar 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 leitura-modificação-gravação ao atualizar uma política usando setIamPolicy().

Aqui está um exemplo de código para definir a política de uma organização:

...

crm = discovery.build(
    'cloudresourcemanager', 'v1', 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 Admin 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 testar permissões

É possível testar as permissões do Cloud IAM em um usuário da organização usando 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() quando usa o Console do Cloud Platform diretamente para gerenciar as permissões. O método testIamPermissions() destina-se à integração com seu software proprietário, como uma interface de usuário gráfica personalizada. Por exemplo, o Console do Cloud Platform usa testIamPermissions() internamente para determinar qual IU precisa estar disponível ao usuário conectado.

API

Use o método testIamPermissions() para verificar quais permissões foram concedidas ao solicitante de um determinado recurso. 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.

Estes são alguns códigos de exemplo para testar as permissões de uma organização:

Request:

POST https://cloudresourcemanager.googleapis.com/v1/organization/12345:testIamPermissions

{
    "permissions":  [
        "resourcemanager.organizations.get",
        "resourcemanager.organizations.update"
    ]
}

Response:

{
    "permissions": [
        "resourcemanager.organizations.get"
    ]
}

Python

...

crm = discovery.build(
    'cloudresourcemanager', 'v1', http=creds.authorize(httplib2.Http()))

response = crm.organizations().testIamPermissions(
    resource=flags.organizationId,
    body={
        'resource': flags.organizationId,
        'permissions': [
            'resourcemanager.organizations.setIamPolicy',
            'resourcemanager.projects.update'
        ]
    }).execute()

print json.dumps(response, indent=2)

...
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Resource Manager