AdSense

網頁

2023/5/11

Golang 建立AWS S3 bucket access point

Go以AWS SDK aws-sdk-go-v2建立S3 bucket的access point


範例環境:

  • Go 1.19


事前要求

參考「AWS 建立IAM管理使用者及credentials」設定供應用程式存取AWS需要的IAM管理員credentials。

參考「Golang 建立AWS S3 bucket」建立S3 bucket。


下載AWS SDK Go V2 s3control modules

在專案根目錄執行以下命令下載需要的aws-sdk-go-v2 s3control modules。



建立S3 bucket access point

呼叫s3control.NewFromConfig建立s3control.Client來操作S3 access point。

呼叫s3contorl.Client.CreateAccessPoint傳入s3control.CreateAccessPointInput建立bucket的access point。

s3control.CreateAccessPointInput填入以下屬性:

  • AccountId - 擁有bucket的AWS帳戶號碼。
  • Bucket - 要建立access point的bucket名稱。
  • Name - access point名稱。
  • PublicAccessBlockConfiguration - access point的block public access設定。

main.go

package main

import (
    "context"
    "fmt"

    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/s3control"
    "github.com/aws/aws-sdk-go-v2/service/s3control/types"
)

func main() {
    ctx := context.TODO()

    client := NewS3ControlClient(ctx)

    accountId := "423456789012"
    bucket := "aws-s3-bucket-202305021730" // bucket name
    apName := "ap-1"                       // access point name

    input := &s3control.CreateAccessPointInput{
        AccountId: &accountId,
        Bucket:    &bucket,
        Name:      &apName,
        PublicAccessBlockConfiguration: &types.PublicAccessBlockConfiguration{
            BlockPublicAcls:       false,
            BlockPublicPolicy:     false,
            IgnorePublicAcls:      false,
            RestrictPublicBuckets: false,
        },
    }
    output, err := client.CreateAccessPoint(ctx, input)
    if err != nil {
        panic(err)
    }

    fmt.Println(*output.AccessPointArn) // arn:aws:s3:ap-northeast-1:423456789012:accesspoint/ap-1
    fmt.Println(*output.Alias)          // ap-1-fpebhno1smg31ehcy4heps8dkz664apn1a-s3alias

}

func NewS3ControlClient(ctx context.Context) *s3control.Client {
    cfg, err := config.LoadDefaultConfig(
        ctx,
        config.WithRegion("ap-northeast-1"),
    )
    if err != nil {
        panic(err)
    }
    return s3control.NewFromConfig(cfg) // Create an Amazon S3 Control client
}

github



測試

執行Go應用程式印出以下。

arn:aws:s3:ap-northeast-1:423456789012:accesspoint/ap-1
ap-1-fpebhno1smg31ehcy4heps8dkz664apn1a-s3alias

在AWS console檢視建立的access point。



Access point的block public access設定。





沒有留言:

AdSense