Migrar autorizações do Hadoop

Este documento descreve como pode migrar autorizações do Apache Hadoop Distributed File System (HDFS), do Ranger HDFS e do Apache Hive para funções de gestão de identidades e acessos (IAM) no Cloud Storage ou no BigQuery.

O processo de migração de autorizações consiste nos seguintes passos:

  1. Gere um ficheiro de mapeamento de diretores criando primeiro um ficheiro de configuração YAML do conjunto de regras de diretores. Em seguida, execute a ferramenta de migração de autorizações com o ficheiro YAML do conjunto de regras principal com os ficheiros de metadados do HDFS ou do Ranger para gerar um ficheiro de mapeamento de principais.
  2. Gere um ficheiro de mapeamento de autorizações de destino criando primeiro um ficheiro YAML de conjunto de regras de autorizações. Em seguida, execute a ferramenta de migração de autorizações com o ficheiro YAML do conjunto de regras de autorizações, os ficheiros de configuração de mapeamento de tabelas e os ficheiros de metadados do HDFS ou do Ranger para gerar um ficheiro de mapeamento de autorizações de destino.
  3. Execute a ferramenta de migração de autorizações com o ficheiro de autorizações de destino para aplicar autorizações ao Cloud Storage ou ao BigQuery. Também pode usar o script Python fornecido para gerar um ficheiro Terraform que pode usar para aplicar autorizações por si.

Antes de começar

Antes de migrar as autorizações, verifique se fez o seguinte:

Também pode encontrar o script do gerador do Terraform no ficheiro terraform.zip dentro do pacote de lançamento.

Gere um ficheiro de mapeamento de diretores

Um ficheiro de mapeamento de responsáveis define regras de mapeamento que mapeiam responsáveis da sua origem para responsáveis do IAM. Google Cloud

Para gerar um ficheiro de mapeamento de principais, primeiro tem de criar manualmente um ficheiro YAML do conjunto de regras de principais para definir como os principais são mapeados da sua origem para os principais do Google Cloud IAM. No ficheiro YAML do conjunto de regras de principais, defina regras de mapeamento para cada uma das suas origens, ranger, HDFS ou ambas.

O exemplo seguinte mostra um ficheiro YAML do conjunto de regras de entidades principais que mapeia grupos do Apache Ranger para contas de serviço no Google Cloud:

  ranger:
    user_rules:
      - skip: true
    group_rules:
      # Skip internal Ranger groups.
      - skip: true
        when: "group.groupSource == 0"

      # Map all roles to Google Cloud Platform service accounts.
      - map:
          type:
            value: serviceAccount
          email_address:
            expression: "group.name + 'my-service-account@my-project.iam.gserviceaccount.com'"

    role_rules:
      - skip: true

  hdfs:
    user_rules:
      - skip: true
    group_rules:
      - skip: true
    other_rules:
      - skip: true

O exemplo seguinte mostra um ficheiro YAML do conjunto de regras de entidades de segurança que mapeia utilizadores do HDFS para Google Cloud utilizadores específicos:

  ranger:
    user_rules:
      - skip: true
    group_rules:
      - skip: true
    role_rules:
      - skip: true

  hdfs:
    user_rules:
      # Skip user named 'example'
      - when: "user.name == 'example'"
        skip: true
      # Map all other users to their name at google.com
      - when: "true"
        map:
          type:
            value: user
          email_address:
            expression: "user.name + '@google.com'"

    group_rules:
      - skip: true
    other_rules:
      - skip: true

Para mais informações sobre a sintaxe para criar um ficheiro YAML de conjunto de regras de principais, consulte o artigo Ficheiros YAML de conjunto de regras.

Depois de criar um ficheiro YAML do conjunto de regras de entidades principais, carregue-o para um contentor do Cloud Storage. Também tem de incluir o ficheiro HDFS, o ficheiro Apache Ranger gerado pela ferramenta dwh-migration-dumper ou ambos, consoante a origem a partir da qual está a migrar as autorizações. Em seguida, pode executar a ferramenta de migração de autorizações para gerar o ficheiro de mapeamento de responsáveis.

O exemplo seguinte mostra como pode executar a ferramenta de migração de autorizações para migrar do HDFS e do Apache Ranger, o que resulta num ficheiro de mapeamento de principais denominado principals.yaml.

./dwh-permissions-migration expand \
    --principal-ruleset gs://MIGRATION_BUCKET/principals-ruleset.yaml \
    --hdfs-dumper-output gs://MIGRATION_BUCKET/hdfs-dumper-output.zip \
    --ranger-dumper-output gs://MIGRATION_BUCKET/ranger-dumper-output.zip \
    --output-principals gs://MIGRATION_BUCKET/principals.yaml

Substitua MIGRATION_BUCKET pelo nome do contentor do Cloud Storage que contém os seus ficheiros de migração.

Depois de executar a ferramenta, inspecione o ficheiro principals.yaml gerado para verificar se contém diretores da sua origem mapeados para Google Clouddiretores do IAM. Pode editar o ficheiro manualmente antes dos passos seguintes.

Gere o ficheiro de autorizações de destino

O ficheiro de autorizações de destino contém informações sobre o mapeamento do conjunto de autorizações de origem no cluster Hadoop para funções do IAM para pastas geridas do BigQuery ou Cloud Storage. Para gerar um ficheiro de autorizações de destino, primeiro tem de criar manualmente um ficheiro YAML do conjunto de regras de autorizações que especifica como as autorizações do Ranger ou do HDFS são mapeadas para o Cloud Storage ou o BigQuery.

O exemplo seguinte aceita todas as autorizações do Ranger para o Cloud Storage:

gcs:
  ranger_hive_rules:
    - map: {}
      log: true

O exemplo seguinte aceita todas as autorizações do HDFS, exceto o principal hadoop:

gcs:
  hdfs_rules:
    - when:
        source_principal.name == 'hadoop'
      skip: true
    - map: {}

O exemplo seguinte substitui o mapeamento de funções predefinido para a tabela tab0 e usa as predefinições para todas as outras autorizações

gcs:
  ranger_hive_rules:
    ranger_hive_rules:
      - when: table.name == 'tab0'
        map:
          role:
            value: "roles/customRole"
      - map: {}

Para mais informações acerca da sintaxe para criar um ficheiro YAML de conjunto de regras de autorizações, consulte o artigo Ficheiros YAML de conjunto de regras.

Depois de criar um ficheiro YAML do conjunto de regras de autorizações, carregue-o para um contentor do Cloud Storage. Também tem de incluir o ficheiro HDFS, o ficheiro Apache Ranger gerado pela ferramenta dwh-migration-dumper ou ambos, consoante a origem a partir da qual está a migrar as autorizações. Também tem de incluir os ficheiros YAML de configuração das tabelas e o ficheiro de mapeamento de principais.

Em seguida, pode executar a ferramenta de migração de autorizações para gerar o ficheiro de autorizações de destino.

O exemplo seguinte mostra como pode executar a ferramenta de migração de autorizações para migrar do HDFS e do Apache Ranger, com os ficheiros de configuração de mapeamento de tabelas e o ficheiro de mapeamento de entidades denominado principals.yaml, resultando num ficheiro de mapeamento de entidades denominado permissions.yaml.

./dwh-permissions-migration build \
    --permissions-ruleset gs://MIGRATION_BUCKET/permissions-config.yaml \
    --tables gs://MIGRATION_BUCKET/tables/ \
    --principals gs://MIGRATION_BUCKET/principals.yaml \
    --ranger-dumper-output gs://MIGRATION_BUCKET/ranger-dumper-output.zip \
    --hdfs-dumper-output gs://MIGRATION_BUCKET/hdfs-dumper-output.zip \
    --output-permissions gs://MIGRATION_BUCKET/permissions.yaml

Substitua MIGRATION_BUCKET pelo nome do contentor do Cloud Storage que contém os seus ficheiros de migração.

Depois de executar a ferramenta, inspecione o ficheiro permissions.yaml gerado para verificar se contém autorizações da sua origem mapeadas para associações da IAM do Cloud Storage ou do BigQuery. Pode editá-las manualmente antes dos passos seguintes.

Aplique autorizações

Depois de gerar um ficheiro de autorizações de destino, pode executar a ferramenta de migração de autorizações para aplicar as autorizações da IAM ao Cloud Storage ou ao BigQuery.

Antes de executar a ferramenta de migração de autorizações, verifique se cumpre os seguintes pré-requisitos:

  • Criou os principais necessários (utilizadores, grupos, contas de serviço) em Google Cloud.
  • Criou as pastas ou as tabelas geridas do Cloud Storage que vão alojar os dados migrados.
  • O utilizador que executa a ferramenta tem autorizações para gerir funções para as pastas ou as tabelas geridas do Cloud Storage.

Pode aplicar autorizações executando o seguinte comando:

./dwh-permissions-migration apply \
--permissions gs://MIGRATION_BUCKET/permissions.yaml

Onde MIGRATION_BUCKET é o nome do contentor do Cloud Storage que contém os seus ficheiros de migração.

Aplique autorizações como uma configuração do Terraform

Para aplicar as autorizações migradas, também pode converter o ficheiro de autorizações de destino numa configuração de infraestrutura como código (IaC) do Terraform e aplicá-la ao Cloud Storage.

  1. Verifique se tem o Python 3.7 ou superior.
  2. Crie um novo ambiente virtual e ative-o.
  3. No diretório permissions-migration/terraform, instale as dependências do ficheiro requirements.txt através do seguinte comando:

    python -m pip install -r requirements.txt
  4. Execute o comando do gerador:

    python tf_generator PATH LOCATION OUTPUT

    Substitua o seguinte:

    • PATH: o caminho para o ficheiro permissions.yaml gerado.
    • LOCATION: a localização do seu contentor do Cloud Storage onde o script verifica e cria pastas com base na configuração de autorizações.
    • OUTPUT: o caminho para o ficheiro de saída, main.tf.

Ficheiros YAML do conjunto de regras

Os ficheiros YAML do conjunto de regras são usados para mapear diretores e funções quando migram autorizações do HDFS ou do Apache Ranger para oGoogle Cloud. Os ficheiros YAML do conjunto de regras usam o Idioma de expressão comum (IEC) para especificar predicados (em que o resultado é booleano) e expressões (em que o resultado é uma string).

Os ficheiros YAML do conjunto de regras têm as seguintes características:

  • As regras de mapeamento de cada tipo são executadas sequencialmente de cima para baixo para cada objeto de entrada.
  • As expressões CEL têm acesso a variáveis de contexto, e as variáveis de contexto dependem da secção do conjunto de regras. Por exemplo, pode usar a variável user para mapear objetos de utilizadores de origem e pode usar a variável group para mapear grupos.
  • Pode usar expressões CEL ou valores estáticos para alterar os valores predefinidos. Por exemplo, quando mapeia um grupo, pode substituir o valor de saída type do valor predefinido group por outro valor, como serviceAccount.
  • Tem de existir, pelo menos, uma regra que corresponda a todos os objetos de entrada.

Numa migração de autorizações do HDFS ou do Apache Ranger, pode usar um ficheiro YAML de conjunto de regras para definir um ficheiro de mapeamento principal ou um ficheiro de mapeamento de funções.

Regras de mapeamento em ficheiros YAML de conjuntos de regras

O ficheiro YAML do conjunto de regras consiste em regras de mapeamento que especificam como os objetos correspondem da sua origem ao seu destino durante uma migração de autorizações. Uma regra de mapeamento pode conter as seguintes secções ou cláusulas:

  • when: Uma cláusula de predicado que limita a aplicabilidade da regra
    • Uma string representa uma expressão CEL booleana. Os valores podem ser true ou false
    • A regra aplica-se apenas se a cláusula when for avaliada como true
    • O valor predefinido é true
  • map: uma cláusula que especifica o conteúdo de um campo de resultado. O valor desta cláusula depende do tipo de objeto processado e pode ser definido como:
    • expression para avaliar como uma string
    • value para uma string constante
  • skip: especifica que o objeto de entrada não deve ser mapeado
    • Pode ser true ou false
  • log: Uma cláusula de predicado que ajuda a depurar ou desenvolver regras
    • Uma string representa uma expressão CEL booleana. Os valores podem ser true ou false
    • O valor predefinido é false
    • Se estiver definido como true, o resultado contém um registo de execução que pode ser usado para monitorizar ou diagnosticar problemas na execução

Criar um ficheiro YAML do conjunto de regras de diretor

Um ficheiro de mapeamento de principais é usado para gerar identificadores principais, fornecendo um valor para email_address e type.

  • Use email_address para especificar o email do Google Cloud principal.
  • Use type para especificar a natureza do principal em Google Cloud. O valor de type pode ser user, group ou serviceAccount.

Qualquer expressão CEL usada nas regras tem acesso a variáveis que representam o objeto processado. Os campos nas variáveis baseiam-se no conteúdo dos ficheiros de metadados do HDFS ou do Apache Ranger. As variáveis disponíveis dependem da secção do conjunto de regras:

  • Para user_rules, use a variável user
  • Para group_rules, use a variável group
  • Para other_rules, use a variável other
  • Para role_rules, use a variável role

O exemplo seguinte mapeia os utilizadores do HDFS para os utilizadores no Google Cloud com o respetivo nome de utilizador, seguido de @google.com como endereço de email:

hdfs:
  user_rules:
    # Skip user named 'example'
    - when: "user.name == 'example'"
      skip: true
    # Map all other users to their name at google.com
    - when: "true"
      map:
        type:
          value: user
        email_address:
          expression: "user.name + '@google.com'"

Substitua o mapeamento de funções predefinido

Para usar principais não predefinidos, pode ignorar ou modificar os mapeamentos de funções predefinidos através dos ficheiros do conjunto de regras.

O exemplo seguinte mostra como pode ignorar uma secção de regras:

hdfs:
  user_rules:
    - skip: true
  group_rules:
    - skip: true
  other_rules:
    - skip: true

Criar um ficheiro YAML de conjunto de regras de autorizações

É usado um ficheiro YAML do conjunto de regras de autorizações para gerar um ficheiro de mapeamento de autorizações de destino. Para criar um ficheiro YAML de conjunto de regras de autorizações, use expressões CEL no YAML de conjunto de regras de autorizações para mapear autorizações do HDFS ou do Apache Ranger para funções do Cloud Storage ou do BigQuery.

Mapeamento de funções predefinido

As funções dos ficheiros HDFS são determinadas pelas autorizações dos ficheiros de origem:

  • Se o bit w estiver definido, a função predefinida é writer
  • Se o bit r estiver definido, a função predefinida é reader
  • Se nenhum dos bits estiver definido, a função está vazia

Ranger HDFS:

  • Se o conjunto de acesso contiver write, a função predefinida é writer
  • Se o conjunto de acesso contiver read, a função predefinida é reader
  • Se o conjunto de acesso não contiver nenhum dos elementos acima, a função está vazia

Ranger:

  • Se o conjunto de acesso contiver update, create, drop, alter, index, lock, all, write ou refresh, a função predefinida é writer
  • Se o conjunto de acesso contiver select ou read, a função predefinida é reader
  • Se o conjunto de acesso não contiver nenhuma das autorizações anteriores, a função está vazia

Cloud Storage:

  • roles/storage.objectUser - Escritor
  • roles/storage.objectViewer – Leitor

BigQuery:

  • roles/bigquery.dataOwner - Escritor
  • roles/bigquery.dataViewer – Leitor

O exemplo seguinte mostra como pode aceitar os mapeamentos predefinidos sem alterações no ficheiro YAML do conjunto de regras:

ranger_hdfs_rules:
  - map: {}

Substitua o mapeamento de funções predefinido

Para usar funções não predefinidas, pode ignorar ou modificar os mapeamentos de funções predefinidos através dos ficheiros do conjunto de regras.

O exemplo seguinte mostra como pode substituir um mapeamento de funções predefinido através de uma cláusula de mapeamento com o campo de função usando uma causa de valor:

ranger_hdfs_rules:
  - map:
    role:
      value: "roles/customRole"

Unir mapeamentos de autorizações

Se forem gerados vários mapeamentos de autorizações para o mesmo recurso segmentado, é usado o mapeamento com o acesso mais amplo. Por exemplo, se uma regra do HDFS atribuir uma função de leitor ao principal pa1 numa localização do HDFS e uma regra do Ranger atribuir uma função de escritor ao mesmo principal na mesma localização, é atribuída a função de escritor.

Uso de aspas em strings em expressões IEC

Use aspas "" para incluir toda a expressão CEL em YAML. Na expressão CEL, use aspas simples '' para citar strings. Por exemplo:

"'permissions-migration-' + group.name + '@google.com'"