使用實例概要保護對S3桶的訪問
一個我的角色是帶有權限策略的AWS標識,該權限策略決定該標識在AWS中可以做什麼和不能做什麼。一個實例配置文件是IAM角色的容器,當實例啟動時,您可以使用該容器將角色信息傳遞給EC2實例。
為了安全地訪問AWS資源,您可以使用實例配置文件啟動Databricks集群,允許您從Databricks集群訪問數據,而無需在筆記本電腦中嵌入AWS密鑰。本文將解釋如何設置實例概要文件,並在Databricks中使用它們來安全地訪問S3桶。
請注意
使用實例概要文件從Databricks集群訪問S3桶的替代方法是IAM憑據傳遞,它將單個用戶的IAM角色傳遞給Databricks,並使用該IAM角色來確定對S3中的數據的訪問。這允許具有不同數據訪問策略的多個用戶共享Databricks集群。相比之下,實例概要文件隻與一個IAM角色相關聯,這要求Databricks集群的所有用戶共享該角色及其數據訪問策略。有關更多信息,請參見使用Databricks SCIM通過IAM憑證傳遞訪問S3桶.
需求
AWS管理員訪問Databricks部署的AWS帳戶和S3桶的AWS帳戶中的IAM角色和策略。
目標S3桶。此桶必須屬於與Databricks部署相同的AWS帳戶,否則必須有跨帳戶桶策略允許從Databricks部署的AWS帳戶訪問此桶。
如果您打算啟用加密對於S3桶,需要添加IAM角色為關鍵用戶輸入配置中提供的KMS密鑰。看到為s3a://路徑配置KMS加密.
步驟1:創建訪問S3桶的實例概要文件
在AWS控製台中,轉到我服務。
單擊角色選項卡。
點擊創建角色.
下選擇受信任實體類型中,選擇AWS服務.
下選擇將使用此角色的服務中,選擇EC2.
點擊下一個:權限,下一個:標簽,下一個:審查.
在角色名字段,鍵入角色名。
點擊創建角色.將顯示角色列表。
在角色列表中,單擊角色。
向角色添加內聯策略。該策略授予對S3桶的訪問權。
在“權限”頁簽中,單擊添加內聯策略.
單擊JSON選項卡。
複製此策略並設置
< s3-bucket-name >
到你的桶的名字。{“版本”:“2012-10-17”,“聲明”:[{“效應”:“允許”,“行動”:[“s3: ListBucket”],“資源”:[“攻擊:aws: s3::: < s3-bucket-name >”]},{“效應”:“允許”,“行動”:[“s3: propertynames”,“s3: GetObject”,“s3: DeleteObject”,“s3: PutObjectAcl”],“資源”:[“攻擊:aws: s3::: < s3-bucket-name > / *”]}]}
點擊審查政策.
在的名字字段,鍵入策略名稱。
點擊創建政策.
在角色摘要中,複製的角色是.
步驟2:為目標S3桶創建桶策略
S3策略至少必須包含ListBucket
而且GetObject
操作,這些操作提供對桶的隻讀訪問。三角洲湖的用途DeleteObject
而且propertynames
常規操作中的權限。下麵的權限是用於讀寫數據的集群的推薦默認權限。
重要的
的s3: PutObjectAcl
執行此操作需要獲得許可步驟7:更新跨帳戶S3對象acl配置桶的主人訪問桶中的所有數據。
粘貼策略。跨帳戶桶IAM策略的示例如下所示
< aws-account-id-databricks >
使用Databricks環境所在的AWS帳戶ID,< iam-role-for-s3-access >
使用您在步驟1中創建的角色,並且< s3-bucket-name >
桶名。{“版本”:“2012-10-17”,“聲明”:[{“席德”:“權限”,“效應”:“允許”,“校長”:{“AWS”:“攻擊:aws:我::< aws-account-id-databricks >:角色/ < iam-role-for-s3-access >”},“行動”:[“s3: GetBucketLocation”,“s3: ListBucket”],“資源”:“攻擊:aws: s3::: < s3-bucket-name >”},{“效應”:“允許”,“校長”:{“AWS”:“攻擊:aws:我::< aws-account-id-databricks >:角色/ < iam-role-for-s3-access >”},“行動”:[“s3: propertynames”,“s3: GetObject”,“s3: DeleteObject”,“s3: PutObjectAcl”],“資源”:“攻擊:aws: s3::: < s3-bucket-name > / *”}]}
點擊保存.
步驟3:注意用於創建Databricks部署的IAM角色
此IAM角色是您在設置Databricks帳戶時使用的角色。
如果你在E2帳戶:
以帳戶所有者或admin帳戶登錄賬戶控製台.
去工作區然後單擊您的工作區名稱。
在憑證時,請注意角色ARN末尾的角色名稱。
例如,在角色ARN中
攻擊:aws:我::123456789123:/ finance-prod角色
其中,financial -prod為角色名。
如果您不是E2帳戶:
以帳戶所有者登錄賬戶控製台.
單擊AWS帳戶選項卡。
請注意role ARN末尾的角色名稱testco-role.
步驟4:添加S3 IAM角色到EC2策略
在AWS控製台中,轉到我服務。
單擊角色選項卡。
單擊步驟3中記錄的角色。
在Permissions選項卡上,單擊策略。
點擊編輯政策.
修改策略,允許Databricks將步驟1中創建的IAM角色傳遞給Spark集群的EC2實例。下麵是一個新政策應該是什麼樣的例子。取代
< iam-role-for-s3-access >
使用步驟1中創建的角色:{“版本”:“2012-10-17”,“聲明”:[{“席德”:“Stmt1403287045000”,“效應”:“允許”,“行動”:[“ec2: AssociateDhcpOptions”,“ec2: AssociateIamInstanceProfile”,“ec2: AssociateRouteTable”,“ec2: AttachInternetGateway”,“ec2: AttachVolume”,“ec2: AuthorizeSecurityGroupEgress”,“ec2: AuthorizeSecurityGroupIngress”,“ec2: CancelSpotInstanceRequests”,“ec2: CreateDhcpOptions”,“ec2: CreateInternetGateway”,“ec2: CreateKeyPair”,“ec2: CreateRoute”,“ec2: CreateSecurityGroup”,“ec2: CreateSubnet”,“ec2: CreateTags”,“ec2: CreateVolume”,“ec2: CreateVpc”,“ec2: CreateVpcPeeringConnection”,“ec2: DeleteInternetGateway”,“ec2: DeleteKeyPair”,“ec2: DeleteRoute”,“ec2: DeleteRouteTable”,“ec2: DeleteSecurityGroup”,“ec2: DeleteSubnet”,“ec2: DeleteTags”,“ec2: DeleteVolume”,“ec2: DeleteVpc”,“ec2: DescribeAvailabilityZones”,“ec2: DescribeIamInstanceProfileAssociations”,“ec2: DescribeInstanceStatus”,“ec2: DescribeInstances”,“ec2: DescribePrefixLists”,“ec2: DescribeReservedInstancesOfferings”,“ec2: DescribeRouteTables”,“ec2: DescribeSecurityGroups”,“ec2: DescribeSpotInstanceRequests”,“ec2: DescribeSpotPriceHistory”,“ec2: DescribeSubnets”,“ec2: DescribeVolumes”,“ec2: DescribeVpcs”,“ec2: DetachInternetGateway”,“ec2: DisassociateIamInstanceProfile”,“ec2: ModifyVpcAttribute”,“ec2: ReplaceIamInstanceProfileAssociation”,“ec2: RequestSpotInstances”,“ec2: RevokeSecurityGroupEgress”,“ec2: RevokeSecurityGroupIngress”,“ec2: RunInstances”,“ec2: TerminateInstances”],“資源”:[“*”]},{“效應”:“允許”,“行動”:“我:PassRole”,“資源”:“攻擊:aws:我::< aws-account-id-databricks >:角色/ < iam-role-for-s3-access >”},{“效應”:“允許”,“行動”:[“我:CreateServiceLinkedRole”,“我:PutRolePolicy”],“資源”:“攻擊:aws:我::*:角色/ aws-service-role / spot.amazonaws.com/AWSServiceRoleForEC2Spot”,“條件”:{“StringLike”:{“我:AWSServiceName”:“spot.amazonaws.com”}}}]}
請注意
如果您的帳戶使用的是Databricks平台的E2版本,則可以省略Beplay体育安卓版本
ec2: CreateKeyPair
而且ec2: DeleteKeyPair
.如果您不確定您的帳戶版本,請聯係您的Databricks代表。添加信任關係聲明,以便策略可以使用Serverless計算諸如無服務器SQL倉庫等特性。
重要的
這一步確保如果您選擇配置Databricks SQL以使用該實例配置文件,它將工作與經典和Serverless倉庫.在使用無服務器倉庫之前,您必須首先接受帳戶的使用條款,並為您的工作空間啟用無服務器倉庫.
在
聲明
數組,將以下語句(JSON塊)添加到角色的信任策略中。使用以下文本,但替換
sts: ExternalId
用一個或多個數組數據庫工作空間id表示將使用此角色的工作空間。要在使用工作區時獲得工作區ID,請檢查URL。例如,在
https:// < databricks-instance > / ? o = 6280049833385130
,後麵的數字o =
是Databricks工作區ID。在這種情況下,工作區ID為6280049833385130
.要完成此步驟,必須為每個工作空間找到並複製工作空間ID號。重要的
做不改變政策的原則。使用下麵策略聲明中的準確值。這是至關重要的
本金。AWS
字段中繼續有值攻擊:aws:我::790110701330:/ serverless-customer-resource-role角色
在你的信任聲明中。它引用由Databricks管理的無服務器計算角色。不要更改這個值。在新語句中惟一需要更改的是工作區id列表。{“效應”:“允許”,“校長”:{“AWS”:[“攻擊:aws:我::790110701330:角色/ serverless-customer-resource-role”]},“行動”:“sts: AssumeRole”,“條件”:{“StringEquals”:{“sts: ExternalId”:[“databricks-serverless——< YOUR_WORKSPACE_ID1 >”,“databricks-serverless——< YOUR_WORKSPACE_ID2 >”]}}}
例如:
點擊審查政策.
點擊保存更改.
步驟5:將實例概要文件添加到Databricks
去管理控製台.
單擊實例配置文件選項卡。
單擊添加實例配置文件按鈕。出現一個對話框。
將步驟1中的實例概要文件ARN粘貼到實例配置文件ARN字段。
為Serverless SQL的實例配置文件中顯式指定與實例配置文件關聯的角色ARN,才能使用實例配置文件IAM角色ARN字段。
隻有在實例概要文件的關聯角色名稱(角色ARN中最後一個斜杠後的文本)和實例概要文件名稱(實例概要文件ARN中最後一個斜杠後的文本)不匹配時,這才是必需的步驟。要確認這是否適用於你:
在AWS控製台中,轉到IAM服務的角色頁簽.它列出了您帳戶中的IAM角色。
中的Databricks SQL admin設置中,單擊名稱與實例概要名稱匹配的角色數據安全部分實例配置文件字段,您在本節前麵找到的。
在摘要區域中,找到的角色是而且實例配置文件arn字段,看看是否匹配。
如果不匹配,則將角色ARN粘貼到IAM角色ARN字段。如果名稱匹配,則不需要設置IAM角色ARN字段。
隻有在你準備的時候IAM證書傳遞,選擇元實例配置文件財產。
Databricks驗證實例概要ARN在語法和語義上都是正確的。為了驗證語義的正確性,Databricks通過使用這個實例概要啟動一個集群來進行演練。這個演練中的任何失敗都會在UI中產生驗證錯誤。屬性,則實例概要文件的驗證可能失敗
tag-enforcement
策略,阻止您添加合法的實例概要文件。如果驗證失敗,而您仍然希望添加實例概要文件,請選擇跳過驗證複選框。點擊添加.
可選地指定可以使用實例概要啟動集群的用戶和組。
請注意
對象上的組直接分配實例概要文件組管理控製台標簽:
選擇要更新的組。
在實例配置文件選項卡上,單擊+添加實例配置文件到組.
在添加實例配置文件對話框中,單擊向下箭頭以顯示實例概要文件的下拉列表,並選擇要添加的實例概要文件。
單擊向下箭頭,隱藏下拉列表。
點擊添加.
步驟6:使用實例概要文件啟動集群
選擇或創建集群。
打開高級選項部分。
在實例選項卡中選擇實例概要文件實例配置文件下拉列表。這個下拉列表包含了集群可用的所有實例概要文件。
驗證您可以訪問S3桶,使用以下命令:
dbutils.fs.ls(“s3a: / / < s3-bucket-name > /”)
命令執行成功,執行步驟7。
警告
一旦集群啟動了實例概要文件,任何擁有實例概要文件的人附加的許可可以訪問該集群所控製的底層資源的角色。為了限製不必要的訪問,可以使用集群acl來限製附加權限。
步驟7:更新跨帳戶S3對象acl
如果您正在寫入同一AWS帳戶中的另一個S3 bucket,則可以在此停止。
當您寫入跨帳戶S3 bucket中的文件時,默認設置隻允許您訪問該文件。假設您將把文件寫入自己的存儲桶中,這個默認設置可以保護您的數據。允許桶的主人要訪問桶中的所有對象,必須添加BucketOwnerFullControl
由Databricks寫入的對象的ACL。
在火花2 .在集群詳情頁簽中,設置以下屬性:
spark.hadoop.fs.s3a.acl.default BucketOwnerFullControl
檢查S3桶是否可以寫入數據,並檢查權限是否允許其他工具和用戶訪問Databricks寫入的內容。
使用Terraform進行自動化配置
你可以使用Databricks Terraform提供商自動配置AWS IAM角色及其集群附件。以下是相關配置的示例,為簡潔起見,省略了其他資源:
資源"aws_iam_role" "data_role" {name = "${var. conf "prefix}-first-ec2s3" description = "(${var.prefix}) EC2 Assume Role S3訪問角色" assume_role_policy = data.aws_iam_policy_document.assume_role_for_ec2. prefix}-first-ec2s3"Json標簽= var.tags}資源"aws_iam_instance_profile" "this" {name = "${var. tags}Prefix}-first-profile" role = aws_iam_role.data_role.name} resource "databricks_instance_profile" "ds" {instance_profile_arn = aws_iam_instance_profile.this. ds" {instance_profile_arn = aws_iam_instance_profile.this. name "arn} data "databricks_node_type" " minimal " {local_disk = true} data "databricks_spark_version" "latest_lts" {long_term_support = true} resource "databricks_cluster" "shared_autoscaling" {cluster_name = "Shared Autoscaling" spark_version = data.databricks_spark_version.latest_lts. "Id node_type_id = data.databricks_node_type. least。Id autotermination_minutes = 20 autoscale {min_workers = 1 max_workers = 50} aws_attributes {instance_profile_arn = databricks_instance_profile.ds。Id}}
編輯實例概要注冊以指定不同的角色ARN
對於已經創建的實例概要文件,稍後可以編輯它們,但隻能指定不同於從實例概要文件名稱推斷出來的IAM角色ARN。此步驟是Databricks SQL Serverless使用實例概要文件所必需的角色名(角色ARN中最後一個斜杠後麵的文本)和實例配置文件名稱(實例概要文件ARN中最後一個斜杠後麵的文本)不匹配。相關信息請參見啟用無服務器SQL倉庫.
去管理控製台.
單擊實例配置文件選項卡。
單擊要編輯的實例概要文件的名稱。
點擊編輯.出現一個對話框。
編輯IAM角色ARN字段並粘貼與您的實例配置文件相關聯的角色ARN。作為管理員,您可以從AWS控製台獲得這個值。
點擊保存.
常見問題(FAQ)
在創建集群時,我沒有看到為我的訪問配置了任何實例概要文件。
如果您是管理員,請轉到管理控製台,並按照本文中的說明進行操作添加實例概要文件.否則,請聯係管理員,他可以使用本文中的說明添加實例概要。