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

Secrets Manager para la protección de datos con EMR sin servidor

AWS Secrets Manager es un servicio de almacenamiento de secretos que puede utilizar para proteger las credenciales de bases de datos, las claves de API y otra información secreta. A continuación, en el código puede reemplazar las credenciales codificadas con una llamada a la API de Secrets Manager. Esto ayuda a garantizar la integridad del secreto si alguien examina el código, dado que el secreto no está allí. Para obtener información general, consulte la Guía del usuario de AWS Secrets Manager.

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

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 sin servidor se integra con AWS Secrets Manager para que pueda almacenar sus datos en Secrets Manager y utilizar el ID del secreto en sus configuraciones.

La forma en la que EMR sin servidor utiliza Secrets

Al almacenar los datos en Secrets Manager y utilizar el ID del secreto en las configuraciones de EMR sin servidor, no se transfieren datos de configuración confidenciales a EMR sin servidor en texto plano ni se exponen a API externas. Si indica que un par de clave-valor contiene un ID de secreto para un secreto que ha almacenado en Secrets Manager, EMR sin servidor recupera el secreto cuando envía los datos de configuración a los trabajadores para ejecutar las tareas.

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

Para crear un secreto

Para crear un secreto, siga los pasos de Creación de un secreto de AWS Secrets Manager en Guía del usuario de AWS Secrets Manager. En el Paso 3, debe elegir el campo Texto no cifrado para ingresar su valor confidencial.

Uso del secreto en una clasificación de configuración

En el siguiente ejemplo se muestra cómo proporcionar un secreto en una clasificación de configuración en StartJobRun. Si desea configurar las clasificaciones par Secrets Manager a nivel de aplicación, consulte Configuración predeterminada de aplicación para EMR sin servidor.

En los ejemplos, sustituya SecretName por el nombre del secreto que hay que recuperar. Incluye el guion seguido de los seis caracteres que Secrets Manager añade al final del ARN secreto. Para obtener más información, consulte Para crear un secreto.

Especificar 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 — Especifica las referencias secretas en 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", } }

Especificar referencias secretas

ejemplo — Especifica 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 — Especifica las referencias secretas en 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" } }

Concesión de acceso a EMR sin servidor para recuperar el secreto

Para permitir que EMR sin servidor recupere el valor secreto de Secrets Manager, agregue la siguiente declaración de política a su secreto al crearlo. Debe crear su secreto con la clave KMS administrada por el cliente para que EMR sin servidor lea el valor secreto. Para obtener más información, consulte Permisos para la clave de KMS en la Guía del usuario de AWS Secrets Manager.

En la siguiente política, sustituya applicationId por el ID de su solicitud.

Política de recursos para el secreto

Debe incluir los siguientes permisos en la política de recursos de la entrada secreta AWS Secrets Manager para permitir que EMR sin servidor recupere valores secretos. Para garantizar que solo una aplicación específica pueda recuperar este secreto, puede especificar opcionalmente 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" } } } ] }

Cree su secreto con la siguiente política para la clave administrada por el cliente AWS Key Management Service (AWS KMS):

Política para claves AWS KMS administradas por el 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ón de AWS.amazonaws.com" } } }

Rotación del secreto

La rotación consiste en actualizar periódicamente un secreto. Además, puede configurar AWS Secrets Manager para que rote el secreto automáticamente de acuerdo con la programación que especifique. Así, puede reemplazar los secretos a largo plazo por secretos a corto plazo. Esto ayuda a reducir el riesgo de que se comprometa la seguridad. EMR sin servidor recupera el valor del secreto de una configuración anotada cuando el trabajo pasa a un estado en 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.