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:
- 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.
- 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.
- 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:
- Instale a ferramenta
dwh-migration-dumper
. - Execute a
dwh-migration-dumper
ferramenta para gerar os metadados necessários para a sua origem de dados.
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.
- Verifique se tem o Python 3.7 ou superior.
- Crie um novo ambiente virtual e ative-o.
No diretório
permissions-migration/terraform
, instale as dependências do ficheirorequirements.txt
através do seguinte comando:python -m pip install -r requirements.txt
Execute o comando do gerador:
python tf_generator PATH LOCATION OUTPUT
Substitua o seguinte:
PATH
: o caminho para o ficheiropermissions.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ávelgroup
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 predefinidogroup
por outro valor, comoserviceAccount
. - 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
oufalse
- A regra aplica-se apenas se a cláusula
when
for avaliada comotrue
- O valor predefinido é
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 desta cláusula depende do tipo de objeto processado e pode ser definido como:expression
para avaliar como uma stringvalue
para uma string constante
skip
: especifica que o objeto de entrada não deve ser mapeado- Pode ser
true
oufalse
- 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
true
oufalse
- 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
- Uma string representa uma expressão CEL booleana. Os valores podem ser
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 detype
pode seruser
,group
ouserviceAccount
.
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áveluser
- Para
group_rules
, use a variávelgroup
- Para
other_rules
, use a variávelother
- Para
role_rules
, use a variávelrole
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
ourefresh
, a função predefinida éwriter
- Se o conjunto de acesso contiver
select
ouread
, 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
- Escritorroles/storage.objectViewer
– Leitor
BigQuery:
roles/bigquery.dataOwner
- Escritorroles/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'"