in credentials/providers/ram_role_arn.go [149:222]
func (builder *RAMRoleARNCredentialsProviderBuilder) Build() (provider *RAMRoleARNCredentialsProvider, err error) {
if builder.provider.credentialsProvider == nil {
if builder.provider.accessKeyId != "" && builder.provider.accessKeySecret != "" && builder.provider.securityToken != "" {
builder.provider.credentialsProvider, err = NewStaticSTSCredentialsProviderBuilder().
WithAccessKeyId(builder.provider.accessKeyId).
WithAccessKeySecret(builder.provider.accessKeySecret).
WithSecurityToken(builder.provider.securityToken).
Build()
if err != nil {
return
}
} else if builder.provider.accessKeyId != "" && builder.provider.accessKeySecret != "" {
builder.provider.credentialsProvider, err = NewStaticAKCredentialsProviderBuilder().
WithAccessKeyId(builder.provider.accessKeyId).
WithAccessKeySecret(builder.provider.accessKeySecret).
Build()
if err != nil {
return
}
} else {
err = errors.New("must specify a previous credentials provider to assume role")
return
}
}
if builder.provider.roleArn == "" {
if roleArn := os.Getenv("ALIBABA_CLOUD_ROLE_ARN"); roleArn != "" {
builder.provider.roleArn = roleArn
} else {
err = errors.New("the RoleArn is empty")
return
}
}
if builder.provider.roleSessionName == "" {
if roleSessionName := os.Getenv("ALIBABA_CLOUD_ROLE_SESSION_NAME"); roleSessionName != "" {
builder.provider.roleSessionName = roleSessionName
} else {
builder.provider.roleSessionName = "credentials-go-" + strconv.FormatInt(time.Now().UnixNano()/1000, 10)
}
}
// duration seconds
if builder.provider.durationSeconds == 0 {
// default to 3600
builder.provider.durationSeconds = 3600
}
if builder.provider.durationSeconds < 900 {
err = errors.New("session duration should be in the range of 900s - max session duration")
return
}
// sts endpoint
if builder.provider.stsEndpoint == "" {
if !builder.provider.enableVpc {
builder.provider.enableVpc = strings.ToLower(os.Getenv("ALIBABA_CLOUD_VPC_ENDPOINT_ENABLED")) == "true"
}
prefix := "sts"
if builder.provider.enableVpc {
prefix = "sts-vpc"
}
if builder.provider.stsRegionId != "" {
builder.provider.stsEndpoint = fmt.Sprintf("%s.%s.aliyuncs.com", prefix, builder.provider.stsRegionId)
} else if region := os.Getenv("ALIBABA_CLOUD_STS_REGION"); region != "" {
builder.provider.stsEndpoint = fmt.Sprintf("%s.%s.aliyuncs.com", prefix, region)
} else {
builder.provider.stsEndpoint = "sts.aliyuncs.com"
}
}
provider = builder.provider
return
}