

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

# に機密設定データを保存する AWS Secrets Manager
<a name="storing-sensitive-data"></a>

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 を使用して設定を表示する場合、そのアノテーションを送信されません。

## シークレットを作成する
<a name="create-secret"></a>

シークレットを作成するには、「*AWS Secrets Manager ユーザーガイド*」の「[Create an AWS Secrets Manager secret](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)」の手順に従います。**ステップ 3** では、**[プレーンテキスト]** フィールドを選択して機密値を入力する必要があります。

Secrets Manager では、最大 65536 バイトをシークレットで指定できますが、Amazon EMR では、プロパティキー (アノテーションを除く) と取得するシークレット値を合わせた長さが 1024 文字に制限されていることに注意してください。

## Amazon EMR にアクセス権を付与してシークレットを取得する
<a name="grant-access"></a>

Amazon EMR では、IAM サービスロールを使用してクラスターをプロビジョニングおよび管理します。Amazon EMR に許可するアクションは Amazon EMR のサービスロールによって定義します。これにより、リソースをプロビジョニングすると共に、クラスター内で稼働している Amazon EC2 インスタンスのコンテキスト上、実行されないサービスレベルのタスクを実行できます。サービスロールの詳細については、「[Amazon EMR のサービスロール (EMR ロール)](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role.html)」と「[IAM ロールのカスタマイズ](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles-custom.html)」を参照してください。

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に対する認証とアクセスコントロール](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access.html)」を参照してください。

## シークレットを設定分類で使用する
<a name="config-secret"></a>

`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>"
   }
}
```

## シークレット値を更新する
<a name="update-secret"></a>

Amazon EMR は、アタッチされたインスタンスグループが起動、再設定、またはサイズ変更されるたびに、アノテーション付きの設定からシークレット値を取得します。稼働中のクラスターの設定で使用するシークレット値は、Secrets Manager を使用すると変更できます。その場合、更新済みの値を受け取りたい各インスタンスグループに、再設定リクエストを送信できます。インスタンスグループを再設定する方法と、その際に考慮すべき点の詳細については、「[実行中のクラスター内のインスタンスグループの再設定](emr-configure-apps-running-cluster.md)」を参照してください。