本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
為了更輕鬆地針對多租戶叢集上的 S3 中的物件提供存取控制,EMRFSS3 外掛程式會在透過 存取 S3 中的資料時提供存取控制EMRFS。您可以允許在使用者和群組層級存取 S3 資源。
為了達成此目的,當您的應用程式嘗試存取 S3 內的資料時, EMRFS會傳送登入資料請求至 Secret Agent 程序,其中請求會針對 Apache Ranger 外掛程式進行身分驗證和授權。如果請求獲得授權,則 Secret Agent 會擔任 Apache Ranger Engines IAM的角色,並具有限制政策,以產生只能存取允許存取之 Ranger 政策的登入資料。然後,登入資料會傳回給 EMRFS以存取 S3。
支援的功能
EMRFS S3 外掛程式提供儲存層級授權。您可以建立政策來為使用者和群組提供對 S3 儲存貯體和字首的存取權。授權只會針對 完成EMRFS。
安裝服務組態
若要安裝EMRFS服務定義,您必須設定 Ranger Admin 伺服器。若要設定伺服器,請參閱 設定 Ranger Admin 伺服器以與 Amazon 整合 EMR。
請依照下列步驟安裝EMRFS服務定義。
步驟 1:SSH進入 Apache Ranger Admin 伺服器。
例如:
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'
如果此命令執行成功,您會在 Ranger Admin UI 中看到名為 "AMAZON-EMR-S3" 的新服務,如下圖所示 (顯示 Ranger 2.0 版)。
步驟 4:建立應用程式的執行個體 AMAZON-EMR-EMRFS。
建立服務定義的執行個體。
-
按一下旁邊的 + AMAZON-EMR-EMRFS。
填寫下列欄位:
服務名稱 (如果顯示):建議的值為 amazonemrs3
。請注意此服務名稱,因為建立EMR安全組態時需要此服務名稱。
顯示名稱:為此服務顯示的名稱。建議的值為 amazonemrs3
。
憑證的通用名稱:憑證內的 CN 欄位用於從用戶端外掛程式連接至管理伺服器。此值必須符合為外掛程式建立之TLS憑證中的 CN 欄位。
注意
此外掛程式的TLS憑證應該已在 Ranger Admin 伺服器的信任存放區中註冊。如需詳細資訊,請參閱TLS Apache Ranger 與 Amazon 整合的憑證 EMR。
建立服務時,Service Manager 會包含 "AMAZON-EMR-EMRFS",如下圖所示。
建立 EMRFS S3 政策
若要在 Service Manager 的建立政策頁面中建立新政策,請填寫下列欄位。
政策名稱:此政策的名稱。
政策標籤:您可以放在此政策上的標籤。
S3 資源:以儲存貯體和選用字首開始的資源。如需有關最佳實務的資訊,請參閱 EMRFS S3 政策用量備註。Ranger Admin 伺服器中的資源不應包含 s3://
、s3a://
或 s3n://
。
您可以指定要授予許可的使用者和群組。您也可以為允許條件和拒絕條件指定排除。
注意
每個政策最多允許三個資源。當叢集使用此政策時,新增超過三個資源可能會導致錯誤EMR。新增超過三個政策會顯示有關政策限制的提醒。
EMRFS S3 政策用量備註
在 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 許可的政策
撰寫 檔案的政策PutObject
和DeleteObject
許可EMRFS需要特別注意,因為與許可不同 GetObject,它們需要額外授予字首的遞迴許可。
範例 PutObject 和 DeleteObject 許可的政策
例如,刪除檔案不僅annual-summary.parquet
需要實際檔案的 DeleteObject 許可。
- S3 resource = "sales-reports/americas/year=2020/annual-summary.parquet"
- permission = "DeleteObject"
- user = "analyst"
還需要一個為其字首授予遞迴 GetObject
和 PutObject
許可的政策。
同樣地,修改檔案 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 高度一致
。 -
EMRFS S3 外掛程式會進行許多STS呼叫。建議您在開發帳戶上載入測試並監控STS通話量。也建議您提出提高 AssumeRole服務限制的STS請求。
-
Ranger Admin 伺服器不支援自動完成。