Secrets Manager para proteção de dados com o EMR Sem Servidor - Amazon EMR

Secrets Manager para proteção de dados com o EMR Sem Servidor

AWS Secrets Manager é um serviço de armazenamento de segredos que você pode usar para proteger credenciais de banco de dados, chaves de API e outras informações secretas. Em Seguida, no seu código, é possível substituir credenciais codificadas por uma chamada de API para o Secrets Manager. Isso ajuda a garantir que o segredo não possa ser comprometido por alguém que esteja examinando seu código, pois o segredo não está ali. Para obter uma visão geral, consulte o Guia do usuário do AWS Secrets Manager.

O Secrets Manager criptografa segredos usando chaves do AWS Key Management Service. Para obter mais informações, consulte Criptografia e descriptografia de segredos no Guia do usuário do AWS Secrets Manager.

Você pode configurar o Secrets Manager para alterar automaticamente os segredos para você de acordo com a programação que você especificar. Isso permite substituir segredos de longo prazo por outros de curto prazo, ajudando a reduzir de maneira significativa o risco de comprometimento. Para obter mais informações, consulte Alternar os segredos do AWS Secrets Manager no Guia do usuário do AWS Secrets Manager.

O Amazon EMR Sem Servidor se integra ao AWS Secrets Manager para que você possa armazenar seus dados no Secrets Manager e usar o ID do segredo nas configurações.

Como o EMR Sem Servidor usa segredos

Ao armazenar seus dados no Secrets Manager e usar o ID do segredo nas configurações do EMR Sem Servidor, você não transmite dados de configuração confidenciais para o EMR Sem Servidor em texto simples nem os expõe a APIs externas. Se você indicar que um par de chave-valor contém o ID do segredo armazenado no Secrets Manager, o EMR Sem Servidor recuperará o segredo ao enviar dados de configuração aos trabalhadores para execução de trabalhos.

Para indicar que um par de chave-valor de uma configuração contém uma referência a um segredo armazenado no Secrets Manager, adicione a anotação EMR.secret@ ao valor da configuração. Para qualquer propriedade de configuração com anotação de ID secreta, o EMR Sem Servidor chama o Secrets Manager e resolve o segredo no momento da execução do trabalho.

Como criar um segredo

Para criar um segredo, siga as instruções em Criação de um segredo do AWS Secrets Manager no Guia do usuário do AWS Secrets Manager. Na Etapa 3, escolha o campo Texto sem formatação para inserir o valor sigiloso.

Fornecimento de um segredo em uma classificação de configuração

Os exemplos a seguir mostram como fornecer um segredo em uma classificação de configuração em StartJobRun. Se você quiser configurar classificações para o Secrets Manager no nível da aplicação, consulte Configuração padrão de aplicações do EMR Sem Servidor.

Nos exemplos, substitua SecretName pelo nome do segredo a ser recuperado. Inclua o hífen, seguido pelos seis caracteres que o Secrets Manager adiciona ao final do ARN secreto. Para ter mais informações, consulte Como criar um segredo.

Especifique referências secretas: Spark

exemplo — Especifique referências secretas na configuração externa da metastore do Hive para o Spark
aws emr-serverless start-job-run \ --application-id "application-id" \ --execution-role-arn "job-role-arn" \ --job-driver '{ "sparkSubmit": { "entryPoint": "s3://amzn-s3-demo-bucket/scripts/spark-jdbc.py", "sparkSubmitParameters": "--jars s3://amzn-s3-demo-bucket/mariadb-connector-java.jar --conf spark.hadoop.javax.jdo.option.ConnectionDriverName=org.mariadb.jdbc.Driver --conf spark.hadoop.javax.jdo.option.ConnectionUserName=connection-user-name --conf spark.hadoop.javax.jdo.option.ConnectionPassword=EMR.secret@SecretName --conf spark.hadoop.javax.jdo.option.ConnectionURL=jdbc:mysql://db-host:db-port/db-name --conf spark.driver.cores=2 --conf spark.executor.memory=10G --conf spark.driver.memory=6G --conf spark.executor.cores=4" } }' \ --configuration-overrides '{ "monitoringConfiguration": { "s3MonitoringConfiguration": { "logUri": "s3://amzn-s3-demo-bucket/spark/logs/" } } }'
exemplo — Especifique referências secretas para a configuração externa da metastore do Hive na classificação spark-defaults.
{ "classification": "spark-defaults", "properties": { "spark.hadoop.javax.jdo.option.ConnectionDriverName":"org.mariadb.jdbc.Driver" "spark.hadoop.javax.jdo.option.ConnectionURL":"jdbc:mysql://db-host:db-port/db-name" "spark.hadoop.javax.jdo.option.ConnectionUserName":"connection-user-name" "spark.hadoop.javax.jdo.option.ConnectionPassword": "EMR.secret@SecretName", } }

Especifique referências secretas: Hive

exemplo — Especifique referências secretas na configuração externa da metastore do Hive para o Hive
aws emr-serverless start-job-run \ --application-id "application-id" \ --execution-role-arn "job-role-arn" \ --job-driver '{ "hive": { "query": "s3://amzn-s3-demo-bucket/emr-serverless-hive/query/hive-query.ql", "parameters": "--hiveconf hive.exec.scratchdir=s3://amzn-s3-demo-bucket/emr-serverless-hive/hive/scratch --hiveconf hive.metastore.warehouse.dir=s3://amzn-s3-demo-bucket/emr-serverless-hive/hive/warehouse --hiveconf javax.jdo.option.ConnectionUserName=username --hiveconf javax.jdo.option.ConnectionPassword=EMR.secret@SecretName --hiveconf hive.metastore.client.factory.class=org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClientFactory --hiveconf javax.jdo.option.ConnectionDriverName=org.mariadb.jdbc.Driver --hiveconf javax.jdo.option.ConnectionURL=jdbc:mysql://db-host:db-port/db-name" } }' \ --configuration-overrides '{ "monitoringConfiguration": { "s3MonitoringConfiguration": { "logUri": "s3://amzn-s3-demo-bucket" } } }'
exemplo — Especifique referências secretas para a configuração externa da metastore do Hive na classificação hive-site.
{ "classification": "hive-site", "properties": { "hive.metastore.client.factory.class": "org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClientFactory", "javax.jdo.option.ConnectionDriverName": "org.mariadb.jdbc.Driver", "javax.jdo.option.ConnectionURL": "jdbc:mysql://db-host:db-port/db-name", "javax.jdo.option.ConnectionUserName": "username", "javax.jdo.option.ConnectionPassword": "EMR.secret@SecretName" } }

Concessão de acesso ao EMR Sem Servidor para recuperar o segredo

Para permitir que o EMR Sem Servidor recupere o valor do segredo do Secrets Manager, adicione a instrução de política a seguir ao seu segredo ao criá-lo. Você deve criar o segredo com a chave do KMS gerenciada pelo cliente para que o EMR Sem Servidor leia o valor do segredo. Para obter mais informações, consulte Permissions for the KMS key no Guia do usuário do AWS Secrets Manager.

Na política a seguir, substitua applicationId pelo ID da aplicação.

Política de recursos do segredo

Você deve incluir as permissões a seguir na política de recursos do segredo no AWS Secrets Manager para permitir que o EMR Sem Servidor recupere valores do segredo. Para garantir que somente uma aplicação específica possa recuperar esse segredo, você pode, opcionalmente, especificar o ID da aplicação do EMR Sem Servidor como uma condição na política.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Principal": { "Service": [ "emr-serverless.amazonaws.com" ] }, "Resource": [ "*" ], "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:emr-serverless:Região da AWS:aws_account_id:/applications/applicationId" } } } ] }

Crie o segredo com a seguinte política para a chave do AWS Key Management Service (AWS KMS) gerenciada pelo cliente:

Política para chaves do AWS KMS gerenciadas pelo cliente

{ "Sid": "Allow EMR Serverless to use the key for decrypting secrets", "Effect": "Allow", "Principal": { "Service": [ "emr-serverless.amazonaws.com" ] }, "Action": [ "kms:Decrypt", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "secretsmanager.Região da AWS.amazonaws.com" } } }

Alternância do segredo

A alternância é quando você atualiza periodicamente um segredo. Você pode configurar o AWS Secrets Manager para alternar automaticamente o segredo de acordo com uma programação que você especificar. Dessa forma, você pode substituir segredos de longo prazo por segredos de curto prazo. Isso ajuda a reduzir o risco de comprometimento. O EMR Sem Servidor recupera o valor do segredo de uma configuração anotada quando o trabalho passa para um estado de execução. Se você ou um processo atualizar o valor do segredo no Secrets Manager, você deverá enviar um novo trabalho para que ele possa buscar o valor atualizado.

nota

Os trabalhos que já estão em execução não podem buscar um valor de segredo atualizado. Isso pode resultar em falha no trabalho.