在 Amazon 上使用 Presto 的LDAP身分驗證 EMR - Amazon EMR

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

在 Amazon 上使用 Presto 的LDAP身分驗證 EMR

按照本節中的步驟設定 LDAP。如需詳細資訊,請參閱每個步驟中的範例和連結。

步驟 1:收集LDAP伺服器的相關資訊,並將伺服器憑證複製到 Amazon S3

您需要LDAP伺服器下一節中的資訊和項目才能設定LDAP身分驗證。

LDAP 伺服器 IP 地址或主機名稱

Amazon EMR主節點上的 Presto 協調器必須能夠以指定的 IP 地址或主機名稱連線到LDAP伺服器。預設情況下,Presto 會透過LDAPS連接埠 636 與LDAP伺服器通訊。如果您的LDAP實作需要自訂連接埠,您可以使用 ldap.url 屬性搭配 Amazon 5.16.0 EMR 或更新版本,或authentication.ldap.url搭配舊版使用 來指定它。將自訂連接埠換成 636,如 presto-config 中的 步驟 3:JSON使用 的 Presto 屬性建立組態 LDAP 組態分類範例中所示。確定任何防火牆和安全群組都允許連接埠 636 (或是您的自訂連接埠) 傳入及傳出流量,而且用於內部叢集通訊的連接埠 8446 (或是您的自訂連接埠) 也允許這些流量。

LDAP 伺服器憑證

您必須將憑證檔案上傳至 Amazon S3 內的安全位置。如需詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的我該如何上傳檔案與資料夾至 S3 儲存貯體。您要建立一個會在叢集啟動時,由 Amazon S3 發出的這份憑證將會複製到叢集中每個節點的引導操作。在 步驟 4:建立指令碼以複製LDAP伺服器憑證並將其上傳至 Amazon S3. 憑證範例為 s3://amzn-s3-demo-bucket/ldap_server.crt.

匿名繫結的LDAP伺服器設定

如果在 PrestoDB 上停用匿名繫結,您需要具有繫結至LDAP伺服器許可之帳戶的使用者 ID (UID) 和密碼,以便 PrestoDB 伺服器可以建立連線。您可以使用presto-config組態分類中的 UID和 internal-communication.authentication.ldap.password 屬性來指定 internal-communication.authentication.ldap.user和 密碼。Amazon EMR 5.10.0 不支援這些設定,因此當您使用此版本LDAP時,伺服器上必須支援匿名繫結。

請注意,Trino 不需要匿名繫結組態。

取得LDAP伺服器上匿名繫結的狀態
  • 從 Linux 用戶端使用 ldapwhoami 命令,如以下範例所示:

    ldapwhoami -x -H ldaps://LDAPServerHostNameOrIPAddress

    如果不允許使用匿名繫結,該命令將傳回以下內容:

    ldap_bind: Inappropriate authentication (48) additional info: anonymous bind disallowed
驗證帳戶是否具有使用簡單身分驗證之LDAP伺服器的許可
  • 從 Linux 用戶端使用 ldapwhoami 命令,如以下範例所示。此範例使用虛構的使用者,presto,儲存在執行於具有虛構主機名稱EC2執行個體的 Open LDAP 伺服器 ip-xxx-xxx-xxx-xxx.ec2.internal。 使用者與組織單位 (OU) 相關聯 admins 且具有密碼 123456:

    ldapwhoami -x -w "123456" -D uid=presto,ou=admins,dc=ec2,dc=internal -H ldaps://ip-xxx-xxx-xxx-xxx.ec2.internal

    如果帳戶正確,且持有適當員許可,則命令會傳回如下內容:

    dn:uid=presto,ou=admins,dc=ec2,dc=internal

步驟 3:JSON使用 的 Presto 屬性建立組態 LDAP 中的範例組態已清楚包含此帳戶,但不受支援的 5.10.0 發行版本則未包含此帳戶。如果LDAP伺服器使用匿名繫結,請移除 internal-communication.authentication.ldap.userinternal-communication.authentication.ldap.password名稱/值對。

Presto 使用者的LDAP識別名稱 (DN)

當您指定 Presto 的LDAP組態時,您可以指定繫結模式,其中包含${USER}組織單位 (OU) 和其他網域元件 ()DCs。Presto ${USER}會在密碼身分驗證期間取代為每位使用者的實際使用者 ID (UID),以符合此繫結模式指定的區分名稱 (DN)。您需要合格使用者所屬OUs的 及其 DCs。例如,若要允許 admins OU 內使用者能在 corp.example.com 網域中驗證 Presto,則您必須指定其使用者繫結模式為 ${USER},ou=admins,dc=corp,dc=example,dc=com

注意

使用 時 AWS CloudFormation,您需要使用 Fn::Sub 函數,以${USER}實際的使用者 ID 取代 (UID)。如需詳細資訊,請參閱《AWS CloudFormation 使用者指南》中的 Fn::Sub 主題

使用 Amazon EMR 5.10.0 時,您只能指定一種此類模式。使用 Amazon EMR 5.11.0 或更新版本,您可以指定以冒號 (:) 分隔的多個模式。嘗試驗證 Presto 的使用者,將與第一個模式進行比較,接著與第二、第三個依序進行比較。如需範例,請參閱步驟 3:JSON使用 的 Presto 屬性建立組態 LDAP

步驟 2:設定安全組態

建立已啟用傳輸中加密的安全組態。如需詳細資訊,請參閱 Amazon EMR管理指南 中的建立安全組態。在您設定傳輸中加密時所提供的加密成品,將會用來加密 Presto 節點之間的內部通訊。如需詳細資訊,請參閱提供傳輸中資料加密的憑證。LDAP 伺服器憑證用於驗證 Presto 伺服器的用戶端連線。

步驟 3:JSON使用 的 Presto 屬性建立組態 LDAP

您可以使用presto-config組態分類來設定 的 Presto 屬性LDAP。根據 Amazon EMR版本和 Presto 安裝 (PrestoDB 或 Trino), 的格式和內容presto-config略有不同。本章節稍後會提供有關組態差異的範例。如需詳細資訊,請參閱設定應用程式

下列步驟假設您將JSON資料儲存到檔案,MyPrestoConfig.json。 如果您使用 主控台,請將檔案上傳至 Amazon S3 中的安全位置,以便在建立叢集時參考。如果您使用 AWS CLI,則可以在本機參考 檔案。

範例 Amazon EMR 6.1.0 及更新版本搭配 PrestoSQL (Trino)

下列範例使用來自 的LDAP主機名稱步驟 1:收集LDAP伺服器的相關資訊,並將伺服器憑證複製到 Amazon S3來驗證伺服器LDAP以進行繫結。指定了兩個使用者繫結模式,這表示 OU admins 和LDAP伺服器上 datascientists OU 中的使用者有資格以使用者身分向 Trino 伺服器進行身分驗證。繫結模式之間將以冒號 (:) 分隔。

Amazon 6.4.0 版及更新EMR版本使用新名稱 Trino,而非 Presto SQL。如果您使用 Trino,請取代 prestosql-config 在下列組態分類中,使用 trino-configprestosql-password-authenticator trino-password-authenticator

[ { "Classification":"prestosql-config", "Properties":{ "http-server.authentication.type":"PASSWORD" } }, { "Classification":"prestosql-password-authenticator", "Properties":{ "password-authenticator.name":"ldap", "ldap.url":"ldaps://ip-xxx-xxx-xxx-xxx.ec2.internal:636", "ldap.user-bind-pattern": "uid=${USER},ou=admins,dc=ec2,dc=internal:uid=${USER},ou=datascientists,dc=ec2,dc=internal" } } ]
範例 Amazon EMR 5.16.0 及更新版本

下列範例使用LDAP使用者 ID 和密碼,以及來自 的LDAP主機名稱步驟 1:收集LDAP伺服器的相關資訊,並將伺服器憑證複製到 Amazon S3,以驗證伺服器LDAP以進行繫結。指定了兩個使用者繫結模式,這表示 OU admins 和LDAP伺服器上 datascientists OU 中的使用者有資格以使用者身分對 Presto 伺服器進行身分驗證。繫結模式之間將以冒號 (:) 分隔。

[{ "Classification": "presto-config", "Properties": { "http-server.authentication.type": "PASSWORD" } }, { "Classification": "presto-password-authenticator", "Properties": { "password-authenticator.name": "ldap", "ldap.url": "ldaps://ip-xxx-xxx-xxx-xxx.ec2.internal:636", "ldap.user-bind-pattern": "uid=${USER},ou=admins,dc=ec2,dc=internal:uid=${USER},ou=datascientists,dc=ec2,dc=internal", "internal-communication.authentication.ldap.user": "presto", "internal-communication.authentication.ldap.password": "123456" } }]
範例 Amazon EMR 5.11.0 到 5.15.0

這些發行版本的 presto-config 組態分類清單格式會有些微差異。下列範例會指定與先前範例相同的參數。

[{ "Classification": "presto-config", "Properties": { "http-server.authentication.type": "LDAP", "authentication.ldap.url": "ldaps://ip-xxx-xxx-xxx-xxx.ec2.internal:636", "authentication.ldap.user-bind-pattern": "uid=${USER},ou=admins,dc=ec2,dc=internal:uid=${USER},ou=datascientists,dc=ec2,dc=internal", "internal-communication.authentication.ldap.user": "presto", "internal-communication.authentication.ldap.password": "123456" } }]
範例 Amazon EMR 5.10.0

Amazon EMR 5.10.0 僅支援匿名繫結,因此會省略這些項目。此外,您只能指定一個繫結模式。

[{ "Classification": "presto-config", "Properties": { "http-server.authentication.type": "LDAP", "authentication.ldap.url": "ldaps://ip-xxx-xxx-xxx-xxx.ec2.internal:636", "ldap.user-bind-pattern": "uid=${USER},ou=prestousers,dc=ec2,dc=internal" } }]

步驟 4:建立指令碼以複製LDAP伺服器憑證並將其上傳至 Amazon S3

建立指令碼,透過其將憑證檔案複製到叢集中的每個節點,並將檔案加入金鑰存放區。使用文字編輯器來建立這個指令碼,接著儲存並上傳至 Amazon S3。在 中步驟 5:建立叢集,指令碼檔案會參考為 s3://amzn-s3-demo-bucket/LoadLDAPCert.sh.

下列範例指令碼使用預設金鑰存放區密碼,changeit。 建議您在建立叢集並使用 keytool 命令變更金鑰存放區密碼後,連線至主節點。

#!/bin/bash aws s3 cp s3://amzn-s3-demo-bucket/ldap_server.crt . sudo keytool -import -keystore /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/lib/security/cacerts -trustcacerts -alias ldap_server -file ./ldap_server.crt -storepass changeit -noprompt

步驟 5:建立叢集

建立叢集時,您可以指定要 EMR Amazon 安裝的 Presto 和其他應用程式。下列範例也會參考 內的組態分類屬性JSON,但您也可以內嵌指定組態分類。

使用 Amazon EMR主控台建立具有LDAP身分驗證的 Presto 叢集
  1. 導覽至新的 Amazon EMR主控台,然後從側邊導覽選取切換至舊主控台。如需有關切換至舊主控台時預期情況的詳細資訊,請參閱使用舊主控台

  2. 選擇 Create cluster (建立叢集),然後選擇 Go to advanced options (前往進階選項)

  3. 選擇 Presto 和其他應用程式供 Amazon EMR 安裝,然後在軟體組態 下,選取要EMR使用的 Amazon 版本。LDAP 只有 Amazon 5.10.0 EMR 及更新版本支援身分驗證。

  4. 編輯軟體設定 下,選擇JSON從 S3 載入,輸入您在 中建立的JSON組態檔案在 Amazon S3 中的位置步驟 3:JSON使用 的 Presto 屬性建立組態 LDAP,然後選擇下一步

  5. 設定叢集硬體和聯網,然後選擇 Next (下一步)

  6. 選擇 Bootstrap Actions (引導操作)。在 Add bootstrap action (新增引導操作) 中,依序選取 Custom action (自訂動作)Configure and add (設定和新增)

  7. 輸入引導動作的名稱,輸入您在 中建立的指令碼位置步驟 4:建立指令碼以複製LDAP伺服器憑證並將其上傳至 Amazon S3,例如 s3://amzn-s3-demo-bucket/L oadLDAPCert.sh ,然後選擇新增

  8. 依序在 General Options (一般選項)Tags (標記)Additional Options (其他選項) 中,選擇適合您的應用程式的設定,然後選擇 Next (下一步)

  9. 選擇 Authentication and encryption (身分驗證和加密),接著選擇您在 中所建立的 Security configuration (安全組態)步驟 2:設定安全組態

  10. 選擇適用於應用程式的其他安全選項,然後選擇 Create cluster (建立叢集)

若要使用 建立具有LDAP身分驗證的 Presto 叢集 AWS CLI
  • 使用 aws emr create-cluster 命令。您至少要指定 Presto 應用程式,以及該 Presto 組態分類、引導指令碼,以及您在先前步驟中所建立的安全組態。下列範例參考組態檔案,做為儲存在執行命令的相同目錄中JSON的檔案。換句話說,引導指令碼必須儲存至 Amazon S3。以下範例使用 s3://amzn-s3-demo-bucket/LoadLDAPCert.sh

    注意

    包含 Linux 行接續字元 (\) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows,請將其移除或取代為插入符號 (^)。

    aws emr create-cluster --applications Name=presto --release-label emr-5.16.0 \ --use-default-roles --ec2-attributes KeyName=MyKeyPair,SubnetId=subnet-1234ab5 \ --instance-count 3 --instance-type m5.xlarge --region us-west-2 --name "MyPrestoWithLDAPAuth" \ --bootstrap-actions Name="Distribute LDAP server cert",Path="s3://amzn-s3-demo-bucket/LoadLDAPCert.sh" \ --security-configuration MyPrestoLDAPSecCfg --configurations file://MyPrestoConfig.json