使用SCIM(遺留)通過IAM憑據傳遞訪問S3
預覽
此功能已在公共預覽.
請注意
IAM憑據傳遞是一種遺留數據治理模型。Databricks建議您升級到Unity Catalog。Unity Catalog通過提供一個中央位置來管理和審計帳戶中多個工作區的數據訪問,從而簡化了數據的安全性和治理。看到什麼是Unity Catalog?.
IAM憑據傳遞允許您使用登錄Databricks時使用的身份自動從Databricks集群驗證到S3桶。當您為您的集群啟用IAM憑據傳遞時,您在該集群上運行的命令可以使用您的身份讀取和寫入S3中的數據。IAM憑據傳遞與使用安全方法訪問S3桶相比有兩個關鍵好處實例配置文件:
IAM證書透傳允許多個具有不同數據訪問策略的用戶共享一個Databricks集群訪問S3中的數據,同時保證數據的安全性。一個實例概要文件隻能與一個實例相關聯我的角色.這要求Databricks集群上的所有用戶共享該角色和該角色的數據訪問策略。
IAM證書傳遞將用戶與某個身份關聯起來。這反過來支持通過CloudTrail記錄S3對象。所有S3訪問都通過CloudTrail日誌中的ARN直接綁定到用戶。
設置一個元實例概要文件
為了使用IAM憑據傳遞,您必須首先設置至少一個元實例概要來承擔您分配給用戶的IAM角色。
一個我的角色是一個AWS身份,其策略決定該身份在AWS中可以做什麼,不可以做什麼。一個實例配置文件是IAM角色的容器,當實例啟動時,您可以使用該容器將角色信息傳遞給EC2實例。實例概要文件允許您訪問Databricks集群中的數據,而無需訪問嵌入AWS密鑰在筆記本電腦。
雖然實例概要文件使得在集群上配置角色非常簡單,但隻能與實例概要文件關聯一個我的角色。這要求Databricks集群上的所有用戶共享該角色和該角色的數據訪問策略。但是,IAM角色可以用來承擔其他IAM角色,或者自己直接訪問數據。調用使用一個角色的憑據來承擔不同的角色角色鏈接.
IAM憑據傳遞允許管理員將實例概要文件使用的IAM角色和用戶訪問數據時使用的角色分開。在Databricks中,我們稱實例角色為IAM元角色和數據訪問角色data IAM角色.類似於實例概要文件元實例概要是一個元IAM角色的容器。
對象授予用戶對數據IAM角色的訪問權SCIM API.如果您正在將角色與您的標識提供程序映射,那麼這些角色將同步到Databricks SCIM API。當您使用帶有憑據傳遞和元實例概要文件的集群時,您隻能假定您可以訪問的數據IAM角色。這允許具有不同數據訪問策略的多個用戶共享一個Databricks集群,同時保證數據安全。
本節介紹如何設置啟用IAM憑據透傳所需的元實例配置文件。
步驟1:配置IAM鑒權透傳角色
創建data IAM角色
使用現有的數據IAM角色或可選地遵循使用實例概要配置S3訪問,創建可以訪問S3桶的data IAM角色。
配置IAM元角色
將meta IAM角色配置為data IAM角色。
在AWS控製台中,轉到我服務。
單擊角色選項卡。
點擊創建角色.
下選擇受信任實體類型中,選擇AWS服務。
單擊EC2服務。
點擊下一個權限.
點擊創建政策.打開一個新窗口。
單擊JSON選項卡。
複製以下策略並設置
<帳戶id >
到您的AWS帳戶ID和< data-iam-role >
到上一節中數據IAM角色的名稱。{“版本”:“2012-10-17”,“聲明”:[{“席德”:“AssumeDataRoles”,“效應”:“允許”,“行動”:“sts: AssumeRole”,“資源”:[“攻擊:aws:我::<帳戶id >:角色/ < data-iam-role >”]}]}
點擊審查政策.
在“Name”字段中輸入策略名稱,單擊創建政策.
返回到角色窗口並刷新它。
搜索策略名稱並選中策略名稱旁邊的複選框。
點擊下一個標簽而且下一個評論.
在角色名稱文件中,鍵入元IAM角色的名稱。
點擊創建角色.
在角色摘要中,複製實例配置ARN.
配置data IAM角色信任meta IAM角色
為了使元IAM角色能夠承擔數據IAM角色,您需要使元角色受數據角色信任。
在AWS控製台中,轉到我服務。
單擊角色選項卡。
找到在上一步中創建的數據角色並單擊它以進入角色詳細信息頁麵。
單擊信任關係TAB,如果未設置,則添加以下語句:
{“版本”:“2012-10-17”,“聲明”:[{“效應”:“允許”,“校長”:{“AWS”:“攻擊:aws:我::<帳戶id >:角色/ < meta-iam-role >”},“行動”:“sts: AssumeRole”}]}
步驟2:在Databricks中配置元實例配置文件
介紹在Databricks中配置元實例配置文件的操作步驟。
確定Databricks部署時使用的IAM角色
去賬戶控製台.
單擊工作區圖標。
單擊工作區的名稱。
請注意在憑證部分的ARN鍵的末尾的角色名稱,在下麵的圖像中它是“testco-role”。
修改Databricks部署時使用的IAM角色中的策略
在AWS控製台中,轉到我服務。
單擊角色選項卡。
編輯上一節中提到的角色。
單擊附加到角色的策略。
修改策略以允許Databricks內的Spark集群的EC2實例使用您在中創建的元實例配置文件配置IAM元角色.有關示例,請參見在EC2策略中添加S3 IAM角色.
點擊審查政策而且保存更改.
步驟3:為Databricks用戶添加IAM角色權限
維護用戶到IAM角色的映射有兩種方法:
在數據庫中使用SCIM用戶API或SCIM Groups API.
在你的身份提供商.這允許您集中數據訪問,並通過SAML 2.0身份聯合將這些授權直接傳遞給Databricks集群。
使用下麵的圖表來幫助您決定哪種映射方法更適合您的工作空間:
要求 |
SCIM |
身份提供商 |
---|---|---|
單點登錄到Databricks |
沒有 |
是的 |
配置AWS標識提供程序 |
沒有 |
是的 |
配置元實例概要 |
是的 |
是的 |
磚管理 |
是的 |
是的 |
AWS管理 |
是的 |
是的 |
標識提供程序管理 |
沒有 |
是的 |
當您使用元實例配置文件啟動一個集群時,該集群將通過您的身份,隻承擔您可以訪問的數據IAM角色。管理員必須授予用戶使用的數據IAM角色的權限SCIM API方法對角色設置權限。
請注意
如果您在IdP中映射角色,那麼這些角色將覆蓋在SCIM中映射的任何角色,您不應該將用戶直接映射到角色。看到步驟6:可選地配置Databricks將角色映射從SAML同步到SCIM.
還可以使用將實例概要文件附加到用戶或組Databricks Terraform提供商而且databricks_user_role或databricks_group_instance_profile.
啟動IAM證書直通集群
啟動具有憑據傳遞的集群的過程因集群模式而異。
為高並發性集群啟用憑據傳遞
高並發集群可以被多個用戶共享。它們隻支持帶有直通功能的Python和SQL。
選擇Databricks Runtime Version 6.1或以上版本。
下高級選項中,選擇為用戶級數據訪問啟用憑據傳遞,並且隻允許Python和SQL命令.
單擊實例選項卡。在實例配置文件下拉菜單,選擇在其中創建的元實例概要文件將元實例配置文件添加到Databricks.
在Standard集群中開啟IAM鑒權直通功能
支持具有憑據傳遞的標準集群,但僅限於單個用戶。標準集群支持Python、SQL、Scala和r。在Databricks Runtime 10.1及以上版本上,也支持sparklyr。
創建集群時必須分配用戶,但可以由具有可以管理權限隨時替換原有用戶。
重要的
分配給集群的用戶必須至少擁有可以附著於集群的權限,以便在集群上運行命令。管理員和集群創建者擁有可以管理權限,但不能在集群上運行命令,除非他們是指定的集群用戶。
選擇Databricks Runtime Version 6.1或以上版本。
下高級選項中,選擇為用戶級數據訪問啟用憑據傳遞.
中選擇用戶名單用戶接入下拉。
單擊實例選項卡。在實例配置文件下拉菜單,選擇在其中創建的元實例概要文件將元實例配置文件添加到Databricks.
使用IAM憑據直通訪問S3
您可以使用憑據傳遞訪問S3,方法是假設一個角色並直接訪問S3,或者使用該角色掛載S3桶並通過掛載訪問數據。
使用憑據傳遞讀寫S3數據
向S3讀寫數據:
dbutils.憑證.assumeRole(“攻擊:aws:我::xxxxxxxx:角色/ < data-iam-role >”)火花.讀.格式(“csv”).負載(“s3a: / / prod-foobar / sampledata.csv”)火花.範圍(1000).寫.模式(“覆蓋”).保存(“s3a: / / prod-foobar / sampledata.parquet”)
dbutils.credentials.assumeRole(“攻擊:aws:我::xxxxxxxx:角色/ < data-iam-role >”)# SparkR圖書館(SparkR)sparkR.session()read.df(“s3a: / / prod-foobar / sampledata.csv”,源=“csv”)write.df(作為。DataFrame(data.frame(1:1000)),路徑=“s3a: / / prod-foobar / sampledata.parquet”,源=“鋪”,模式=“覆蓋”)# sparklyr圖書館(sparklyr)sc<-spark_connect(方法=“磚”)sc% > %spark_read_csv(“s3a: / / prod-foobar / sampledata.csv”)sc% > %sdf_len(1000)% > %spark_write_parquet(“s3a: / / prod-foobar / sampledata.parquet”,模式=“覆蓋”)
使用dbutils
角色:
dbutils.憑證.assumeRole(“攻擊:aws:我::xxxxxxxx:角色/ < data-iam-role >”)dbutils.fs.ls(“s3a: / / bucketA /”)
dbutils.credentials.assumeRole(“攻擊:aws:我::xxxxxxxx:角色/ < data-iam-role >”)dbutils.fs.ls(“s3a: / / bucketA /”)
為其他dbutils.credentials
方法,請參閱憑證實用程序(dbutils.credentials).
使用IAM憑據傳遞將S3桶掛載到DBFS
對於更高級的場景(不同的桶或前綴需要不同的角色),使用Databricks桶掛載來指定訪問特定桶路徑時要使用的角色會更方便。
當您使用啟用了IAM憑據傳遞的集群掛載數據時,對掛載點的任何讀或寫都將使用您的憑據對掛載點進行身份驗證。這個掛載點對其他用戶是可見的,但是隻有那些具備讀寫權限的用戶:
是否可以通過IAM數據角色訪問底層S3存儲帳戶
使用集群是否啟用了IAM憑據傳遞
dbutils.fs.山(“s3a: / / < s3 bucket > /數據/機密”,“/ mnt /機密數據”,extra_configs={“fs.s3a.credentialsType”:“自定義”,“fs.s3a.credentialsType.customClass”:“com.databricks.backend.daemon.driver.aws.AwsCredentialContextTokenProvider”,“fs.s3a.stsAssumeRole.arn”:“攻擊:aws:我::xxxxxxxx:角色/ < confidential-data-role >”})
通過IAM證書透傳訪問作業中的S3數據
若要在作業中使用憑據傳遞訪問S3數據,請根據配置集群啟動IAM證書直通集群當您選擇新的或現有的集群時。
集群將隻承擔作業所有者已被授予權限的角色,因此隻能訪問該角色有權限訪問的S3數據。
使用IAM憑證傳遞從JDBC或ODBC客戶端訪問S3數據
若要通過JDBC或ODBC客戶端使用IAM憑據透傳訪問S3數據,請根據啟動IAM證書直通集群並在客戶端中連接到這個集群。集群將隻承擔連接到它的用戶已被授予訪問權限的角色,因此隻能訪問用戶有權限訪問的S3數據。
要在SQL查詢中指定角色,請執行以下操作:
集火花.磚.憑證.假定.角色=在攻擊:aws:我::XXXX:角色/<數據-我-角色>;—訪問有權限訪問的桶 選擇數(*)從csv.`s3://我的-桶/測驗.csv`;
已知的限製
IAM證書傳遞不支持以下特性:
% fs
(使用等價物dbutils.fs命令相反)。在SparkContext (
sc
)和SparkSession (火花
)對象:棄用的方法。
方法包括
addFile ()
而且addJar ()
允許非管理員用戶調用Scala代碼。訪問S3以外的文件係統的任何方法。
舊的Hadoop api (
hadoopFile ()
而且hadoopRDD ()
).流api,因為在流仍在運行時,傳遞的憑據將過期。
DBFS坐騎(
/ dbfs
)隻適用於Databricks Runtime 7.3 LTS及以上版本。通過此路徑不支持配置了憑據傳遞的掛載點。需要集群實例概要文件權限才能下載的集群範圍的庫。隻支持具有DBFS路徑的庫。