簡體   English   中英

s3 預簽名 url 用於 us-east-1、us-west-1、us-west-2 中的存儲桶缺少字段

[英]s3 pre-signed url for buckets in us-east-1, us-west-1, us-west-2 missing fields

我正在嘗試生成 s3 預簽名 url 以便我可以從客戶端將對象放入我的存儲桶中。 我最初感興趣的區域是:

  1. ap-northeast-2(首爾)
  2. ap-south-1(孟買)
  3. 我們-東-1
  4. us-west-2

下面是我用來獲取簽名 url 的代碼:

const AWS = require("aws-sdk");
const { v4: uuidv4 } = require("uuid");

const region_name = "x-region";
const upload_bucket = "bucket-in-x-region";
AWS.config.update({ region: region_name });
const s3 = new AWS.S3();

async function getPresignedUrl() {
  const random_id = uuidv4();
  const obj_key = `${random_id}.png`;
  const s3Params = {
    Bucket: upload_bucket,
    Key: obj_key,
    Expires: 60,
    ContentType: "image/png",
    ACL: "public-read",
  };
  const presigned_url = await s3.getSignedUrlPromise("putObject", s3Params);
  return presigned_url;
}

getPresignedUrl().then((data) => {
  console.log(data);
});

ap-northeast-2 和 ap-south-1 中的存儲桶返回一個WORKING簽名 URL,其中包含以下字段: Content-Type、X-Amz-Algorithm、X-Amz-Credential、X-Amz-Date、X-Amz-Expires , X-Amz-Security-Token, X-Amz-Signature, X-Amz-SignedHeaders, x-amz-acl

但是,我嘗試的所有存儲桶都基於以下區域:us-east-1、us-west-1 和 us-west-2 返回一個NON WORKING url,只有以下字段: Content-Type、Expires、Signature、x-amz- acl

當我在 lambda 中運行此代碼時,調用角色具有以下語句的策略:

  {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-name-mumbai/*",
                "arn:aws:s3:::bucket-name-seoul/*",
                "arn:aws:s3:::bucket-name-useast/*",
                "arn:aws:s3:::bucket-name-uswest/*",
            ]
        }

任何想法將不勝感激。

在 AWS 配置中添加signatureVersion: 'v4'它應該可以工作:

AWS.config.update({ region: region_name, signatureVersion: 'v4' });

暫無
暫無

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

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