cdk-multi-profile-plugin
Version:
Adds multi profile/account, mfa and aws sso support to cdk apps
74 lines • 11.1 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.IniFileCredentialProviderSource = void 0;
const safe_1 = require("colors/safe");
const lodash_isempty_1 = __importDefault(require("lodash.isempty"));
const aws_sdk_1 = require("aws-sdk");
const plugin_1 = require("aws-cdk/lib/api/plugin");
const utils_1 = require("./utils");
const profile_credentials_cache_1 = require("./profile-credentials-cache");
const profile_config_1 = require("./profile-config");
const sso_login_cache_1 = require("./sso-login-cache");
const profileCredentialsCache = new profile_credentials_cache_1.ProfileCredentialsCache();
class IniFileCredentialProviderSource {
constructor(name, profiles, filename) {
this.name = name;
this.profiles = profiles;
this.filename = filename;
this.profileConfig = new profile_config_1.ProfileConfig((0, utils_1.getConfigFilename)());
this.ssoLoginCache = new sso_login_cache_1.SSOLoginCache((0, utils_1.getSSOCachePath)());
}
canProvideCredentials(accountId) {
return Promise.resolve(Object.prototype.hasOwnProperty.call(this.profiles, accountId));
}
async getProvider(accountId, mode) {
const profile = this.profiles[accountId];
console.log('\n');
console.log(` 🚀 Using profile ${(0, safe_1.green)(profile)} for account ${(0, safe_1.green)(accountId)} in mode ${(0, safe_1.green)(plugin_1.Mode[mode])}`);
console.log('\n');
let credentials = profileCredentialsCache.get(profile);
if (!credentials) {
if (this.profileConfig.isSSOProfile(profile)) {
const ssoProfile = this.profileConfig.getProfile(profile);
const ssoSettings = this.profileConfig.getSSOSettings(profile);
const ssoLogin = this.ssoLoginCache.getCachedLogin(ssoSettings);
const sso = new aws_sdk_1.SSO({ region: ssoSettings.sso_region });
const { roleCredentials } = await sso
.getRoleCredentials({
accessToken: ssoLogin.accessToken,
accountId: ssoProfile.sso_account_id,
roleName: ssoProfile.sso_role_name,
})
.promise();
if (!(roleCredentials === null || roleCredentials === void 0 ? void 0 : roleCredentials.accessKeyId) ||
!roleCredentials.secretAccessKey ||
!roleCredentials.sessionToken)
throw new Error('Invalid roleCredentials!');
credentials = new aws_sdk_1.Credentials({
accessKeyId: roleCredentials.accessKeyId,
secretAccessKey: roleCredentials.secretAccessKey,
sessionToken: roleCredentials.sessionToken,
});
}
else {
credentials = new aws_sdk_1.SharedIniFileCredentials({
tokenCodeFn: utils_1.tokenCodeFn,
filename: this.filename,
profile,
});
}
profileCredentialsCache.set(profile, credentials);
}
return Promise.resolve(credentials);
}
isAvailable() {
if (this.filename && !(0, lodash_isempty_1.default)(this.profiles))
return Promise.resolve(true);
return Promise.resolve(false);
}
}
exports.IniFileCredentialProviderSource = IniFileCredentialProviderSource;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pLWZpbGUtY3JlZGVudGlhbC1wcm92aWRlci1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5pLWZpbGUtY3JlZGVudGlhbC1wcm92aWRlci1zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsc0NBQW9DO0FBQ3BDLG9FQUFxQztBQUNyQyxxQ0FBcUU7QUFDckUsbURBQXdFO0FBRXhFLG1DQUEwRTtBQUMxRSwyRUFBc0U7QUFDdEUscURBQWlEO0FBQ2pELHVEQUFrRDtBQUVsRCxNQUFNLHVCQUF1QixHQUFHLElBQUksbURBQXVCLEVBQUUsQ0FBQztBQUU5RCxNQUFhLCtCQUErQjtJQU0xQyxZQUNrQixJQUFZLEVBQ1gsUUFBbUMsRUFDbkMsUUFBZ0I7UUFGakIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNYLGFBQVEsR0FBUixRQUFRLENBQTJCO1FBQ25DLGFBQVEsR0FBUixRQUFRLENBQVE7UUFFakMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLDhCQUFhLENBQUMsSUFBQSx5QkFBaUIsR0FBRSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLCtCQUFhLENBQUMsSUFBQSx1QkFBZSxHQUFFLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRU0scUJBQXFCLENBQUMsU0FBaUI7UUFDNUMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUNwQixNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FDL0QsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsV0FBVyxDQUN0QixTQUFpQixFQUNqQixJQUFVO1FBRVYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV6QyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQ1Qsc0JBQXNCLElBQUEsWUFBSyxFQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBQSxZQUFLLEVBQ3ZELFNBQVMsQ0FDVixZQUFZLElBQUEsWUFBSyxFQUFDLGFBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQ2pDLENBQUM7UUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWxCLElBQUksV0FBVyxHQUFHLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV2RCxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzVDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMxRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDL0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBRWhFLE1BQU0sR0FBRyxHQUFHLElBQUksYUFBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUV4RCxNQUFNLEVBQUUsZUFBZSxFQUFFLEdBQUcsTUFBTSxHQUFHO3FCQUNsQyxrQkFBa0IsQ0FBQztvQkFDbEIsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXO29CQUNqQyxTQUFTLEVBQUUsVUFBVSxDQUFDLGNBQWM7b0JBQ3BDLFFBQVEsRUFBRSxVQUFVLENBQUMsYUFBYTtpQkFDbkMsQ0FBQztxQkFDRCxPQUFPLEVBQUUsQ0FBQztnQkFFYixJQUNFLENBQUMsQ0FBQSxlQUFlLGFBQWYsZUFBZSx1QkFBZixlQUFlLENBQUUsV0FBVyxDQUFBO29CQUM3QixDQUFDLGVBQWUsQ0FBQyxlQUFlO29CQUNoQyxDQUFDLGVBQWUsQ0FBQyxZQUFZO29CQUU3QixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7Z0JBRTlDLFdBQVcsR0FBRyxJQUFJLHFCQUFXLENBQUM7b0JBQzVCLFdBQVcsRUFBRSxlQUFlLENBQUMsV0FBVztvQkFDeEMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxlQUFlO29CQUNoRCxZQUFZLEVBQUUsZUFBZSxDQUFDLFlBQVk7aUJBQzNDLENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLFdBQVcsR0FBRyxJQUFJLGtDQUF3QixDQUFDO29CQUN6QyxXQUFXLEVBQVgsbUJBQVc7b0JBQ1gsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN2QixPQUFPO2lCQUNSLENBQUMsQ0FBQzthQUNKO1lBRUQsdUJBQXVCLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztTQUNuRDtRQUVELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFBLHdCQUFPLEVBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUFFLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBcEZELDBFQW9GQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdyZWVuIH0gZnJvbSAnY29sb3JzL3NhZmUnO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSAnbG9kYXNoLmlzZW1wdHknO1xuaW1wb3J0IHsgU2hhcmVkSW5pRmlsZUNyZWRlbnRpYWxzLCBDcmVkZW50aWFscywgU1NPIH0gZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgeyBDcmVkZW50aWFsUHJvdmlkZXJTb3VyY2UsIE1vZGUgfSBmcm9tICdhd3MtY2RrL2xpYi9hcGkvcGx1Z2luJztcblxuaW1wb3J0IHsgdG9rZW5Db2RlRm4sIGdldENvbmZpZ0ZpbGVuYW1lLCBnZXRTU09DYWNoZVBhdGggfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFByb2ZpbGVDcmVkZW50aWFsc0NhY2hlIH0gZnJvbSAnLi9wcm9maWxlLWNyZWRlbnRpYWxzLWNhY2hlJztcbmltcG9ydCB7IFByb2ZpbGVDb25maWcgfSBmcm9tICcuL3Byb2ZpbGUtY29uZmlnJztcbmltcG9ydCB7IFNTT0xvZ2luQ2FjaGUgfSBmcm9tICcuL3Nzby1sb2dpbi1jYWNoZSc7XG5cbmNvbnN0IHByb2ZpbGVDcmVkZW50aWFsc0NhY2hlID0gbmV3IFByb2ZpbGVDcmVkZW50aWFsc0NhY2hlKCk7XG5cbmV4cG9ydCBjbGFzcyBJbmlGaWxlQ3JlZGVudGlhbFByb3ZpZGVyU291cmNlXG4gIGltcGxlbWVudHMgQ3JlZGVudGlhbFByb3ZpZGVyU291cmNlXG57XG4gIHByaXZhdGUgcHJvZmlsZUNvbmZpZzogUHJvZmlsZUNvbmZpZztcbiAgcHJpdmF0ZSBzc29Mb2dpbkNhY2hlOiBTU09Mb2dpbkNhY2hlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9maWxlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpbGVuYW1lOiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMucHJvZmlsZUNvbmZpZyA9IG5ldyBQcm9maWxlQ29uZmlnKGdldENvbmZpZ0ZpbGVuYW1lKCkpO1xuICAgIHRoaXMuc3NvTG9naW5DYWNoZSA9IG5ldyBTU09Mb2dpbkNhY2hlKGdldFNTT0NhY2hlUGF0aCgpKTtcbiAgfVxuXG4gIHB1YmxpYyBjYW5Qcm92aWRlQ3JlZGVudGlhbHMoYWNjb3VudElkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucHJvZmlsZXMsIGFjY291bnRJZCksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQcm92aWRlcihcbiAgICBhY2NvdW50SWQ6IHN0cmluZyxcbiAgICBtb2RlOiBNb2RlLFxuICApOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgY29uc3QgcHJvZmlsZSA9IHRoaXMucHJvZmlsZXNbYWNjb3VudElkXTtcblxuICAgIGNvbnNvbGUubG9nKCdcXG4nKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGAg8J+agCAgVXNpbmcgcHJvZmlsZSAke2dyZWVuKHByb2ZpbGUpfSBmb3IgYWNjb3VudCAke2dyZWVuKFxuICAgICAgICBhY2NvdW50SWQsXG4gICAgICApfSBpbiBtb2RlICR7Z3JlZW4oTW9kZVttb2RlXSl9YCxcbiAgICApO1xuICAgIGNvbnNvbGUubG9nKCdcXG4nKTtcblxuICAgIGxldCBjcmVkZW50aWFscyA9IHByb2ZpbGVDcmVkZW50aWFsc0NhY2hlLmdldChwcm9maWxlKTtcblxuICAgIGlmICghY3JlZGVudGlhbHMpIHtcbiAgICAgIGlmICh0aGlzLnByb2ZpbGVDb25maWcuaXNTU09Qcm9maWxlKHByb2ZpbGUpKSB7XG4gICAgICAgIGNvbnN0IHNzb1Byb2ZpbGUgPSB0aGlzLnByb2ZpbGVDb25maWcuZ2V0UHJvZmlsZShwcm9maWxlKTtcbiAgICAgICAgY29uc3Qgc3NvU2V0dGluZ3MgPSB0aGlzLnByb2ZpbGVDb25maWcuZ2V0U1NPU2V0dGluZ3MocHJvZmlsZSk7XG4gICAgICAgIGNvbnN0IHNzb0xvZ2luID0gdGhpcy5zc29Mb2dpbkNhY2hlLmdldENhY2hlZExvZ2luKHNzb1NldHRpbmdzKTtcblxuICAgICAgICBjb25zdCBzc28gPSBuZXcgU1NPKHsgcmVnaW9uOiBzc29TZXR0aW5ncy5zc29fcmVnaW9uIH0pO1xuXG4gICAgICAgIGNvbnN0IHsgcm9sZUNyZWRlbnRpYWxzIH0gPSBhd2FpdCBzc29cbiAgICAgICAgICAuZ2V0Um9sZUNyZWRlbnRpYWxzKHtcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiBzc29Mb2dpbi5hY2Nlc3NUb2tlbixcbiAgICAgICAgICAgIGFjY291bnRJZDogc3NvUHJvZmlsZS5zc29fYWNjb3VudF9pZCxcbiAgICAgICAgICAgIHJvbGVOYW1lOiBzc29Qcm9maWxlLnNzb19yb2xlX25hbWUsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAucHJvbWlzZSgpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhcm9sZUNyZWRlbnRpYWxzPy5hY2Nlc3NLZXlJZCB8fFxuICAgICAgICAgICFyb2xlQ3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5IHx8XG4gICAgICAgICAgIXJvbGVDcmVkZW50aWFscy5zZXNzaW9uVG9rZW5cbiAgICAgICAgKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByb2xlQ3JlZGVudGlhbHMhJyk7XG5cbiAgICAgICAgY3JlZGVudGlhbHMgPSBuZXcgQ3JlZGVudGlhbHMoe1xuICAgICAgICAgIGFjY2Vzc0tleUlkOiByb2xlQ3JlZGVudGlhbHMuYWNjZXNzS2V5SWQsXG4gICAgICAgICAgc2VjcmV0QWNjZXNzS2V5OiByb2xlQ3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5LFxuICAgICAgICAgIHNlc3Npb25Ub2tlbjogcm9sZUNyZWRlbnRpYWxzLnNlc3Npb25Ub2tlbixcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjcmVkZW50aWFscyA9IG5ldyBTaGFyZWRJbmlGaWxlQ3JlZGVudGlhbHMoe1xuICAgICAgICAgIHRva2VuQ29kZUZuLFxuICAgICAgICAgIGZpbGVuYW1lOiB0aGlzLmZpbGVuYW1lLFxuICAgICAgICAgIHByb2ZpbGUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBwcm9maWxlQ3JlZGVudGlhbHNDYWNoZS5zZXQocHJvZmlsZSwgY3JlZGVudGlhbHMpO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlZGVudGlhbHMpO1xuICB9XG5cbiAgcHVibGljIGlzQXZhaWxhYmxlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmZpbGVuYW1lICYmICFpc0VtcHR5KHRoaXMucHJvZmlsZXMpKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gIH1cbn1cbiJdfQ==