本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
搭配 EMR Serverless 使用 AWS Lake Formation 進行精細存取控制
概觀
透過 Amazon 7.2.0 版及更新EMR版本,您可以利用 AWS Lake Formation 將精細存取控制套用至 S3 支援的 Data Catalog 資料表。此功能可讓您設定 的資料表、資料列、資料欄和儲存格層級存取控制 read Amazon EMR Serverless Spark 任務中的查詢。若要設定 Apache Spark 批次任務和互動式工作階段的精細存取控制,請使用 EMR Studio。請參閱下列各節,進一步了解 Lake Formation 以及如何搭配 EMR Serverless 使用。
搭配使用 Amazon EMR Serverless AWS Lake Formation 會產生額外費用。如需詳細資訊,請參閱 Amazon EMR定價。
EMR Serverless 如何使用 AWS Lake Formation
將 EMR Serverless 與 Lake Formation 搭配使用可讓您針對每個 Spark 任務強制執行一層許可,以在 EMR Serverless 執行任務時套用 Lake Formation 許可控制。EMR Serverless 使用 Spark 資源設定檔
當您搭配 Lake Formation 使用預先初始化的容量時,建議您至少有兩個 Spark 驅動程式。每個啟用 Lake Formation 的任務都會使用兩個 Spark 驅動程式,一個用於使用者設定檔,另一個用於系統設定檔。為了獲得最佳效能,相較於不使用 Lake Formation,您應該使用兩倍的已啟用 Lake Formation 任務的驅動程式數目。
當您在 EMR Serverless 上執行 Spark 任務時,也必須考量動態配置對資源管理和叢集效能的影響。每個資源設定檔的執行器數目spark.dynamicAllocation.maxExecutors
上限組態會套用至使用者和系統執行器。如果您將該數字設定為等於允許的執行器數量上限,您的任務執行可能會因為使用所有可用資源的一種執行器類型而卡住,這使得其他執行器在您執行任務時無法運作。
因此,您不會耗盡資源,EMRServerless 會將每個資源設定檔的預設執行器數目上限設定為 spark.dynamicAllocation.maxExecutors
值的 90%。當您spark.dynamicAllocation.maxExecutorsRatio
以 0 到 1 之間的值指定 時,您可以覆寫此組態。此外,您也可以設定下列屬性,以最佳化資源配置和整體效能:
-
spark.dynamicAllocation.cachedExecutorIdleTimeout
-
spark.dynamicAllocation.shuffleTracking.timeout
-
spark.cleaner.periodicGC.interval
以下是如何無EMR伺服器存取 Lake Formation 安全政策保護之資料的高階概觀。
-
使用者將 Spark 任務提交至 AWS Lake Formation已啟用 的 EMR Serverless 應用程式。
-
EMR Serverless 會將任務傳送給使用者驅動程式,並在使用者設定檔中執行任務。使用者驅動程式執行精簡版 Spark,無法啟動任務、請求執行程式、存取 S3 或 Glue Catalog。它建立了一個任務計畫。
-
EMR 無伺服器設定第二個名為系統驅動程式的驅動程式,並在系統設定檔 (具有特殊權限身分) 中執行。EMR 無伺服器會在兩個驅動程式之間設定加密TLS的頻道以進行通訊。使用者驅動程式使用 頻道將任務計劃傳送至系統驅動程式。系統驅動程式不會執行使用者提交的程式碼。它執行完整的 Spark 並與 S3 和資料目錄通訊,以進行資料存取。它請求執行器並將任務計畫編譯為一系列執行階段。
-
EMR 然後,無伺服器會使用使用者驅動程式或系統驅動程式在執行器上執行階段。任何階段的使用者程式碼都只會在使用者設定檔執行器上執行。
-
從受 或 AWS Lake Formation 套用安全篩選條件的 Data Catalog 資料表讀取資料的階段會委派給系統執行者。
在 Amazon 中啟用 Lake Formation EMR
若要啟用 Lake Formation,您必須在建立 Serverless 應用程式 時,將 Runtime-configuration 參數的spark-defaults
分類spark.emr-serverless.lakeformation.enabled
true
設為 。 EMR
aws emr-serverless create-application \ --release-label emr-7.3.0 \ --runtime-configuration '{ "classification": "spark-defaults", "properties": { "spark.emr-serverless.lakeformation.enabled": "true" } }' \ --type "SPARK"
您也可以在 EMR Studio 中建立新應用程式時啟用 Lake Formation。選擇使用 Lake Formation 進行精細存取控制 ,可在其他組態 下取得。
使用 Lake Formation 搭配 EMR Serverless 時,預設會啟用工作者間加密,因此您不需要再次明確啟用工作者間加密。
為 Spark 任務啟用 Lake Formation
若要為個別 Spark 任務啟用 Lake Formation,請在使用 時spark.emr-serverless.lakeformation.enabled
設定為 truespark-submit
。
--conf spark.emr-serverless.lakeformation.enabled=true
任務執行期角色IAM許可
Lake Formation 許可控制對 AWS Glue Data Catalog 資源、Amazon S3 位置和這些位置基礎資料的存取。IAM 許可控制對 Lake Formation、 AWS Glue APIs和資源的存取。雖然您可能擁有 Lake Formation 許可,可存取 Data Catalog (SELECT) 中的資料表,但如果您沒有操作的IAM許可,您的glue:Get*
API操作會失敗。
以下是如何提供存取 S3 中指令碼的IAM許可、將日誌上傳到 S3、 AWS Glue API許可和存取 Lake Formation 的許可的範例政策。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ScriptAccess", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::*.amzn-s3-demo-bucket/scripts", "arn:aws:s3:::*.amzn-s3-demo-bucket/*" ] }, { "Sid": "LoggingAccess", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/logs/*" ] }, { "Sid": "GlueCatalogAccess", "Effect": "Allow", "Action": [ "glue:Get*", "glue:Create*", "glue:Update*" ], "Resource": ["*"] }, { "Sid": "LakeFormationAccess", "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": ["*"] } ] }
設定任務執行期角色的 Lake Formation 許可
首先,向 Lake Formation 註冊 Hive 資料表的位置。然後在所需資料表上建立任務執行期角色的許可。如需 Lake Formation 的詳細資訊,請參閱 開發人員指南 中的什麼是 AWS Lake Formation?。 AWS Lake Formation
設定 Lake Formation 許可後,您可以在 Amazon EMR Serverless 上提交 Spark 任務。如需 Spark 任務的詳細資訊,請參閱 Spark 範例 。
提交任務執行
設定 Lake Formation 授予之後,您可以在 EMR Serverless 上提交 Spark 任務。若要執行 Iceberg 任務,您必須提供下列spark-submit
屬性。
--conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog --conf spark.sql.catalog.spark_catalog.warehouse=<
S3_DATA_LOCATION
> --conf spark.sql.catalog.spark_catalog.glue.account-id=<ACCOUNT_ID
> --conf spark.sql.catalog.spark_catalog.client.region=<REGION
> --conf spark.sql.catalog.spark_catalog.glue.endpoint=https://glue.<REGION
>.amazonaws.com
開放資料表格式支援
Amazon 7.2.0 EMR版包含支援以 Lake Formation 為基礎的精細存取控制。EMR Serverless 支援 Hive 和 Iceberg 資料表類型。下表說明所有支援的操作。
作業 | Hive | Iceberg |
---|---|---|
DDL 命令 | 僅具有IAM角色許可 | 僅具有IAM角色許可 |
增量查詢 | 不適用 | 完全支援 |
時間歷程查詢 | 不適用於此資料表格式 | 完全支援 |
中繼資料表 | 不適用於此資料表格式 | 受支援,但某些資料表會隱藏。如需詳細資訊,請參閱考量事項和限制。 |
DML INSERT |
僅具有 IAM 許可 | 僅具有 IAM 許可 |
DML UPDATE | 不適用於此資料表格式 | 僅具有 IAM 許可 |
DML DELETE |
不適用於此資料表格式 | 僅具有 IAM 許可 |
讀取操作 | 完全支援 | 完全支援 |
預存程序 | 不適用 | 支援 ,但有 register_table 和 的例外狀況migrate 。如需詳細資訊,請參閱考量事項和限制。 |