安全訪問S3 bucket跨帳戶使用實例配置文件和一個AssumeRole政策

在AWS您可以設置cross-account訪問,所以計算在一個帳戶可以訪問一個水桶在另一個帳戶。授權訪問的一種方法,描述了安全訪問S3 bucket使用實例配置文件是給一個帳戶直接訪問一桶在另一個帳戶。授權訪問一桶的另一種方法是讓一個帳戶假設一個角色在另一個帳戶。

考慮AWS帳戶帳戶ID< deployment-acct-id >與帳戶ID和AWS帳戶B< bucket-owner-acct-id >。賬戶時使用簽署了磚:EC2服務和DBFS根桶是由這個帳戶管理。帳戶B有一桶< s3-bucket-name >

本文提供了配置賬戶使用的步驟AWS AssumeRole行動來訪問S3中的文件< s3-bucket-name >作為一個角色在帳戶B .啟用這個訪問您執行配置賬戶a和賬戶B和磚管理控製台。你也必須配置一個磚集群或添加一個配置的筆記本,訪問桶。

需求

  • AWS管理員訪問我角色和策略的AWS帳戶磚部署和S3 bucket的AWS帳戶。

  • 目標S3 bucket。

  • 如果你打算啟用加密S3 bucket,您必須添加實例配置文件作為一個關鍵用戶公裏的關鍵配置中提供。看到配置公裏加密s3a: / /路徑

步驟1:在帳戶、創建角色MyRoleA和附加策略

  1. 創建一個角色名字MyRoleA在帳戶的實例配置文件在攻擊攻擊:aws:我::< deployment-acct-id >: instance-profile / MyRoleA

  2. 創建一個政策,說在帳戶可以假設MyRoleB在帳戶b連接MyRoleA。點擊內聯政策粘貼的政策:

    {“版本”:“2012-10-17”,“聲明”:({“席德”:“Stmt1487884001000”,“效應”:“允許”,“行動”:(“sts: AssumeRole”),“資源”:(“攻擊:aws:我::< bucket-owner-acct-id >: / MyRoleB”角色]}]}
  3. 更新賬戶的政策作用創建集群,添加我:PassRole行動MyRoleA:

    {“版本”:“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:我::< deployment-acct-id >: / MyRoleA”角色]}]}

    請注意

    如果你的帳戶是E2磚平台的版本,你可以省略Beplay体育安卓版本ec2: CreateKeyPairec2: DeleteKeyPair。如果你不確定你的賬戶的版本,請聯係您的磚的代表。

步驟2:在帳戶B,創建角色MyRoleB和附加策略

  1. 創建一個角色名字MyRoleB。的角色是攻擊:aws:我::< bucket-owner-acct-id >: / MyRoleB角色

  2. 編輯角色的信任關係MyRoleB允許一個角色MyRoleA在賬戶承擔的角色賬戶選擇我> > MyRoleB >信任關係>編輯角色的信任關係並輸入:

    {“版本”:“2012-10-17”,“聲明”:({“效應”:“允許”,“校長”:{“AWS”:(“攻擊:aws:我::< deployment-acct-id >: / MyRoleA”角色]},“行動”:“sts: AssumeRole”}]}
  3. 創建一個桶桶政策< s3-bucket-name >。選擇S3 >< s3-bucket-name >>權限>鬥政策。包括角色(主要)MyRoleB桶的政策:

    {“版本”:“2012-10-17”,“聲明”:({“效應”:“允許”,“校長”:{“AWS”:(“攻擊:aws:我::< bucket-owner-acct-id >: / MyRoleB”角色]},“行動”:(“s3: GetBucketLocation”,“s3: ListBucket”),“資源”:“攻擊:aws: s3::: < s3-bucket-name >”},{“效應”:“允許”,“校長”:{“AWS”:(“攻擊:aws:我::< bucket-owner-acct-id >: / MyRoleB”角色]},“行動”:(“s3: propertynames”,“s3: PutObjectAcl”,“s3: GetObject”,“s3: DeleteObject”),“資源”:“攻擊:aws: s3::: < s3-bucket-name > / *”}]}

提示

如果您被提示主要錯誤,確保你隻修改信任關係政策。

步驟3:添加MyRoleA磚的工作空間

磚管理控製台,添加實例配置文件MyRoleA磚使用MyRoleA實例配置文件是攻擊:aws:我::< deployment-acct-id >: instance-profile / MyRoleA從步驟1。

第四步:配置集群MyRoleA

  1. 選擇或創建一個集群。

  2. 打開高級選項部分。

  3. 實例選項卡上,選擇實例配置文件MyRoleA

  4. 火花選項卡,設置憑據提供程序和角色是假定的角色MyRoleB:

    請注意

    磚運行時7.3 LTS以上支持配置S3A文件係統使用開源Hadoop選項。您可以配置全局屬性和一桶屬性。

    設置它在全球所有桶:

    fs.s3a.aws.credentials。提供者org.apache.hadoop.fs.s3a.auth。AssumedRoleCredentialProvider fs.s3a.assumed.role。在攻擊攻擊:aws:我::< bucket-owner-account-id >: / MyRoleB角色

    將其設置為一個特定的桶:

    fs.s3a.bucket。< s3-bucket-name > .aws.credentials。提供者org.apache.hadoop.fs.s3a.auth。AssumedRoleCredentialProvider fs.s3a.bucket。< s3-bucket-name > .assumed.role。在攻擊攻擊:aws:我::< bucket-owner-account-id >: / MyRoleB角色
  5. 啟動集群。

  6. 把一個筆記本集群。

  7. 驗證您可以訪問< s3-bucket-name >通過運行下麵的命令:

    dbutilsfsls(“s3a: / / < s3-bucket-name > /”)

第五步:山與AssumeRole cross-account桶

為了使用保險絲,你必須掛載你的桶。這一步是可選的,如果你不需要支持的功能融合。

看到山一桶使用實例配置文件與AssumeRole政策

自動配置使用起程拓殖

您可以使用磚起程拓殖的提供者自動配置集群AWS我角色及其附件。

如這個例子所示配置,首先定義兩個變量:

變量“前綴”{默認= " changeme "}變量={描述“databricks_account_id帳戶ID。你可以讓你的賬戶ID的左下角賬戶控製台。看到https://accounts.cloud.www.eheci.com "}

創建一個桶使用aws_s3_bucket:

資源”aws_s3_bucket”“ds”{桶= " $ {var。前綴}- ds”acl = "私人"版本{啟用= false} force_destroy = = true標簽合並(var。標簽,{Name = " $ {var。前綴}- ds "})}

創建一個數據訪問使用我的角色aws_iam_role:

數據“aws_iam_policy_document”“assume_role_for_ec2”{聲明{效果=“允許”行動= (“sts: AssumeRole”)校長={標識符(“ec2.amazonaws.com”)類型=“服務”}}}資源“aws_iam_role data_role“{name = " $ {var。前綴}-first-ec2s3”描述= " ($ {var.prefix}) EC2假設為S3訪問“assume_role_policy = data.aws_iam_policy_document.assume_role_for_ec2角色作用。json標簽= var.tags}

創建一個桶的政策databricks_aws_bucket_policy定義了完全訪問這個桶。內聯S3 bucket政策適用於新桶aws_s3_bucket_policy:

數據“databricks_aws_bucket_policy”“ds”{提供者=磚。多工作站係統full_access_role = aws_iam_role.data_role。在攻擊桶= aws_s3_bucket.ds。桶}資源“aws_s3_bucket_policy”“ds”{桶= aws_s3_bucket.ds。id = data.databricks_aws_bucket_policy.ds政策。json}

創建一個cross-account政策允許磚通過一係列數據使用一個角色aws_iam_policy:

數據“databricks_aws_crossaccount_policy”“這”{pass_roles = [aws_iam_role.data_role。”攻擊)}資源”aws_iam_policy“cross_account_policy“{name = " $ {var。前綴}= data.databricks_aws_crossaccount_policy.this -crossaccount-iam-policy”政策。json}

允許磚執行操作在你的帳戶通過使用一個配置一個信任關係aws_iam_role_policy_attachment。格蘭特磚完全訪問VPC資源和附加cross-account政策cross-account角色:

數據“databricks_aws_assume_role_policy”“這”{external_id = var.databricks_account_id}資源“aws_iam_role cross_account“{name = " $ {var。前綴}-crossaccount-iam-role”assume_role_policy = data.databricks_aws_assume_role_policy.this。json描述= "授予VPC磚完全訪問的資源”}資源“aws_iam_role_policy_attachment”“cross_account”{policy_arn = aws_iam_policy.cross_account_policy。在攻擊的作用= aws_iam_role.cross_account.name}

注冊cross-account作用E2工作區設置:

資源“databricks_mws_credentials””這個“{提供者=磚。多工作站係統account_id = var.databricks_account_id credentials_name = " $ {var。前綴}-creds”role_arn = aws_iam_role.cross_account。在攻擊}

創建工作區後,注冊您的數據的作用aws_iam_instance_profile作為databricks_instance_profile:

資源“aws_iam_instance_profile””這個“{name = " $ {var。前綴}-first-profile”角色= aws_iam_role.data_role.name}資源”databricks_instance_profile ds”{instance_profile_arn = aws_iam_instance_profile.this。在攻擊}

最後一步,創建一個/ mnt /實驗指定掛載點和一個集群實例簡介:

資源“databricks_aws_s3_mount””這個“{instance_profile = databricks_instance_profile.ds。id s3_bucket_name = aws_s3_bucket.this。桶mount_name = "實驗"}數據“databricks_node_type”“最小”{local_disk = true}數據“databricks_spark_version”“latest_lts”{long_term_support = true}資源“databricks_cluster”“shared_autoscaling”{cluster_name =“共享自動定量”spark_version = data.databricks_spark_version.latest_lts。id node_type_id = data.databricks_node_type.smallest。id autotermination_minutes = 20自動定量{min_workers = 1 max_workers = 50} aws_attributes {instance_profile_arn = databricks_instance_profile.ds。id}}