首页 文章

如何让AWS Glue抓取工具在另一个AWS账户中担任角色,以从该账户的S3存储桶中获取数据?

提问于
浏览
0

我需要在属于第三方的一系列AWS账户的S3存储桶中获取一些CSV数据文件;其他帐户的所有者在每个帐户中创建了一个角色,授予我访问这些文件的权限;我可以使用AWS Web控制台(登录到我自己的帐户)切换到每个角色并获取文件 . 我一次一个,切换到每个帐户的角色,然后获取该帐户的文件,然后转到下一个帐户并获取这些文件,依此类推 .

我想自动化这个过程 .

看起来AWS Glue可以做到这一点,但我遇到了权限问题 .

我需要做的是创建权限,以便AWS Glue抓取工具可以切换到正确的角色(属于其他每个AWS账户),并从这些账户的S3存储桶中获取数据文件 .

这是可能的,如果可以,我该如何设置它? (例如,需要哪些IAM角色/权限?)如果可能,我宁愿将更改限制在我自己的帐户中,而不是要求其他帐户所有者自行更改 .

如果使用Glue不可能,还有其他一些简单的方法可以使用不同的AWS服务吗?

谢谢!

(我已经进行了一系列的尝试,但我一直都弄错了 - 我的尝试远远不对,我在这里发布细节没有意义) .

3 回答

  • 0

    使用AWS CLI,您可以为要切换到的每个角色创建命名配置文件,然后从CLI中引用它们 . 然后,您可以链接这些调用,引用每个角色的命名配置文件,并将它们包含在脚本中以自动执行该过程 .

    Switching to an IAM Role (AWS Command Line Interface)

    角色指定一组可用于访问所需AWS资源的权限 . 从这个意义上说,它类似于AWS身份和访问管理(IAM)中的用户 . 以用户身份登录时,您将获得一组特定的权限 . 但是,您不登录角色,但以用户身份登录后,您可以切换到角色 . 这会暂时保留原始用户权限,而是为您提供分配给该角色的权限 . 该角色可以在您自己的帐户或任何其他AWS账户中 . 有关角色,其好处以及如何创建和配置角色的更多信息,请参阅IAM角色和创建IAM角色 .

  • 1

    您可以使用AWS lambda和Cloudwatch Rules实现此目的 .

    您可以创建一个附加了角色的lambda函数,让我们调用此角色 - Role A ,具体取决于您可以为每个帐户创建1个函数的帐户数量,并在cloudwatch中创建一个规则来触发所有功能,或者您可以创建1所有帐户的功能(谨慎对待AWS Lambda的limitations) .

    正在创建 Role A

    • 使用以下策略创建IAM角色 (Role 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
            }
        ]
    }
    

    此外,您还需要确保 Role A 的信任关系政策文档中存在与所有帐户的信任关系 .

    • Role A 附加到将要运行的lambda函数 . 您可以使用serverless进行开发 . 现在你的lambda函数附加了 Role A ,并且 Role A 对其他帐户中创建的角色具有 sts:AssumeRole 权限 .

    • 假设您已在lambda代码中为1个帐户创建了1个函数,则必须先使用STS切换到其他帐户的角色并获取临时凭据,然后在获取所需数据之前将这些凭据传递给S3选项 .

    如果您为所有帐户创建了1个函数,则可以在数组中使用角色ARN并对其进行迭代,再次执行此操作时请注意AWS lambda的限制 .

  • 1

    是的,您可以通过以下步骤使用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/*"
        }
      ]
    }
    
    • 最后,在您的帐户中创建胶水抓取工具和作业(与目标跨帐户S3存储桶位于相同的区域),这样可以将来自跨帐户S3的数据存储到您的帐户 .

相关问题