перечисление всех объектов в корзине S3 с использованием boto3 - PullRequest
0 голосов
/ 04 ноября 2018

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

def list_all():
  s3 = boto3.client('s3')
  bucket = 'my-bucket'
  resp = s3.list_objects(Bucket=bucket, MaxKeys=10)
  print("s3.list_objects returns", resp)

Это выдает ошибку примерно так:

{
  "errorMessage": "An error occurred (AccessDenied) when calling the 
                   ListObjects operation: Access Denied",
  "errorType": "ClientError",
  "stackTrace": [
  [
    "/var/task/lambda_function.py",
    41,
    "lambda_handler",
    "list_all()"
  ], ...

Мои настройки ведра отображаются следующим образом на aws:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "AddPerm",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::my-bucket/*"
    }
  ]
}

У меня было два вопроса:

1) Что мне установить в поле «Действие», чтобы я мог перечислять все файлы в любой папке из моей лямбды с помощью boto3?

2) что я должен установить для своего принципала, чтобы только моя учетная запись aws (например, когда я запускаю свою лямбду) могла получить доступ к корзинам?

1 Ответ

0 голосов
/ 04 ноября 2018

Причиной сбоя лямбды является то, что для использования listObjects ваша лямбда-функция должна иметь разрешение IAM s3:ListBucket, которое работает против одного сегмента (подстановочный знак объекта не требуется) (документы) .

т.е. Вы должны установить политику IAM своей лямбды в:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AddPerm",
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::my-bucket"
    }
  ]
}
...