UNPKG

cdk-multi-profile-plugin

Version:

Adds multi profile/account, mfa and aws sso support to cdk apps

74 lines 11.1 kB
"use strict"; 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==