翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
機密設定データを AWS Secrets Managerに保存する
Amazon EMR では、カスタム設定データ (DescribeCluster
や ListInstanceGroups
など) を発行する API オペレーションをプレーンテキストで記述して一覧表示できます。Amazon EMR は と統合 AWS Secrets Manager されているため、データを Secrets Manager に保存し、設定でシークレット ARN を使用できます。この方法を取ると、機密性の高い設定データをプレーンテキストで Amazon EMR に渡して外部 API に公開しなくても済みます。キーと値のペアに Secrets Manager に保存されているシークレットの ARN が含まれていることを示すと、Amazon EMR は設定データをクラスターに送信するときにこのシークレットを取得し、そのシークレット ARN が取得されます。Amazon EMR は、外部 API を使用して設定を表示する場合、そのアノテーションを送信されません。
シークレットを作成する
シークレットを作成するには、「AWS Secrets Manager ユーザーガイド」の「AWS Secrets Manager シークレットを作成する」の手順に従います。ステップ 3 では、[プレーンテキスト] フィールドを選択して機密値を入力する必要があります。
Secrets Manager では、最大 65536 バイトをシークレットで指定できますが、Amazon EMR では、プロパティキー (アノテーションを除く) と取得するシークレット値を合わせた長さが 1024 文字に制限されていることに注意してください。
Amazon EMR にアクセス権を付与してシークレットを取得する
Amazon EMR では、IAM サービスロールを使用してクラスターをプロビジョニングおよび管理します。Amazon EMR に許可するアクションは Amazon EMR のサービスロールによって定義します。これにより、リソースをプロビジョニングすると共に、クラスター内で稼働している Amazon EC2 インスタンスのコンテキスト上、実行されないサービスレベルのタスクを実行できます。サービスロールの詳細については、「Amazon EMR のサービスロール (EMR ロール)」と「IAM ロールのカスタマイズ」を参照してください。
Amazon EMR が Secrets Manager からシークレット値を取得できるようにするには、クラスターを起動するときに Amazon EMR ロールに次のポリシーステートメントを追加します。
{ "Sid":"AllowSecretsRetrieval", "Effect":"Allow", "Action":"secretsmanager:GetSecretValue", "Resource":[ "arn:aws:secretsmanager:
<region>
:<aws-account-id>
:secret:<secret-name>
" ] }
カスタマーマネージド でシークレットを作成する場合は AWS KMS key、使用するキーの Amazon EMR ロールにもkms:Decrypt
アクセス許可を追加する必要があります。詳細については、AWS Secrets Manager ユーザーガイドの「AWS Secrets Managerに対する認証とアクセスコントロール」を参照してください。
シークレットを設定分類で使用する
EMR.secret@
アノテーションを任意の設定プロパティに追加して、そのキーと値のペアに、Secrets Manager に保存しているシークレットの ARN が含まれていることを示すことができます。
次の例は、設定分類でシークレット ARN を指定する方法を示しています。
{ "Classification":"core-site", "Properties":{ "presto.s3.access-key":"
<sensitive-access-key>
", "EMR.secret@presto.s3.secret-key":"arn:aws:secretsmanager:<region>
:<aws-account-id>
:secret:<secret-name>
" } }
クラスターの作成時にアノテーション付きの設定を送信すると、Amazon EMR によって設定プロパティが検証されます。設定が有効な場合、Amazon EMR は、設定からアノテーションを削除し、Secrets Manager からシークレットを取得します。これによって、実際の設定を作成し、クラスターに適用します。
{ "Classification":"core-site", "Properties":{ "presto.s3.access-key":"
<sensitive-access-key>
", "presto.s3.secret-key":"<my-secret-key-retrieved-from-Secrets-Manager>
" } }
DescribeCluster
などのアクションを呼び出すと、Amazon EMR から、クラスターで現在稼働しているアプリケーションの設定が返ります。アプリケーション設定プロパティにシークレット ARN が含まれるとマークしている場合、DescribeCluster
呼び出しによって返るアプリケーション設定には、シークレット値ではなく ARN が含まれています。これにより、クラスター上でのみシークレット値を目視できるようになります。
{ "Classification":"core-site", "Properties":{ "presto.s3.access-key":"
<sensitive-access-key>
", "presto.s3.secret-key":"arn:aws:secretsmanager:<region>
:<aws-account-id>
:secret:<secret-name>
" } }
シークレット値を更新する
Amazon EMR は、アタッチされたインスタンスグループが起動、再設定、またはサイズ変更されるたびに、アノテーション付きの設定からシークレット値を取得します。稼働中のクラスターの設定で使用するシークレット値は、Secrets Manager を使用すると変更できます。その場合、更新済みの値を受け取りたい各インスタンスグループに、再設定リクエストを送信できます。インスタンスグループを再設定する方法と、その際に考慮すべき点の詳細については、「実行中のクラスター内のインスタンスグループの再設定」を参照してください。