我需要将AWS Glue(帐户:PROD)写入另一个帐户的S3 Bucket(帐户:DEV)
根据http://docs.aws.amazon.com/glue/latest/dg/access-control-overview.html
其他服务(如Amazon S3)也支持基于资源的权限策略。例如,您可以将策略附加到要管理的S3存储桶 访问该存储桶的权限。 AWS Glue不支持基于资源的政策。
...这意味着我无法做arn:aws:s3::DEV-Account:S3-Bucket/*
我尝试使用PROD在DEV帐户上创建Trusted entity
,并附加了一个策略集来访问DEV帐户上的s3存储桶。
我该怎么做?
答案 0 :(得分:2)
我们遇到了同样的问题,我们通过将这些问题添加到我们的DEV存储桶策略中来解决问题:
{
"Sid": "SID",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::[PROD-ACCOUNT-ID]:role/[PROD-GLUE-ROLE]"
},
"Action": [
"s3:Get*",
"s3:Put*",
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:ListBucketVersions",
"s3:ListMultipartUploadParts"
],
"Resource": [
"arn:aws:s3:::[DEV-BUCKET]",
"arn:aws:s3:::[DEV-BUCKET]/*"
]
}
这是PROD Glue角色([PROD-GLUE-ROLE])帐户政策:
{
"Action": [
"s3:Get*",
"s3:List*"
"s3:Put*"
],
"Resource": [
"arn:aws:s3:::[DEV-BUCKET]*"
],
"Effect": "Allow"
}
之后,您应该可以使用PROD帐户中的PROD角色从DEV存储桶读取和写入数据:
data_frame = glue_context.create_dynamic_frame_from_options(
connection_type='s3',
connection_options={
'paths':'s3://[DEV-BUCKET]/...'
},
format='json'
)
希望这有帮助
答案 1 :(得分:1)
只是Glue现在支持资源级别策略的更新,但当前仅适用于DataCatalog资源。 https://docs.aws.amazon.com/glue/latest/dg/glue-resource-policies.html
答案 2 :(得分:0)
我们能够通过让GLUE Job为其创建的对象添加ACL并上传到S3存储桶来解决这个问题
ACL = {
u'Owner': {u'DisplayName': 'prod', u'ID': 'XXXX'
},
u'Grants': [{
u 'Grantee': {
u 'Type': 'CanonicalUser',
u 'DisplayName': 'prod',
u 'ID': 'XXXXX'
},
u 'Permission': 'FULL_CONTROL'
},
{
u 'Grantee': {
u 'Type': 'CanonicalUser',
u 'DisplayName': 'dev',
u 'ID': 'YYYY'
},
u 'Permission': 'READ'
},
{
u 'Grantee': {
u 'Type': 'CanonicalUser',
u 'DisplayName': 'dev',
u 'ID': 'YYYY'
},
u 'Permission': 'READ_ACP'
},
{
u 'Grantee': {
u 'Type': 'CanonicalUser',
u 'DisplayName': 'dev',
u 'ID': 'YYYY'
},
u 'Permission': 'WRITE_ACP'
}
]
response = client.put_object_acl(Bucket='BUCKET', Key='OBJECT', AccessControlPolicy=ACL)