我的帐户(帐户本地)中有一个 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 的部分?如果是,该怎么做?还有其他办法吗?
我尝试查看有关如何承担远程帐户角色的资源,但无法找到好的线索。
对于这种情况,您应该使用存储桶策略。
{
"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>/*"
]
}
]
}
这假设您可以创建存储桶策略,这可能不正确,但同时它是最简单的方法。
您尝试过的第二种方法是手动承担角色并覆盖凭据,但是因为我还没有测试过它,并且我不确定在读取数据后是否可以覆盖凭据从数据源,我只是复制粘贴链接: