簡體   English   中英

如何從 inte.net 訪問 S3 存儲桶?

[英]How can I access the S3 bucket from internet?

首先,我用這個腳本制作 S3 存儲桶。

const out_bk = new s3.Bucket(this, 'out-bk', { // image-resize用のbucket
  bucketName: s3_out_name,
  removalPolicy: RemovalPolicy.DESTROY,
  autoDeleteObjects: true,
  cors: [{
      allowedMethods: [
        s3.HttpMethods.GET,
        s3.HttpMethods.POST,
        s3.HttpMethods.PUT,
        s3.HttpMethods.DELETE,
        s3.HttpMethods.HEAD,
      ],
      allowedHeaders: ["*"],
      allowedOrigins: ["*"],
      exposedHeaders: ["ETag"],
      maxAge: 3000
    }]
});

const s3_out_name = "s3-my-out-name"

const out_bk = new s3.Bucket(this, 'cdk-st-out-bk', { 
  bucketName: s3_out_name,
  removalPolicy: RemovalPolicy.DESTROY,
  autoDeleteObjects: true,
  cors: [{
      allowedMethods: [
        s3.HttpMethods.GET,
        s3.HttpMethods.POST,
        s3.HttpMethods.PUT,
        s3.HttpMethods.DELETE,
        s3.HttpMethods.HEAD,
      ],
      allowedHeaders: ["*"],
      allowedOrigins: ["*"],
      exposedHeaders: ["ETag"],
      maxAge: 3000
    }]
});

const cfnAccessPoint = new s3.CfnAccessPoint(this, 'MyCfnAccessPoint', {
  bucket: s3_out_name,

  name: 's3-access-point',
  publicAccessBlockConfiguration: {
    blockPublicAcls: false,
    blockPublicPolicy: false,
    ignorePublicAcls: false,
    restrictPublicBuckets: false,
  },
});

然后成功創建 S3 和訪問點。

我打開 aws 控制台 -> S3 -> 訪問點 -> 項目

有這樣一個object URL,

https://s3-access-point-69853XXXXXX.s3-accesspoint.ap-northeast-1.amazonaws.com/1040

從瀏覽器訪問這里時。

出現此錯誤,與授權有關。

我想在未經授權的情況下從瀏覽器訪問它。

我怎樣才能解決這個問題??

<Error>
<script/>
<Code>InvalidRequest</Code>
<Message>The authorization mechanism you have provided is not supported. Please use Signature Version 4.</Message>
<RequestId>YVMHMBJP2D4WDJAK</RequestId>
<HostId>yLesp53LUmB7/rMHkZMAwcMej37WRQOKnbWI4vwhh3xCKY1t60eDd1YiJ+4xRAw3kYWjlI1Csnw=</HostId>
</Error>

我試圖在沒有Access Point的情況下訪問

我的block public accessoff

給每個人閱讀的權限,在 ACL 上列出。

然后通過瀏覽器訪問 object URL

但仍然出現錯誤

<Error>
<script/>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>Y6DPF5RWZ59DTQJD</RequestId>
<HostId>9pXKB5EDTmE6t9AJvwyTQHtyCMokeETw9yR+BFF4JdfDZ0NbfMf3TX1+VzrrJlfULBQOUtaTNM8=</HostId>
</Error>

Amazon S3 中的對象默認是私有的。

如果你想讓一個 object 無需用戶身份驗證就可以訪問,那么最簡單的方法是向存儲桶添加存儲桶策略

以下是Bucket policy examples - Amazon Simple Storage Service中的一個示例,它公開了整個存儲桶:

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

注意:在添加存儲桶策略之前,您需要將 go 添加到存儲桶的Permissions並關閉S3 Block Public Access

如果您不想公開整個存儲桶,您可以使用 S3 管理控制台中的公開選項或通過使用--acl public-read上傳文件來公開特定對象。 使用 ACL需要停用 S3 Block Public Access。

無論哪種方式,object 都可以通過“匿名”URL 訪問,例如:

https://BUCKETNAME.s3.ap-southeast-2.amazonaws.com/foo.jpg

授予對對象的訪問權限不需要S3 訪問點 它用於控制從 VPC 訪問 S3 對象時的安全性。

暫無
暫無

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

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