EMR Serverless によるデータ保護のための Secrets Manager - Amazon EMR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

EMR Serverless によるデータ保護のための Secrets Manager

AWS Secrets Manager は、データベースの認証情報、APIキー、その他の機密情報を保護するために使用できるシークレットストレージサービスです。次に、コード内で、ハードコードされた認証情報を Secrets Manager へのAPI呼び出しに置き換えることができます。これにより、シークレットはそこにないため、コードを調べている誰かによってシークレットが侵害されないようになります。この概要については、「AWS Secrets Manager ユーザーガイド」を参照してください

Secrets Manager は、 AWS Key Management Service キーを使用してシークレットを暗号化します。詳細については、AWS Secrets Manager 「 ユーザーガイド」の「シークレット暗号化と復号」を参照してください。

指定したスケジュールに従って自動的にシークレットを更新するように Secrets Manager を設定することができます。これにより、長期のシークレットを短期のシークレットに置き換えることが可能となり、侵害されるリスクが大幅に減少します。詳細については、AWS Secrets Manager ‬ ユーザーガイド の「 シークレット AWS Secrets Manager ‬ のローテーション」を参照してください。

Amazon EMR Serverless は と統合 AWS Secrets Manager されているため、データを Secrets Manager に保存し、設定でシークレット ID を使用できます。

EMR Serverless がシークレットを使用する方法

データを Secrets Manager に保存し、EMRServerless の設定でシークレット ID を使用する場合、機密性の高い設定データをプレーンテキストで EMR Serverless に渡して外部 に公開することはありませんAPIs。キーと値のペアに Secrets Manager に保存したシークレットのシークレット ID が含まれていると指定すると、EMRServerless はジョブを実行するために設定データをワーカーに送信するときにシークレットを取得します。

設定のキーと値のペアに Secrets Manager に保存されているシークレットへの参照が含まれていることを示すには、設定値にEMR.secret@注釈を追加します。シークレット ID アノテーションを持つ設定プロパティの場合、EMRServerless は Secrets Manager を呼び出し、ジョブの実行時にシークレットを解決します。

シークレットを作成する方法

シークレットを作成するには、AWS Secrets Manager 「 ユーザーガイド」のAWS Secrets Manager 「シークレットの作成」のステップに従います。ステップ 3 で、プレーンテキストフィールドを選択して、機密性の高い値を入力します。

設定分類にシークレットを指定する

次の例は、 の設定分類でシークレットを提供する方法を示していますStartJobRun。アプリケーションレベルで Secrets Manager の分類を設定する場合は、「」を参照してくださいEMR Serverless のデフォルトのアプリケーション設定

この例では、 を、取得するシークレットの名前SecretNameに置き換えます。ハイフン、Secrets Manager がシークレットの末尾に追加する 6 文字を含めますARN。詳細については、「シークレットを作成する方法」を参照してください。

シークレットリファレンスの指定 - Spark

例 – Spark の外部 Hive メタストア設定でシークレットリファレンスを指定する
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/" } } }'
例 – spark-defaults分類で外部 Hive メタストア設定のシークレットリファレンスを指定する
{ "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", } }

シークレット参照の指定 - Hive

例 – Hive の外部 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" } } }'
例 – hive-site分類で外部 Hive メタストア設定のシークレットリファレンスを指定します。
{ "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" } }

EMR Serverless がシークレットを取得するためのアクセスを許可する

EMR Serverless が Secrets Manager からシークレット値を取得できるようにするには、シークレットの作成時に次のポリシーステートメントを追加します。EMR Serverless がシークレット値を読み取るには、カスタマーマネージドKMSキーを使用してシークレットを作成する必要があります。詳細については、AWS Secrets Manager 「 ユーザーガイド」の「 KMSキーのアクセス許可」を参照してください。

次のポリシーでは、 をアプリケーションの ID applicationId に置き換えます。

シークレットのリソースポリシー

EMR Serverless がシークレット値を取得 AWS Secrets Manager できるようにするには、 のシークレットのリソースポリシーに次のアクセス許可を含める必要があります。特定のアプリケーションのみがこのシークレットを取得できるようにするには、オプションでポリシーの条件として EMR Serverless アプリケーション ID を指定できます。

{ "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:AWS リージョン:aws_account_id:/applications/applicationId" } } } ] }

カスタマーマネージド AWS Key Management Service (AWS KMS) キーの次のポリシーを使用してシークレットを作成します。

カスタマーマネージド 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.AWS リージョン.amazonaws.com" } } }

シークレットのローテーション

ローテーションは、シークレットを定期的に更新するときです。指定したスケジュールでシークレットを自動的にローテーション AWS Secrets Manager するように を設定できます。これにより、長期シークレットを短期シークレットに置き換えることができます。これにより、侵害のリスクを減らすことができます。EMR Serverless は、ジョブが実行中の状態に移行すると、注釈付き設定からシークレット値を取得します。お客様またはプロセスが Secrets Manager のシークレット値を更新する場合は、ジョブが更新された値を取得できるように、新しいジョブを送信する必要があります。

注記

既に実行中の状態にあるジョブは、更新されたシークレット値を取得できません。これにより、ジョブが失敗する可能性があります。