在 Amazon 上使用普雷斯托LDAP身份驗證 EMR - Amazon EMR

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

在 Amazon 上使用普雷斯托LDAP身份驗證 EMR

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

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

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

LDAP伺服器的 IP 位址或主機名稱

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

LDAP伺服器憑證

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

伺LDAP服器的匿名綁定設定

如果在 PrestoDB 上禁用匿名綁定,則需要具有綁定到服務器權限的帳戶的用戶 ID(UID)和密碼,以便 PrestoDB LDAP 服務器可以建立連接。您可以使用presto-config組態分類中的internal-communication.authentication.ldap.userinternal-communication.authentication.ldap.password屬性來指定和密碼。UIDAmazon 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具有普雷斯托屬性的配置 LDAP 中的範例組態已清楚包含此帳戶,但不受支援的 5.10.0 發行版本則未包含此帳戶。如果LDAP服務器使用匿名綁定,請刪除internal-communication.authentication.ldap.user和名internal-communication.authentication.ldap.password稱/值對。

普雷斯托使用LDAP者的辨別名稱 (DN)

當您指定 Presto 的組LDAP態時,您可以指定與組織單位 (OU) 和其他網域元件 (DCs) 一${USER}起組成的繫結模式。在密碼驗證期間,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具有普雷斯托屬性的配置 LDAP

步驟 2:設定安全組態

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

第 3 步:創建一個JSON具有普雷斯托屬性的配置 LDAP

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

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

範例 Amazon EMR 6.1.0 及更高版本與普雷斯托SQL(特里諾)

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

Amazon EMR 版本 6.4.0 及更高版本使用新名稱特里諾而不是普雷斯托。SQL如果您使用 Trino,請更換 普萊斯托 SQL 配置 在下面的配置分類中使prestosql-password-authenticatortrino-configtrino-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伺服器以進行繫結。指定了兩種使用者繫結模式,表示 admins OU 和LDAP伺服器上 OU 內的datascientists使用者有資格以使用者身分對 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 通過

這些發行版本的 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://MyBucket/LoadLDAPCert.sh.

下面的示例腳本使用默認密鑰庫密碼,changeit。 建議您在建立叢集之後連線到主節點,並使用 keytool 指令變更金鑰庫密碼。

#!/bin/bash aws s3 cp s3://MyBucket/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:建立叢集

建立叢集時,請指定普雷斯托和其他您希望 Amazon EMR 安裝的應用程式。下列範例也會參照 a 中的組態分類屬性JSON,但您也可以內嵌指定組態分類。

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

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

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

  4. 在 [編輯軟體設定] 下,選擇 [JSON從 S3 載入],在 Amazon S3 中輸入您建立之JSON組態檔的位置第 3 步:創建一個JSON具有普雷斯托屬性的配置 LDAP,然後選擇 [下步]。

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

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

  7. 輸入啟動程序動作的名稱,輸入您在其中建立的指令碼位置步驟 4:建立指令碼以複製LDAP伺服器憑證並將其上傳到 Amazon S3,例如 s3://MyBucket/L oadLDAPCert .sh,然後選擇 [新增]。

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

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

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

若要使用建立具有LDAP驗證的普雷斯托叢集 AWS CLI
  • 使用 aws emr create-cluster 命令。您至少要指定 Presto 應用程式,以及該 Presto 組態分類、引導指令碼,以及您在先前步驟中所建立的安全組態。下列範例會將組態檔做為儲存在執行指令的相同目錄中的JSON檔案來參考。換句話說,引導指令碼必須儲存至 Amazon S3。以下範例使用 s3://MyBucket/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://MyBucket/LoadLDAPCert.sh" \ --security-configuration MyPrestoLDAPSecCfg --configurations file://MyPrestoConfig.json