使用SCIM通过IAM凭据传递访问S3

预览

此功能已在公共预览

IAM凭据传递允许您使用登录Databricks时使用的身份自动从Databricks集群验证到S3桶。当您为您的集群启用IAM凭据传递时,您在该集群上运行的命令可以使用您的身份读取和写入S3中的数据。IAM凭据传递与使用安全方法访问S3桶相比有两个关键好处实例配置文件

  • IAM证书透传允许多个具有不同数据访问策略的用户共享一个Databricks集群访问S3中的数据,同时保证数据的安全性。一个实例概要文件只能与一个实例相关联我的角色.这要求Databricks集群上的所有用户共享该角色和该角色的数据访问策略。

  • IAM证书传递将用户与某个身份关联起来。这反过来支持通过CloudTrail记录S3对象。所有S3访问都通过CloudTrail日志中的ARN直接绑定到用户。

需求

  • 优质及以上计划

  • AWS管理员访问权限:

    • Databricks部署的AWS帐户中的IAM角色和策略。

    • S3桶的AWS帐户。

    • 数据库管理员访问配置实例概要文件。

设置一个元实例概要文件

为了使用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角色。

  1. 在AWS控制台中,转到服务。

  2. 单击角色选项卡。

  3. 点击创建角色

    1. 选择受信任实体类型中,选择AWS服务。

    2. 单击EC2服务。

  4. 点击下一个权限

  5. 点击创建政策.打开一个新窗口。

    1. 单击JSON选项卡。

    2. 复制以下策略并设置<帐户id >到您的AWS帐户ID和< data-iam-role >到上一节中数据IAM角色的名称。

      “版本”“2012-10-17”,“声明”“席德”“AssumeDataRoles”,“效应”“允许”,“行动”“sts: AssumeRole”,“资源”“攻击:aws:我::<帐户id >:角色/ < data-iam-role >”}}
    3. 点击审查政策

    4. 在“Name”字段中输入策略名称,单击创建政策

  6. 返回到角色窗口并刷新它。

  7. 搜索策略名称并选中策略名称旁边的复选框。

  8. 点击下一个标签而且下一个评论

  9. 在角色名称文件中,键入元IAM角色的名称。

  10. 点击创建角色

  11. 在角色摘要中,复制实例配置ARN

配置data IAM角色信任meta IAM角色

为了使元IAM角色能够承担数据IAM角色,您需要使元角色受数据角色信任。

  1. 在AWS控制台中,转到服务。

  2. 单击角色选项卡。

  3. 找到在上一步中创建的数据角色并单击它以进入角色详细信息页面。

  4. 单击信任关系TAB,如果未设置,则添加以下语句:

    “版本”“2012-10-17”,“声明”“效应”“允许”,“校长”“AWS”“攻击:aws:我::<帐户id >:角色/ < meta-iam-role >”},“行动”“sts: AssumeRole”}}

步骤2:在Databricks中配置元实例配置文件

介绍在Databricks中配置元实例配置文件的操作步骤。

确定Databricks部署时使用的IAM角色

  1. 账户控制台

  2. 单击工作区图标。

  3. 单击工作区的名称。

  4. 请注意在凭证部分的ARN键的末尾的角色名称,在下面的图像中它是“testco-role”。

    的角色是

修改Databricks部署时使用的IAM角色中的策略

  1. 在AWS控制台中,转到服务。

  2. 单击角色选项卡。

  3. 编辑上一节中提到的角色。

  4. 单击附加到角色的策略。

  5. 修改策略以允许Databricks内的Spark集群的EC2实例使用您在中创建的元实例配置文件配置IAM元角色.有关示例,请参见在EC2策略中添加S3 IAM角色

  6. 点击审查政策而且保存更改

将元实例配置文件添加到Databricks

  1. 管理控制台

  2. 选择实例配置文件选项卡。

  3. 单击添加实例配置文件按钮。出现一个对话框。

  4. 为meta IAM角色粘贴Instance Profile ARN配置IAM元角色

  5. 检查元实例配置文件复选框,然后单击添加

    添加实例概要
  6. 可以选择识别可以使用元实例配置文件启动集群的用户。

    配置实例概要文件

步骤3:为Databricks用户添加IAM角色权限

维护用户到IAM角色的映射有两种方法:

使用下面的图表来帮助您决定哪种映射方法更适合您的工作空间:

要求

SCIM

身份提供商

单点登录到Databricks

没有

是的

配置AWS标识提供程序

没有

是的

配置元实例概要

是的

是的

砖管理

是的

是的

AWS管理

是的

是的

标识提供程序管理

没有

是的

当您使用元实例配置文件启动一个集群时,该集群将通过您的身份,只承担您可以访问的数据IAM角色。管理员必须授予用户使用的数据IAM角色的权限SCIM API方法对角色设置权限。

请注意

如果您在IdP中映射角色,那么这些角色将覆盖在SCIM中映射的任何角色,您不应该将用户直接映射到角色。看到步骤6:可选地配置Databricks将角色映射从SAML同步到SCIM

还可以使用将实例概要文件附加到用户或组Databricks Terraform提供商而且databricks_user_roledatabricks_group_instance_profile

启动IAM证书直通集群

启动具有凭据传递的集群的过程因集群模式而异。

为高并发性集群启用凭据传递

高并发集群可以被多个用户共享。它们只支持带有直通功能的Python和SQL。

  1. 当你创建集群,设置集群模式高并发

  2. 选择Databricks Runtime Version 6.1或以上版本。

  3. 高级选项中,选择为用户级数据访问启用凭据传递,并且只允许Python和SQL命令

    为高并发性集群启用凭据传递
  4. 单击实例选项卡。在实例配置文件下拉菜单,选择在其中创建的元实例概要文件将元实例配置文件添加到Databricks

    选择实例概要

在Standard集群中开启IAM鉴权直通功能

支持具有凭据传递的标准集群,但仅限于单个用户。标准集群支持Python、SQL、Scala和r。在Databricks Runtime 10.1及以上版本上,也支持sparklyr。

创建集群时必须分配用户,但可以由具有可以管理权限随时替换原有用户。

重要的

分配给集群的用户必须至少拥有可以附着于集群的权限,以便在集群上运行命令。管理员和集群创建者拥有可以管理权限,但不能在集群上运行命令,除非他们是指定的集群用户。

  1. 当你创建集群,设置集群模式标准

  2. 选择Databricks Runtime Version 6.1或以上版本。

  3. 高级选项中,选择为用户级数据访问启用凭据传递

    为标准集群启用凭据传递
  4. 中选择用户名单用户接入下拉。

    单用户访问时选择“user”
  5. 单击实例选项卡。在实例配置文件下拉菜单,选择在其中创建的元实例概要文件将元实例配置文件添加到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图书馆SparkRsparkR.session()read.df“s3a: / / prod-foobar / sampledata.csv”,“csv”write.df作为。DataFramedata.frame11000)),路径“s3a: / / prod-foobar / sampledata.parquet”,“铺”,模式“覆盖”# sparklyr图书馆sparklyrsc<-spark_connect方法“砖”sc% > %spark_read_csv“s3a: / / prod-foobar / sampledata.csv”sc% > %sdf_len1000% > %spark_write_parquet“s3a: / / prod-foobar / sampledata.parquet”,模式“覆盖”

使用dbutils角色:

dbutils凭证assumeRole“攻击:aws:我::xxxxxxxx:角色/ < data-iam-role >”dbutilsfsls“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凭据传递

dbutilsfs“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角色/<数据--角色>—访问有权限访问的桶选择csvs3//我的-/测验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路径的库。

  • 砖连接高并发clusters仅在Databricks Runtime 7.3 LTS及以上版本可用。

  • MLflow