in credential_provider/pod_identity_credential_provider.go [162:210]
func (p *PodIdentityCredentialProvider) getAWSConfigFromPodIdentityAgent(token []byte, podIdentityAgentEndpoint string) (*aws.Config, error) {
req, err := http.NewRequest("GET", podIdentityAgentEndpoint, nil)
if err != nil {
return nil, fmt.Errorf("failed to create HTTP request to pod identity agent: %+v", err)
}
req.Header.Set(podIdentityAuthHeader, string(token))
resp, err := p.httpClient.Do(req)
if err != nil {
return nil, fmt.Errorf("HTTP request to pod identity agent failed: %+v", err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
// Read the response body
body, err := io.ReadAll(resp.Body)
if err != nil {
return nil, fmt.Errorf("failed to read error response body: %v, status code: %d", err, resp.StatusCode)
}
return nil, fmt.Errorf("pod identity agent returned error - Status: %d, Headers: %v, Body: %s",
resp.StatusCode,
resp.Header,
string(body))
}
var creds struct {
AccessKeyId string `json:"AccessKeyId"`
SecretAccessKey string `json:"SecretAccessKey"`
Token string `json:"Token"`
}
if err := json.NewDecoder(resp.Body).Decode(&creds); err != nil {
return nil, fmt.Errorf("failed to decode credentials from pod identity agent: %+v", err)
}
if creds.AccessKeyId == "" || creds.SecretAccessKey == "" || creds.Token == "" {
return nil, fmt.Errorf("received invalid credentials from pod identity agent")
}
return aws.NewConfig().
WithRegion(p.region).
WithCredentials(credentials.NewStaticCredentials(
creds.AccessKeyId,
creds.SecretAccessKey,
creds.Token,
)), nil
}