AccessDenied на AWS Афина - PullRequest
       18

AccessDenied на AWS Афина

0 голосов
/ 26 июня 2019

Когда я выполняю простой запрос * выбора в AWS Athena, я получаю ошибку об отказе в доступе.

Запрос:

select * from sensor.sensordata

Схема:

CREATE EXTERNAL TABLE sensor.sensordata (
  sig string,
  `data` struct<`iat`:timestamp,
  `sub`:string,
  tMax: float,
  tMin: float,
  `tAvg`: float,
  `hAvg`: float,
  hMin: float,
  hMax: float
  >
) 
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://mybucket/data/';

Ошибка, которую я получаю (сокращенные идентификаторы), заключается в том, что файл не может быть прочитан:

com.amazonaws.services.s3.model.AmazonS3Exception: 
Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; 
Request ID: B0048904...; S3 Extended Request ID: CKchfW8...), S3 Extended Request ID: 
CKchfW8... (Path: s3://mybucket/data/sensor=01235EFD886C7DF1EE/t=1561513414.json)

Однако я даже объявил политику корзины для всех:

{
  "Version": "2008-10-17",
  "Statement": [
    {
        "Effect": "Allow",
        "Principal": "*",
        "Action": [
            "s3:PutObject",
            "s3:GetObject"
        ],
        "Resource": [
            "arn:aws:s3:::mybucket/*",
            "arn:aws:s3:::mybucket"
        ]
    }
  ]
}

РядомПолитика ведра У меня также есть в ACL стандартный полный доступ к владельцу ведра, который является той же учетной записью, с которой я запускаю свой Athena Query.Я выполняю запрос в Консоли управления AWS.

Не уверен, что связан: AWS Glue Crawler не может прочитать файлы.Но могу перечислить их, я получаю сообщение об ошибке для каждого файла.

Что я могу сделать, чтобы запрос работал?

Ответы [ 2 ]

2 голосов
/ 26 июня 2019

Вы не показали нам определение своей таблицы, но я подозреваю, что Афина хочет перечислить содержимое пути, чтобы узнать, какие файлы существуют, чтобы она могла их прочитать.

Политика дает разрешение только на объекты Put и Get, а не на List Bucket. Попробуйте добавить разрешение ListBucket.

Между прочим, это «действительно плохая идея» - использовать Bucket Policy, как это, так как вы делаете свой контент общедоступным. Вместо этого разрешение должно быть назначено учетным данным (например, пользователю IAM), который вызывает Athena. Таким образом, ведро не является общедоступным.

1 голос
/ 26 июня 2019

В вашей политике отсутствует доступ к ListBucket, который необходим Athena для отображения содержимого корзины перед получением / вводом объекта.

Ниже политика должна работать.

{
  "Version": "2008-10-17",
  "Statement": [
    {
        "Effect": "Allow",
        "Principal": "*",
        "Action": [
            "S3:ListBucket",
            "s3:PutObject",
            "s3:GetObject"
        ],
        "Resource": [
            "arn:aws:s3:::mybucket/*",
            "arn:aws:s3:::mybucket"
        ]
    }
  ]
}
...