credentialproviderpackage/pkg/awscred/awscred.go (65 lines of code) (raw):
package awscred
import (
"errors"
"fmt"
"os"
"strings"
)
const (
configSecretPath = "/secrets/aws-creds/config"
accessKeySecretPath = "/secrets/aws-creds/AWS_ACCESS_KEY_ID"
secretAccessKeySecretPath = "/secrets/aws-creds/AWS_SECRET_ACCESS_KEY"
sessionTokenSecretPath = "/secrets/aws-creds/AWS_SESSION_TOKEN"
regionSecretPath = "/secrets/aws-creds/REGION"
createConfigPath = "/config"
)
func generateAwsConfigSecret(accessKeyPath, secretAccessKeyPath, sessionTokenPath, regionPath string) (string, error) {
accessKeyByte, err := os.ReadFile(accessKeyPath)
if err != nil {
return "", err
}
accessKey := strings.Trim(string(accessKeyByte), "'")
secretAccessKeyByte, err := os.ReadFile(secretAccessKeyPath)
if err != nil {
return "", err
}
secretAccessKey := strings.Trim(string(secretAccessKeyByte), "'")
regionByte, err := os.ReadFile(regionPath)
if err != nil {
return "", err
}
region := strings.Trim(string(regionByte), "'")
// check if sessionToken exists and read it
if _, err := os.Stat(sessionTokenPath); !os.IsNotExist(err) {
sessionTokenByte, err := os.ReadFile(sessionTokenPath)
if err != nil {
return "", err
}
sessionToken := strings.Trim(string(sessionTokenByte), "'")
return fmt.Sprintf(
`
[default]
aws_access_key_id=%s
aws_secret_access_key=%s
aws_session_token=%s
region=%s
`, accessKey, secretAccessKey, sessionToken, region), nil
}
return fmt.Sprintf(
`
[default]
aws_access_key_id=%s
aws_secret_access_key=%s
region=%s
`, accessKey, secretAccessKey, region), nil
}
func GetAwsConfigPath() (string, error) {
_, err := os.Stat(configSecretPath)
if err != nil {
if errors.Is(err, os.ErrNotExist) {
awsConfig, err := generateAwsConfigSecret(accessKeySecretPath, secretAccessKeySecretPath, sessionTokenSecretPath, regionSecretPath)
err = os.WriteFile(createConfigPath, []byte(awsConfig), 0o400)
return createConfigPath, err
}
}
return configSecretPath, nil
}