

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 中存放敏感組態資料 AWS Secrets Manager
<a name="storing-sensitive-data"></a>

發出自訂組態資料的 Amazon EMR 描述和列出 API 操作 (例如 `DescribeCluster` 和 `ListInstanceGroups`) 以純文字格式進行。Amazon EMR 與 整合， AWS Secrets Manager 因此您可以將資料存放在 Secrets Manager 中，並在組態中使用秘密 ARN。如此一來，您就不會以純文字格式將敏感的組態資料傳遞至 Amazon EMR，並將其暴露給外部 API。如果您指出金鑰值對包含儲存在 Secrets Manager 中的機密的 ARN，Amazon EMR 會在將組態資料傳送至叢集時擷取此機密。Amazon EMR 使用外部 API 顯示組態時，不會傳送註釋。

## 建立秘密
<a name="create-secret"></a>

若要建立機密，請遵循《AWS Secrets Manager 使用者指南》**的[建立 AWS Secrets Manager 機密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)中的步驟進行。在**步驟 3** 中，您必須選擇**純文字**欄位，才能輸入敏感值。

請注意，雖然 Secrets Manager 允許機密最多包含 65,536 個位元組，但 Amazon EMR 會將屬性金鑰 (不含註釋) 和擷取的機密值的組合長度限制為 1,024 個字元。

## 授予 Amazon EMR 存取權以擷取機密
<a name="grant-access"></a>

Amazon EMR 使用 IAM 服務角色為您佈建和管理叢集。Amazon EMR 的服務角色會在佈建資源和執行服務層級的任務 (這些任務不會在執行叢集內 Amazon EC2 執行個體的內容中執行) 時，定義 Amazon EMR 允許的動作。如需有關服務角色的詳細資訊，請參閱 [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，您還必須為您使用的金鑰將`kms:Decrypt`許可新增至 Amazon EMR 角色。如需詳細資訊，請參閱*《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 都會從已註釋的組態擷取機密值。您可以使用 Secret Manager 來修改在執行中叢集的組態中使用的機密值。執行此操作時，您可以向您想要接收更新值的每個執行個體群組提交重新組態請求。如需有關如何重新設定執行個體群組的詳細資訊，以及執行此操作時要考慮的事項，請參閱 [重新設定執行中叢集中的執行個體群組](emr-configure-apps-running-cluster.md)。