Como manter papéis personalizados com o Deployment Manager

Contexto

Os papéis personalizados do Gerenciamento de identidade e acesso permitem que você conceda permissões granulares a contas de usuário e contas de serviço. Ao contrário dos papéis predefinidos, que são mantidos pelo Google e atualizados em conformidade, os personalizados são mantidos pela organização à medida que as novas permissões se tornam disponíveis.

O Deployment Manager pode facilitar a configuração e a manutenção dos papéis personalizados. Use-o para descrever papéis em arquivos de configuração que podem ser incluídos no sistema de controle de origem escolhido. Juntos, o Deployment Manager e o controle de origem podem facilitar a criação de "configuração como código" para:

  • rastrear papéis personalizados à medida que mudam ao longo do tempo;
  • promover papéis personalizados por meio de etapas de inicialização à medida que são testados e validados;
  • automatizar como os papéis são implantados em toda a organização.

Antes de começar

  • Ative as APIs IAM and Cloud Deployment Manager.

    Ative as APIs

Cenários para manter papéis personalizados usando o Deployment Manager

Considere os seguintes cenários, que demonstram os benefícios de usar o Deployment Manager para manter os papéis personalizados:

  • Controle do acesso a novas permissões: você tem um papel personalizado que contém permissões para um serviço do Google Cloud. O serviço adiciona novos recursos Beta e expõe novas permissões. O papel personalizado não herdará essas novas permissões automaticamente. Elas precisam ser adicionadas manualmente. Até novas permissões serem adicionadas ao papel personalizado, os usuários da organização não terão acesso aos recursos Beta. Use os arquivos de configuração do Deployment Manager e o controle de origem para ajudar a auditar permissões atuais, atualizar os papéis personalizados conforme necessário e manter um histórico de revisões.
  • Gerenciamento do ciclo de vida do papel: você tem um novo papel personalizado a que atribuiu uma etapa de lançamento ALPHA. Depois que o papel personalizado for testado e validado, use o Deployment Manager para atualizar a configuração do papel personalizado e enviá-la para o estágio BETA sem usar o Console do Google Cloud.
  • Noções básicas sobre a adoção de papéis personalizados: ao ter mais definições dos papéis personalizados de sua organização no controle de origem, fica mais fácil compartilhar, aprender com padrões de uso e aplicar controles de acesso em vários projetos.

Noções básicas sobre os arquivos de configuração do Deployment Manager

O Deployment Manager usa três tipos de arquivos diferentes para descrever uma implantação. Cada tipo está descrito abaixo:

  • As configurações são arquivos YAML que descrevem os recursos e as propriedades deles. Para papéis personalizados do Gerenciamento de identidade e acesso (IAM, na sigla em inglês), cada arquivo YAML especifica todas as propriedades de um ou mais papéis personalizados, como nome, descrição e permissões.
  • Os esquemas especificam todas as propriedades possíveis para um determinado recurso e os valores padrão deles. Para papéis personalizados do IAM, há esquemas para papéis personalizados no nível do projeto e da organização.
  • Modelos, que são arquivos Jinja ou Python para o aprimoramento de configurações com a possibilidade de dividir uma configuração em partes reutilizáveis. Para papéis personalizados do IAM, há dois modelos fornecidos: um para papéis personalizados no nível do projeto e outro para papéis personalizados no nível da organização.

Para mais informações sobre esses tipos, consulte Fundamentos do Deployment Manager.

Antes de começar

Se você não estiver familiarizado com o Deployment Manager, primeiro complete o Guia de início rápido. Depois, siga as etapas a seguir:

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Ative as APIs Deployment Manager and IAM.

    Ative as APIs

  5. Instale a CLI do Google Cloud.
  6. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  7. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  8. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  9. Ative as APIs Deployment Manager and IAM.

    Ative as APIs

  10. Instale a CLI do Google Cloud.
  11. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init

Após a conclusão dessas etapas de pré-requisito, é possível começar a usar o Deployment Manager com o IAM para manter os papéis personalizados.

Conceder permissões à conta de serviço das APIs do Google

Para manter papéis personalizados usando o Deployment Manager, primeiro você precisa conceder as permissões apropriadas à conta de serviço das APIs do Google. Essa conta é criada por padrão para cada organização e projeto.

  1. No console do Google Cloud, abra a página IAM.

    Acessar a página do IAM

  2. Na lista de principais, localize o principal com o nome Agente de serviço das APIs do Google.

  3. Para editar os papéis da conta de serviço, clique no botão Editar e, depois, adicione o papel Papéis > Administrador de papéis.

  4. Clique em Salvar para aplicar o papel.

Agora que a conta de serviço das APIs do Google recebeu permissão para manter os papéis personalizados, você pode implantar um papel personalizado de exemplo usando o Deployment Manager.

Implantar papéis personalizados no projeto

Conforme descrito na seção acima, o Deployment Manager usa uma combinação de arquivos de configuração para descrever uma implantação. Para o IAM, considere os dois arquivos de exemplo a seguir para os papéis personalizados de um projeto:

project_custom_role.yaml

imports:
- path: project_custom_role.jinja

resources:
- name: custom-role
  type: project_custom_role.jinja
  properties:
    roleId: myCustomRole
    title: My Title
    description: My description.
    includedPermissions:
    - iam.roles.get
    - iam.roles.list

Esse arquivo YAML especifica as propriedades de um papel personalizado chamado custom-role, que concede permissões a iam.roles.get e iam.roles.list. Observe que ele se refere a um arquivo .jinja duas vezes. Essas referências usam os valores contidos no modelo Jinja conforme descrito abaixo.

project_custom_role.jinja

# Copyright 2017 Google LLC. All rights reserved.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#     http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

resources:
- name: custom-role
  type: gcp-types/iam-v1:projects.roles
  properties:
    parent: projects/{{ env["project"] }}

    roleId: {{ properties["roleId"] }}

    role:
      title: {{ properties["title"] }}

      description: {{ properties["description"] }}

      stage: {{ properties["stage"] }}

      includedPermissions: {{ properties["includedPermissions"] }}

Este arquivo Jinja fornece um modelo para um papel personalizado para minimizar a duplicação das mesmas propriedades em muitos papéis. Os valores padrão serão inseridos do arquivo .schema se o arquivo YAML correspondente não especificar valores para cada propriedade.

Para implantar esse papel personalizado com o Deployment Manager:

  1. Faça o download do conteúdo deste repositório GitHub na máquina local.
  2. Em uma janela de terminal, navegue até o diretório examples/v2/iam_custom_role/jinja no repositório de download. Ele contém o arquivo project_custom_role.yaml e os arquivos Jinja associados.
  3. Execute o seguinte comando para implantar o papel personalizado de exemplo, substituindo o valor de marcador your-deployment-name por um nome de implantação de sua escolha:

    gcloud deployment-manager deployments create \
       your-deployment-name --config project_custom_role.yaml
    
  4. Aguarde a conclusão da operação. A impressão digital da implantação e um indicador de progresso são exibidos:

    The fingerprint of the deployment is PUo2fmKdoFdJqiLViHjT3Q==
    Waiting for create [operation-1513228867042-560460d157ad1-b4ababb8-c6a7dddc]...done.
    
  5. Se a operação tiver sido bem-sucedida, você verá a seguinte mensagem de status:

    Create operation operation-1513228867042-560460d157ad1-b4ababb8-c6a7dddc completed successfully.
    NAME         TYPE                             STATE      ERRORS  INTENT
    custom-role  gcp-types/iam-v1:projects.roles  COMPLETED  []
    

Consultar o papel personalizado implantado

Para ver o papel personalizado no Deployment Manager:

  1. Em uma janela de terminal, execute o seguinte comando:

    gcloud deployment-manager deployments describe your-deployment-name
    
  2. Você verá uma descrição da implantação com informações abrangentes sobre o status, possíveis erros e muito mais.

    fingerprint: oaJoGesEFYvsAldP2bm5jQ==
    id: '3222872306422524501'
    insertTime: '2018-01-29T13:40:10.822-08:00'
    manifest: manifest-1517262010855
    name: your-deployment-name
    operation:
    endTime: '2018-01-29T13:40:26.500-08:00'
    name: operation-1517262010573-563f1172be0c9-ce5f0242-239fe1af
    operationType: insert
    progress: 100
    startTime: '2018-01-29T13:40:11.535-08:00'
    status: DONE
    user: id-7201362145@my-example-project.iam.gserviceaccount.com
    NAME         TYPE                             STATE      INTENT
    custom-role  gcp-types/iam-v1:projects.roles  COMPLETED
    
  3. Você também pode ver as informações detalhadas sobre a configuração do papel personalizado recuperando o manifesto da implantação. Na saída do comando describe na etapa 2 acima, anote o ID de manifest. Copie esse ID, incluindo o prefixo manifest-, e use-o para substituir o valor do marcador abaixo:

    gcloud deployment-manager manifests describe your-manifest-id \
        --deployment your-deployment-name
    
  4. O manifesto contém informações completas sobre a implantação do papel personalizado, o que inclui o conteúdo bruto dos arquivos project_custom_role.yaml e project_custom_role.jinja de origem. Observe especificamente o bloco resources próximo à parte inferior do manifesto, que resume os detalhes sobre o papel personalizado:

    ...
    resources:
    - name: custom-role
      properties:
        description: My description.
        includedPermissions:
        - iam.roles.get
        - iam.roles.list
        roleId: aCustomRole
        stage: ALPHA
        title: My Title
      resources:
      - name: custom-role
        type: gcp-types/iam-v1:projects.roles
      type: project_custom_role.jinja
    ...
    

Para ver o papel personalizado no console do Google Cloud:

  1. No console do Google Cloud, abra a página IAM.

    Acessar a página do IAM

  2. Selecione um projeto e clique em Abrir.

  3. No menu à esquerda, clique em Papéis.

  4. Clique no nome do papel personalizado recém-criado da lista. Ele será semelhante à captura de tela abaixo: