Armazenar credenciais como AccessKeys e senhas em texto simples durante o desenvolvimento de dados expõe essas informações a riscos de vazamento. O Ciphertext Management permite criptografar e armazenar dados confidenciais e referenciá-los dinamicamente em jobs de Notebook, configurações do Spark e parâmetros de jobs em lote ou streaming, sem expor os valores originais no código ou nos arquivos de configuração.
Como funciona
Crie um texto cifrado no Ciphertext Management e atribua um nome de variável a ele.
Referencie o texto cifrado no código do Notebook, na configuração da sessão do Spark ou nos parâmetros de execução do job.
Durante a execução, o EMR Serverless Spark descriptografa o valor e o injeta automaticamente. O texto simples nunca fica visível no código ou nos logs.
Pré-requisitos
Antes de começar, verifique se você tem:
Um workspace do EMR Serverless Spark
Permissões para criar e gerenciar textos cifrados nesse workspace
Crie um texto cifrado
Faça login no console do E-MapReduce.
No painel de navegação à esquerda, escolha EMR Serverless > Spark.
Na página Spark, clique em o nome do workspace desejado.
Na página EMR Serverless Spark, clique em Ciphertexts no painel de navegação à esquerda.
Na página Ciphertexts, clique em Add Ciphertext.
-
Na página Add Ciphertext, configure os seguintes parâmetros e clique em Confirm.
Parâmetro
Descrição
Variable Name
Identificador exclusivo deste texto cifrado no workspace. Não pode ser modificado após a criação.
Ciphertext
Valor confidencial a criptografar. Diferencia maiúsculas de minúsculas. Não pode ser modificado ou visualizado novamente após a criação.
Anote o valor do texto cifrado antes de salvar. Após a criação, não é possível recuperar ou modificar esse valor.
Use um texto cifrado
Uso em um job de Notebook
Em um job de Notebook, use a biblioteca emrssutils.utils para recuperar um texto cifrado durante a execução. A versão do mecanismo DPI deve ser esr-2.8.0, esr-3.4.0, esr-4.4.0 ou superior.
O exemplo a seguir recupera uma senha de banco de dados armazenada como texto cifrado e a usa para ler dados via JDBC.
Etapa 1: Importe a biblioteca e carregue o texto cifrado.
import emrssutils.utils
# Retrieve the decrypted value at runtime
password = emrssutils.utils.get_secret(key='<variable_name>')
Substitua <variable_name> pelo Variable Name atribuído ao criar o texto cifrado.
Etapa 2: Referencie o valor do texto cifrado no código Spark.
df = spark.read \
.format("jdbc") \
.option("url", "jdbc:mysql://<jdbc_url>") \
.option("dbtable", "<db>.<table>") \
.option("user", "<username>") \
.option("password", password) \
.load()
df.show()
Uso em configurações do Spark
Nas configurações de sessão do Spark ou de jobs em lote, referencie um texto cifrado com a seguinte sintaxe:
${secret_values.variable_name}
Substitua variable_name pelo Variable Name definido durante a criação do texto cifrado.
O exemplo abaixo mostra uma configuração do Spark para uma sessão SQL que lê e grava dados no MaxCompute, com a AccessKey armazenada como um texto cifrado chamado AccessKey.
spark.sql.catalog.odps org.apache.spark.sql.execution.datasources.v2.odps.OdpsTableCatalog
spark.sql.extensions org.apache.spark.sql.execution.datasources.v2.odps.extension.OdpsExtensions
spark.sql.sources.partitionOverwriteMode dynamic
spark.hadoop.odps.tunnel.quota.name pay-as-you-go
spark.hadoop.odps.project.name <project_name>
spark.hadoop.odps.end.point https://service.cn-hangzhou-vpc.maxcompute.aliyun-inc.com/api
spark.hadoop.odps.access.id <accessId>
spark.hadoop.odps.access.key ${secret_values.AccessKey}
Para mais detalhes sobre leitura e gravação no MaxCompute, consulte Leitura e gravação no MaxCompute.
Uso em jobs em lote ou streaming
Nos parâmetros de execução de um job em lote ou streaming, referencie um texto cifrado com a mesma sintaxe:
${secret_values.variable_name}
A captura de tela a seguir ilustra um job em lote JAR configurado com um texto cifrado nos parâmetros de execução.
