Доступ запрещен при запросе в Афине данных в корзине S3 в другой учетной записи AWS - PullRequest
0 голосов
/ 10 апреля 2020

Я хочу использовать Glue Crawler для сканирования данных из корзины S3. Эта корзина S3 находится в другой AWS учетной записи. Давайте назовем это Учетная запись A. Мой сканер клея находится в Учетной записи 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.

В учетной записи A, в которой есть корзина S3, я прикрепил следующую политику для корзины:

{
  "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 ведро, и он создал таблицы склеивания. Но когда я пытаюсь запросить их в Афине, я получаю отказ в доступе.

Кто-нибудь может мне помочь, как запросить его в Афине ??

1 Ответ

1 голос
/ 10 апреля 2020

При выполнении запросов Amazon Athena они используют разрешения пользователя, выполняющего запрос .

Поэтому вам необходимо изменить политику Bucket в корзине в учетной записи 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:ListBucket и s3:GetObject на корзинах S3. Они, вероятно, уже имеют это, но стоит упомянуть.)

Это отличается от AWS Glue, который использует роль IAM. Афина не принимает роль IAM для выполнения запросов.

...