【问题标题】:AWS S3 presigned URL contains X-Amz-Security-TokenAWS S3 预签名 URL 包含 X-Amz-Security-Token
【发布时间】:2019-07-16 10:54:23
【问题描述】:

我正在尝试使用 go sdk 为我的 S3 存储桶中的文件创建预签名 URL。

当我从命令行运行程序时,我得到了不包含 X-Amz-Security-Token 的预签名 URL。

但如果我使用来自 lambda 函数的相同代码,我总是会在 URL 中获得 X-Amz-Security-Token。

我不确定为什么这种行为会有所不同。

这里是代码-

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
}

lambda 生成的 URL 很长,对于我的应用程序,我期望没有 X-Amz-Security-Token 的 URL 更短

【问题讨论】:

  • 两台主机上的env varsconfig files 是否相同?
  • 如果x-amz-security-token 不存在也意味着在生成的当前环境中不需要。我解决了添加 if 语句来检查和处理 x-amz-security-token 的问题,前提是 x-amz-security-token 存在,并且我的前端在本地工作并部署在 lambda 中。

标签: amazon-web-services go amazon-s3 aws-lambda aws-sdk


【解决方案1】:

当该函数在您的命令行中运行时,它会生成带有 IAM 凭证的预签名 URL,可能存储在环境变量或 ~/.aws/config 中。

在 AWS Lambda 环境中调用时,会为与 1 函数关联的 IAM 角色分配临时凭证。

AWS 要求使用临时凭证发出的请求必须包含 x-amz-security-token 标头。 2

我认为 URL 的长度不是问题。

如果您希望在本地和 Lambda 函数环境中保持一致的行为,一个简单的方法是在 Lambda 函数的环境中设置 AWS 凭证。

【讨论】:

  • 我得到的问题不是 URL 长度,而是无论出于何种原因,来自 lambda 的调用都会给我 403,并且本地运行的没有令牌的预签名 URL 工作正常
  • 我的错实际上,无论您是否附加策略,令牌本身都在那里,但是当我将 S3 策略附加到为我的 lambda func 创建的 IAM 角色时,403s 停止了,即使令牌留了
【解决方案2】:

我也有同样的问题。我正在使用 aws cli 生成预签名的 url,但我的 IAM 角色仅在 12 小时内有效。根据documentation,IAM 角色需要至少 7 天的可用性。我所做的是创建一个新角色,它只有 S3 访问权限,但没有过期限制。在命令行中,我输入了

export AWS_ACCESS_KEY_ID "your_new_aws_access_key_id"
export AWS_SECRET_ACCESS_KEY "your_new_aws_secret_access_key"

然后我运行这个命令

aws s3 presign "your_target_file"

而且它有效!很长的 x-amz-security-token 不见了!

【讨论】:

    猜你喜欢
    • 2020-04-11
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 2019-01-27
    • 2018-10-20
    相关资源
    最近更新 更多