簡體   English   中英

PUT 文件上傳的 S3 權限

[英]S3 permissions for PUT file upload

我正在嘗試使用 Postman PUT 請求和 Excel 文件(二進制)將文件上傳到我的 S3 存儲桶。 PUT 請求的 URL 是使用 boto3 (Python) 自動生成的:

upload_url = s3.generate_presigned_url(
        ClientMethod='put_object',
        Params={'Bucket': bucket_name, 'Key': key},
        ExpiresIn=3600,
        HttpMethod='PUT',)

當我嘗試使用 PUT 和 Postman 中生成的 URL 將文件上傳到該 URL 時,我得到以下信息:

<?xml version="1.0" encoding="UTF-8"?>
<Error>
    <Code>AccessDenied</Code>
    <Message>Access Denied</Message>
    <RequestId>NumbersAndLetters</RequestId>
    <HostId>NumbersAndLetters</HostId>
</Error>

s3 權限是:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::12digitnumber:root"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::bucket-name"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::12digitnumber:root"
            },
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::bucket-name/*"
        }
    ]
}

尤金,

根據此討論,您應該使用 generate_presigned_post 函數生成一個 URL 以用於上傳您的文件。

只是為了確保,您是否仔細檢查了 boto3 腳本中用於生成預簽名 URL 的憑據與您在 s3 策略中使用的憑據相同?

問題出在 template.yaml 中。 您必須在 template.yaml 中將以下策略添加到您的函數中:

Policies:
    - S3ReadPolicy:
        BucketName: "bucket-name"
    - S3WritePolicy:
        BucketName: "bucket-name"

暫無
暫無

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

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