func()

in sdk/auth/credentials/provider/instance_credentials.go [30:68]


func (p *InstanceCredentialsProvider) Resolve() (auth.Credential, error) {
	roleName, ok := os.LookupEnv(ENVEcsMetadata)
	if !ok {
		return nil, nil
	}
	if roleName == "" {
		return nil, errors.New("environmental variable 'ALIBABA_CLOUD_ECS_METADATA' are empty")
	}
	status, content, err := HookGet(get)(securityCredURL + roleName)
	if err != nil {
		return nil, err
	}
	if status != 200 {
		if status == 404 {
			return nil, errors.New("the role was not found in the instance")
		}
		return nil, fmt.Errorf("received %d when getting security credentials for %s", status, roleName)
	}
	body := make(map[string]interface{})

	if err := json.Unmarshal(content, &body); err != nil {
		return nil, err
	}

	accessKeyID, err := extractString(body, "AccessKeyId")
	if err != nil {
		return nil, err
	}
	accessKeySecret, err := extractString(body, "AccessKeySecret")
	if err != nil {
		return nil, err
	}
	securityToken, err := extractString(body, "SecurityToken")
	if err != nil {
		return nil, err
	}

	return credentials.NewStsTokenCredential(accessKeyID, accessKeySecret, securityToken), nil
}