@mtndev/cli 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/cjs/__chunks/VH7oDXx4.cjs +28 -0
- package/cjs/commands/aws/ec2/allow-ip/handler.cjs +261 -12
- package/cjs/commands/aws/ec2/allow-ip/index.cjs +25 -55
- package/cjs/commands/aws/ec2/allow-ip/schema.cjs +33 -13
- package/cjs/commands/aws/ec2/allow-ip/utils.cjs +379 -39
- package/cjs/commands/aws/iam/admin-group.cjs +111 -15
- package/cjs/commands/aws/iam/break-glass/handler.cjs +127 -12
- package/cjs/commands/aws/iam/break-glass/index.cjs +7 -19
- package/cjs/commands/aws/iam/break-glass/schema.cjs +21 -12
- package/cjs/commands/aws/iam/check-admin/handler.cjs +89 -10
- package/cjs/commands/aws/iam/check-admin/index.cjs +7 -17
- package/cjs/commands/aws/iam/check-admin/schema.cjs +19 -12
- package/cjs/commands/aws/iam/policies/s3-restrictions-deny-non-s3-services.json +20 -0
- package/cjs/commands/aws/iam/policies/sts-federation.json +11 -0
- package/cjs/commands/aws/iam/policies/user-admins-deny-list.json +175 -0
- package/cjs/commands/aws/iam/policies/user-admins-deny-regions-list.json +41 -0
- package/cjs/commands/aws/iam/policies/user-admins-self-service-iam.json +56 -0
- package/cjs/commands/aws/iam/policies/user-admins-write-list.json +117 -0
- package/cjs/commands/aws/iam/remove-admin/handler.cjs +120 -11
- package/cjs/commands/aws/iam/remove-admin/index.cjs +7 -18
- package/cjs/commands/aws/iam/remove-admin/schema.cjs +22 -12
- package/cjs/commands/aws/iam/setup-acl/handler.cjs +227 -14
- package/cjs/commands/aws/iam/setup-acl/index.cjs +13 -33
- package/cjs/commands/aws/iam/setup-acl/schema.cjs +19 -7
- package/cjs/commands/aws/iam/setup-acl/utils.cjs +305 -20
- package/cjs/commands/aws/iam/users/handler.cjs +59 -12
- package/cjs/commands/aws/iam/users/index.cjs +18 -41
- package/cjs/commands/aws/iam/users/schema.cjs +17 -7
- package/cjs/commands/aws/iam/users/utils.cjs +454 -30
- package/cjs/commands/aws/index.cjs +223 -229
- package/cjs/commands/aws/route53/add-record/handler.cjs +264 -18
- package/cjs/commands/aws/route53/add-record/index.cjs +26 -57
- package/cjs/commands/aws/route53/add-record/schema.cjs +43 -11
- package/cjs/commands/aws/route53/add-record/utils.cjs +404 -37
- package/cjs/commands/aws/route53/remove-record/handler.cjs +114 -14
- package/cjs/commands/aws/route53/remove-record/index.cjs +5 -18
- package/cjs/commands/aws/route53/remove-record/schema.cjs +22 -8
- package/cjs/commands/aws/schema.cjs +19 -10
- package/cjs/commands/aws/ses/send-email/handler.cjs +73 -12
- package/cjs/commands/aws/ses/send-email/index.cjs +9 -23
- package/cjs/commands/aws/ses/send-email/schema.cjs +24 -7
- package/cjs/commands/aws/ses/send-email/utils.cjs +87 -11
- package/cjs/commands/aws/ses/smtp-password.cjs +72 -10
- package/cjs/commands/aws/utils/exec-aws.cjs +145 -16
- package/cjs/commands/aws/utils/resolve-policy-path.cjs +15 -6
- package/cjs/commands/aws/utils/resolve-profile.cjs +93 -11
- package/cjs/commands/aws/utils/tty.cjs +54 -10
- package/cjs/commands/db/create-readonly-user/handler.cjs +254 -11
- package/cjs/commands/db/create-readonly-user/index.cjs +18 -40
- package/cjs/commands/db/create-readonly-user/mysql.cjs +102 -9
- package/cjs/commands/db/create-readonly-user/postgres.cjs +209 -9
- package/cjs/commands/db/create-readonly-user/schema.cjs +39 -12
- package/cjs/commands/db/create-readonly-user/utils.cjs +160 -22
- package/cjs/commands/db/index.cjs +46 -44
- package/cjs/commands/doppler/handler.cjs +95 -11
- package/cjs/commands/doppler/index.cjs +33 -68
- package/cjs/commands/doppler/schema.cjs +130 -14
- package/cjs/commands/doppler/set-secret.cjs +378 -19
- package/cjs/commands/doppler/utils/exec.cjs +106 -12
- package/cjs/commands/doppler/utils.cjs +412 -34
- package/cjs/commands/icons/handler.cjs +82 -8
- package/cjs/commands/icons/index.cjs +15 -31
- package/cjs/commands/icons/schema.cjs +101 -13
- package/cjs/commands/icons/utils.cjs +131 -13
- package/cjs/commands/index.cjs +54 -161
- package/cjs/commands/schema.cjs +25 -8
- package/cjs/index.cjs +3 -4
- package/esm/commands/aws/ec2/allow-ip/handler.js +258 -12
- package/esm/commands/aws/ec2/allow-ip/index.js +4 -55
- package/esm/commands/aws/ec2/allow-ip/schema.js +29 -13
- package/esm/commands/aws/ec2/allow-ip/utils.js +363 -39
- package/esm/commands/aws/iam/admin-group.js +104 -15
- package/esm/commands/aws/iam/break-glass/handler.js +124 -12
- package/esm/commands/aws/iam/break-glass/index.js +4 -19
- package/esm/commands/aws/iam/break-glass/schema.js +19 -12
- package/esm/commands/aws/iam/check-admin/handler.js +86 -10
- package/esm/commands/aws/iam/check-admin/index.js +4 -17
- package/esm/commands/aws/iam/check-admin/schema.js +17 -12
- package/esm/commands/aws/iam/policies/s3-restrictions-deny-non-s3-services.json +20 -0
- package/esm/commands/aws/iam/policies/sts-federation.json +11 -0
- package/esm/commands/aws/iam/policies/user-admins-deny-list.json +175 -0
- package/esm/commands/aws/iam/policies/user-admins-deny-regions-list.json +41 -0
- package/esm/commands/aws/iam/policies/user-admins-self-service-iam.json +56 -0
- package/esm/commands/aws/iam/policies/user-admins-write-list.json +117 -0
- package/esm/commands/aws/iam/remove-admin/handler.js +117 -11
- package/esm/commands/aws/iam/remove-admin/index.js +4 -18
- package/esm/commands/aws/iam/remove-admin/schema.js +20 -12
- package/esm/commands/aws/iam/setup-acl/handler.js +224 -14
- package/esm/commands/aws/iam/setup-acl/index.js +4 -33
- package/esm/commands/aws/iam/setup-acl/schema.js +18 -7
- package/esm/commands/aws/iam/setup-acl/utils.js +298 -20
- package/esm/commands/aws/iam/users/handler.js +56 -12
- package/esm/commands/aws/iam/users/index.js +4 -41
- package/esm/commands/aws/iam/users/schema.js +16 -7
- package/esm/commands/aws/iam/users/utils.js +440 -30
- package/esm/commands/aws/index.js +142 -229
- package/esm/commands/aws/route53/add-record/handler.js +258 -18
- package/esm/commands/aws/route53/add-record/index.js +4 -57
- package/esm/commands/aws/route53/add-record/schema.js +40 -11
- package/esm/commands/aws/route53/add-record/utils.js +389 -37
- package/esm/commands/aws/route53/remove-record/handler.js +111 -14
- package/esm/commands/aws/route53/remove-record/index.js +3 -18
- package/esm/commands/aws/route53/remove-record/schema.js +21 -8
- package/esm/commands/aws/schema.js +16 -10
- package/esm/commands/aws/ses/send-email/handler.js +70 -12
- package/esm/commands/aws/ses/send-email/index.js +4 -23
- package/esm/commands/aws/ses/send-email/schema.js +23 -7
- package/esm/commands/aws/ses/send-email/utils.js +84 -11
- package/esm/commands/aws/ses/smtp-password.js +69 -10
- package/esm/commands/aws/utils/exec-aws.js +136 -15
- package/esm/commands/aws/utils/resolve-policy-path.js +14 -6
- package/esm/commands/aws/utils/resolve-profile.js +88 -11
- package/esm/commands/aws/utils/tty.js +51 -10
- package/esm/commands/db/create-readonly-user/handler.js +251 -11
- package/esm/commands/db/create-readonly-user/index.js +4 -40
- package/esm/commands/db/create-readonly-user/mysql.js +98 -9
- package/esm/commands/db/create-readonly-user/postgres.js +205 -9
- package/esm/commands/db/create-readonly-user/schema.js +35 -12
- package/esm/commands/db/create-readonly-user/utils.js +151 -22
- package/esm/commands/db/index.js +31 -44
- package/esm/commands/doppler/handler.js +92 -11
- package/esm/commands/doppler/index.js +6 -68
- package/esm/commands/doppler/schema.js +125 -15
- package/esm/commands/doppler/set-secret.js +370 -19
- package/esm/commands/doppler/utils/exec.js +100 -12
- package/esm/commands/doppler/utils.js +396 -34
- package/esm/commands/icons/handler.js +79 -8
- package/esm/commands/icons/index.js +4 -31
- package/esm/commands/icons/schema.js +97 -15
- package/esm/commands/icons/utils.js +125 -13
- package/esm/commands/index.js +47 -155
- package/esm/commands/schema.js +22 -7
- package/esm/index.js +3 -4
- package/package.json +5 -2
- package/vitest.config.ts +11 -0
- package/cjs/__chunks/2FSYDFUV.cjs +0 -146
- package/cjs/__chunks/3A5ZYU5M.cjs +0 -105
- package/cjs/__chunks/3BY5Y4W7.cjs +0 -1
- package/cjs/__chunks/3NOHGUCF.cjs +0 -9
- package/cjs/__chunks/3T2LXW7J.cjs +0 -387
- package/cjs/__chunks/4SFWHCB3.cjs +0 -133
- package/cjs/__chunks/4XT5JEAS.cjs +0 -1
- package/cjs/__chunks/AZEB4H4I.cjs +0 -208
- package/cjs/__chunks/B2KFW7T7.cjs +0 -1
- package/cjs/__chunks/B5ENMOCD.cjs +0 -288
- package/cjs/__chunks/B6XM5KSF.cjs +0 -338
- package/cjs/__chunks/BDU2UCE5.cjs +0 -1
- package/cjs/__chunks/BLMSMR5E.cjs +0 -46
- package/cjs/__chunks/CMUD7LLN.cjs +0 -47
- package/cjs/__chunks/DTQ2LB3I.cjs +0 -49
- package/cjs/__chunks/FM5MVRQF.cjs +0 -23
- package/cjs/__chunks/FRHST54J.cjs +0 -135
- package/cjs/__chunks/FU4VP2LN.cjs +0 -1
- package/cjs/__chunks/G5K4PVIL.cjs +0 -26
- package/cjs/__chunks/GU3R54MK.cjs +0 -127
- package/cjs/__chunks/GUL36IFZ.cjs +0 -61
- package/cjs/__chunks/GZMTNK5N.cjs +0 -1
- package/cjs/__chunks/H74JSDBU.cjs +0 -30
- package/cjs/__chunks/INFOPAHN.cjs +0 -117
- package/cjs/__chunks/J36P6UNE.cjs +0 -75
- package/cjs/__chunks/JB7T7PKQ.cjs +0 -538
- package/cjs/__chunks/JSL2JDMW.cjs +0 -1
- package/cjs/__chunks/K4QNHRTP.cjs +0 -163
- package/cjs/__chunks/KU76LC42.cjs +0 -192
- package/cjs/__chunks/LFDSHANP.cjs +0 -34
- package/cjs/__chunks/LHE24ECK.cjs +0 -192
- package/cjs/__chunks/LIKQ3SI4.cjs +0 -1
- package/cjs/__chunks/LXDF5QVZ.cjs +0 -313
- package/cjs/__chunks/LXOOJR2R.cjs +0 -74
- package/cjs/__chunks/N5MXFOQZ.cjs +0 -167
- package/cjs/__chunks/N7D56LPP.cjs +0 -25
- package/cjs/__chunks/NFXQNOQH.cjs +0 -393
- package/cjs/__chunks/NIMXXHJQ.cjs +0 -92
- package/cjs/__chunks/NLKJIUEX.cjs +0 -126
- package/cjs/__chunks/NT2XXAI6.cjs +0 -89
- package/cjs/__chunks/NWZGFHKH.cjs +0 -121
- package/cjs/__chunks/R3GUC7O7.cjs +0 -110
- package/cjs/__chunks/RPVAXPJ4.cjs +0 -1
- package/cjs/__chunks/S3LVCWPN.cjs +0 -23
- package/cjs/__chunks/SBBNW2BF.cjs +0 -249
- package/cjs/__chunks/T2A7TN4F.cjs +0 -81
- package/cjs/__chunks/TKNNDDIB.cjs +0 -97
- package/cjs/__chunks/TNSRDJPR.cjs +0 -1
- package/cjs/__chunks/UWHPE2GI.cjs +0 -20
- package/cjs/__chunks/W6K7BV74.cjs +0 -1
- package/cjs/__chunks/WBOQ6AUN.cjs +0 -320
- package/cjs/__chunks/WHGN5PZI.cjs +0 -299
- package/cjs/__chunks/WOYF2L6T.cjs +0 -11
- package/cjs/__chunks/X26XY2N6.cjs +0 -18
- package/cjs/__chunks/XMKOKRXZ.cjs +0 -16
- package/cjs/__chunks/XTJPQ3EX.cjs +0 -1
- package/cjs/__chunks/YRHFKTW2.cjs +0 -63
- package/cjs/__chunks/ZMDIOZPT.cjs +0 -22
- package/cjs/commands/aws/iam/policies/s3-restrictions-deny-non-s3-services.cjs +0 -28
- package/cjs/commands/aws/iam/policies/sts-federation.cjs +0 -19
- package/cjs/commands/aws/iam/policies/user-admins-deny-list.cjs +0 -183
- package/cjs/commands/aws/iam/policies/user-admins-deny-regions-list.cjs +0 -49
- package/cjs/commands/aws/iam/policies/user-admins-self-service-iam.cjs +0 -64
- package/cjs/commands/aws/iam/policies/user-admins-write-list.cjs +0 -125
- package/esm/__chunks/2FTTEFEK.js +0 -97
- package/esm/__chunks/33UYMUQD.js +0 -338
- package/esm/__chunks/3BKWTHLJ.js +0 -25
- package/esm/__chunks/3HE4BEJX.js +0 -105
- package/esm/__chunks/3QLI5BDL.js +0 -387
- package/esm/__chunks/5GIUAFXL.js +0 -89
- package/esm/__chunks/5ZBVGSOK.js +0 -0
- package/esm/__chunks/6G4PXXKF.js +0 -75
- package/esm/__chunks/73BJG53F.js +0 -11
- package/esm/__chunks/7VF4Q43Q.js +0 -0
- package/esm/__chunks/AEDEAYF5.js +0 -0
- package/esm/__chunks/AZCP3SFJ.js +0 -0
- package/esm/__chunks/B2DVQ2UL.js +0 -61
- package/esm/__chunks/CVQVHLW5.js +0 -0
- package/esm/__chunks/D62SPZXC.js +0 -0
- package/esm/__chunks/DLEJ25GZ.js +0 -121
- package/esm/__chunks/DMYFNF54.js +0 -192
- package/esm/__chunks/DNFTUMGD.js +0 -23
- package/esm/__chunks/DVKD6YSR.js +0 -49
- package/esm/__chunks/EMSH4P76.js +0 -20
- package/esm/__chunks/FFKFVMIE.js +0 -167
- package/esm/__chunks/FL7AILGH.js +0 -133
- package/esm/__chunks/FNXUONAV.js +0 -110
- package/esm/__chunks/G4NJHFFU.js +0 -320
- package/esm/__chunks/HJSXC6HP.js +0 -117
- package/esm/__chunks/IEOGAQYI.js +0 -46
- package/esm/__chunks/IZFGBYGE.js +0 -34
- package/esm/__chunks/J34UVKLA.js +0 -26
- package/esm/__chunks/JZPBBBIG.js +0 -74
- package/esm/__chunks/KWUJP5MG.js +0 -135
- package/esm/__chunks/M35URMT4.js +0 -313
- package/esm/__chunks/NF3M2L6C.js +0 -81
- package/esm/__chunks/O3CCA76Q.js +0 -22
- package/esm/__chunks/PNPPDYKC.js +0 -299
- package/esm/__chunks/QFXN4EHM.js +0 -393
- package/esm/__chunks/QKDDLIWD.js +0 -146
- package/esm/__chunks/QSE66AKY.js +0 -208
- package/esm/__chunks/QUF7PS4R.js +0 -18
- package/esm/__chunks/S7IJPJ4R.js +0 -126
- package/esm/__chunks/SD3E3EPH.js +0 -163
- package/esm/__chunks/SJXQJ7RS.js +0 -92
- package/esm/__chunks/SNCKIAOR.js +0 -0
- package/esm/__chunks/T3TTUHTW.js +0 -30
- package/esm/__chunks/TIOVE6HR.js +0 -0
- package/esm/__chunks/TXKMEIDQ.js +0 -0
- package/esm/__chunks/U7HAE2RF.js +0 -288
- package/esm/__chunks/UXWY7BYE.js +0 -63
- package/esm/__chunks/VKAKISRG.js +0 -192
- package/esm/__chunks/WD2YR6I7.js +0 -0
- package/esm/__chunks/WOZFZKFY.js +0 -0
- package/esm/__chunks/XI7GZDE2.js +0 -0
- package/esm/__chunks/XOUWDB3T.js +0 -249
- package/esm/__chunks/XQN2TA4S.js +0 -23
- package/esm/__chunks/XXK32TIM.js +0 -16
- package/esm/__chunks/YGWTVPZE.js +0 -538
- package/esm/__chunks/YRG7PT33.js +0 -127
- package/esm/__chunks/ZHKVJO2U.js +0 -47
- package/esm/__chunks/ZO55YUSY.js +0 -9
- package/esm/commands/aws/iam/policies/s3-restrictions-deny-non-s3-services.js +0 -28
- package/esm/commands/aws/iam/policies/sts-federation.js +0 -19
- package/esm/commands/aws/iam/policies/user-admins-deny-list.js +0 -183
- package/esm/commands/aws/iam/policies/user-admins-deny-regions-list.js +0 -49
- package/esm/commands/aws/iam/policies/user-admins-self-service-iam.js +0 -64
- package/esm/commands/aws/iam/policies/user-admins-write-list.js +0 -125
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
|
-
|
|
3
|
-
var _UWHPE2GIcjs = require('./UWHPE2GI.cjs');
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var _T2A7TN4Fcjs = require('./T2A7TN4F.cjs');
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
var _R3GUC7O7cjs = require('./R3GUC7O7.cjs');
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
var _NT2XXAI6cjs = require('./NT2XXAI6.cjs');
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
var _CMUD7LLNcjs = require('./CMUD7LLN.cjs');
|
|
17
|
-
|
|
18
|
-
// src/commands/aws/iam/break-glass/handler.js
|
|
19
|
-
var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
|
|
20
|
-
var _zod = require('zod');
|
|
21
|
-
function userNameFromArn(arn) {
|
|
22
|
-
const marker = ":user/";
|
|
23
|
-
const index = arn.indexOf(marker);
|
|
24
|
-
if (index === -1) {
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
27
|
-
const name = arn.slice(index + marker.length).split("/").pop();
|
|
28
|
-
return name && name.length > 0 ? name : null;
|
|
29
|
-
}
|
|
30
|
-
async function breakGlassCommand(options) {
|
|
31
|
-
try {
|
|
32
|
-
const { profile, user, yes, dryRun, verbose } = _UWHPE2GIcjs.breakGlassOptionsSchema.parse(options);
|
|
33
|
-
_R3GUC7O7cjs.requireCommands.call(void 0, ["aws"]);
|
|
34
|
-
const targetProfile = await _NT2XXAI6cjs.resolveProfile.call(void 0, { profile });
|
|
35
|
-
if (!targetProfile) {
|
|
36
|
-
console.error(
|
|
37
|
-
_chalk2.default.red(
|
|
38
|
-
"No profile specified. Pass --profile <name> or set AWS_PROFILE."
|
|
39
|
-
)
|
|
40
|
-
);
|
|
41
|
-
process.exit(1);
|
|
42
|
-
}
|
|
43
|
-
const scan = _T2A7TN4Fcjs.resolveProfileScan.call(void 0, { profile: targetProfile, verbose });
|
|
44
|
-
if (!scan) {
|
|
45
|
-
console.error(
|
|
46
|
-
_chalk2.default.red(
|
|
47
|
-
`
|
|
48
|
-
\u274C Could not read ${_T2A7TN4Fcjs.ADMIN_GROUP_NAME} for profile "${targetProfile}".`
|
|
49
|
-
)
|
|
50
|
-
);
|
|
51
|
-
console.error(
|
|
52
|
-
_chalk2.default.yellow(
|
|
53
|
-
" Check your credentials, and run `mtn aws iam setup-acl` first if the group does not exist yet.\n"
|
|
54
|
-
)
|
|
55
|
-
);
|
|
56
|
-
process.exit(1);
|
|
57
|
-
}
|
|
58
|
-
let targets = user;
|
|
59
|
-
if (targets.length === 0) {
|
|
60
|
-
const derived = userNameFromArn(scan.arn);
|
|
61
|
-
if (!derived) {
|
|
62
|
-
console.error(
|
|
63
|
-
_chalk2.default.red(
|
|
64
|
-
`
|
|
65
|
-
\u274C Could not determine your IAM user from the caller identity:
|
|
66
|
-
${scan.arn}`
|
|
67
|
-
)
|
|
68
|
-
);
|
|
69
|
-
console.error(
|
|
70
|
-
_chalk2.default.yellow(" Pass --user <name> to choose who to grant.\n")
|
|
71
|
-
);
|
|
72
|
-
process.exit(1);
|
|
73
|
-
}
|
|
74
|
-
targets = [derived];
|
|
75
|
-
}
|
|
76
|
-
const alreadyMembers = new Set(scan.users);
|
|
77
|
-
const toGrant = targets.filter((name) => !alreadyMembers.has(name));
|
|
78
|
-
const existing = targets.filter((name) => alreadyMembers.has(name));
|
|
79
|
-
console.log(
|
|
80
|
-
_chalk2.default.blue(
|
|
81
|
-
`
|
|
82
|
-
==> Break-glass admin (${_T2A7TN4Fcjs.ADMIN_GROUP_NAME}) \u2014 profile ${targetProfile} (${scan.accountId})
|
|
83
|
-
`
|
|
84
|
-
)
|
|
85
|
-
);
|
|
86
|
-
for (const name of existing) {
|
|
87
|
-
console.log(_chalk2.default.dim(`-- ${name} already has break-glass access`));
|
|
88
|
-
}
|
|
89
|
-
if (toGrant.length === 0) {
|
|
90
|
-
console.log(
|
|
91
|
-
_chalk2.default.green(
|
|
92
|
-
"\nNothing to do \u2014 all target user(s) already have break-glass access.\n"
|
|
93
|
-
)
|
|
94
|
-
);
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
console.log(
|
|
98
|
-
_chalk2.default.red.bold(
|
|
99
|
-
`\u26A0 This grants AdministratorAccess to ${toGrant.length} user(s): ${toGrant.join(", ")}`
|
|
100
|
-
)
|
|
101
|
-
);
|
|
102
|
-
if (dryRun) {
|
|
103
|
-
for (const name of toGrant) {
|
|
104
|
-
console.log(
|
|
105
|
-
_chalk2.default.yellow(` [dry-run] would add ${name} to ${_T2A7TN4Fcjs.ADMIN_GROUP_NAME}`)
|
|
106
|
-
);
|
|
107
|
-
}
|
|
108
|
-
console.log(
|
|
109
|
-
_chalk2.default.yellow("\n[dry-run] Re-run without --dry-run to apply.\n")
|
|
110
|
-
);
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
let confirmed = yes;
|
|
114
|
-
if (!confirmed) {
|
|
115
|
-
confirmed = await _CMUD7LLNcjs.promptYesNo.call(void 0, {
|
|
116
|
-
message: ` Grant break-glass admin to ${toGrant.length} user(s) in ${targetProfile}?`,
|
|
117
|
-
defaultYes: false
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
if (!confirmed) {
|
|
121
|
-
console.log(_chalk2.default.dim(" aborted (not confirmed)\n"));
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
let granted = 0;
|
|
125
|
-
for (const name of toGrant) {
|
|
126
|
-
try {
|
|
127
|
-
scan.run(
|
|
128
|
-
[
|
|
129
|
-
"iam",
|
|
130
|
-
"add-user-to-group",
|
|
131
|
-
"--group-name",
|
|
132
|
-
_T2A7TN4Fcjs.ADMIN_GROUP_NAME,
|
|
133
|
-
"--user-name",
|
|
134
|
-
name
|
|
135
|
-
],
|
|
136
|
-
{ expectJson: false }
|
|
137
|
-
);
|
|
138
|
-
console.log(_chalk2.default.green(` granted ${name}`));
|
|
139
|
-
granted += 1;
|
|
140
|
-
} catch (grantError) {
|
|
141
|
-
const reason = grantError instanceof Error ? _nullishCoalesce(grantError.message.split("\n")[0], () => ( "")) : String(grantError);
|
|
142
|
-
console.log(_chalk2.default.red(` failed to grant ${name}: ${reason}`));
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
console.log(_chalk2.default.blue("\n==> Summary"));
|
|
146
|
-
console.log(` Profile: ${targetProfile} (${scan.accountId})`);
|
|
147
|
-
console.log(` Users granted: ${granted}`);
|
|
148
|
-
console.log(` Already had it: ${existing.length}`);
|
|
149
|
-
console.log(
|
|
150
|
-
_chalk2.default.yellow(
|
|
151
|
-
"\n\u{1F4A1} Revoke with `mtn aws iam remove-admin` when you are done."
|
|
152
|
-
)
|
|
153
|
-
);
|
|
154
|
-
console.log(
|
|
155
|
-
_chalk2.default.dim(
|
|
156
|
-
" You may need a fresh session (e.g. clear the aws-vault cache) before the new permissions apply.\n"
|
|
157
|
-
)
|
|
158
|
-
);
|
|
159
|
-
} catch (error) {
|
|
160
|
-
if (error instanceof _zod.ZodError) {
|
|
161
|
-
console.error(_chalk2.default.red("\n\u274C Invalid command options:"));
|
|
162
|
-
error.errors.forEach((err) => {
|
|
163
|
-
console.error(_chalk2.default.red(` ${err.path.join(".")}: ${err.message}`));
|
|
164
|
-
});
|
|
165
|
-
process.exit(1);
|
|
166
|
-
}
|
|
167
|
-
const verbose = (
|
|
168
|
-
/** @type {any} */
|
|
169
|
-
_optionalChain([options, 'optionalAccess', _ => _.verbose]) || false
|
|
170
|
-
);
|
|
171
|
-
console.error(_chalk2.default.red("\n\u274C break-glass failed:"));
|
|
172
|
-
if (error instanceof Error) {
|
|
173
|
-
console.error(_chalk2.default.red(` ${error.message}`));
|
|
174
|
-
if (verbose && error.stack) {
|
|
175
|
-
console.error(_chalk2.default.gray("\nStack trace:"));
|
|
176
|
-
console.error(_chalk2.default.gray(error.stack));
|
|
177
|
-
}
|
|
178
|
-
} else {
|
|
179
|
-
console.error(_chalk2.default.red(` ${String(error)}`));
|
|
180
|
-
}
|
|
181
|
-
console.error(
|
|
182
|
-
_chalk2.default.yellow(
|
|
183
|
-
"\n\u{1F4A1} Requires the AWS CLI and iam:AddUserToGroup on the target profile.\n"
|
|
184
|
-
)
|
|
185
|
-
);
|
|
186
|
-
process.exit(1);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
exports.breakGlassCommand = breakGlassCommand;
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
-
|
|
3
|
-
var _BLMSMR5Ecjs = require('./BLMSMR5E.cjs');
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var _WOYF2L6Tcjs = require('./WOYF2L6T.cjs');
|
|
8
|
-
|
|
9
|
-
// src/commands/aws/route53/remove-record/schema.js
|
|
10
|
-
var _zod = require('zod');
|
|
11
|
-
var removeRecordOptionsSchema = _zod.z.object({
|
|
12
|
-
profile: _WOYF2L6Tcjs.profileField,
|
|
13
|
-
zone: _zod.z.string().optional().describe(
|
|
14
|
-
"Hosted zone name or ID (e.g. mountaindev.com or Z123\u2026). Skips the zone picker when set."
|
|
15
|
-
),
|
|
16
|
-
type: _zod.z.string().optional().transform(
|
|
17
|
-
(value) => value === void 0 ? void 0 : value.toUpperCase()
|
|
18
|
-
).refine(
|
|
19
|
-
(value) => value === void 0 || typeof value === "string" && _BLMSMR5Ecjs.RECORD_TYPES.includes(value),
|
|
20
|
-
{
|
|
21
|
-
message: `Record type must be one of: ${_BLMSMR5Ecjs.RECORD_TYPES.join(", ")}`
|
|
22
|
-
}
|
|
23
|
-
).describe(`DNS record type (${_BLMSMR5Ecjs.RECORD_TYPES.join(", ")})`),
|
|
24
|
-
name: _zod.z.string().optional().describe(
|
|
25
|
-
'Record name relative to the zone (e.g. "redline") or a fully-qualified name'
|
|
26
|
-
),
|
|
27
|
-
yes: _zod.z.boolean().optional().default(false).describe("Skip the confirmation prompt"),
|
|
28
|
-
dryRun: _zod.z.boolean().optional().default(false).describe("Preview the deletion without calling Route53"),
|
|
29
|
-
verbose: _WOYF2L6Tcjs.verboseField
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
exports.removeRecordOptionsSchema = removeRecordOptionsSchema;
|
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var _SBBNW2BFcjs = require('./SBBNW2BF.cjs');
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
var _3T2LXW7Jcjs = require('./3T2LXW7J.cjs');
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
var _FM5MVRQFcjs = require('./FM5MVRQF.cjs');
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
var _R3GUC7O7cjs = require('./R3GUC7O7.cjs');
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
var _NT2XXAI6cjs = require('./NT2XXAI6.cjs');
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
var _CMUD7LLNcjs = require('./CMUD7LLN.cjs');
|
|
26
|
-
|
|
27
|
-
// src/commands/aws/iam/setup-acl/handler.js
|
|
28
|
-
var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
|
|
29
|
-
var _zod = require('zod');
|
|
30
|
-
async function resolveRestrictRegions(params) {
|
|
31
|
-
const { restrictRegions } = params;
|
|
32
|
-
if (restrictRegions) {
|
|
33
|
-
console.log(`Region restriction: ${restrictRegions}`);
|
|
34
|
-
return restrictRegions === "yes";
|
|
35
|
-
}
|
|
36
|
-
console.log("Region restriction");
|
|
37
|
-
console.log(
|
|
38
|
-
" The policy UserAdminsDenyRegionsList limits acl-power-users to a hard-coded"
|
|
39
|
-
);
|
|
40
|
-
console.log(
|
|
41
|
-
" region allowlist. Most accounts should leave this OFF unless you have a strong reason."
|
|
42
|
-
);
|
|
43
|
-
const restrict = await _CMUD7LLNcjs.promptYesNo.call(void 0, {
|
|
44
|
-
message: " Attach region restriction to acl-power-users?",
|
|
45
|
-
defaultYes: false
|
|
46
|
-
});
|
|
47
|
-
console.log(` \u2192 ${restrict ? "yes" : "no"}`);
|
|
48
|
-
console.log("");
|
|
49
|
-
return restrict;
|
|
50
|
-
}
|
|
51
|
-
async function setupAclCommand(options) {
|
|
52
|
-
try {
|
|
53
|
-
const {
|
|
54
|
-
restrictRegions,
|
|
55
|
-
createUsers,
|
|
56
|
-
profile: profileOption,
|
|
57
|
-
region,
|
|
58
|
-
verbose
|
|
59
|
-
} = _FM5MVRQFcjs.setupAclOptionsSchema.parse(options);
|
|
60
|
-
_R3GUC7O7cjs.requireCommands.call(void 0, ["aws"]);
|
|
61
|
-
const profile = await _NT2XXAI6cjs.resolveProfile.call(void 0, { profile: profileOption });
|
|
62
|
-
const identity = _R3GUC7O7cjs.getCallerIdentity.call(void 0, { profile, region, verbose });
|
|
63
|
-
const accountId = identity.Account;
|
|
64
|
-
console.log("Caller:");
|
|
65
|
-
console.log(` Account: ${accountId}`);
|
|
66
|
-
console.log(` Arn: ${identity.Arn}`);
|
|
67
|
-
console.log("");
|
|
68
|
-
const restrict = await resolveRestrictRegions({ restrictRegions });
|
|
69
|
-
console.log("1. Ensure groups exist...");
|
|
70
|
-
for (const group of _SBBNW2BFcjs.ACL_GROUPS) {
|
|
71
|
-
_SBBNW2BFcjs.ensureGroup.call(void 0, { name: group, profile, verbose });
|
|
72
|
-
}
|
|
73
|
-
console.log("");
|
|
74
|
-
console.log("2. Publish custom policies...");
|
|
75
|
-
for (const policy of _SBBNW2BFcjs.CUSTOM_POLICIES) {
|
|
76
|
-
_SBBNW2BFcjs.publishPolicy.call(void 0, {
|
|
77
|
-
name: policy.name,
|
|
78
|
-
fileName: policy.fileName,
|
|
79
|
-
accountId,
|
|
80
|
-
profile,
|
|
81
|
-
verbose
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
console.log("");
|
|
85
|
-
const ADMIN = "arn:aws:iam::aws:policy/AdministratorAccess";
|
|
86
|
-
const IAM_FULL = "arn:aws:iam::aws:policy/IAMFullAccess";
|
|
87
|
-
const READ_ONLY = "arn:aws:iam::aws:policy/ReadOnlyAccess";
|
|
88
|
-
const WRITE_LIST = `arn:aws:iam::${accountId}:policy/UserAdminsWriteList`;
|
|
89
|
-
const DENY_LIST = `arn:aws:iam::${accountId}:policy/UserAdminsDenyList`;
|
|
90
|
-
const SELF_SERVICE = `arn:aws:iam::${accountId}:policy/UserAdminsSelfServiceIAM`;
|
|
91
|
-
const DENY_REGIONS = `arn:aws:iam::${accountId}:policy/UserAdminsDenyRegionsList`;
|
|
92
|
-
const STS_FEDERATION = `arn:aws:iam::${accountId}:policy/sts-federation`;
|
|
93
|
-
const S3_RESTRICTIONS = `arn:aws:iam::${accountId}:policy/S3RestrictionsDenyNonS3Services`;
|
|
94
|
-
console.log("3. Attach policies to groups...");
|
|
95
|
-
_SBBNW2BFcjs.attach.call(void 0, { group: "acl-admin-do-not-use", arn: ADMIN, profile, verbose });
|
|
96
|
-
_SBBNW2BFcjs.attach.call(void 0, { group: "acl-iam-full-access", arn: IAM_FULL, profile, verbose });
|
|
97
|
-
_SBBNW2BFcjs.attach.call(void 0, { group: "acl-iam-full-access", arn: READ_ONLY, profile, verbose });
|
|
98
|
-
_SBBNW2BFcjs.attach.call(void 0, {
|
|
99
|
-
group: "acl-iam-full-access",
|
|
100
|
-
arn: SELF_SERVICE,
|
|
101
|
-
profile,
|
|
102
|
-
verbose
|
|
103
|
-
});
|
|
104
|
-
_SBBNW2BFcjs.attach.call(void 0, {
|
|
105
|
-
group: "acl-iam-full-access",
|
|
106
|
-
arn: STS_FEDERATION,
|
|
107
|
-
profile,
|
|
108
|
-
verbose
|
|
109
|
-
});
|
|
110
|
-
_SBBNW2BFcjs.detach.call(void 0, { group: "acl-iam-full-access", arn: DENY_LIST, profile, verbose });
|
|
111
|
-
_SBBNW2BFcjs.attach.call(void 0, { group: "acl-power-users", arn: READ_ONLY, profile, verbose });
|
|
112
|
-
_SBBNW2BFcjs.attach.call(void 0, { group: "acl-power-users", arn: WRITE_LIST, profile, verbose });
|
|
113
|
-
_SBBNW2BFcjs.attach.call(void 0, { group: "acl-power-users", arn: DENY_LIST, profile, verbose });
|
|
114
|
-
_SBBNW2BFcjs.attach.call(void 0, { group: "acl-power-users", arn: SELF_SERVICE, profile, verbose });
|
|
115
|
-
_SBBNW2BFcjs.attach.call(void 0, { group: "acl-read-only", arn: READ_ONLY, profile, verbose });
|
|
116
|
-
_SBBNW2BFcjs.attach.call(void 0, { group: "acl-read-only", arn: STS_FEDERATION, profile, verbose });
|
|
117
|
-
_SBBNW2BFcjs.attach.call(void 0, {
|
|
118
|
-
group: "acl-s3-restrictions",
|
|
119
|
-
arn: S3_RESTRICTIONS,
|
|
120
|
-
profile,
|
|
121
|
-
verbose
|
|
122
|
-
});
|
|
123
|
-
console.log("");
|
|
124
|
-
console.log("4. Apply region restriction to acl-power-users...");
|
|
125
|
-
if (restrict) {
|
|
126
|
-
_SBBNW2BFcjs.attach.call(void 0, { group: "acl-power-users", arn: DENY_REGIONS, profile, verbose });
|
|
127
|
-
} else {
|
|
128
|
-
_SBBNW2BFcjs.detach.call(void 0, { group: "acl-power-users", arn: DENY_REGIONS, profile, verbose });
|
|
129
|
-
}
|
|
130
|
-
console.log("");
|
|
131
|
-
console.log("5. Detach legacy policies (if present)...");
|
|
132
|
-
const LEGACY_POWER_USER = "arn:aws:iam::aws:policy/PowerUserAccess";
|
|
133
|
-
const LEGACY_IAM_RO = "arn:aws:iam::aws:policy/IAMReadOnlyAccess";
|
|
134
|
-
const LEGACY_ALLOW = `arn:aws:iam::${accountId}:policy/UserAdminsAllowList`;
|
|
135
|
-
const LEGACY_DENY_SVCS = `arn:aws:iam::${accountId}:policy/UserAdminsDenyListServices`;
|
|
136
|
-
const LEGACY_DENY_GPU = `arn:aws:iam::${accountId}:policy/UserAdminsDenyListGpu`;
|
|
137
|
-
const legacyArns = [
|
|
138
|
-
LEGACY_POWER_USER,
|
|
139
|
-
LEGACY_IAM_RO,
|
|
140
|
-
LEGACY_ALLOW,
|
|
141
|
-
LEGACY_DENY_SVCS,
|
|
142
|
-
LEGACY_DENY_GPU
|
|
143
|
-
];
|
|
144
|
-
for (const group of _SBBNW2BFcjs.ACL_GROUPS) {
|
|
145
|
-
for (const arn of legacyArns) {
|
|
146
|
-
_SBBNW2BFcjs.detach.call(void 0, { group, arn, profile, verbose });
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
console.log("");
|
|
150
|
-
console.log("6. Final state:");
|
|
151
|
-
_SBBNW2BFcjs.printFinalState.call(void 0, { profile, verbose });
|
|
152
|
-
console.log("");
|
|
153
|
-
if (createUsers) {
|
|
154
|
-
console.log("7. Create IAM users (optional)");
|
|
155
|
-
console.log("");
|
|
156
|
-
await _3T2LXW7Jcjs.createUsersInteractive.call(void 0, { profile, verbose });
|
|
157
|
-
}
|
|
158
|
-
console.log(_chalk2.default.green("\n\u2705 ACL setup complete."));
|
|
159
|
-
} catch (error) {
|
|
160
|
-
if (error instanceof _zod.ZodError) {
|
|
161
|
-
console.error(_chalk2.default.red("\n\u274C Invalid command options:"));
|
|
162
|
-
error.errors.forEach((err) => {
|
|
163
|
-
console.error(_chalk2.default.red(` ${err.path.join(".")}: ${err.message}`));
|
|
164
|
-
});
|
|
165
|
-
process.exit(1);
|
|
166
|
-
}
|
|
167
|
-
const verbose = (
|
|
168
|
-
/** @type {any} */
|
|
169
|
-
_optionalChain([options, 'optionalAccess', _ => _.verbose]) || false
|
|
170
|
-
);
|
|
171
|
-
console.error(_chalk2.default.red("\n\u274C iam setup-acl failed:"));
|
|
172
|
-
if (error instanceof Error) {
|
|
173
|
-
console.error(_chalk2.default.red(` ${error.message}`));
|
|
174
|
-
if (verbose && error.stack) {
|
|
175
|
-
console.error(_chalk2.default.gray("\nStack trace:"));
|
|
176
|
-
console.error(_chalk2.default.gray(error.stack));
|
|
177
|
-
}
|
|
178
|
-
} else {
|
|
179
|
-
console.error(_chalk2.default.red(` ${String(error)}`));
|
|
180
|
-
}
|
|
181
|
-
console.error(
|
|
182
|
-
_chalk2.default.yellow(
|
|
183
|
-
"\n\u{1F4A1} Run with a profile that has IAMFullAccess (e.g. md-*-iam-admin).\n"
|
|
184
|
-
)
|
|
185
|
-
);
|
|
186
|
-
process.exit(1);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
exports.setupAclCommand = setupAclCommand;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|