EMRFSS3 外掛程式 - Amazon EMR

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

EMRFSS3 外掛程式

為了更輕鬆地針對多租戶叢集上 S3 中的物件提供存取控制,EMRFSS3 外掛程式會在透過EMRFS存取 S3 中的資料時提供對資料的存取控制。您可以允許在使用者和群組層級存取 S3 資源。

為了達到此目的,當您的應用程式嘗試存取 S3 中的資料時,EMRFS會將登入資料要求傳送至機密代理程序,在此程序會針對 Apache Ranger 外掛程式進行驗證和授權要求。如果要求獲得授權,則機密代理程式會以受限原則的 Apache Ranger Engine 擔任IAM角色,以產生只能存取允許存取權的 Ranger 原則的認證。然後,登入資料會傳回EMRFS以存取 S3。

支援的功能

EMRFSS3 插件提供存儲級別授權。您可以建立政策來為使用者和群組提供對 S3 儲存貯體和字首的存取權。授權僅針對EMRFS.

安裝服務組態

若要安裝EMRFS服務定義,您必須設定 Ranger 管理員伺服器。若要設定伺服器,請參閱設定 Ranger Admin 伺服器

請依照下列步驟安裝EMRFS服務定義。

第 1 步:SSH進入 Apache 遊俠管理服務器

例如:

ssh ec2-user@ip-xxx-xxx-xxx-xxx.ec2.internal

步驟 2:下載服EMRFS務定義

在暫存目錄中,下載 Amazon EMR 服務定義。Ranger 2.x 版支援此服務定義。

wget https://s3.amazonaws.com/elasticmapreduce/ranger/service-definitions/version-2.0/ranger-servicedef-amazon-emr-emrfs.json

步驟 3:註冊 EMRFS S3 服務定義

curl -u *<admin users login>*:*_<_**_password_ **_for_** _ranger admin user_**_>_* -X POST -d @ranger-servicedef-amazon-emr-emrfs.json \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -k 'https://*<RANGER SERVER ADDRESS>*:6182/service/public/v2/api/servicedef'

如果此命令運行成功,您會在遊俠管理 UI 中看到一個名為「AMAZON-EMR-S3」的新服務,如下圖所示(Ranger 2.0 版顯示)。

遊俠管理員創建 EMRFS S3 服務。

步驟 4:建立 AMAZON-EMR EMRFS 應用程式的執行個體

建立服務定義的執行個體。

  • 按一下 AMAZON-EMR-旁邊的 + EMRFS。

填寫下列欄位:

服務名稱 (如果顯示):建議的值為 amazonemrspark。請注意建立EMR安全性組態時所需的服務名稱。

顯示名稱:為此服務顯示的名稱。建議的值為 amazonemrspark

憑證的通用名稱:憑證內的 CN 欄位用於從用戶端外掛程式連接至管理伺服器。此值必須符合為外掛程式建立之TLS憑證中的 CN 欄位。

遊俠管理員編輯 EMRFS S3 服務。
注意

此外掛程式的TLS憑證應該已在 Ranger Admin 伺服器上的信任存放區中註冊。如需詳細資訊,請參閱TLS證書

建立服務時,服務管理員會包含 EMRFS「AMAZONEMR-」,如下圖所示。

遊俠管理員顯示新的 EMRFS S3 服務。

建立 EMRFS S3 政策

若要在 Service Manager 的建立政策頁面中建立新政策,請填寫下列欄位。

政策名稱:此政策的名稱。

政策標籤:您可以放在此政策上的標籤。

S3 資源:以儲存貯體和選用字首開始的資源。如需有關最佳實務的資訊,請參閱 EMRFSS3 政策使用注意事項。Ranger Admin 伺服器中的資源不應包含 s3://s3a://s3n://

遊俠管理員顯示 EMRFS S3 服務的創建策略。

您可以指定要授予許可的使用者和群組。您也可以為允許條件和拒絕條件指定排除。

遊俠管理員會顯示 EMRFS S3 政策的使用者/群組許可。
注意

每個政策最多允許三個資源。在EMR叢集上使用此原則時,新增三個以上的資源可能會導致錯誤。新增超過三個政策會顯示有關政策限制的提醒。

EMRFSS3 政策使用注意事項

在 Apache Ranger 內建立 S3 政策時,需要注意一些使用考量。

多個 S3 物件的許可

您可以使用遞迴政策和萬用字元表達式向具有通用字首的多個 S3 物件授予許可。遞迴政策為具有通用字首的所有物件授予許可。萬用字元表達式可選取多個字首。它們一起向具有多個通用字首的所有物件授予許可,如下列範例所示。

範例 使用遞迴政策

假設您希望獲得列出如下組織的 S3 儲存貯體中所有 parquet 檔案的許可。

s3://sales-reports/americas/ +- year=2000 | +- data-q1.parquet | +- data-q2.parquet +- year=2019 | +- data-q1.json | +- data-q2.json | +- data-q3.json | +- data-q4.json | +- year=2020 | +- data-q1.parquet | +- data-q2.parquet | +- data-q3.parquet | +- data-q4.parquet | +- annual-summary.parquet +- year=2021

首先,考慮字首為 s3://sales-reports/americas/year=2000 的 parquet 檔案。您可以通過兩種方式將GetObject 權限授予所有權限:

使用非遞迴政策:一種選擇是使用兩個不同的非遞迴政策:一個政策用於目錄,另一種政策用於檔案。

第一個政策為字首 s3://sales-reports/americas/year=2020 授予許可 (沒有結尾的 /)。

- S3 resource = "sales-reports/americas/year=2000" - permission = "GetObject" - user = "analyst"

第二個政策使用萬用字元表達式為所有字首為 sales-reports/americas/year=2020/ 的檔案授予許可 (請注意結尾的 /)。

- S3 resource = "sales-reports/americas/year=2020/*" - permission = "GetObject" - user = "analyst"

使用遞迴政策:更方便的替代方案是使用單一遞迴政策並為字首授予遞迴許可。

- S3 resource = "sales-reports/americas/year=2020" - permission = "GetObject" - user = "analyst" - is recursive = "True"

到目前為止,僅包含字首為 s3://sales-reports/americas/year=2000 的 parquet 檔案。現在,您也可以透過引入萬用字元表達式,將具有不同字首 s3://sales-reports/americas/year=2020 的 parquet 檔案包含到相同遞迴政策中,如下所示。

- S3 resource = "sales-reports/americas/year=20?0" - permission = "GetObject" - user = "analyst" - is recursive = "True"

政策PutObject 和 DeleteObject 權限

撰寫檔案的原則PutObjectDeleteObject權限EMRFS需要特別小心,因為與 GetObject權限不同的是,它們需要授與前置詞的額外遞迴權限。

範例 政策 PutObject 和 DeleteObject 權限

例如,刪除文件不僅annual-summary.parquet需要對實際文件的 DeleteObject 權限。

- S3 resource = "sales-reports/americas/year=2020/annual-summary.parquet" - permission = "DeleteObject" - user = "analyst"

還需要一個為其字首授予遞迴 GetObjectPutObject 許可的政策。

同樣地,修改檔案 annual-summary.parquet 不僅需要對實際檔案具有 PutObject 許可,

- S3 resource = "sales-reports/americas/year=2020/annual-summary.parquet" - permission = "PutObject" - user = "analyst"

還需要一個為其字首授予遞迴 GetObject 許可的政策。

- S3 resource = "sales-reports/americas/year=2020" - permission = "GetObject" - user = "analyst" - is recursive = "True"

政策中的萬用字元

有兩個區域可以指定萬用字元。指定 S3 資源時,可以使用 "*" 和 "?"。"*" 提供與 S3 路徑的相符項目,並與字首之後的所有內容相符。例如,下列政策。

S3 resource = "sales-reports/americas/*"

這與下列 S3 路徑相符。

sales-reports/americas/year=2020/ sales-reports/americas/year=2019/ sales-reports/americas/year=2019/month=12/day=1/afile.parquet sales-reports/americas/year=2018/month=6/day=1/afile.parquet sales-reports/americas/year=2017/afile.parquet

"?" 萬用字元僅符合單一字元。例如,對於政策。

S3 resource = "sales-reports/americas/year=201?/"

這與下列 S3 路徑相符。

sales-reports/americas/year=2019/ sales-reports/americas/year=2018/ sales-reports/americas/year=2017/

使用者中的萬用字元

指派使用者時有兩個內建萬用字元,可為使用者提供存取權。第一個是提供所有使用者存取權的「{USER}」萬用字元。第二個通配符是「{OWNER}」,它提供了對特定對象的所有者或直接訪問。不過,目前不支援「{USER}」萬用字元。

限制

以下是 EMRFS S3 外掛程式目前的限制:

  • Apache Ranger 政策最多可以具有三個政策。

  • S3 的存取必須透過完成,EMRFS並可與 HADOOP 相關的應用程式一起使用。不支援下列項目:

    – Boto3 程式庫

    - AWS SDK 和 AWK CLI

    – S3A 開放原始碼連接器

  • 不支援 Apache Ranger 拒絕政策。

  • 目前不支援 S3 上具有 CSE-KMS 加密金鑰的操作。

  • 不支援跨區域支援。

  • 不支援 Apache Ranger 的安全區域功能。使用安全區域功能定義的存取控制限制不會套用到您的 Amazon EMR 叢集。

  • Hadoop 使用者不會產生任何稽核事件,因為 Hadoop 總是存取EC2執行個體設定檔。

  • 建議您停用 Amazon EMR 一致性檢視。S3 高度一致,因此不再需要。如需詳細資訊,請參閱 Amazon S3 高度一致

  • EMRFSS3 插件進行了大量STS調用。建議您在開發帳戶上進行負載測試並監視STS呼叫量。我們也建議您提出STS要求以提高 AssumeRole服務限制。

  • 遊俠管理員伺服器不支援自動完成功能。