AWS Glue:如何写入 S3 跨账户

问题描述 投票:0回答:1

我的帐户(帐户本地)中有一个 Glue 作业,我需要将 ETL 输出写入另一个帐户(帐户远程)。该作业使用本地账户中的 IAM 角色运行:

Glue-job-role

Account-remote 中有一个名为

External-clients-role
的 IAM 角色,该角色具有为 S3 资源操作提供权限的策略,例如:Account-remote 中的 S3 存储桶的
s3:PutObject
s3:GetObject
等。

此外,在

External-clients-role
的信任关系中,添加本地胶水作业角色
Glue-job-role
作为委托人,具有
sts:AssumeRole
动作,如下:

//External-client-role trust relationship:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::<account_number>:role/Glue-Job-Role"
                ]
            },
            "Action": "sts:AssumeRole",
            "Condition": {}
        }
    ]
}

即,预期 Account-remote 的客户端将承担该角色,并使用该角色写入 S3 存储桶。然而,我不知道如何承担这个角色。

查询:

由于

Glue-job
使用本地 IAM 角色运行 ETL 步骤,是否可以假定
External-clients-role
仅用于写入远程 S3 的部分?如果是,该怎么做?还有其他办法吗?

我尝试查看有关如何承担远程帐户角色的资源,但无法找到好的线索。

apache-spark amazon-s3 etl aws-glue identity-management
1个回答
0
投票

对于这种情况,您应该使用存储桶策略。

  1. 将以下存储桶策略添加到远程帐户上的存储桶:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowGlueAccess",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<AWS-Local-account-id>:root"
      },
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::<bucket-name>",
        "arn:aws:s3:::<bucket-name>/*"
      ]
    }
  ]
}
  1. 授予 AWS Glue 对此存储桶的访问权限,通常使用分配给任务的 IAM 角色。
  2. 重复使用当前的 Glue 任务代码,因为您不需要更改任何内容。

这假设您可以创建存储桶策略,这可能不正确,但同时它是最简单的方法。


您尝试过的第二种方法是手动承担角色并覆盖凭据,但是因为我还没有测试过它,并且我不确定在读取数据后是否可以覆盖凭据从数据源,我只是复制粘贴链接:

https://tmmr.uk/post/aws-glue-assume-temporary-credentials/

© www.soinside.com 2019 - 2024. All rights reserved.