in src/providers/ecs_ram_role.ts [119:166]
private async getCredentialsInternal(): Promise<Session> {
let roleName = this.roleName
if (!roleName) {
roleName = await this.getRoleName();
}
const builder = Request.builder()
.withMethod('GET')
.withProtocol('http')
.withHost('100.100.100.200')
.withPath(`/latest/meta-data/ram/security-credentials/${roleName}`)
.withReadTimeout(this.readTimeout || 1000)
.withConnectTimeout(this.connectTimeout || 1000);
// ConnectTimeout: 5 * time.Second,
// ReadTimeout: 5 * time.Second,
// Headers: map[string]string{ },
const metadataToken = await this.getMetadataToken();
if (metadataToken !== null) {
builder.withHeaders({
'x-aliyun-ecs-metadata-token': metadataToken
});
}
const request = builder.build();
const response = await this.doRequest(request);
if (response.statusCode !== 200) {
throw new Error(`get sts token failed, httpStatus: ${response.statusCode}, message = ${response.body.toString()}`);
}
let data;
try {
data = JSON.parse(response.body.toString());
} catch (ex) {
throw new Error(`get sts token failed, json parse failed: ${ex.message}`)
}
if (!data || !data.AccessKeyId || !data.AccessKeySecret || !data.SecurityToken) {
throw new Error('get sts token failed')
}
if (data.Code !== 'Success') {
throw new Error('refresh Ecs sts token err, Code is not Success')
}
this.shouldRefreshCred = true;
return new Session(data.AccessKeyId, data.AccessKeySecret, data.SecurityToken, data.Expiration);
}