

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 TLS/SSL 设置安全的 Apache Livy 端点
<a name="job-runs-apache-livy-secure-endpoint"></a>

请参阅以下章节，详细了解如何在 EKS 上使用 TLS 和 SSL 加密设置 Apache end-to-end Livy for Amazon EMR。

## 设置 TLS 和 SSL 加密
<a name="job-runs-apache-livy-security-tls"></a>

要在 Apache Livy 端点上设置 SSL 加密，请按照以下步骤操作。
+ [安装 Secrets Store CSI 驱动程序以及机 Amazon 密和配置提供程序 (ASCP)](https://docs.amazonaws.cn/secretsmanager/latest/userguide/integrating_csi_driver.html) — Secrets Store CSI 驱动程序和 ASCP 可以安全地存储 Livy 的 JKS 证书和密码，Livy 服务器舱需要这些证书和密码才能启用 SSL。您也可以只安装 Secrets Store CSI Driver，然后使用任何其他受支持的密钥提供程序。
+ [创建 ACM 证书](https://docs.amazonaws.cn/acm/latest/userguide/gs-acm-request-public.html)：该证书是确保客户端与 ALB 端点之间安全连接所必需的。
+ 为 Amazon Secrets Manager — 设置 JKS 证书、密钥密码和密钥库密码，这是保护 ALB 端点和 Livy 服务器之间连接所必需的。
+ 向 Livy 服务帐户添加从中检索机密的权限 Amazon Secrets Manager — Livy 服务器需要这些权限才能从 ASCP 检索机密并添加 Livy 配置来保护 Livy 服务器。要向服务账户添加 IAM 权限，请参阅“使用服务账户的 IAM 角色（IRSA）设置访问权限”。

### 使用密钥和密钥库密码设置 JKS 证书 Amazon Secrets Manager
<a name="job-runs-apache-livy-jks-certificate"></a>

按照以下步骤使用密钥和密钥库密码设置 JKS 证书

1. 为 Livy 服务器生成密钥库文件。

   ```
   keytool -genkey -alias {{<host>}} -keyalg RSA -keysize 2048 –dname CN={{<host>}},OU=hw,O=hw,L={{<your_location>}},ST={{<state>}},C={{<country>}} –keypass {{<keyPassword>}} -keystore {{<keystore_file>}} -storepass {{<storePassword>}} --validity 3650
   ```

1. 创建证书。

   ```
   keytool -export -alias {{<host>}} -keystore mykeystore.jks -rfc -file {{mycertificate.cert}} -storepass {{<storePassword>}}
   ```

1. 创建信任存储库文件。

   ```
   keytool -import -noprompt -alias {{<host>}}-file {{<cert_file>}} -keystore {{<truststore_file>}} -storepass {{<truststorePassword>}}
   ```

1. 将 JKS 证书保存在中。 Amazon Secrets Manager将 `livy-jks-secret` 替换为您的密钥，将 `fileb://mykeystore.jks` 替换为密钥库 JKS 证书的路径。

   ```
   aws secretsmanager create-secret \ 
   --name {{livy-jks-secret}} \
   --description "My Livy keystore JKS secret" \
   --secret-binary {{fileb://mykeystore.jks}}
   ```

1. 将密钥库和密钥密码保存在 Secrets Manager 中。确保使用您自己的参数。

   ```
   aws secretsmanager create-secret \
   --name {{livy-jks-secret}} \
   --description "My Livy key and keystore password secret" \
   --secret-string "{\"keyPassword\":\"{{<test-key-password>}}\",\"keyStorePassword\":\"{{<test-key-store-password>}}\"}"
   ```

1. 使用以下命令创建 Livy 服务器命名空间。

   ```
   kubectl create ns {{<livy-ns>}}
   ```

1. 为具有 JKS 证书和密码的 Livy 服务器创建 `ServiceProviderClass` 对象。

   ```
   cat >livy-secret-provider-class.yaml << EOF
   apiVersion: secrets-store.csi.x-k8s.io/v1
   kind: SecretProviderClass
   metadata:
     name: aws-secrets
   spec:
     provider: aws
     parameters:
       objects: |
           - objectName: "livy-jks-secret"
             objectType: "secretsmanager"
           - objectName: "livy-passwords"
             objectType: "secretsmanager"
                        
   EOF
   kubectl apply -f livy-secret-provider-class.yaml -n {{<livy-ns>}}
   ```

## 开始使用启用 SSL 的 Apache Livy
<a name="job-runs-apache-livy-ssl-enabled-getting-started"></a>

在 Livy 服务器上启用 SSL 后，必须设置 `serviceAccount` 才能访问 Amazon Secrets Manager上的 `keyStore` 和 `keyPasswords` 密钥。

1. 创建 Livy 服务器命名空间。

   ```
   kubectl create namespace {{<livy-ns>}}
   ```

1. 设置 Livy 服务账户以访问 Secrets Manager 中的密钥。有关设置 IRSA 的更多信息，请参阅[在安装 Apache Livy 过程中设置 IRSA](https://docs.amazonaws.cn/emr/latest/EMR-on-EKS-DevelopmentGuide/job-runs-apache-livy-irsa.html#job-runs-apache-livy-irsa)。

   ```
   aws ecr get-login-password \--region region-id | helm registry login \
   --username AWS \
   --password-stdin ECR-registry-account.dkr.ecr.region-id.amazonaws.com
   ```

1. 安装 Livy。对于 Helm 图表 --version 参数，请使用 Amazon EMR 发行版标签，例如： `7.1.0`您还必须将自己的 Amazon ECR 注册账户编号和地区编号替换为自己 IDs的。您可以[按地区 Amazon Web Services 区域 从 Amazon ECR 注册账户](https://docs.amazonaws.cn/emr/latest/EMR-on-EKS-DevelopmentGuide/docker-custom-images-tag.html#docker-custom-images-ECR)中找到相应的`ECR-registry-account`值。

   ```
   helm install {{<livy-app-name>}} \
     oci://895885662937.dkr.ecr.region-id.amazonaws.com/livy \
     --version 7.13.0 \
     --namespace {{livy-namespace-name}} \
     --set image={{<ECR-registry-account.dkr.ecr>.<region>}}.amazonaws.com/livy/emr-7.13.0:latest \
     --set sparkNamespace={{spark-namespace}} \
     --set ssl.enabled=true
     --set ssl.CertificateArn=livy-acm-certificate-arn
     --set ssl.secretProviderClassName=aws-secrets
     --set ssl.keyStoreObjectName=livy-jks-secret
     --set ssl.keyPasswordsObjectName=livy-passwords
     --create-namespace
   ```

1. 继续执行[在 Amazon EMR on EKS 上安装 Apache Livy](https://docs.amazonaws.cn/emr/latest/EMR-on-EKS-DevelopmentGuide/job-runs-apache-livy-setup.html#job-runs-apache-livy-install) 的第 5 步。