Migrar permissões do Hadoop
Neste documento, descrevemos como migrar permissões do Apache Hadoop Distributed File System (HDFS), do Ranger HDFS e do Apache Hive para papéis do Identity and Access Management (IAM) no Cloud Storage ou no BigQuery.
O processo de migração de permissões consiste nas seguintes etapas:
- Gere um arquivo de mapeamento de principais criando primeiro um arquivo de configuração YAML do conjunto de regras principais. Em seguida, execute a ferramenta de migração de permissões com o arquivo YAML do conjunto de regras principais e os arquivos de metadados do HDFS ou do Ranger para gerar um arquivo de mapeamento de principais.
- Gere um arquivo de mapeamento de permissões de destino criando primeiro um arquivo YAML do conjunto de regras de permissões. Em seguida, execute a ferramenta de migração de permissões com o arquivo YAML do conjunto de regras de permissões, os arquivos de configuração de mapeamento de tabelas e os arquivos de metadados do HDFS ou do Ranger, para gerar um arquivo de mapeamento de permissões de destino.
- Execute a ferramenta de migração de permissões com o arquivo de permissões de destino para aplicar permissões ao Cloud Storage ou ao BigQuery. Também é possível usar o script Python fornecido para gerar um arquivo do Terraform que pode ser usado para aplicar permissões por conta própria.
Antes de começar
Antes de migrar as permissões, verifique se você fez o seguinte:
- Instale a ferramenta
dwh-migration-dumper. - Execute a ferramenta
dwh-migration-dumperpara gerar os metadados necessários para sua fonte de dados.
Também é possível encontrar o script do gerador do Terraform no arquivo terraform.zip dentro do pacote de lançamento.
Gerar um arquivo de mapeamento de principais
Um arquivo de mapeamento de principais define regras de mapeamento que mapeiam principais da sua fonte para Google Cloud principais do IAM.
Para gerar um arquivo de mapeamento de principais, primeiro crie manualmente um
arquivo YAML do conjunto de regras principais para definir como os principais são mapeados da sua fonte
para Google Cloud os principais do IAM. No arquivo YAML do conjunto de regras principais, defina regras de mapeamento para cada uma das suas fontes, ranger, HDFS ou ambas.
O exemplo a seguir mostra um arquivo YAML do conjunto de regras principais que mapeia grupos do Apache Ranger para contas de serviço em 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 a seguir mostra um arquivo YAML do conjunto de regras principais que mapeia usuários do HDFS para usuários específicos Google Cloud :
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 arquivo YAML do conjunto de regras principais, consulte Arquivos YAML do conjunto de regras.
Depois de criar um arquivo YAML do conjunto de regras principais, faça upload dele para um bucket do Cloud Storage. Você também precisa incluir o arquivo HDFS, o arquivo Apache Ranger gerado pela ferramenta dwh-migration-dumper ou ambos, dependendo da fonte de que você está migrando as permissões. Em seguida, execute a ferramenta de migração de permissões para gerar o arquivo de mapeamento de principais.
O exemplo a seguir mostra como executar a ferramenta de migração de permissões para migrar do HDFS e do Apache Ranger, resultando em um arquivo de mapeamento de principais chamado 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 bucket do Cloud Storage que contém seus arquivos de migração.
Depois de executar a ferramenta, inspecione o arquivo principals.yaml gerado para verificar
se ele contém principais da sua fonte mapeados para Google Cloud
principais do IAM. É possível editar o arquivo manualmente antes das próximas etapas.
Gerar arquivo de permissões de destino
O arquivo de permissões de destino contém informações sobre o mapeamento do conjunto de permissões de origem no cluster Hadoop para papéis do IAM para pastas gerenciadas do BigQuery ou do Cloud Storage. Para gerar um arquivo de permissões de destino, primeiro crie manualmente um arquivo YAML do conjunto de regras de permissões que especifica como as permissões do Ranger ou do HDFS são mapeadas para o Cloud Storage ou o BigQuery.
O exemplo a seguir aceita todas as permissões do Ranger para o Cloud Storage:
gcs: ranger_hive_rules: - map: {} log: true
O exemplo a seguir aceita todas as permissões do HDFS, exceto o principal hadoop:
gcs: hdfs_rules: - when: source_principal.name == 'hadoop' skip: true - map: {}
O exemplo a seguir substitui o mapeamento de papéis padrão da tabela tab0 e usa os padrões para todas as outras permissões:
gcs: ranger_hive_rules: ranger_hive_rules: - when: table.name == 'tab0' map: role: value: "roles/customRole" - map: {}
Para mais informações sobre a sintaxe para criar um arquivo YAML do conjunto de regras de permissões, consulte Arquivos YAML do conjunto de regras.
Depois de criar um arquivo YAML do conjunto de regras de permissões, faça upload dele para um bucket do Cloud Storage. Você também precisa incluir o arquivo HDFS, o arquivo Apache Ranger gerado pela ferramenta dwh-migration-dumper ou ambos, dependendo da fonte de que você está migrando as permissões. Você também precisa
incluir os arquivos YAML de configuração de tabelas e o arquivo de mapeamento de principais.
Em seguida, execute a ferramenta de migração de permissões para gerar o arquivo de permissões de destino.
O exemplo a seguir mostra como executar a ferramenta de migração de permissões para migrar do HDFS e do Apache Ranger, com os arquivos de configuração de mapeamento de tabelas e o arquivo de mapeamento de principais chamado principals.yaml, resultando em um arquivo de mapeamento de principais chamado 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 bucket do Cloud Storage que contém seus arquivos de migração.
Depois de executar a ferramenta, inspecione o arquivo permissions.yaml gerado para verificar se ele contém permissões da sua fonte mapeadas para vinculações do IAM do Cloud Storage ou do BigQuery. É possível editar o arquivo manualmente antes das próximas etapas.
Aplicar permissões
Depois de gerar um arquivo de permissões de destino, execute a ferramenta de migração de permissões para aplicar as permissões do IAM ao Cloud Storage ou ao BigQuery.
Antes de executar a ferramenta de migração de permissões, verifique se você atendeu aos seguintes pré-requisitos:
- Você criou os principais necessários (usuários, grupos, contas de serviço) em Google Cloud.
- Você criou as tabelas ou pastas gerenciadas do Cloud Storage que vão hospedar os dados migrados.
- O usuário que executa a ferramenta tem permissões para gerenciar papéis para as tabelas ou pastas gerenciadas do Cloud Storage.
É possível aplicar permissões executando o seguinte comando:
./dwh-permissions-migration apply \ --permissions gs://MIGRATION_BUCKET/permissions.yaml
Em que MIGRATION_BUCKET é o nome do bucket do Cloud Storage que contém seus arquivos de migração.
Aplicar permissões como uma configuração do Terraform
Para aplicar as permissões migradas, também é possível converter o arquivo de permissões de destino em uma configuração de infraestrutura como código (IaC) do Terraform e aplicá-lo ao Cloud Storage.
- Verifique se você tem o Python 3.7 ou mais recente.
- Crie um novo ambiente virtual e ative-o.
No diretório
permissions-migration/terraform, instale as dependências do arquivorequirements.txtusando o seguinte comando:python -m pip install -r requirements.txt
Execute o comando do gerador:
python tf_generator PATH LOCATION OUTPUT
Substitua:
PATH: o caminho para o arquivopermissions.yamlgerado.LOCATION: o local do bucket do Cloud Storage em que o script verifica e cria pastas com base na configuração de permissão.OUTPUT: o caminho para o arquivo de saída,main.tf.
Arquivos YAML do conjunto de regras
Os arquivos YAML do conjunto de regras são usados para mapear principais e papéis ao migrar permissões do HDFS ou do Apache Ranger para Google Cloud. Os arquivos YAML do conjunto de regras usam a Common Expression Language (CEL) para especificar predicados (em que o resultado é booleano) e expressões (em que o resultado é string).
Os arquivos 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 seção do conjunto de regras. Por exemplo, é possível usar a variável
userpara mapear objetos de usuário de origem e a variávelgrouppara mapear grupos. - É possível usar expressões CEL ou valores estáticos para mudar os valores padrão. Por exemplo, ao mapear um grupo, é possível substituir o valor de saída
typedo valor padrãogrouppor outro valor, comoserviceAccount. - É necessário que haja pelo menos uma regra que corresponda a cada objeto de entrada.
Em uma migração de permissões do HDFS ou do Apache Ranger, um arquivo YAML do conjunto de regras pode ser usado para definir um arquivo de mapeamento principal ou um arquivo de mapeamento de papéis.
Regras de mapeamento em arquivos YAML do conjunto de regras
O arquivo YAML do conjunto de regras consiste em regras de mapeamento que especificam como os objetos correspondem da origem ao destino durante uma migração de permissões. Uma regra de mapeamento pode conter as seguintes seçõ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
trueoufalse - A regra só será aplicada se a cláusula
whenfor avaliada comotrue - O valor padrão é
true
- Uma string representa uma expressão CEL booleana. Os valores podem ser
map: uma cláusula que especifica o conteúdo de um campo de resultado. O valor dessa cláusula depende do tipo de objeto processado e pode ser definido como:expressionpara avaliar como uma stringvaluepara uma string constante
skip: especifica que o objeto de entrada não deve ser mapeado- Pode ser
trueoufalse
- Pode ser
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
trueoufalse - O valor padrão é
false - Se definido como
true, a saída conterá um registro de execução que pode ser usado para monitorar ou diagnosticar problemas na execução
- Uma string representa uma expressão CEL booleana. Os valores podem ser
Criar um arquivo YAML do conjunto de regras principais
Um arquivo de mapeamento principal é usado para gerar identificadores
principais fornecendo um valor para
email_address e type.
- Use
email_addresspara especificar o e-mail do Google Cloud principal. - Use
typepara especificar a natureza do principal em Google Cloud. O valor detypepode seruser,groupouserviceAccount.
Qualquer expressão CEL usada nas regras tem acesso a variáveis que representam o objeto processado. Os campos nas variáveis são baseados no conteúdo dos arquivos de metadados do HDFS ou do Apache Ranger. As variáveis disponíveis dependem da seção do conjunto de regras:
- Para
user_rules, use a variáveluser - Para
group_rules, use a variávelgroup - Para
other_rules, use a variávelother - Para
role_rules, use a variávelrole
O exemplo a seguir mapeia usuários do HDFS para usuários no Google Cloud
com o nome de usuário, seguido por @google.com como endereço de e-mail:
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'"
Substituir o mapeamento de papéis padrão
Para usar principais não padrão, é possível pular ou modificar os mapeamentos de papéis padrão usando os arquivos do conjunto de regras.
O exemplo a seguir mostra como pular uma seção de regras:
hdfs: user_rules: - skip: true group_rules: - skip: true other_rules: - skip: true
Criar um arquivo YAML do conjunto de regras de permissões
Um arquivo YAML do conjunto de regras de permissões é usado para gerar um arquivo de mapeamento de permissões de destino. Para criar um arquivo YAML do conjunto de regras de permissões, use expressões CEL no arquivo YAML do conjunto de regras de permissões para mapear permissões do HDFS ou do Apache Ranger para papéis do Cloud Storage ou do BigQuery.
Mapeamento de papéis padrão
Os papéis de arquivo do HDFS são determinados pelas permissões do arquivo de origem:
- Se o bit
westiver definido, o papel padrão seráwriter - Se o bit
restiver definido, o papel padrão seráreader - Se nenhum dos bits estiver definido, o papel estará vazio
Ranger HDFS:
- Se o conjunto de acesso contiver
write, o papel padrão seráwriter - Se o conjunto de acesso contiver
read, o papel padrão seráreader - Se o conjunto de acesso não contiver nenhum dos dois, o papel estará vazio
Patrulheiro:
- Se o conjunto de acesso contiver
update,create,drop,alter,index,lock,all,write, ourefresh, o papel padrão seráwriter - Se o conjunto de acesso contiver
selectouread, o papel padrão seráreader - Se o conjunto de acesso não contiver nenhuma das permissões anteriores, o papel estará vazio
Cloud Storage:
roles/storage.objectUser- gravadorroles/storage.objectViewer- leitor
BigQuery:
roles/bigquery.dataOwner- gravadorroles/bigquery.dataViewer- leitor
O exemplo a seguir mostra como aceitar mapeamentos padrão sem alterações no arquivo YAML do conjunto de regras:
ranger_hdfs_rules: - map: {}
Substituir o mapeamento de papéis padrão
Para usar papéis não padrão, é possível pular ou modificar os mapeamentos de papéis padrão usando os arquivos do conjunto de regras.
O exemplo a seguir mostra como substituir um mapeamento de papéis padrão usando uma cláusula de mapa com o campo de papel usando uma cláusula de valor:
ranger_hdfs_rules: - map: role: value: "roles/customRole"
Mesclar mapeamentos de permissões
Se vários mapeamentos de permissões forem gerados para o mesmo recurso de destino, o mapeamento com o acesso mais amplo será usado. Por exemplo, se uma regra do HDFS conceder um papel de leitor ao principal pa1 em um local do HDFS e uma regra do Ranger conceder um papel de gravador ao mesmo principal no mesmo local, o papel de gravador será atribuído.
Citação de strings em expressões CEL
Use aspas duplas "" para envolver toda a expressão CEL em YAML. Na
expressão CEL, use aspas simples '' para citar strings. Exemplo:
"'permissions-migration-' + group.name + '@google.com'"