Secrets Manager pour la protection des données avec EMR Serverless - Amazon EMR

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Secrets Manager pour la protection des données avec EMR Serverless

AWS Secrets Manager est un service de stockage secret que vous pouvez utiliser pour protéger les informations d'identification, API les clés et autres informations secrètes de base de données. Ensuite, dans votre code, vous pouvez remplacer les informations d'identification codées en dur par un API appel à Secrets Manager. Cela permet de s'assurer que le secret ne peut pas être compromis par quelqu'un qui examine votre code, car le secret n'existe pas. Pour une présentation, consultez le Guide de l'utilisateur AWS Secrets Manager.

Secrets Manager chiffre les secrets à l'aide de AWS Key Management Service clés. Pour plus d'informations, consultez la section Chiffrement et déchiffrement secrets dans le guide de l'AWS Secrets Manager utilisateur.

Vous pouvez configurer Secrets Manager pour qu'il fasse automatiquement pivoter les secrets selon un calendrier que vous spécifiez. Cela vous permet de remplacer les secrets à long terme par ceux à court terme, ce qui réduit considérablement le risque de mise en péril. Pour plus d'informations, voir Rotation AWS Secrets Manager des secrets dans le guide de AWS Secrets Manager l'utilisateur.

Amazon EMR Serverless s'intègre AWS Secrets Manager afin que vous puissiez stocker vos données dans Secrets Manager et utiliser l'identifiant secret dans vos configurations.

Comment EMR Serverless utilise les secrets

Lorsque vous stockez vos données dans Secrets Manager et que vous utilisez l'identifiant secret dans vos configurations pour EMR Serverless, vous ne transmettez pas de données de configuration sensibles à EMR Serverless en texte brut et ne les exposez pas à des données externes. APIs Si vous indiquez qu'une paire clé-valeur contient un identifiant secret pour un secret que vous avez stocké dans Secrets Manager, EMR Serverless récupère le secret lorsqu'il envoie des données de configuration aux opérateurs pour exécuter des tâches.

Pour indiquer qu'une paire clé-valeur d'une configuration contient une référence à un secret stocké dans Secrets Manager, ajoutez l'EMR.secret@annotation à la valeur de configuration. Pour toute propriété de configuration comportant une annotation d'identifiant secret, EMR Serverless appelle Secrets Manager et résout le secret au moment de l'exécution de la tâche.

Comment créer un secret

Pour créer un secret, suivez les étapes décrites dans Créer un AWS Secrets Manager secret dans le Guide de AWS Secrets Manager l'utilisateur. À l'étape 3, choisissez le champ de texte en clair pour saisir votre valeur sensible.

Fournir un secret dans une classification de configuration

Les exemples suivants montrent comment fournir un secret dans une classification de configuration àStartJobRun. Si vous souhaitez configurer les classifications pour Secrets Manager au niveau de l'application, consultezConfiguration d'application par défaut pour EMR Serverless.

Dans les exemples, remplacez SecretName par le nom du secret à récupérer. Incluez le trait d'union, suivi des six caractères que Secrets Manager ajoute à la fin du secretARN. Pour de plus amples informations, veuillez consulter Comment créer un secret.

Spécifier des références secrètes - Spark

Exemple — Spécifiez des références secrètes dans la configuration du métastore Hive externe pour 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/" } } }'
Exemple — Spécifiez des références secrètes pour la configuration de la métastore Hive externe dans la classification 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", } }

Spécifier des références secrètes - Hive

Exemple — Spécifiez des références secrètes dans la configuration du métastore Hive externe pour 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" } } }'
Exemple — Spécifiez des références secrètes pour la configuration de la métastore Hive externe dans la classification 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" } }

Accordez l'accès à EMR Serverless pour récupérer le secret

Pour permettre à EMR Serverless de récupérer la valeur secrète depuis Secrets Manager, ajoutez la déclaration de politique suivante à votre secret lorsque vous le créez. Vous devez créer votre secret à l'aide de la KMS clé gérée par le client pour que EMR Serverless puisse lire la valeur du secret. Pour plus d'informations, consultez la section Autorisations relatives à la KMS clé dans le guide de AWS Secrets Manager l'utilisateur.

Dans la politique suivante, remplacez-le applicationId par l'ID de votre application.

Politique en matière de ressources pour le secret

Vous devez inclure les autorisations suivantes dans la politique de ressources pour le secret afin de permettre AWS Secrets Manager à EMR Serverless de récupérer les valeurs secrètes. Pour garantir que seule une application spécifique peut récupérer ce secret, vous pouvez éventuellement spécifier l'ID de l'application EMR sans serveur comme condition dans la politique.

{ "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:Région AWS:aws_account_id:/applications/applicationId" } } } ] }

Créez votre secret avec la politique suivante pour la clé gérée par le client AWS Key Management Service (AWS KMS) :

Politique relative aux clés gérées par le client 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.Région AWS.amazonaws.com" } } }

Transformer le secret

La rotation se produit lorsque vous mettez régulièrement à jour un secret. Vous pouvez le configurer AWS Secrets Manager pour faire automatiquement pivoter le secret selon un calendrier que vous spécifiez. De cette façon, vous pouvez remplacer les secrets à long terme par des secrets à court terme. Cela permet de réduire le risque de compromission. EMRServerless récupère la valeur secrète d'une configuration annotée lorsque la tâche passe à l'état en cours d'exécution. Si vous ou un processus mettez à jour la valeur secrète dans Secrets Manager, vous devez soumettre une nouvelle tâche afin que la tâche puisse récupérer la valeur mise à jour.

Note

Les tâches déjà en cours d'exécution ne peuvent pas récupérer une valeur secrète mise à jour. Cela peut entraîner un échec professionnel.