让 AWS Glue 写入另一个 AWS 账户中的 S3 存储桶
Getting AWS Glue to write to an S3 bucket in another AWS account
我需要 AWS Glue(账户:PROD)写入另一个账户(账户:DEV)上的 S3 存储桶
根据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 存储桶。
我该怎么做?
我们遇到了同样的问题,我们通过将这些添加到我们的 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'
)
希望对您有所帮助
我们可以通过让 GLUE 作业向它正在创建并上传到 S3 存储桶的对象添加 ACL 来解决这个问题
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)
只是 Glue 现在支持资源级别策略的更新,但目前仅适用于 DataCatalog 资源。
https://docs.aws.amazon.com/glue/latest/dg/glue-resource-policies.html
我需要 AWS Glue(账户:PROD)写入另一个账户(账户:DEV)上的 S3 存储桶
根据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 存储桶。
我该怎么做?
我们遇到了同样的问题,我们通过将这些添加到我们的 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'
)
希望对您有所帮助
我们可以通过让 GLUE 作业向它正在创建并上传到 S3 存储桶的对象添加 ACL 来解决这个问题
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)
只是 Glue 现在支持资源级别策略的更新,但目前仅适用于 DataCatalog 资源。 https://docs.aws.amazon.com/glue/latest/dg/glue-resource-policies.html