Skip to content

Instantly share code, notes, and snippets.

@ManabuSeki
Created December 9, 2022 07:22
Show Gist options
  • Select an option

  • Save ManabuSeki/df07c8e40dffb94072805c64e1ed8375 to your computer and use it in GitHub Desktop.

Select an option

Save ManabuSeki/df07c8e40dffb94072805c64e1ed8375 to your computer and use it in GitHub Desktop.
package main
import (
"context"
"fmt"
"net/http"
"net/url"
"strconv"
"time"
v4 "github.com/aws/aws-sdk-go-v2/aws/signer/v4"
"github.com/aws/aws-sdk-go-v2/config"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
if err := _main(ctx); err != nil {
panic(err)
}
}
func _main(ctx context.Context) error {
cfg, err := config.LoadDefaultConfig(ctx, config.WithRegion("ap-northeast-1"))
if err != nil {
return err
}
signer := v4.NewSigner(func(signer *v4.SignerOptions) {
signer.DisableURIPathEscaping = true
})
cred, err := cfg.Credentials.Retrieve(ctx)
if err != nil {
return err
}
expire := 1 * time.Minute
expireStr := strconv.FormatInt(int64(expire/time.Second), 10)
originalURL, err := url.Parse(
fmt.Sprintf(
"https://%s.s3-%s.amazonaws.com/%s",
"my-bucket",
cfg.Region,
"filename",
),
)
if err != nil {
return err
}
req, err := http.NewRequestWithContext(ctx, http.MethodGet, originalURL.String(), nil)
if err != nil {
return err
}
req.Header.Set("X-Amz-Expires", expireStr)
now := time.Now()
if err := signer.SignHTTP(ctx, cred, req, "UNSIGNED-PAYLOAD", "s3", cfg.Region, now); err != nil {
return err
}
s := `
curl -H "Authorization: %s" \
-H 'X-Amz-Content-Sha256: %s' \
-H 'X-Amz-Expires: %s' \
-H 'X-Amz-Date: %s' \
-H 'X-Amz-Security-Token: %s' \
%s
`
fmt.Println(fmt.Sprintf(
s,
req.Header.Get("Authorization"),
"UNSIGNED-PAYLOAD",
req.Header.Get("X-Amz-Expires"),
req.Header.Get("X-Amz-Date"),
req.Header.Get("X-Amz-Security-Token"),
originalURL,
))
return nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment