3 回答

TA貢獻(xiàn)1789條經(jīng)驗 獲得超8個贊
我剛剛編譯了您的代碼并且它的執(zhí)行正常......向您的二進(jìn)制文件提供憑據(jù)的眾多方法之一是填充這些環(huán)境變量
export AWS_ACCESS_KEY_ID=AKfoobarT2IJEAU4
export AWS_SECRET_ACCESS_KEY=oa6oT0Xxt4foobarbambazdWFCb
export AWS_REGION=us-west-2
這就是您在使用 env var 方法時所需要的(您的值可使用 aws 控制臺瀏覽器獲得)
大局是創(chuàng)建一個包裝器外殼腳本 (bash),其中包含以上三行來填充環(huán)境變量以提供憑據(jù),然后在同一個外殼腳本中執(zhí)行 golang 二進(jìn)制文件(通常您在一些初步過程中編譯 golang)...在我的情況下,我將三個環(huán)境變量的值存儲在加密文件中,shell 腳本在調(diào)用上述導(dǎo)出命令之前對其進(jìn)行解密
有時它有助于放棄踢,只需使用 aws 命令行等效命令讓自己進(jìn)入球場......從終端運行
aws s3 ls s3://cairo-mombasa-zaire --region us-west-2
它也可以使用上面顯示的相同環(huán)境變量
為了完整起見,這里是您添加了樣板的代碼......這運行正常并列出了桶
package main
import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
// "github.com/aws/aws-sdk-go/service/s3/s3manager"
"fmt"
"os"
)
func exitErrorf(msg string, args ...interface{}) {
fmt.Fprintf(os.Stderr, msg+"\n", args...)
os.Exit(1)
}
func main() {
region_env_var := "AWS_REGION"
curr_region := os.Getenv(region_env_var)
if curr_region == "" {
exitErrorf("ERROR - failed to get region from env var %v", region_env_var)
}
fmt.Println("here is region ", curr_region)
// Load session from shared config
sess := session.Must(session.NewSessionWithOptions(session.Options{
SharedConfigState: session.SharedConfigEnable,
}))
svc := s3.New(sess)
result, err := svc.ListBuckets(nil)
if err != nil { exitErrorf("Unable to list buckets, %v", err) }
for _, b := range result.Buckets {
fmt.Printf("* %s created on %s\n", aws.StringValue(b.Name), aws.TimeValue(b.CreationDate))
}
}

TA貢獻(xiàn)1878條經(jīng)驗 獲得超4個贊
numBytes, err := downloader.Download(tempFile,
&s3.GetObjectInput{
Bucket: aws.String(bucket),
Key: aws.String(fileName),
},
)
在我的情況下,桶值是錯誤的,最后缺少文字“/”。添加它可以解決我的問題。
我得到的錯誤 - 錯誤:SignatureDoesNotMatch:我們計算的請求簽名與您提供的簽名不匹配。檢查您的密鑰和簽名方法。狀態(tài)碼:403,

TA貢獻(xiàn)1815條經(jīng)驗 獲得超6個贊
如果其他人碰巧有這個問題,
問題是關(guān)于環(huán)境變量,就像斯科特上面建議的那樣,但這是由于缺乏
export AWS_SDK_LOAD_CONFIG="true"
如果此環(huán)境變量不存在,則 Golang SDK 將不會查找憑據(jù)文件,此外,我為我的兩個密鑰實例化了環(huán)境變量,以使連接成功。
回顧一下
如果您嘗試使用共享憑據(jù)文件夾,則必須使用上述環(huán)境變量來啟用它。
如果您使用環(huán)境變量,則不應(yīng)受到此問題的影響。
- 3 回答
- 0 關(guān)注
- 702 瀏覽
添加回答
舉報