Произошла ошибка (AllAccessDisabled) при вызове операции ListObjects - PullRequest
0 голосов
/ 06 октября 2018

Я мог что-то упустить и мог бы использовать 2-ю пару глаз на эти политики.

Моя политика корзины:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowS3Access",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::redacted:role/myrole"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::<my-bucket>",
                "arn:aws:s3:::<my-bucket>/*"
            ]
        }
    ]
}

Я проверил права доступа к объекту, и для единственного объекта там я разрешил всем пользователям доступ на чтение и запись только для того, чтобы эта функция работала (но она все еще работает)нет).

Вот лямбда-роль, которую я использую для доступа к корзине:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "dynamodb:GetItem",
                "s3:ListBucket",
                "dynamodb:Query",
                "dynamodb:UpdateItem",
                "s3:DeleteObject",
                "s3:GetBucketLocation",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::<my-bucket>",
                "arn:aws:s3:::<my-bucket>/*",
                "arn:aws:dynamodb:us-east-1:dynamo:table/myTable"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "polly:SynthesizeSpeech",
                "polly:StartSpeechSynthesisTask",
                "s3:ListAllMyBuckets",
                "polly:GetSpeechSynthesisTask"
            ],
            "Resource": "*"
        }
    ]
}

Может ли быть так, что функция, которую я пишу в лямбде, неверна?Вот часть, в которой он разбивается:

s3 = boto3.resource('s3')
bucket = s3.Bucket('BUCKET_NAME')
key = postId + "_" + title + ".mp3"
objs = list(bucket.objects.filter(Prefix=key))
if len(objs) > 0 and objs[0].key == key:
   print("Exists!")
   boto3.client('s3').delete_object(Bucket='BUCKET_NAME', Key=key)
else:
  print("Doesn't exist")

Я пытался добавить ListObject в качестве действия политики, но я думаю, что он просто связан с Bucket List.Я извлек функцию списка объектов списка из другого ответа, потому что я новичок в Python, но все еще похоже, что он должен работать на этом этапе.

РЕДАКТИРОВАТЬ: Вот точная ошибка, которую я получаю в cloudwatch

An error occurred (AllAccessDisabled) when calling the ListObjects 
  operation: All access to this object has been disabled: ClientError
  Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 33, in lambda_handler

РЕДАКТИРОВАТЬ 2: BUCKET_NAME является переменной среды.

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Я неправильно назначал переменные среды.Правильный синтаксис:

    s3 = boto3.resource('s3', 'us-east-1')
    bucket_name = os.environ['BUCKET_NAME'] <<<< this variable
    bucket = s3.Bucket(bucket_name) <<<<< into here

для присвоения переменных среды вашему лямбда-коду.

0 голосов
/ 10 октября 2018

о вашей роли в AWS, это даст вам доступ?У меня была эта проблема, и она была о моей роли.

...