Secrets Manager para la protección de datos con EMR Serverless - Amazon EMR

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Secrets Manager para la protección de datos con EMR Serverless

AWS Secrets Manager es un servicio de almacenamiento secreto que puede usar para proteger las credenciales, API claves y otra información secreta de la base de datos. Luego, en tu código, puedes reemplazar las credenciales codificadas por una API llamada a Secrets Manager. Esto ayuda a garantizar que el secreto no se vea comprometido por alguien que examine tu código, ya que el secreto no está ahí. Para obtener información general, consulte la Guía del usuario de AWS Secrets Manager.

Secrets Manager cifra los secretos mediante AWS Key Management Service claves. Para obtener más información, consulte Cifrado y descifrado secretos en la Guía del AWS Secrets Manager usuario.

Puede configurar Secrets Manager para rotar el secreto automáticamente de acuerdo con la programación que especifique. Esto le permite reemplazar secretos a largo plazo con secretos a corto plazo, lo que contribuye a reducir significativamente el riesgo de peligro. Para obtener más información, consulte Rotación de secretos de AWS Secrets Manager en la Guía del usuario de AWS Secrets Manager .

Amazon EMR Serverless se integra AWS Secrets Manager para que puedas almacenar tus datos en Secrets Manager y usar el ID secreto en tus configuraciones.

Cómo usa EMR Serverless los secretos

Cuando guardas tus datos en Secrets Manager y utilizas el ID secreto en tus configuraciones de EMR Serverless, no pasas datos de configuración confidenciales a EMR Serverless en texto plano ni los expones a fuentes externas. APIs Si indica que un par clave-valor contiene un ID secreto para un secreto que ha almacenado en Secrets Manager, EMR Serverless recupera el secreto cuando envía los datos de configuración a los trabajadores para que ejecuten las tareas.

Para indicar que un par clave-valor de una configuración contiene una referencia a un secreto almacenado en Secrets Manager, añada la EMR.secret@ anotación al valor de la configuración. Para cualquier propiedad de configuración con anotación de ID secreta, EMR Serverless llama a Secrets Manager y resuelve el secreto en el momento de la ejecución del trabajo.

¿Cómo crear un secreto

Para crear un secreto, siga los pasos que se indican en la sección Crear un AWS Secrets Manager secreto de la Guía del AWS Secrets Manager usuario. En el paso 3, selecciona el campo de texto sin formato para introducir tu valor confidencial.

Proporcione un secreto en una clasificación de configuración

Los siguientes ejemplos muestran cómo proporcionar un secreto en una clasificación de configuración enStartJobRun. Si desea configurar las clasificaciones de Secrets Manager a nivel de aplicación, consulteConfiguración de aplicaciones predeterminada para Serverless EMR.

En los ejemplos, SecretName sustitúyalo por el nombre del secreto que se va a recuperar. Incluye el guion seguido de los seis caracteres que Secrets Manager añade al final del secretoARN. Para obtener más información, consulte ¿Cómo crear un secreto.

Especifica las referencias secretas: Spark

ejemplo — Especifica las referencias secretas en la configuración externa del metaalmacén de Hive para 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/" } } }'
ejemplo — Especifique las referencias secretas para la configuración externa del metaalmacén de Hive en la clasificación 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 las referencias secretas: Hive

ejemplo — Especifique las referencias secretas en la configuración externa del metaalmacén de Hive para 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" } } }'
ejemplo — Especifique las referencias secretas para la configuración externa del metaalmacén de Hive en la clasificación 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" } }

Concede acceso a EMR Serverless para recuperar el secreto

Para permitir que EMR Serverless recupere el valor secreto de Secrets Manager, añada la siguiente declaración de política al secreto cuando lo cree. Debe crear su secreto con la KMS clave administrada por el cliente para que EMR Serverless lea el valor secreto. Para obtener más información, consulte los permisos de la KMS clave en la Guía del AWS Secrets Manager usuario.

En la siguiente política, applicationId sustitúyala por el ID de tu aplicación.

Política de recursos para el secreto

Debe incluir los siguientes permisos en la política de recursos del secreto AWS Secrets Manager para que EMR Serverless pueda recuperar los valores secretos. Para garantizar que solo una aplicación específica pueda recuperar este secreto, si lo desea, puede especificar el ID de la aplicación EMR sin servidor como condición en la 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ón de AWS:aws_account_id:/applications/applicationId" } } } ] }

Crea tu secreto con la siguiente política para la clave gestionada por el cliente AWS Key Management Service ()AWS KMS:

Política para la clave gestionada por el cliente AWS KMS

{ "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ón de AWS.amazonaws.com" } } }

Rotando el secreto

La rotación se produce cuando actualizas periódicamente un secreto. Puede configurarlo AWS Secrets Manager para que rote automáticamente el secreto según el cronograma que especifique. De esta forma, puede reemplazar los secretos a largo plazo por secretos a corto plazo. Esto ayuda a reducir el riesgo de compromiso. EMRServerless recupera el valor secreto de una configuración anotada cuando el trabajo pasa a un estado de ejecución. Si usted o un proceso actualizan el valor secreto en Secrets Manager, deben enviar un nuevo trabajo para que el trabajo pueda recuperar el valor actualizado.

nota

Los trabajos que ya están en ejecución no pueden recuperar un valor secreto actualizado. Esto podría provocar un fallo en el trabajo.