Manter funções personalizadas com o Deployment Manager

Contexto

As funções personalizadas da gestão de identidade e acesso permitem-lhe conceder autorizações detalhadas a contas de utilizador e contas de serviço. Ao contrário das funções predefinidas, que são mantidas pela Google e atualizadas em conformidade, as funções personalizadas são mantidas pela sua organização à medida que novas autorizações ficam disponíveis.

O Cloud Deployment Manager pode facilitar a configuração e a manutenção das suas funções personalizadas. Pode usar o Deployment Manager para descrever funções com ficheiros de configuração, que podem ser registados no seu sistema de controlo de origem preferencial. Em conjunto, o Deployment Manager e o controlo de origem podem facilitar a criação de "config-as-code" para:

  • Acompanhar as funções personalizadas à medida que mudam ao longo do tempo
  • Promover funções personalizadas através de fases de lançamento à medida que são testadas e validadas
  • Automatizar a forma como as funções são implementadas em toda a sua organização

Antes de começar

  • Enable the IAM and Cloud Deployment Manager APIs.

    Enable the APIs

Cenários para manter funções personalizadas através do Deployment Manager

Considere os seguintes cenários que demonstram as vantagens de usar o Deployment Manager para manter funções personalizadas:

  • Controlar o acesso a novas autorizações: tem uma função personalizada que contém autorizações para um serviço Google Cloud . O serviço adiciona novas funcionalidades beta e expõe novas autorizações. A sua função personalizada não herda automaticamente estas novas autorizações. Tem de as adicionar manualmente. Até que as novas autorizações sejam adicionadas à sua função personalizada, os utilizadores da sua organização não têm acesso às funcionalidades beta. Pode usar os ficheiros de configuração e o controlo de origem do Deployment Manager para ajudar a auditar as autorizações existentes, atualizar as suas funções personalizadas conforme necessário e manter um histórico de revisões.
  • Gestão do ciclo de vida das funções: tem uma nova função personalizada à qual atribuiu uma ALPHA fase de lançamento. Depois de o papel personalizado ter sido testado e validado, pode usar o Deployment Manager para atualizar a configuração do papel personalizado e avançá-lo para a fase BETA sem usar a consolaGoogle Cloud .
  • Compreender a adoção de funções personalizadas: ao ter mais definições de funções personalizadas da sua organização no controlo de origem, torna-se mais fácil partilhar, aprender com padrões de utilização e aplicar controlos de acesso em vários projetos.

Compreender os ficheiros de configuração do Deployment Manager

O Deployment Manager usa três tipos de ficheiros diferentes para descrever uma implementação. Cada tipo é descrito abaixo:

  • As configurações são ficheiros YAML que descrevem os recursos e as respetivas propriedades. Para funções personalizadas de gestão de identidades e acessos (IAM), cada ficheiro YAML especifica todas as propriedades de uma ou mais funções personalizadas, como o nome, a descrição e as autorizações.
  • Os esquemas especificam todas as propriedades possíveis para um determinado recurso e os respetivos valores predefinidos. Para funções personalizadas de IAM, existem esquemas para funções personalizadas ao nível do projeto e da organização.
  • Modelos, que são ficheiros Jinja ou Python que melhoram as configurações ao permitir-lhe dividir uma configuração em partes reutilizáveis. Para as funções personalizadas do IAM, existem dois modelos fornecidos: um para funções personalizadas ao nível do projeto e outro para funções personalizadas ao nível da organização.

Para mais informações sobre estes tipos, consulte o artigo Fundamentos do Deployment Manager.

Antes de começar

Se não tiver experiência no Deployment Manager, conclua primeiro o início rápido. Em seguida, siga os passos abaixo:

    Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.

    In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

    Verify that billing is enabled for your Google Cloud project.

    Enable the Deployment Manager and IAM APIs.

    Enable the APIs

    In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

    Verify that billing is enabled for your Google Cloud project.

    Enable the Deployment Manager and IAM APIs.

    Enable the APIs

    Depois de concluir estes passos pré-requisitos, pode começar a usar o Deployment Manager com a IAM para manter as suas funções personalizadas.

    Conceda autorizações à conta de serviço das APIs Google

    Para manter as funções personalizadas através do Deployment Manager, tem de conceder primeiro as autorizações adequadas à conta de serviço das APIs Google. Esta conta é criada por predefinição para cada organização e projeto.

    1. Na Google Cloud consola, aceda à página IAM.

      Aceda à página IAM

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

    3. Para editar as funções da conta de serviço, clique no botão Editar e, de seguida, adicione a função Funções > Administrador de funções.

    4. Clique em Guardar para aplicar a função.

    Agora que a conta de serviço das APIs Google tem autorização para manter funções personalizadas, pode implementar uma função personalizada de exemplo através do Deployment Manager.

    Implemente funções personalizadas no seu projeto

    Conforme descrito na secção acima, o Deployment Manager usa uma combinação de ficheiros de configuração para descrever uma implementação. Para o IAM, considere os dois ficheiros de exemplo seguintes para as funções personalizadas 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

    Este ficheiro YAML especifica as propriedades acerca de uma função personalizada denominada custom-role, que concede autorizações a iam.roles.get e iam.roles.list. Tenha em atenção que faz referência a um ficheiro .jinja duas vezes. Estas referências usam os valores fornecidos pelo 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 ficheiro Jinja fornece um modelo para uma função personalizada para minimizar a duplicação das mesmas propriedades em várias funções. Os valores predefinidos são inseridos a partir de um ficheiro .schema se o ficheiro YAML correspondente não especificar valores para cada propriedade.

    Para implementar esta função personalizada com o Deployment Manager:

    1. Transfira o conteúdo deste repositório do GitHub para o seu computador local.
    2. Numa janela do terminal, navegue para o diretório examples/v2/iam_custom_role/jinja no repositório transferido. Contém o ficheiro project_custom_role.yaml e os ficheiros Jinja associados.
    3. Execute o seguinte comando para implementar a função personalizada de exemplo, substituindo o valor do marcador de posição your-deployment-name pelo nome de implementação à sua escolha:

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

      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, é apresentada a seguinte mensagem de estado:

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

    Veja a sua função personalizada implementada

    Para ver a sua função personalizada no Deployment Manager:

    1. Numa janela de terminal, execute o seguinte comando:

      gcloud deployment-manager deployments describe your-deployment-name
    2. É apresentada uma descrição da implementação, incluindo informações abrangentes sobre o respetivo estado, 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. Também pode ver as informações detalhadas sobre a configuração da função personalizada acedendo ao manifesto da implementação. No resultado do comando describe no passo 2 acima, tome nota do ID manifest. Copie este ID, incluindo o prefixo manifest-, e use-o para substituir o valor do marcador de posição abaixo:

      gcloud deployment-manager manifests describe your-manifest-id \
          --deployment your-deployment-name
    4. O manifesto contém informações exaustivas sobre a implementação da função personalizada, incluindo o conteúdo não processado dos ficheiros project_custom_role.yaml e project_custom_role.jinja. Em particular, repare no bloco resources perto da parte inferior do manifesto, que resume os detalhes sobre a função personalizada:

      ...
      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 a sua função personalizada na Google Cloud consola:

    1. Na Google Cloud consola, aceda à página IAM.

      Aceda à página IAM

    2. Selecione um projeto e clique em Abrir.

    3. No menu do lado esquerdo, clique em Funções.

    4. Clique no nome da função personalizada recém-criada na lista. Deve ter um aspeto semelhante ao da captura de ecrã abaixo: