Como 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 primeiro criando um arquivo de configuração YAML de conjunto de regras principal. Em seguida, execute a ferramenta de migração de permissões com o arquivo YAML do conjunto de regras principal 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 de 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 e os arquivos de configuração de mapeamento de tabelas, além dos 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. Você também pode 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-dumper
para gerar os metadados necessários da 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 que mapeiam principais da sua origem para principais do IAM Trusted Cloud .
Para gerar um arquivo de mapeamento de principais, primeiro crie manualmente um arquivo YAML de conjunto de regras principais para definir como os principais são mapeados da sua origem para os principais do IAM Trusted Cloud . No arquivo YAML do conjunto de regras de principais, defina regras de mapeamento para cada uma das suas fontes, ranger
, HDFS
ou ambas.
O exemplo a seguir mostra um arquivo YAML de conjunto de regras de principais que mapeia grupos do Apache Ranger para contas de serviço em Trusted Cloud by S3NS:
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.s3ns-system.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 de conjunto de regras de principais que mapeia usuários do HDFS para usuários específicos do Trusted 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 de criação de um arquivo YAML de conjunto de regras de principais, consulte Arquivos YAML de conjunto de regras.
Depois de criar um arquivo YAML de conjunto de regras de principais, faça upload dele para um
bucket do Cloud Storage. Você também precisa incluir o arquivo HDFS, o arquivo do Apache Ranger gerado pela ferramenta dwh-migration-dumper
ou ambos, dependendo da origem de migração das 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 origem mapeados para principais do IAM
Trusted Cloud. Você pode 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 do Hadoop para papéis do IAM em pastas gerenciadas do BigQuery ou do Cloud Storage. Para gerar um arquivo de permissões de destino, primeiro crie manualmente um arquivo YAML de conjunto de regras de permissões que especifique 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 função 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 de criação de um arquivo YAML de conjunto de regras de permissões, consulte Arquivos YAML de conjunto de regras.
Depois de criar um arquivo YAML de 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 do Apache Ranger gerado pela ferramenta dwh-migration-dumper
ou ambos, dependendo da origem de migração das 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 os 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 origem mapeadas para vinculações do IAM do Cloud Storage ou do BigQuery. Você pode editar o 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ê atende aos seguintes pré-requisitos:
- Você criou os principais necessários (usuários, grupos, contas de serviço) em Trusted Cloud.
- Você criou as pastas ou tabelas 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 nas pastas ou tabelas gerenciadas do Cloud Storage.
Para aplicar permissões, execute 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 os 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á-la ao Cloud Storage.
- Verifique se você tem o Python 3.7 ou uma versão mais recente.
- Crie e ative um ambiente virtual.
No diretório
permissions-migration/terraform
, instale as dependências do arquivorequirements.txt
usando 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.yaml
gerado.LOCATION
: o local do seu 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 Trusted Cloud. Os arquivos YAML de 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, que dependem da seção do conjunto de regras. Por exemplo, use a variável
user
para mapear objetos de usuário de origem e a variávelgroup
para 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
type
do valor padrãogroup
por outro valor, comoserviceAccount
. - É necessário haver pelo menos uma regra que corresponda a todos os objetos de entrada.
Em uma migração de permissões do HDFS ou do Apache Ranger, um arquivo YAML de conjunto de regras pode ser usado para definir um arquivo de mapeamento principal ou de mapeamento de função.
Regras de mapeamento em arquivos YAML de 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 booleana CEL. Os valores podem ser
true
oufalse
. - A regra só se aplica se a cláusula
when
for avaliada comotrue
. - O valor padrão é
true
- Uma string representa uma expressão booleana CEL. 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: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 booleana CEL. Os valores podem ser
true
oufalse
. - O valor padrão é
false
- Se definido como
true
, a saída vai conter um registro de execução que pode ser usado para monitorar ou diagnosticar problemas na execução.
- Uma string representa uma expressão booleana CEL. Os valores podem ser
Como criar um arquivo YAML de conjunto de regras principal
Um arquivo de mapeamento de principais é usado para gerar identificadores
principais fornecendo um valor para
email_address
e type
.
- Use
email_address
para especificar o e-mail do principal Trusted Cloud . - Use
type
para especificar a natureza do principal em Trusted 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 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 Trusted Cloudcom 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 função padrão
Para usar principais não padrão, pule ou modifique os mapeamentos de função padrão usando os arquivos de conjunto de regras.
O exemplo a seguir mostra como ignorar uma seção de regras:
hdfs: user_rules: - skip: true group_rules: - skip: true other_rules: - skip: true
Como criar um arquivo YAML de conjunto de regras de permissões
Um arquivo YAML de conjunto de regras de permissões é usado para gerar um arquivo de mapeamento de permissões de destino. Para criar um arquivo YAML de conjunto de regras de permissões, use expressões CEL no arquivo YAML de 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 função padrão
As funções de arquivo do HDFS são determinadas pelas permissões do arquivo de origem:
- Se o bit
w
estiver definido, a função padrão seráwriter
. - Se o bit
r
estiver definido, a função padrão seráreader
. - Se nenhum dos bits estiver definido, a função vai ficar vazia.
HDFS do Ranger:
- Se o conjunto de acesso contiver
write
, a função padrão seráwriter
. - Se o conjunto de acesso contiver
read
, a função padrão seráreader
. - Se o conjunto de acesso não contiver nenhum dos dois, a função vai ficar vazia.
Patrulheiro:
- Se o conjunto de acesso contiver
update
,create
,drop
,alter
,index
,lock
,all
,write
ourefresh
, a função padrão seráwriter
. - Se o conjunto de acesso contiver
select
ouread
, o papel padrão seráreader
. - Se o conjunto de acesso não tiver nenhuma das permissões anteriores, o papel vai estar vazio.
Cloud Storage:
roles/storage.objectUser
: Writerroles/storage.objectViewer
: leitor
BigQuery:
roles/bigquery.dataOwner
: Writerroles/bigquery.dataViewer
: leitor
O exemplo a seguir mostra como aceitar mapeamentos padrão sem fazer mudanças no arquivo YAML do conjunto de regras:
ranger_hdfs_rules: - map: {}
Substituir o mapeamento de função padrão
Para usar funções não padrão, pule ou modifique os mapeamentos de função padrão usando os arquivos de conjunto de regras.
O exemplo a seguir mostra como substituir um mapeamento de função padrão usando uma cláusula de mapa com o campo de função usando uma causa de valor:
ranger_hdfs_rules: - map: role: value: "roles/customRole"
Como mesclar mapeamentos de permissões
Se vários mapeamentos de permissões forem gerados para o mesmo recurso de destino, será usado o mapeamento com o acesso mais amplo. 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.
Como usar aspas em expressões CEL
Use aspas ""
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'"