簡體   English   中英

調用ListObjects操作時發生錯誤(AllAccessDisabled)

[英]An error occurred (AllAccessDisabled) when calling the ListObjects operation

我可能會遺漏某些東西,並且可能會在這些政策上使用第二眼。

我的存儲桶策略:

{
    "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>/*"
            ]
        }
    ]
}

我檢查了對象權限,並為其中的唯一對象提供了所有人的讀寫訪問權限,只是為了使此功能起作用(但仍然不允許)。

這是我用來訪問存儲桶的lambda角色:

{
    "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": "*"
        }
    ]
}

難道我在lambda中編寫的函數是錯誤的嗎? 這是它打破的部分:

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添加為策略操作,但我認為它僅與List bucket有關。 我從另一個答案中拉出了列表存儲區對象函數,因為我是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是環境變量。

我沒有正確分配環境變量。 正確的語法是

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

將環境變量分配給您的lambda代碼。

關於您的AWS角色,這給您帶來了成功嗎? 我遇到了這個問題,並且與我的角色有關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM