访问cross-account S3 bucket AssumeRole政策

在AWS您可以设置cross-account访问,所以计算在一个帐户可以访问一个水桶在另一个帐户。授权访问的一种方法,描述了S3访问配置实例配置文件是给一个帐户直接访问一桶在另一个帐户。授权访问一桶的另一种方法是让一个帐户假设一个角色在另一个帐户。

考虑AWS帐户帐户ID< deployment-acct-id >与帐户ID和AWS帐户B< bucket-owner-acct-id >。账户时使用签署了砖:EC2服务和砖文件系统的根桶是由这个帐户管理。帐户B有一桶< s3-bucket-name >

本文提供了配置账户使用的步骤AWS AssumeRole行动来访问S3中的文件< s3-bucket-name >作为一个角色在帐户B .启用这个访问您执行配置账户a和账户B和砖管理设置。你也必须配置一个砖集群或添加一个配置的笔记本,访问桶。

需求

  • AWS管理员访问我角色和策略的AWS帐户砖部署和S3 bucket的AWS帐户。

  • 目标S3 bucket。

  • 如果你打算启用加密S3 bucket,您必须添加实例配置文件作为一个关键用户公里的关键配置中提供。看到配置加密与公里S3

步骤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砖平台的版本,你可以省略bob体育客户端下载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桶

你可以挂载cross-account桶使用相对文件路径来访问远程数据。看到山一桶使用实例配置文件与AssumeRole政策

自动配置使用起程拓殖

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

如这个例子所示配置,首先定义两个变量:

变量“前缀”{默认= " changeme "}变量={描述“databricks_account_id帐户ID。你可以让你的账户ID的左下角账户控制台。看到https://accounts.cloud.www.neidfyre.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}}