首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何认证gocql到AWS

如何认证gocql到AWS
EN

Stack Overflow用户
提问于 2022-02-07 18:45:04
回答 1查看 2.1K关注 0票数 2

我有一个Go服务,需要连接AWS上的键空间。我的豆荚有一个角色,AWS_SECRET_ACCESS_KEYAWS_ACCESS_KEY_IDAWS_SESSION_TOKEN env。

我想使用aws v2。我应该使用什么凭据提供商?ec2rolecreds还是其他的(可能是stscreds)?

我尝试实现来自这里的示例。但我犯了个错误

代码语言:javascript
复制
no EC2 IMDS role found, operation error ec2imds: GetMetadata, request canceled, context deadline exceeded

我在哪里可以找到工作的例子和更多的解释?

更新

现在我的代码如下所示:

代码语言:javascript
复制
awsCfg, err := awsConfig.LoadDefaultConfig(ctx)
if err != nil {
    return nil, fmt.Errorf("failed to load AWS config: %w", err)
}

imdsClient := imds.NewFromConfig(awsCfg)

appCreds := aws.NewCredentialsCache(ec2rolecreds.New(func(options *ec2rolecreds.Options) {
        options.Client = imdsClient
}))
cluster := gocql.NewCluster(cassandraHost)

auth := sigv4.NewAwsAuthenticator()
auth.SessionToken = value.SessionToken
auth.AccessKeyId = value.AccessKeyID
auth.SecretAccessKey = value.SecretAccessKey

cluster.Authenticator = auth

session, err := cluster.CreateSession()

Retrieve()返回一个错误

代码语言:javascript
复制
no EC2 IMDS role found, operation error ec2imds: GetMetadata, exceeded maximum number of attempts, 3, request send failed, Get \"http://169.254.169.254/latest/meta-data/iam/security-credentials/\": dial tcp 169.254.169.254:80: connect: host is down

更新2

在相同的环境中,AWS v1工作正常。因此,AWS端点在物理上是可用的。

代码语言:javascript
复制
session, err := aws_sess.NewSession()
if err != nil {
    return fmt.Errorf("failed to create AWS session: %w", err)
}

creds := credentialsV1.NewChainCredentials(
    []credentialsV1.Provider{
        &credentialsV1.EnvProvider{},
        &ec2rolecredsV1.EC2RoleProvider{
            Client: ec2metadataV1.New(session),
    }})

value, getErr := creds.Get()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-08 00:26:35

no EC2 IMDS role found, operation error ec2imds: GetMetadata, exceeded maximum number of attempts, 3, request send failed, Get \"http://169.254.169.254/latest/meta-data/iam/security-credentials/\": dial tcp 169.254.169.254:80: connect: host is down

您的代码片段试图使用EC2实例元数据服务来读取要使用的IAM角色。为此,您需要能够与其进行通信,并且必须将角色附加到实例中。

Go服务是否运行在EC2实例上?如果没有,那就可以解释你的错误。如果是,请确保进程或容器具有与169.254.169.254通信的适当网络访问权限(例如:网络命名空间)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71023790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档