将k8s服务账号与AWS IAM角色相关联,并使用AWS SDK for Go在k8s Service中获取assumed role。代码示例如下:
import (
"os"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/sts"
)
func main() {
// 设置AWS会话
sess, err := session.NewSession(&aws.Config{
Region: aws.String("your_aws_region"),
Credentials: credentials.NewStaticCredentials("your_aws_access_key_id", "your_aws_secret_access_key", "your_aws_session"),
})
// 创建STS服务客户端
svc := sts.New(sess)
// 检索IAM Role ARN
roleArn := "arn:aws:iam::123456789012:role/your_role_name"
// 检索要假定的AWS账号的外部ID
externalId := "your_external_id"
// 假定角色
assumeRoleSAMLInput := &sts.AssumeRoleInput{
RoleArn: aws.String(roleArn),
ExternalId: aws.String(externalId),
RoleSessionName: aws.String("your_session_name"),
}
assumeRoleResult, err := svc.AssumeRole(assumeRoleInput)
if err != nil {
// 处理错误
os.Exit(1)
}
// 打印假想的凭证
fmt.Println(assumeRoleResult.Credentials)
// 使用偏好设置会话密钥创建新的会话
sess = session.Must(session.NewSession(&aws.Config{
Region: aws.String("your_aws_region"),
Credentials: credentials.NewStaticCredentials(
*assumeRoleResult.Credentials.AccessKeyId,
*assumeRoleResult.Credentials.SecretAccessKey,
*assumeRoleResult.Credentials.SessionToken,
),
}))
}