我正在尝试使用 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
当该函数在命令行中运行时,它会生成带有可能存储在环境变量或中的 IAM 凭证的预签名 URL~/.aws/config
.
Temporary credentials are assigned for the IAM role associated 1 https://docs.aws.amazon.com/lambda/latest/dg/accessing-resources.html with the function when invoked in AWS Lambda environment.
AWS necessitates that requests made with temporary credentials include x-amz-security-token
header. 2 https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html#UsingTemporarySecurityCredentials
我不认为 URL 的长度是一个问题。
如果您希望在本地和 Lambda 函数环境中保持一致的行为,一个简单的方法是在 Lambda 函数环境中设置 AWS 凭证。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)