我有一个实例,需要从两个不同的帐户s3中读取数据。
我对两个帐户都具有控制台访问权限,因此现在我需要配置存储桶策略,以允许实例从存储桶 dataaccountlogs 和 userlogs 中读取s3数据,而我的实例是在 UserAccount 中运行。
我需要通过命令行以及使用火花作业来访问这两个存储桶。
答案 0 :(得分:1)
您将需要UserAccount中的一个角色,该角色将用于访问提到的存储桶,例如RoleA。角色应该具有必需的S3操作权限。
然后,您将能够为每个存储桶配置存储桶策略:
对于 DataAccount :
{
"Version": "2012-10-17",
"Id": "Policy1",
"Statement": [
{
"Sid": "test1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::DataAccount:role/RoleA"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::dataaccountlogs",
"arn:aws:s3:::dataaccountlogs/*"
]
}
]
}
对于 UserAccount :
{
"Version": "2012-10-17",
"Id": "Policy1",
"Statement": [
{
"Sid": "test1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::DataAccount:role/RoleA"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::userlogs",
"arn:aws:s3:::userlogs/*"
]
}
]
}
用于从命令行访问它们:
您首先需要设置AWS CLI工具: https://docs.aws.amazon.com/polly/latest/dg/setup-aws-cli.html
然后,您将需要配置一个配置文件以使用您的角色。 首先,您需要为用户登录创建个人资料:
aws配置--profile YourProfileAlias
并按照说明设置凭据。
然后,您将需要编辑配置并添加角色的配置文件: 〜/ .aws / config
最后添加一个块:
[profile YourRoleProfileName]
role_arn = arn:aws:iam::DataAccount:role/RoleA
source_profile = YourProfileAlias
此后,您将能够使用 aws s3api ... --profile YourRoleProfileName 代表创建的角色访问两个存储桶。
要通过Spark访问:
注意:为此,您应严格使用s3协议,而不是s3a。还有一些限制,您可以在这里找到: https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-s3-optimized-committer.html
spark.hadoop.fs.s3a.aws.credentials.provider = “ org.apache.hadoop.fs.s3a.AssumedRoleCredentialProvider,org.apache.hadoop.fs.s3a.auth.AssumedRoleCredentialProvider”
并配置要使用的角色
spark.hadoop.fs.s3a.assumed.role.arn = arn:aws:iam :: DataAccount:role / RoleA
由于EMR提交者有各种局限性,因此这种方式现在更为通用。您可以在Hadoop文档中找到有关配置的更多信息: https://hadoop.apache.org/docs/r3.1.1/hadoop-aws/tools/hadoop-aws/assumed_roles.html