配置Databricks S3提交服務相關設置
Databricks運行一個提交服務,該服務協調從多個集群向Amazon S3的寫入。這個服務運行在數據庫裏控製飛機.為了進一步提高安全性,您可以禁用服務的直接上傳優化,如關閉直接上傳優化功能.若要進一步限製對S3桶的訪問,請參見額外的桶安全性限製.
如果您收到與S3提交服務相關的AWS GuardDuty警報,請參見AWS GuardDuty與S3提交服務相關的警報.
關於提交服務
在特定情況下,S3提交服務有助於保證在單個表上跨多個集群的寫操作的一致性。例如,提交服務可以提供幫助三角洲湖實現ACID事務。
在默認配置中,Databricks在提交服務API調用中將臨時AWS憑據從數據平麵發送到控製平麵。實例配置文件憑證的有效期為6小時。
數據平麵直接將數據寫入S3,然後控製平麵中的S3提交服務通過完成提交日誌上傳(完成下麵描述的多部分上傳)提供並發控製。提交服務不從S3讀取任何數據。如果一個新文件不存在,它會在S3中放置一個新文件。
Databricks提交服務寫入S3的最常見數據是Delta日誌,其中包含來自數據的統計聚合,例如列的最小值和最大值。大部分Delta日誌數據從數據平麵使用一個Amazon S3多部分上傳.
在集群將多部分數據寫入Delta日誌到S3之後,Databricks控製平麵的S3提交服務通過讓S3知道它已經完成來完成S3的多部分上傳。作為非常小的更新的性能優化,默認情況下,提交服務有時會直接將小的更新從控製平麵推送到S3。這種直接更新優化可以被禁用。看到關閉直接上傳優化功能.
除了Delta Lake,以下Databricks特性使用相同的S3提交服務:
提交服務是必要的,因為Amazon沒有提供僅在對象還不存在時才放置對象的操作。Amazon S3是一個分布式係統。如果S3同時接收到對同一個對象的多個寫請求,它將覆蓋除最後一個對象外的所有寫請求。如果沒有集中驗證提交的能力,來自不同集群的同時提交將損壞表。
AWS GuardDuty與S3提交服務相關的警報
重要的
提交到所管理的表統一目錄不觸發GuardDuty警報。
如果你使用AWS GuardDuty當您使用AWS IAM實例配置文件訪問數據時,GuardDuty可能會為與Delta Lake、結構化流、自動加載器或相關的默認Databricks行為創建警報複製成
.這些警報與實例憑據泄露檢測相關,該檢測在默認情況下啟用。這些警告包括標題UnauthorizedAccess: IAMUser / InstanceCredentialExfiltration。InsideAWS
.
您可以配置Databricks部署來處理與S3提交服務相關的GuardDuty警報AWS實例概要假設您的原始S3數據訪問IAM角色的角色。
作為使用實例概要文件憑據的替代方法,這個新的實例概要文件可以配置集群以承擔具有短持續令牌的角色。這個功能已經存在於Databricks運行時的所有最新版本中,並且可以通過集群政策.
如果你還沒有這樣做,創建一個正常的實例配置文件訪問S3數據。該實例概要文件使用實例概要文件憑據直接訪問S3數據。
本節將此實例概要中的角色ARN稱為
< data-role-arn >
.創建一個新的實例配置文件,它將使用令牌並引用直接訪問數據的實例配置文件。您的集群將引用這個新的基於令牌的實例概要。看到使用實例概要配置S3訪問.
這個實例概要文件不需要任何直接的S3訪問。相反,它隻需要承擔您用於數據訪問的IAM角色的權限。本節將此實例概要中的角色ARN稱為
< cluster-role-arn >
.在新的集群實例概要文件IAM角色上添加附加的IAM策略(
< cluster-role-arn >
).將以下策略聲明添加到新的集群實例概要文件IAM Role並替換< data-role-arn >
你的原始實例配置文件的ARN訪問你的桶。{“效應”:“允許”,“行動”:“sts: AssumeRole”,“資源”:“< data-role-arn >”}
在現有的數據訪問IAM角色中添加信任策略聲明並替換
< cluster-role-arn >
使用原始實例配置文件的ARN訪問您的桶。{“效應”:“允許”,“校長”:{“AWS”:“< cluster-role-arn >”},“行動”:“sts: AssumeRole”}
要使用直接連接到S3而不使用DBFS的筆記本代碼,請配置您的集群以使用新的基於令牌的實例配置文件,並承擔數據訪問角色。
為所有桶配置S3訪問集群。將以下內容添加到集群的Spark配置中:
fs.s3a。credentialsType AssumeRolefs.s3a.stsAssumeRole。是< data-role-arn >
在Databricks Runtime 8.3及以上版本中,你可以為一個特定的桶配置:
fs.s3a.bucket。< bucket名> .aws.credentials。提供者org.apache.hadoop.fs.s3a.auth.AssumedRoleCredentialProviderfs.s3a.bucket。< bucket名> .assumed.role。是< data-role-arn >
關閉直接上傳優化功能
作為非常小的更新的性能優化,默認情況下,提交服務有時會直接將小的更新從控製平麵推送到S3。若要禁用此優化,請設置Spark參數spark.hadoop.fs.s3a.databricks.s3commit.directPutFileSizeThreshold
來0
.您可以在集群的Spark配置中應用此設置,也可以在全局初始化腳本.
禁用此功能可能會導致近實時結構化流查詢的性能受到輕微影響,並不斷進行小更新。在生產環境中禁用此特性之前,請考慮使用數據測試性能影響。
額外的桶安全性限製
下麵的桶策略配置進一步限製了對S3桶的訪問。
這些更改都不會影響GuardDuty警報。
將桶訪問限製在特定的IP地址和S3操作。如果您對存儲桶的其他控製感興趣,可以限製特定的S3存儲桶隻能從特定的IP地址訪問。例如,您可以將訪問限製為您自己的環境和Databricks控製平麵的IP地址,包括S3提交服務。看到限製對S3桶的訪問.此配置限製了從其他位置使用憑據的風險。
將S3操作類型限製在所需目錄之外.您可以拒絕從Databricks控製平麵訪問S3提交服務所需目錄之外的S3桶。您還可以將這些目錄中的操作限製為所需的S3操作
把
而且列表
來自Databricks的IP地址。Databricks控製平麵(包括S3提交服務)不需要得到
桶的訪問權限。{“席德”:“LimitCommitServiceActions”,“效應”:“否認”,“校長”:“*”,“NotAction”:[“s3: ListBucket”,“s3: GetBucketLocation”,“s3: propertynames”),“資源”:[“攻擊:aws: s3::: < bucket名> / *”,“攻擊:aws: s3::: < bucket名>”),“條件”:{“IpAddress”:{“aws: SourceIp”:“< control-plane-ip >”}}},{“席德”:“LimitCommitServicePut”,“效應”:“否認”,“校長”:“*”,“行動”:“s3: propertynames”,“NotResource”:[“攻擊:aws: s3::: < bucket名> / * _delta_log / *”,“攻擊:aws: s3::: < bucket名> / * _spark_metadata / *”,“攻擊:aws: s3::: < bucket名> / *補償/ *”,“攻擊:aws: s3::: < bucket名> / * / *來源”,“攻擊:aws: s3::: < bucket名> / *水槽/ *”,“攻擊:aws: s3::: < bucket名> / * _schemas / *”),“條件”:{“IpAddress”:{“aws: SourceIp”:“< control-plane-ip >”}}},{“席德”:“LimitCommitServiceList”,“效應”:“否認”,“校長”:“*”,“行動”:“s3: ListBucket”,“資源”:“攻擊:aws: s3::: < bucket名>”,“條件”:{“StringNotLike”:{“s3:前綴”:[“* _delta_log / *”,“* _spark_metadata / *”,“*補償/ *”,“/ * *來源”,“*水槽/ *”,“* _schemas / *”]},“IpAddress”:{“aws: SourceIp”:“< control-plane-ip >”}}}
取代
< control-plane-ip >
與你的Databricks控製平麵的區域IP地址.取代< bucket名>
S3桶名。