我需要在属于第三方的一系列AWS账户的S3存储桶中获取一些CSV数据文件;其他帐户的所有者在每个帐户中创建了一个角色,授予我访问这些文件的权限;我可以使用AWS Web控制台(登录到我自己的帐户)切换到每个角色并获取文件。我一次一个,切换到每个帐户的角色,然后获取该帐户的文件,然后转到下一个帐户并获取这些文件,依此类推。
我想自动化这个过程。
看起来AWS Glue可以做到这一点,但我的权限有问题。
我需要做的是创建权限,以便AWS Glue抓取工具可以切换到正确的角色(属于其他每个AWS账户),并从这些账户的S3存储桶中获取数据文件。
这可能吗?如果可以,我该如何设置? (例如,需要哪些IAM角色/权限?)如果可能,我宁愿将更改限制在我自己的帐户中,而不是要求其他帐户所有者自行更改。
如果使用Glue无法实现,是否还有其他一些简单的方法可以使用其他AWS服务?
谢谢!
(我已经进行了一系列的尝试,但我一直都错了 - 我的尝试远远不对,我在这里发布详细信息没有意义。)
答案 0 :(得分:1)
使用AWS CLI,您可以为要切换到的每个角色创建命名配置文件,然后从CLI中引用它们。然后,您可以链接这些调用,引用每个角色的命名配置文件,并将它们包含在脚本中以自动执行该过程。
来自Switching to an IAM Role (AWS Command Line Interface)
角色指定可用于访问AWS的一组权限 您需要的资源。从这个意义上说,它类似于AWS中的用户 身份和访问管理(IAM)。当您以用户身份登录时,您 获取一组特定的权限。但是,您没有登录 角色,但一旦以用户身份登录,您就可以切换到角色。这个 暂时保留原始用户权限,而不是 为您提供分配给角色的权限。角色可以在 您自己的帐户或任何其他AWS账户。有关的更多信息 角色,它们的好处以及如何创建和配置它们,请参阅IAM 角色和创建IAM角色。
答案 1 :(得分:1)
您可以使用AWS lambda和Cloudwatch Rules实现此目的。
您可以创建一个附加了角色的lambda函数,让我们调用此角色 - 角色A ,具体取决于您可以为每个帐户创建1个函数的帐户数量并创建一个规则在cloudwatch中触发所有功能,或者您可以为所有帐户创建1个功能(谨慎对待AWS Lambda的limitations)。
创建角色A
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1509358389000", "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": [ "", "", .... " ]// all the IAM Role ARN's from the accounts containing the data or if you have 1 function for each account you can opt to have separate roles } ] }
此外,您还需要确保角色A 的信任关系政策文档中存在与所有帐户的信任关系。
将角色A 附加到您将要运行的lambda函数。您可以使用serverless进行开发。
现在,您的lambda函数附加了角色A ,而角色A 对其他帐户中创建的角色具有sts:AssumeRole
权限。
假设您已在lambda代码中为1个帐户创建了1个函数,则必须先使用STS切换到其他帐户的角色并获取临时凭据并通过在获取所需数据之前,这些选项为S3选项。
如果您为所有帐户创建了1个函数,则可以在阵列中拥有角色ARN并对其进行迭代,再次执行此操作时请注意AWS lambda的限制。
答案 2 :(得分:0)
是的,您可以按照以下步骤使用Glue自动化您的方案:
在您的AWS账户中创建IAM角色。此角色的名称必须以AWSGlueServiceRole开头,但您可以附加任何所需内容。为Glue添加信任关系,例如:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "glue.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
将两个IAM策略附加到您的IAM角色。名为AWSGlueServiceRole的AWS托管策略和一个自定义策略,提供所有目标跨账户S3存储桶所需的访问权限,例如:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BucketAccess",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::examplebucket1",
"arn:aws:s3:::examplebucket2",
"arn:aws:s3:::examplebucket3"
]
},
{
"Sid": "ObjectAccess",
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::examplebucket1/*",
"arn:aws:s3:::examplebucket2/*",
"arn:aws:s3:::examplebucket3/*"
]
}
]
}
将S3存储桶策略添加到每个目标存储桶,使您的IAM角色具有您在帐户中授予的相同S3访问权限,例如:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BucketAccess",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::your_account_number:role/AWSGlueServiceRoleDefault"
},
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::examplebucket1"
},
{
"Sid": "ObjectAccess",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::your_account_number:role/AWSGlueServiceRoleDefault"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::examplebucket1/*"
}
]
}