Saltar para o conteúdo principal
Versão 3.0

Segurança - Spark

ChartVersion3.0.1TypeapplicationAppVersion4.0.2
CompatibilidadeKubernetes1.32+OpenShift4.19+Rancher2.10.x+

Visão geral

O chart tdp-spark concentra a segurança principalmente na forma como o Spark acessa armazenamento S3/S3A e como valores sensíveis são fornecidos à configuração.
Os valores de S3/S3A devem ser tratados como placeholders em arquivos versionados e fornecidos por Secrets ou ferramentas externas.

A ideia prática é simples: Spark precisa de endpoint, credenciais e permissões para ler e gravar dados; a documentação deve mostrar onde esses valores entram, mas não deve versionar segredos reais.

Modos de acesso a armazenamento

ModoOnde configurarUso típico
spark.sparkConfChaves spark.hadoop.fs.s3a.*Propriedades diretamente repassadas ao Spark
tdp-spark.hadoopConfigChaves fs.s3a.*Renderização de core-site.xml pelo wrapper TDP
tdp-spark.customSparkConfig.propertiesLinhas de spark-defaults.confDefaults adicionais usados por clientes Spark

Use apenas placeholders em arquivos versionados.
Forneça valores reais por arquivo privado de valores, Secret ou mecanismo externo de gestão de segredos.

Pré-requisitos

  • Endpoint S3/S3A acessível a partir dos pods Spark.
  • Credenciais com permissão adequada no bucket ou prefixo usado pelos jobs.
  • Bucket ou warehouse criado antes da execução dos pipelines.
  • Configuração de TLS/HTTP coerente com o endpoint usado.
  • NetworkPolicy permitindo tráfego dos pods Spark até o serviço de armazenamento.

Credenciais S3/S3A

As credenciais podem ser informadas via spark.sparkConf quando o ambiente exigir que o Spark receba as chaves como propriedades spark.hadoop.*:

spark:
sparkConf:
"spark.hadoop.fs.s3a.endpoint": "http://<S3_ENDPOINT>:<S3_PORT>"
"spark.hadoop.fs.s3a.access.key": "<ACCESS_KEY>"
"spark.hadoop.fs.s3a.secret.key": "<SECRET_KEY>"
"spark.hadoop.fs.s3a.path.style.access": "true"
"spark.hadoop.fs.s3a.connection.ssl.enabled": "false"

Não use credenciais reais nesse exemplo.
Substitua os placeholders por valores vindos de mecanismo seguro no processo de instalação.

Configuração do core-site.xml via hadoopConfig

O bloco tdp-spark.hadoopConfig é renderizado pelo chart como core-site.xml.
Esse arquivo é lido pelo Hadoop antes de muitos defaults do Spark, por isso é útil para propriedades de filesystem e autenticação Hadoop.

Modelo:

tdp-spark:
hadoopConfig:
"fs.s3a.endpoint": "http://<S3_ENDPOINT>:<S3_PORT>"
"fs.s3a.access.key": "<ACCESS_KEY>"
"fs.s3a.secret.key": "<SECRET_KEY>"
"fs.s3a.path.style.access": "true"

O chart também usa esse bloco para configurações como autenticação Hadoop simples, fs.defaultFS e parâmetros S3A.
Valide o conjunto final com os valores aplicados no ambiente.

Configuração do spark-defaults.conf via customSparkConfig

O bloco tdp-spark.customSparkConfig.properties é renderizado como spark-defaults.conf.
Use esse caminho para defaults adicionais do Spark, como event log, Ivy local, propriedades Hadoop e ajustes de S3A.

Modelo:

tdp-spark:
customSparkConfig:
properties: |
spark.hadoop.fs.s3a.endpoint http://<S3_ENDPOINT>:<S3_PORT>
spark.hadoop.fs.s3a.access.key <ACCESS_KEY>
spark.hadoop.fs.s3a.secret.key <SECRET_KEY>
spark.hadoop.fs.s3a.path.style.access true

Mantenha senhas, access keys e secret keys fora do repositório.

Jupyter e Airflow

As integrações com Jupyter e Airflow podem carregar defaults Spark que apontam para o master e para configurações de execução.
Se esses clientes acessarem S3/S3A diretamente, eles também precisam receber as propriedades e credenciais necessárias de forma segura.

A configuração de cliente não substitui a proteção das credenciais.
Revise os valores aplicados em tdp-spark.integration.jupyter.sparkConfig e tdp-spark.integration.airflow.sparkConfig antes de expor notebooks ou DAGs a usuários finais.

Parâmetros principais

ParâmetroPapelQuando alterar
spark.sparkConfDefine propriedades Spark e spark.hadoop.*Quando o runtime Spark precisa receber propriedades diretamente
tdp-spark.hadoopConfigRenderiza core-site.xmlQuando a configuração Hadoop/S3A deve ser compartilhada pelos pods
tdp-spark.customSparkConfig.propertiesRenderiza spark-defaults.confQuando clientes e jobs precisam de defaults adicionais
tdp-spark.integration.jupyter.sparkConfigDefaults Spark para JupyterQuando notebooks submetem jobs ao cluster Spark
tdp-spark.integration.airflow.sparkConfigDefaults Spark para AirflowQuando DAGs submetem jobs ao cluster Spark

Solução de problemas

SituaçãoO que verificar
Jobs Spark falham com erro de acesso S3Endpoint, access key, secret key e permissões no bucket
Connection refused ao S3Nome do serviço, namespace, porta e NetworkPolicy
AccessDeniedExceptionPermissões da credencial no bucket ou prefixo
Configuração S3A não aparece no podRenderização de core-site.xml, spark-defaults.conf e valores aplicados no release
Notebook ou DAG não acessa dadosDefaults de Jupyter/Airflow e credenciais disponíveis para o cliente

Boas práticas

  • Não versionar access.key, secret.key, tokens ou endpoints sensíveis em repositório Git.
  • Usar arquivos de valores privados ou mecanismos de Secret externos para credenciais reais.
  • Separar valores por ambiente, como desenvolvimento, homologação e produção.
  • Rotacionar credenciais periodicamente e aplicar helm upgrade quando necessário.
  • Dar às credenciais apenas as permissões necessárias no bucket ou prefixo usado pelos jobs.