

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

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

請參閱下列各節，進一步了解如何使用end-to-end TLS 和 SSL 加密為 Amazon EMR on EKS 設定 Apache Livy。

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

若要在 Apache Livy 端點上設定 SSL 加密，請遵循下列步驟。
+ [安裝 Secrets Store CSI 驅動程式和 AWS Secrets and Configuration Provider (ASCP)](https://docs.aws.amazon.com/secretsmanager/latest/userguide/integrating_csi_driver.html) – Secrets Store CSI Driver 和 ASCP 安全地存放 Livy 伺服器 Pod 啟用 SSL 所需的 Livy 的 JKS 憑證和密碼。您也可以僅安裝 Secrets Store CSI Driver，並使用任何其他支援的秘密提供者。
+ [建立 ACM 憑證](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html) – 需要此憑證才能保護用戶端與 ALB 端點之間的連線。
+ 為 AWS Secrets Manager - 設定 JKS 憑證、金鑰密碼和金鑰存放區密碼，以保護 ALB 端點與 Livy 伺服器之間的連線。
+ 將許可新增至 Livy 服務帳戶以從中擷取秘密 AWS Secrets Manager – Livy 伺服器需要這些許可，才能從 ASCP 擷取秘密，並新增 Livy 組態來保護 Livy 伺服器。若要將 IAM 許可新增至服務帳戶，請參閱使用服務帳戶 (IRSA) 的 IAM 角色設定存取許可。

### 使用 的金鑰和金鑰存放區密碼設定 JKS 憑證 AWS 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 憑證儲存在其中 AWS 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` 才能存取 `keyStore`和 `keyPasswords`秘密 AWS Secrets Manager。

1. 建立 Livy 伺服器命名空間。

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

1. 設定 Livy 服務帳戶以存取 Secrets Manager 中的秘密。如需設定 IRSA 的詳細資訊，請參閱在[安裝 Apache Livy 時設定 IRSA](https://docs.aws.amazon.com/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 Chart --version 參數，請使用您的 Amazon EMR 發行標籤，例如 `7.1.0`。您也必須將 Amazon ECR 登錄帳戶 ID 和區域 ID 取代為您自己的 IDs。您可以從 Amazon ECR AWS 區域 登錄帳戶依區域尋找 的對應`ECR-registry-account`值。 [https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/docker-custom-images-tag.html#docker-custom-images-ECR](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/docker-custom-images-tag.html#docker-custom-images-ECR)

   ```
   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.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/job-runs-apache-livy-setup.html#job-runs-apache-livy-install)5 繼續。