进行AWS测试以进行无效登录

将Golang与go-aws-sdk结合使用,并且在捕获无效的会话凭据时遇到了一些问题。</ p>
\ n

使用〜/ .aws / {config,凭据} </ p>中的共享凭据文件</ p>

  Sess,err:= session.NewSessionWithOptions(session.Options {
配置文件 :instance.Config.AWS.AWSProfile,
})
</ code> </ pre>

在凭据有效时工作正常,但是如果我在凭据文件中使用了无效的aws_access_key_id, 我需要一种通过我的AWSLogin()函数检测到此问题的方法。</ p>

发生的情况是,在使用上述Sess时,对AWS服务的任何后续调用都会引起恐慌。 </ p>

如何使用上述NewSessionWithOptions()方法检测登录失败?</ p>

UPDATE:是的,错误类型为nil,因此以下内容 没用:</ p>

 如果err!= nil {
返回nil,fmt.Errorf(“登录到AWS时出错:%v”,err.Error())

}
</ code> </ pre>
</ div>

展开原文

原文

Using Golang with go-aws-sdk and having some issues catching invalid session credentials.

Using the shared credential files in ~/.aws/{config, credentials}

Sess, err := session.NewSessionWithOptions(session.Options{
    Profile: instance.Config.AWS.AWSProfile,
})

Works fine when the credentials are valid, but if I use an invalid aws_access_key_id in the credentials file, I need a way to detect this with my AWSLogin() func.

What's happening is any subsequent calls to an AWS service raises a panic when using Sess above.

How can I detect a failed login with the above NewSessionWithOptions() method?

UPDATE: yes, the error type is nil, so the following is of no use:

 if err != nil {
        return nil, fmt.Errorf("Error logging into AWS: %v", err.Error())
    }

douji4948
douji4948 检查另一个问题:stackoverflow.com/questions/33068055/…
一年多之前 回复
dtja73027
dtja73027 最后,我列出了该实例将为其提供特权的已知S3存储桶,从而进行了测试。我手头有代码,但是我觉得像您提到的iam.currentUser会更好。
一年多之前 回复
dongqiancui9194
dongqiancui9194 尝试获取用户ID,例如stackoverflow.com/q/33332050/492773
一年多之前 回复
douliang9057
douliang9057 我也一直在走这条路。尽管我们使用最小特权模型,所以我想知道我可以打电话给每个帐户应该访问的服务吗?
一年多之前 回复
duangu6588
duangu6588 也许您可以使用虚拟呼叫进行恢复?这样,您至少可以捕捉到在大多数情况下应该可以解决的错误。
一年多之前 回复

2个回答

Here's what I ended up doing. Test that credentials are loaded, test a known service such as an S3 bucket this application needs access to.

// login to AWS
AWSProfile := "default"
fmt.Printf("Using AWS Profile: %v
", instance.Config.AWS.AWSProfile)
Sess, err := session.NewSessionWithOptions(session.Options{
    Profile: AWSProfile,
})
if err != nil {
    return fmt.Errorf("Error logging into AWS: %v", err.Error())
}

// attempt to load config (e.g. env variables, shared config, instance profile) 
// log which AWS API Key is being used
svc := s3.New(Sess)
credentials, err := svc.Config.Credentials.Get()
if err != nil {
    return errors.New("Error logging into AWS. Check Credentials.")
}
fmt.Printf("Using Access Key ID: (%v)
", credentials.AccessKeyID)
bucketName := "s3bucketname"

// test the login can access a typical aws service (s3) and known bucket 
params := &s3.ListObjectsInput {
    Bucket: aws.String(bucketName),
}
resp, _ := svc.ListObjects(params)

if len(resp.Contents) < 1 {
    return nil, fmt.Errorf("Error logging into AWS. Can not access bucket (%v). Check Credentials.", bucketName)
}



因此,您必须在致电aws之后检查无效错误。 尝试使用 Credentials.Get()< / a>并查看 err!= nil </ code> </ p>
</ div>

展开原文

原文

So you would have to check for invalid errors after making a call to aws. Try and use Credentials.Get() and see if err != nil

doufei2007
doufei2007 Credentials.Get()只是可以加载凭据的测试(环境变量,共享配置,实例配置文件等)。 不幸的是,它无法确定凭据是否无效(据我所知)
一年多之前 回复
dongshen7407
dongshen7407 有趣的是,这正是我正在尝试的方法,但是它只是打印出提供的无效访问密钥ID://记录正在使用哪个AWS API密钥svc:= s3.New(Sess)凭证,err:= svc。 Config.Credentials.Get()fmt.Printf(“使用访问密钥ID:(%v) ”,凭据.AccessKeyID)
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问