【问题标题】:Access Denied when querying in Athena for data in S3 bucket in another AWS account在 Athena 中查询另一个 AWS 账户的 S3 存储桶中的数据时访问被拒绝
【发布时间】:2020-04-09 21:40:27
【问题描述】:

我想使用 Glue Crawler 从 S3 存储桶中抓取数据。此 S3 存储桶位于另一个 AWS 账户中。我们打电话给账户 A。我的 Glue Crawler 在账户 B 中。

我在账户 B 中创建了一个角色并将其命名为 AWSGlueServiceRole-Reporting 我附上了以下政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "BucketAccess",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::AccountAbucketname"
            ]
        },
        {
            "Sid": "ObjectAccess",
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::AccountABucketName/Foldername/*"
            ]
        }
    ]
}

还有AWSGlueServiceRole policy

在拥有 S3 存储桶的账户 A 中,我附加了以下存储桶策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {

      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::AccountB:role/AWSGlueServiceRoleReporting”
      },
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation"
      ],
      "Resource": "arn:aws:s3:::AccountABucketName"
    },
    {

      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::AccountB:role/AWSGlueServiceRoleReporting”
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::AccountABucketName/FolderName/*"
    }
  ]
}

我能够在账户 B 中的这个 S3 存储桶上运行 Glue Crawler,它创建了 Glue Tables。但是当我尝试在 Athena 中查询它们时,我得到了拒绝访问。

谁能帮我在 Athena 中查询它??

【问题讨论】:

    标签: amazon-web-services amazon-s3 web-crawler aws-glue amazon-athena


    【解决方案1】:

    当 Amazon Athena 查询运行时,它们使用运行查询的用户的权限

    因此,您需要修改账户 A 中存储桶上的存储桶策略,以允许 在 Amazon Athena 中运行查询的任何人进行访问:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
    
          "Effect": "Allow",
          "Principal": {
            "AWS": [
                "arn:aws:iam::AccountB:role/AWSGlueServiceRoleReporting",
                "arn:aws:iam::AccountB:user/username"
            ]
          },
          "Action": [
            "s3:ListBucket",
            "s3:GetBucketLocation"
          ],
          "Resource": "arn:aws:s3:::AccountABucketName"
        },
        {
    
          "Effect": "Allow",
          "Principal": {
            "AWS": [
                "arn:aws:iam::AccountB:role/AWSGlueServiceRoleReporting",
                "arn:aws:iam::AccountB:user/username"
            ]
          },
          "Action": "s3:GetObject",
          "Resource": "arn:aws:s3:::AccountABucketName/FolderName/*"
        }
      ]
    }
    

    用户还需要足够的 S3 权限(在其 IAM 用户上)才能访问该 S3 存储桶。 (例如,在 S3 存储桶上拥有 s3:ListBuckets3:GetObject。他们可能已经拥有这个,但值得一提。)

    这与使用 IAM 角色的 AWS Glue 不同。 Athena 不接受 IAM 角色来运行查询。

    【讨论】:

    • 好的,我是帐户 B 的管理员,并以管理员身份运行 Athena 查询。那么应该在存储桶策略中添加什么?
    • 就像策略授予对 Glue 角色的访问权限一样,存储桶策略应授予您的 IAM 用户访问权限(通过 ARN)。您可能需要s3:ListBuckets3:GetObject 权限。我在答案中添加了一个示例。
    猜你喜欢
    • 2018-05-19
    • 2020-06-13
    • 2019-02-03
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    相关资源
    最近更新 更多