Предопределенный URL-адрес AWS S3 содержит X-Amz-Security-Token - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь создать предварительно назначенный URL-адрес для файла в моем S3-контейнере, используя go sdk.

Когда я запускаю программу из командной строки, я получаю предварительно назначенный URL-адрес, который не содержит X-Amz-Security-Token.

Но если я использую один и тот же код из лямбда-функции, я всегда получаю X-Amz-Security-Token в URL.

Я не уверен, почемуэто поведение отличается.

Вот код -

func CreatePreSignedURL(bucketName string, path string) (string, error) {

    sess, err := session.NewSession(&aws.Config{
        Region: aws.String("us-east-1")},
    )

    svc := s3.New(sess)

    req, _ := svc.GetObjectRequest(&s3.GetObjectInput{
        Bucket: aws.String(bucketName),
        Key:    aws.String(path),
    })

    urlStr, err := req.Presign(60 * time.Minute)

    if err != nil {
        fmt.Println("error in generarting presigned URL is ", err)
        return urlStr, err
    }

    return urlStr, nil
}

URL, сгенерированный lambda, довольно длинный, для моего приложения я ожидаю более короткий URL без X-Amz-Security-Знак

1 Ответ

0 голосов
/ 22 февраля 2019

Когда функция запускается в командной строке, она генерирует предварительно подписанные URL-адреса с учетными данными IAM, которые, возможно, хранятся в переменных среды или в ~/.aws/config.

Временные учетные данные назначаются для связанной роли IAM 1 с функцией при вызове в среде AWS Lambda.

В AWS требуется, чтобы запросы, сделанные с временными учетными данными, включали заголовок x-amz-security-token. 2

Я не нахожу здесь проблему длины URL.

Если вы хотите поддерживать согласованное поведение локально и в среде функций Lambda, простой способ - установить учетные данные AWS в среде функции Lambda.

...