aws-security-mcp 0.6.3 → 0.7.0
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/dashboard/dist/assets/index-AKJ_-GfD.js +46 -0
- package/dashboard/dist/assets/index-UN8P_PO6.css +2 -0
- package/dashboard/dist/data.json +293 -105
- package/dashboard/dist/index.html +2 -2
- package/dist/bin/aws-security-mcp.js +24 -16
- package/dist/bin/aws-security-mcp.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +24 -16
- package/dist/src/index.js.map +1 -1
- package/package.json +1 -1
- package/dashboard/dist/assets/index-BYE-UdjR.js +0 -46
- package/dashboard/dist/assets/index-CQyERuqT.css +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--leading-tight:1.25;--radius-lg:.5rem;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-16{top:calc(var(--spacing) * 16)}.right-0{right:calc(var(--spacing) * 0)}.bottom-0{bottom:calc(var(--spacing) * 0)}.left-0{left:calc(var(--spacing) * 0)}.z-10{z-index:10}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-16{margin-top:calc(var(--spacing) * 16)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.table{display:table}.h-\[300px\]{height:300px}.min-h-screen{min-height:100vh}.w-5{width:calc(var(--spacing) * 5)}.w-56{width:calc(var(--spacing) * 56)}.w-full{width:100%}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[200px\]{min-width:200px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-lg{border-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-blue-500\/30{border-color:#3080ff4d}@supports (color:color-mix(in lab, red, red)){.border-blue-500\/30{border-color:color-mix(in oklab, var(--color-blue-500) 30%, transparent)}}.border-current{border-color:currentColor}.border-green-500\/30{border-color:#00c7584d}@supports (color:color-mix(in lab, red, red)){.border-green-500\/30{border-color:color-mix(in oklab, var(--color-green-500) 30%, transparent)}}.border-orange-500\/30{border-color:#fe6e004d}@supports (color:color-mix(in lab, red, red)){.border-orange-500\/30{border-color:color-mix(in oklab, var(--color-orange-500) 30%, transparent)}}.border-red-500\/30{border-color:#fb2c364d}@supports (color:color-mix(in lab, red, red)){.border-red-500\/30{border-color:color-mix(in oklab, var(--color-red-500) 30%, transparent)}}.border-slate-600{border-color:var(--color-slate-600)}.border-slate-700{border-color:var(--color-slate-700)}.border-transparent{border-color:#0000}.border-yellow-500\/20{border-color:#edb20033}@supports (color:color-mix(in lab, red, red)){.border-yellow-500\/20{border-color:color-mix(in oklab, var(--color-yellow-500) 20%, transparent)}}.border-yellow-500\/30{border-color:#edb2004d}@supports (color:color-mix(in lab, red, red)){.border-yellow-500\/30{border-color:color-mix(in oklab, var(--color-yellow-500) 30%, transparent)}}.bg-blue-500\/20{background-color:#3080ff33}@supports (color:color-mix(in lab, red, red)){.bg-blue-500\/20{background-color:color-mix(in oklab, var(--color-blue-500) 20%, transparent)}}.bg-green-500\/20{background-color:#00c75833}@supports (color:color-mix(in lab, red, red)){.bg-green-500\/20{background-color:color-mix(in oklab, var(--color-green-500) 20%, transparent)}}.bg-orange-500\/20{background-color:#fe6e0033}@supports (color:color-mix(in lab, red, red)){.bg-orange-500\/20{background-color:color-mix(in oklab, var(--color-orange-500) 20%, transparent)}}.bg-red-500\/20{background-color:#fb2c3633}@supports (color:color-mix(in lab, red, red)){.bg-red-500\/20{background-color:color-mix(in oklab, var(--color-red-500) 20%, transparent)}}.bg-slate-700{background-color:var(--color-slate-700)}.bg-slate-800{background-color:var(--color-slate-800)}.bg-slate-800\/30{background-color:#1d293d4d}@supports (color:color-mix(in lab, red, red)){.bg-slate-800\/30{background-color:color-mix(in oklab, var(--color-slate-800) 30%, transparent)}}.bg-slate-800\/50{background-color:#1d293d80}@supports (color:color-mix(in lab, red, red)){.bg-slate-800\/50{background-color:color-mix(in oklab, var(--color-slate-800) 50%, transparent)}}.bg-slate-800\/80{background-color:#1d293dcc}@supports (color:color-mix(in lab, red, red)){.bg-slate-800\/80{background-color:color-mix(in oklab, var(--color-slate-800) 80%, transparent)}}.bg-slate-900{background-color:var(--color-slate-900)}.bg-yellow-500\/5{background-color:#edb2000d}@supports (color:color-mix(in lab, red, red)){.bg-yellow-500\/5{background-color:color-mix(in oklab, var(--color-yellow-500) 5%, transparent)}}.bg-yellow-500\/20{background-color:#edb20033}@supports (color:color-mix(in lab, red, red)){.bg-yellow-500\/20{background-color:color-mix(in oklab, var(--color-yellow-500) 20%, transparent)}}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.whitespace-nowrap{white-space:nowrap}.text-blue-400{color:var(--color-blue-400)}.text-green-400{color:var(--color-green-400)}.text-orange-400{color:var(--color-orange-400)}.text-red-400{color:var(--color-red-400)}.text-slate-50{color:var(--color-slate-50)}.text-slate-100{color:var(--color-slate-100)}.text-slate-200{color:var(--color-slate-200)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-400\/80{color:#fac800cc}@supports (color:color-mix(in lab, red, red)){.text-yellow-400\/80{color:color-mix(in oklab, var(--color-yellow-400) 80%, transparent)}}.text-yellow-500\/60{color:#edb20099}@supports (color:color-mix(in lab, red, red)){.text-yellow-500\/60{color:color-mix(in oklab, var(--color-yellow-500) 60%, transparent)}}.italic{font-style:italic}.placeholder-slate-500::placeholder{color:var(--color-slate-500)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.hover\:border-slate-400:hover{border-color:var(--color-slate-400)}.hover\:border-slate-500:hover{border-color:var(--color-slate-500)}.hover\:bg-slate-700\/50:hover{background-color:#31415880}@supports (color:color-mix(in lab, red, red)){.hover\:bg-slate-700\/50:hover{background-color:color-mix(in oklab, var(--color-slate-700) 50%, transparent)}}.hover\:text-slate-200:hover{color:var(--color-slate-200)}}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}@media (width>=40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width>=48rem){.md\:col-span-2{grid-column:span 2/span 2}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width>=64rem){.lg\:mt-0{margin-top:calc(var(--spacing) * 0)}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}}body{color:#f8fafc;background-color:#0f172a;margin:0;font-family:Inter,system-ui,-apple-system,sans-serif}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:#1e293b}::-webkit-scrollbar-thumb{background:#475569;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#64748b}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}
|
package/dashboard/dist/data.json
CHANGED
|
@@ -1,89 +1,36 @@
|
|
|
1
1
|
{
|
|
2
2
|
"lastScan": {
|
|
3
|
-
"scanStart": "2026-04-
|
|
4
|
-
"scanEnd": "2026-04-
|
|
3
|
+
"scanStart": "2026-04-12T08:30:01.552Z",
|
|
4
|
+
"scanEnd": "2026-04-12T08:31:15.816Z",
|
|
5
5
|
"region": "cn-north-1",
|
|
6
6
|
"accountId": "468254682119",
|
|
7
7
|
"summary": {
|
|
8
|
-
"totalFindings":
|
|
9
|
-
"critical":
|
|
10
|
-
"high":
|
|
11
|
-
"medium":
|
|
12
|
-
"low":
|
|
13
|
-
"modulesSuccess":
|
|
14
|
-
"modulesError": 0
|
|
8
|
+
"totalFindings": 24,
|
|
9
|
+
"critical": 2,
|
|
10
|
+
"high": 7,
|
|
11
|
+
"medium": 9,
|
|
12
|
+
"low": 6,
|
|
13
|
+
"modulesSuccess": 12,
|
|
14
|
+
"modulesError": 0,
|
|
15
|
+
"modulesDisabled": 4
|
|
15
16
|
},
|
|
16
17
|
"modules": [
|
|
17
|
-
{
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
"module": "dns_dangling",
|
|
34
|
-
"findingsCount": 0,
|
|
35
|
-
"status": "success"
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
"module": "network_reachability",
|
|
39
|
-
"findingsCount": 1,
|
|
40
|
-
"status": "success"
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"module": "iam_privilege_escalation",
|
|
44
|
-
"findingsCount": 1,
|
|
45
|
-
"status": "success"
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
"module": "public_access_verify",
|
|
49
|
-
"findingsCount": 0,
|
|
50
|
-
"status": "success"
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
"module": "tag_compliance",
|
|
54
|
-
"findingsCount": 3,
|
|
55
|
-
"status": "success"
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
"module": "idle_resources",
|
|
59
|
-
"findingsCount": 2,
|
|
60
|
-
"status": "success"
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
"module": "disaster_recovery",
|
|
64
|
-
"findingsCount": 1,
|
|
65
|
-
"status": "success"
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
"module": "security_hub_findings",
|
|
69
|
-
"findingsCount": 2,
|
|
70
|
-
"status": "success"
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
"module": "guardduty_findings",
|
|
74
|
-
"findingsCount": 0,
|
|
75
|
-
"status": "success"
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
"module": "inspector_findings",
|
|
79
|
-
"findingsCount": 0,
|
|
80
|
-
"status": "success"
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
"module": "trusted_advisor_findings",
|
|
84
|
-
"findingsCount": 0,
|
|
85
|
-
"status": "success"
|
|
86
|
-
}
|
|
18
|
+
{ "module": "service_detection", "findingsCount": 2, "status": "success" },
|
|
19
|
+
{ "module": "secret_exposure", "findingsCount": 1, "status": "success" },
|
|
20
|
+
{ "module": "ssl_certificate", "findingsCount": 0, "status": "success" },
|
|
21
|
+
{ "module": "dns_dangling", "findingsCount": 0, "status": "success" },
|
|
22
|
+
{ "module": "network_reachability", "findingsCount": 2, "status": "success" },
|
|
23
|
+
{ "module": "iam_privilege_escalation", "findingsCount": 2, "status": "success" },
|
|
24
|
+
{ "module": "public_access_verify", "findingsCount": 1, "status": "success" },
|
|
25
|
+
{ "module": "tag_compliance", "findingsCount": 3, "status": "success" },
|
|
26
|
+
{ "module": "idle_resources", "findingsCount": 2, "status": "success" },
|
|
27
|
+
{ "module": "disaster_recovery", "findingsCount": 2, "status": "success" },
|
|
28
|
+
{ "module": "security_hub_findings", "findingsCount": 8, "status": "success" },
|
|
29
|
+
{ "module": "trusted_advisor_findings", "findingsCount": 1, "status": "success" },
|
|
30
|
+
{ "module": "guardduty_findings", "findingsCount": 0, "status": "disabled" },
|
|
31
|
+
{ "module": "inspector_findings", "findingsCount": 0, "status": "disabled" },
|
|
32
|
+
{ "module": "config_rules_findings", "findingsCount": 0, "status": "disabled" },
|
|
33
|
+
{ "module": "access_analyzer_findings", "findingsCount": 0, "status": "disabled" }
|
|
87
34
|
],
|
|
88
35
|
"findings": [
|
|
89
36
|
{
|
|
@@ -101,7 +48,8 @@
|
|
|
101
48
|
],
|
|
102
49
|
"severity": "HIGH",
|
|
103
50
|
"priority": "P1",
|
|
104
|
-
"module": "service_detection"
|
|
51
|
+
"module": "service_detection",
|
|
52
|
+
"accountId": "468254682119"
|
|
105
53
|
},
|
|
106
54
|
{
|
|
107
55
|
"riskScore": 6.0,
|
|
@@ -118,7 +66,27 @@
|
|
|
118
66
|
],
|
|
119
67
|
"severity": "MEDIUM",
|
|
120
68
|
"priority": "P2",
|
|
121
|
-
"module": "service_detection"
|
|
69
|
+
"module": "service_detection",
|
|
70
|
+
"accountId": "468254682119"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"riskScore": 9.5,
|
|
74
|
+
"title": "Hardcoded AWS access key found in Lambda environment variables",
|
|
75
|
+
"resourceType": "AWS::Lambda::Function",
|
|
76
|
+
"resourceId": "data-processor-fn",
|
|
77
|
+
"resourceArn": "arn:aws-cn:lambda:cn-north-1:468254682119:function:data-processor-fn",
|
|
78
|
+
"region": "cn-north-1",
|
|
79
|
+
"description": "Lambda function data-processor-fn has AWS access key ID (AKIA...) stored as plaintext in environment variables.",
|
|
80
|
+
"impact": "Exposed credentials can be used for unauthorized access to AWS resources. Keys may be leaked via CloudWatch logs.",
|
|
81
|
+
"remediationSteps": [
|
|
82
|
+
"Remove hardcoded credentials from environment variables.",
|
|
83
|
+
"Use an IAM execution role with appropriate permissions instead.",
|
|
84
|
+
"Rotate the exposed access key immediately."
|
|
85
|
+
],
|
|
86
|
+
"severity": "CRITICAL",
|
|
87
|
+
"priority": "P0",
|
|
88
|
+
"module": "secret_exposure",
|
|
89
|
+
"accountId": "468254682119"
|
|
122
90
|
},
|
|
123
91
|
{
|
|
124
92
|
"riskScore": 8.0,
|
|
@@ -135,10 +103,29 @@
|
|
|
135
103
|
],
|
|
136
104
|
"severity": "HIGH",
|
|
137
105
|
"priority": "P1",
|
|
138
|
-
"module": "network_reachability"
|
|
106
|
+
"module": "network_reachability",
|
|
107
|
+
"accountId": "468254682119"
|
|
139
108
|
},
|
|
140
109
|
{
|
|
141
|
-
"riskScore":
|
|
110
|
+
"riskScore": 6.5,
|
|
111
|
+
"title": "EC2 instance i-0xyz789 has RDP (3389) reachable from 0.0.0.0/0",
|
|
112
|
+
"resourceType": "AWS::EC2::Instance",
|
|
113
|
+
"resourceId": "i-0xyz789",
|
|
114
|
+
"resourceArn": "arn:aws-cn:ec2:cn-north-1:468254682119:instance/i-0xyz789",
|
|
115
|
+
"region": "cn-north-1",
|
|
116
|
+
"description": "Instance i-0xyz789 has RDP port 3389 reachable from the internet via security group sg-0aabb11.",
|
|
117
|
+
"impact": "RDP exposed to the internet enables remote desktop brute-force attacks.",
|
|
118
|
+
"remediationSteps": [
|
|
119
|
+
"Restrict port 3389 to known IP ranges or VPN CIDR.",
|
|
120
|
+
"Use AWS Systems Manager Fleet Manager for remote desktop access."
|
|
121
|
+
],
|
|
122
|
+
"severity": "MEDIUM",
|
|
123
|
+
"priority": "P2",
|
|
124
|
+
"module": "network_reachability",
|
|
125
|
+
"accountId": "468254682119"
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"riskScore": 9.0,
|
|
142
129
|
"title": "IAM user admin-user can escalate privileges via iam:CreatePolicyVersion",
|
|
143
130
|
"resourceType": "AWS::IAM::User",
|
|
144
131
|
"resourceId": "admin-user",
|
|
@@ -150,9 +137,47 @@
|
|
|
150
137
|
"Remove iam:CreatePolicyVersion from the user's permissions.",
|
|
151
138
|
"Use AWS Organizations SCPs to prevent privilege escalation."
|
|
152
139
|
],
|
|
153
|
-
"severity": "
|
|
154
|
-
"priority": "
|
|
155
|
-
"module": "iam_privilege_escalation"
|
|
140
|
+
"severity": "CRITICAL",
|
|
141
|
+
"priority": "P0",
|
|
142
|
+
"module": "iam_privilege_escalation",
|
|
143
|
+
"accountId": "468254682119"
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"riskScore": 7.0,
|
|
147
|
+
"title": "IAM role data-pipeline-role has overly permissive sts:AssumeRole trust policy",
|
|
148
|
+
"resourceType": "AWS::IAM::Role",
|
|
149
|
+
"resourceId": "data-pipeline-role",
|
|
150
|
+
"resourceArn": "arn:aws-cn:iam::468254682119:role/data-pipeline-role",
|
|
151
|
+
"region": "global",
|
|
152
|
+
"description": "Role data-pipeline-role trust policy allows sts:AssumeRole from any principal in account 468254682119 without conditions.",
|
|
153
|
+
"impact": "Any IAM entity in the account can assume this role, potentially gaining unintended permissions.",
|
|
154
|
+
"remediationSteps": [
|
|
155
|
+
"Restrict the trust policy to specific principals.",
|
|
156
|
+
"Add conditions such as aws:PrincipalTag or aws:SourceIp."
|
|
157
|
+
],
|
|
158
|
+
"severity": "HIGH",
|
|
159
|
+
"priority": "P1",
|
|
160
|
+
"module": "iam_privilege_escalation",
|
|
161
|
+
"accountId": "468254682119"
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"riskScore": 7.5,
|
|
165
|
+
"title": "S3 bucket data-exports-bucket has public ACL grants",
|
|
166
|
+
"resourceType": "AWS::S3::Bucket",
|
|
167
|
+
"resourceId": "data-exports-bucket",
|
|
168
|
+
"resourceArn": "arn:aws-cn:s3:::data-exports-bucket",
|
|
169
|
+
"region": "cn-north-1",
|
|
170
|
+
"description": "S3 bucket data-exports-bucket has ACL grants allowing public read access (AllUsers or AuthenticatedUsers).",
|
|
171
|
+
"impact": "Sensitive data in the bucket may be publicly accessible.",
|
|
172
|
+
"remediationSteps": [
|
|
173
|
+
"Remove public ACL grants from the bucket.",
|
|
174
|
+
"Enable S3 Block Public Access at the bucket level.",
|
|
175
|
+
"Review bucket contents for sensitive data exposure."
|
|
176
|
+
],
|
|
177
|
+
"severity": "HIGH",
|
|
178
|
+
"priority": "P1",
|
|
179
|
+
"module": "public_access_verify",
|
|
180
|
+
"accountId": "468254682119"
|
|
156
181
|
},
|
|
157
182
|
{
|
|
158
183
|
"riskScore": 3.5,
|
|
@@ -168,7 +193,8 @@
|
|
|
168
193
|
],
|
|
169
194
|
"severity": "LOW",
|
|
170
195
|
"priority": "P3",
|
|
171
|
-
"module": "tag_compliance"
|
|
196
|
+
"module": "tag_compliance",
|
|
197
|
+
"accountId": "468254682119"
|
|
172
198
|
},
|
|
173
199
|
{
|
|
174
200
|
"riskScore": 3.5,
|
|
@@ -184,7 +210,8 @@
|
|
|
184
210
|
],
|
|
185
211
|
"severity": "LOW",
|
|
186
212
|
"priority": "P3",
|
|
187
|
-
"module": "tag_compliance"
|
|
213
|
+
"module": "tag_compliance",
|
|
214
|
+
"accountId": "468254682119"
|
|
188
215
|
},
|
|
189
216
|
{
|
|
190
217
|
"riskScore": 3.5,
|
|
@@ -200,7 +227,8 @@
|
|
|
200
227
|
],
|
|
201
228
|
"severity": "LOW",
|
|
202
229
|
"priority": "P3",
|
|
203
|
-
"module": "tag_compliance"
|
|
230
|
+
"module": "tag_compliance",
|
|
231
|
+
"accountId": "468254682119"
|
|
204
232
|
},
|
|
205
233
|
{
|
|
206
234
|
"riskScore": 4.0,
|
|
@@ -217,7 +245,8 @@
|
|
|
217
245
|
],
|
|
218
246
|
"severity": "MEDIUM",
|
|
219
247
|
"priority": "P2",
|
|
220
|
-
"module": "idle_resources"
|
|
248
|
+
"module": "idle_resources",
|
|
249
|
+
"accountId": "468254682119"
|
|
221
250
|
},
|
|
222
251
|
{
|
|
223
252
|
"riskScore": 3.5,
|
|
@@ -233,7 +262,8 @@
|
|
|
233
262
|
],
|
|
234
263
|
"severity": "LOW",
|
|
235
264
|
"priority": "P3",
|
|
236
|
-
"module": "idle_resources"
|
|
265
|
+
"module": "idle_resources",
|
|
266
|
+
"accountId": "468254682119"
|
|
237
267
|
},
|
|
238
268
|
{
|
|
239
269
|
"riskScore": 5.5,
|
|
@@ -250,7 +280,26 @@
|
|
|
250
280
|
],
|
|
251
281
|
"severity": "MEDIUM",
|
|
252
282
|
"priority": "P2",
|
|
253
|
-
"module": "disaster_recovery"
|
|
283
|
+
"module": "disaster_recovery",
|
|
284
|
+
"accountId": "468254682119"
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"riskScore": 5.0,
|
|
288
|
+
"title": "S3 bucket app-assets has no cross-region replication configured",
|
|
289
|
+
"resourceType": "AWS::S3::Bucket",
|
|
290
|
+
"resourceId": "app-assets",
|
|
291
|
+
"resourceArn": "arn:aws-cn:s3:::app-assets",
|
|
292
|
+
"region": "cn-north-1",
|
|
293
|
+
"description": "S3 bucket app-assets does not have cross-region replication (CRR) enabled.",
|
|
294
|
+
"impact": "Data loss risk in a regional disaster — no offsite backup for bucket contents.",
|
|
295
|
+
"remediationSteps": [
|
|
296
|
+
"Enable cross-region replication to cn-northwest-1.",
|
|
297
|
+
"Ensure versioning is enabled on both source and destination buckets."
|
|
298
|
+
],
|
|
299
|
+
"severity": "MEDIUM",
|
|
300
|
+
"priority": "P2",
|
|
301
|
+
"module": "disaster_recovery",
|
|
302
|
+
"accountId": "468254682119"
|
|
254
303
|
},
|
|
255
304
|
{
|
|
256
305
|
"riskScore": 5.5,
|
|
@@ -266,7 +315,9 @@
|
|
|
266
315
|
],
|
|
267
316
|
"severity": "MEDIUM",
|
|
268
317
|
"priority": "P2",
|
|
269
|
-
"module": "security_hub_findings"
|
|
318
|
+
"module": "security_hub_findings",
|
|
319
|
+
"source": "FSBP",
|
|
320
|
+
"accountId": "468254682119"
|
|
270
321
|
},
|
|
271
322
|
{
|
|
272
323
|
"riskScore": 5.5,
|
|
@@ -282,24 +333,161 @@
|
|
|
282
333
|
],
|
|
283
334
|
"severity": "MEDIUM",
|
|
284
335
|
"priority": "P2",
|
|
285
|
-
"module": "security_hub_findings"
|
|
336
|
+
"module": "security_hub_findings",
|
|
337
|
+
"source": "FSBP",
|
|
338
|
+
"accountId": "468254682119"
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
"riskScore": 8.5,
|
|
342
|
+
"title": "[Security Hub] IAM.4 — IAM root user access key should not exist",
|
|
343
|
+
"resourceType": "AWS::IAM::User",
|
|
344
|
+
"resourceId": "root",
|
|
345
|
+
"resourceArn": "arn:aws-cn:iam::468254682119:root",
|
|
346
|
+
"region": "global",
|
|
347
|
+
"description": "FSBP control IAM.4: Root user has active access keys. MFA status not verified.",
|
|
348
|
+
"impact": "Root account compromise gives unrestricted access to all AWS services and resources.",
|
|
349
|
+
"remediationSteps": [
|
|
350
|
+
"Delete root user access keys.",
|
|
351
|
+
"Enable MFA on the root account.",
|
|
352
|
+
"Use IAM users or roles for daily operations."
|
|
353
|
+
],
|
|
354
|
+
"severity": "HIGH",
|
|
355
|
+
"priority": "P1",
|
|
356
|
+
"module": "security_hub_findings",
|
|
357
|
+
"source": "FSBP",
|
|
358
|
+
"accountId": "468254682119"
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
"riskScore": 6.0,
|
|
362
|
+
"title": "[Security Hub] CloudTrail is not enabled in all regions",
|
|
363
|
+
"resourceType": "AWS::CloudTrail::Trail",
|
|
364
|
+
"resourceId": "management-trail",
|
|
365
|
+
"resourceArn": "arn:aws-cn:cloudtrail:cn-north-1:468254682119:trail/management-trail",
|
|
366
|
+
"region": "cn-north-1",
|
|
367
|
+
"description": "AWS Config rule: CloudTrail is configured for cn-north-1 only, not all regions.",
|
|
368
|
+
"impact": "API activity in other regions will not be logged, reducing audit visibility.",
|
|
369
|
+
"remediationSteps": [
|
|
370
|
+
"Update CloudTrail to enable multi-region logging.",
|
|
371
|
+
"Enable log file validation for tamper detection."
|
|
372
|
+
],
|
|
373
|
+
"severity": "MEDIUM",
|
|
374
|
+
"priority": "P2",
|
|
375
|
+
"module": "security_hub_findings",
|
|
376
|
+
"source": "Config",
|
|
377
|
+
"accountId": "468254682119"
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
"riskScore": 4.0,
|
|
381
|
+
"title": "[Security Hub] S3 bucket versioning is not enabled",
|
|
382
|
+
"resourceType": "AWS::S3::Bucket",
|
|
383
|
+
"resourceId": "logs-archive-bucket",
|
|
384
|
+
"resourceArn": "arn:aws-cn:s3:::logs-archive-bucket",
|
|
385
|
+
"region": "cn-north-1",
|
|
386
|
+
"description": "AWS Config rule: S3 bucket logs-archive-bucket does not have versioning enabled.",
|
|
387
|
+
"impact": "Accidental or malicious deletion of objects cannot be recovered.",
|
|
388
|
+
"remediationSteps": [
|
|
389
|
+
"Enable versioning on the S3 bucket.",
|
|
390
|
+
"Consider adding lifecycle rules to manage version retention."
|
|
391
|
+
],
|
|
392
|
+
"severity": "LOW",
|
|
393
|
+
"priority": "P3",
|
|
394
|
+
"module": "security_hub_findings",
|
|
395
|
+
"source": "Config",
|
|
396
|
+
"accountId": "468254682119"
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
"riskScore": 8.0,
|
|
400
|
+
"title": "[Security Hub] CVE-2024-6387 — OpenSSH regresshion vulnerability on i-0abc123",
|
|
401
|
+
"resourceType": "AWS::EC2::Instance",
|
|
402
|
+
"resourceId": "i-0abc123",
|
|
403
|
+
"resourceArn": "arn:aws-cn:ec2:cn-north-1:468254682119:instance/i-0abc123",
|
|
404
|
+
"region": "cn-north-1",
|
|
405
|
+
"description": "Inspector finding: EC2 instance i-0abc123 running OpenSSH 8.5p1 affected by CVE-2024-6387 (regresshion).",
|
|
406
|
+
"impact": "Remote code execution via race condition in signal handler. CVSS 8.1.",
|
|
407
|
+
"remediationSteps": [
|
|
408
|
+
"Update OpenSSH to version 9.8p1 or later.",
|
|
409
|
+
"As a workaround, set LoginGraceTime to 0 in sshd_config (may cause DoS)."
|
|
410
|
+
],
|
|
411
|
+
"severity": "HIGH",
|
|
412
|
+
"priority": "P1",
|
|
413
|
+
"module": "security_hub_findings",
|
|
414
|
+
"source": "Inspector",
|
|
415
|
+
"accountId": "468254682119"
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
"riskScore": 6.0,
|
|
419
|
+
"title": "[Security Hub] S3 bucket allows cross-account access from external account",
|
|
420
|
+
"resourceType": "AWS::S3::Bucket",
|
|
421
|
+
"resourceId": "shared-data-bucket",
|
|
422
|
+
"resourceArn": "arn:aws-cn:s3:::shared-data-bucket",
|
|
423
|
+
"region": "cn-north-1",
|
|
424
|
+
"description": "Access Analyzer finding: S3 bucket shared-data-bucket policy grants access to external account 123456789012.",
|
|
425
|
+
"impact": "Data in the bucket is accessible to an external AWS account, which may be unintended.",
|
|
426
|
+
"remediationSteps": [
|
|
427
|
+
"Review the bucket policy and remove unintended cross-account grants.",
|
|
428
|
+
"Use S3 Access Points for controlled cross-account access."
|
|
429
|
+
],
|
|
430
|
+
"severity": "MEDIUM",
|
|
431
|
+
"priority": "P2",
|
|
432
|
+
"module": "security_hub_findings",
|
|
433
|
+
"source": "AA",
|
|
434
|
+
"accountId": "468254682119"
|
|
435
|
+
},
|
|
436
|
+
{
|
|
437
|
+
"riskScore": 7.0,
|
|
438
|
+
"title": "[Security Hub] Unusual API call pattern detected from EC2 instance",
|
|
439
|
+
"resourceType": "AWS::EC2::Instance",
|
|
440
|
+
"resourceId": "i-0xyz789",
|
|
441
|
+
"resourceArn": "arn:aws-cn:ec2:cn-north-1:468254682119:instance/i-0xyz789",
|
|
442
|
+
"region": "cn-north-1",
|
|
443
|
+
"description": "GuardDuty finding: EC2 instance i-0xyz789 made unusual DescribeInstances and GetCallerIdentity API calls at 03:00 UTC.",
|
|
444
|
+
"impact": "Potential reconnaissance activity indicating compromised instance credentials.",
|
|
445
|
+
"remediationSteps": [
|
|
446
|
+
"Investigate the instance for unauthorized access.",
|
|
447
|
+
"Rotate instance role credentials.",
|
|
448
|
+
"Review CloudTrail logs for the full API call timeline."
|
|
449
|
+
],
|
|
450
|
+
"severity": "HIGH",
|
|
451
|
+
"priority": "P1",
|
|
452
|
+
"module": "security_hub_findings",
|
|
453
|
+
"source": "GuardDuty",
|
|
454
|
+
"accountId": "468254682119"
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
"riskScore": 3.0,
|
|
458
|
+
"title": "VPC limit approaching: 4 of 5 VPCs in use",
|
|
459
|
+
"resourceType": "AWS::EC2::VPC",
|
|
460
|
+
"resourceId": "vpc-limit-cn-north-1",
|
|
461
|
+
"resourceArn": "arn:aws-cn:ec2:cn-north-1:468254682119:vpc-limit",
|
|
462
|
+
"region": "cn-north-1",
|
|
463
|
+
"description": "Trusted Advisor check: 4 of 5 VPCs are in use (80% utilization) in cn-north-1.",
|
|
464
|
+
"impact": "Approaching the VPC limit may prevent creation of new VPCs when needed.",
|
|
465
|
+
"remediationSteps": [
|
|
466
|
+
"Request a VPC limit increase via AWS Support.",
|
|
467
|
+
"Review existing VPCs and delete unused ones."
|
|
468
|
+
],
|
|
469
|
+
"severity": "LOW",
|
|
470
|
+
"priority": "P3",
|
|
471
|
+
"module": "trusted_advisor_findings",
|
|
472
|
+
"accountId": "468254682119"
|
|
286
473
|
}
|
|
287
474
|
]
|
|
288
475
|
},
|
|
289
476
|
"history": [
|
|
290
|
-
{
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
}
|
|
477
|
+
{ "date": "2026-03-14", "score": 55, "critical": 4, "high": 10, "medium": 14, "low": 9, "totalFindings": 37 },
|
|
478
|
+
{ "date": "2026-03-17", "score": 53, "critical": 5, "high": 11, "medium": 13, "low": 10, "totalFindings": 39 },
|
|
479
|
+
{ "date": "2026-03-20", "score": 58, "critical": 3, "high": 9, "medium": 13, "low": 9, "totalFindings": 34 },
|
|
480
|
+
{ "date": "2026-03-23", "score": 60, "critical": 3, "high": 8, "medium": 12, "low": 9, "totalFindings": 32 },
|
|
481
|
+
{ "date": "2026-03-26", "score": 59, "critical": 3, "high": 9, "medium": 11, "low": 10, "totalFindings": 33 },
|
|
482
|
+
{ "date": "2026-03-29", "score": 62, "critical": 3, "high": 8, "medium": 11, "low": 8, "totalFindings": 30 },
|
|
483
|
+
{ "date": "2026-04-01", "score": 63, "critical": 2, "high": 8, "medium": 10, "low": 8, "totalFindings": 28 },
|
|
484
|
+
{ "date": "2026-04-04", "score": 65, "critical": 2, "high": 7, "medium": 10, "low": 7, "totalFindings": 26 },
|
|
485
|
+
{ "date": "2026-04-08", "score": 66, "critical": 2, "high": 7, "medium": 9, "low": 7, "totalFindings": 25 },
|
|
486
|
+
{ "date": "2026-04-12", "score": 68, "critical": 2, "high": 7, "medium": 9, "low": 6, "totalFindings": 24 }
|
|
299
487
|
],
|
|
300
488
|
"meta": {
|
|
301
|
-
"generatedAt": "2026-04-
|
|
302
|
-
"version": "
|
|
489
|
+
"generatedAt": "2026-04-12T08:31:15.822Z",
|
|
490
|
+
"version": "2.0.0",
|
|
303
491
|
"dataRetentionDays": 30
|
|
304
492
|
}
|
|
305
493
|
}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>AWS Security Dashboard</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-AKJ_-GfD.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-UN8P_PO6.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body class="bg-slate-900 text-slate-50">
|
|
12
12
|
<div id="root"></div>
|
|
@@ -237,7 +237,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
|
|
|
237
237
|
import { z } from "zod";
|
|
238
238
|
|
|
239
239
|
// src/version.ts
|
|
240
|
-
var VERSION = "0.
|
|
240
|
+
var VERSION = "0.7.0";
|
|
241
241
|
|
|
242
242
|
// src/utils/aws-client.ts
|
|
243
243
|
import { STSClient, GetCallerIdentityCommand } from "@aws-sdk/client-sts";
|
|
@@ -2867,6 +2867,22 @@ import {
|
|
|
2867
2867
|
SecurityHubClient as SecurityHubClient2,
|
|
2868
2868
|
GetFindingsCommand
|
|
2869
2869
|
} from "@aws-sdk/client-securityhub";
|
|
2870
|
+
|
|
2871
|
+
// src/utils/sh-source.ts
|
|
2872
|
+
function getSecurityHubSource(finding) {
|
|
2873
|
+
const impact = finding.impact ?? "";
|
|
2874
|
+
const match = impact.match(/^Source:\s*([^(]+)/);
|
|
2875
|
+
if (!match) return "Other";
|
|
2876
|
+
const product = match[1].trim();
|
|
2877
|
+
if (product === "Security Hub" || product.includes("Foundational")) return "FSBP";
|
|
2878
|
+
if (product === "Inspector" || product.includes("Inspector")) return "Inspector";
|
|
2879
|
+
if (product === "GuardDuty" || product.includes("GuardDuty")) return "GuardDuty";
|
|
2880
|
+
if (product === "Config" || product.includes("Config")) return "Config";
|
|
2881
|
+
if (product === "IAM Access Analyzer" || product.includes("Access Analyzer")) return "Access Analyzer";
|
|
2882
|
+
return "Other";
|
|
2883
|
+
}
|
|
2884
|
+
|
|
2885
|
+
// src/scanners/security-hub-findings.ts
|
|
2870
2886
|
function shSeverityToScore(label) {
|
|
2871
2887
|
switch (label) {
|
|
2872
2888
|
case "CRITICAL":
|
|
@@ -2936,7 +2952,7 @@ var SecurityHubFindingsScanner = class {
|
|
|
2936
2952
|
if (recText && !["See References", "None Provided", ""].includes(recText.trim())) {
|
|
2937
2953
|
remediationSteps.push(recText);
|
|
2938
2954
|
}
|
|
2939
|
-
|
|
2955
|
+
const finding = {
|
|
2940
2956
|
severity,
|
|
2941
2957
|
title: f.Title ?? "Security Hub Finding",
|
|
2942
2958
|
resourceType,
|
|
@@ -2950,7 +2966,9 @@ var SecurityHubFindingsScanner = class {
|
|
|
2950
2966
|
priority: priorityFromSeverity(severity),
|
|
2951
2967
|
module: this.moduleName,
|
|
2952
2968
|
accountId: f.AwsAccountId ?? accountId
|
|
2953
|
-
}
|
|
2969
|
+
};
|
|
2970
|
+
finding.source = getSecurityHubSource(finding);
|
|
2971
|
+
findings.push(finding);
|
|
2954
2972
|
}
|
|
2955
2973
|
nextToken = resp.NextToken;
|
|
2956
2974
|
} while (nextToken);
|
|
@@ -7274,18 +7292,6 @@ var SEVERITY_ORDER2 = ["CRITICAL", "HIGH", "MEDIUM", "LOW"];
|
|
|
7274
7292
|
function getRecommendationTemplate(rem) {
|
|
7275
7293
|
return rem.replace(/\b(i-[0-9a-f]+)\b/g, "{instance}").replace(/\b(vol-[0-9a-f]+)\b/g, "{volume}").replace(/\b(sg-[0-9a-f]+)\b/g, "{sg}").replace(/\b(eipalloc-[0-9a-f]+)\b/g, "{eip}").replace(/\b(arn:aws[-\w]*:[^"\s]+)\b/g, "{arn}").replace(/"[^"]+"/g, "{name}").replace(/bucket \S+/g, "bucket {name}").replace(/instance \S+/g, "instance {id}").replace(/volume \S+/g, "volume {id}").replace(/rule \S+/g, "rule {name}");
|
|
7276
7294
|
}
|
|
7277
|
-
function getSecurityHubSource(finding) {
|
|
7278
|
-
const impact = finding.impact ?? "";
|
|
7279
|
-
const match = impact.match(/^Source:\s*([^(]+)/);
|
|
7280
|
-
if (!match) return "Other";
|
|
7281
|
-
const product = match[1].trim();
|
|
7282
|
-
if (product === "Security Hub" || product.includes("Foundational")) return "FSBP";
|
|
7283
|
-
if (product === "Inspector" || product.includes("Inspector")) return "Inspector";
|
|
7284
|
-
if (product === "GuardDuty" || product.includes("GuardDuty")) return "GuardDuty";
|
|
7285
|
-
if (product === "Config" || product.includes("Config")) return "Config";
|
|
7286
|
-
if (product === "IAM Access Analyzer" || product.includes("Access Analyzer")) return "Access Analyzer";
|
|
7287
|
-
return "Other";
|
|
7288
|
-
}
|
|
7289
7295
|
var SECURITY_HUB_SUB_CAT_ORDER = ["FSBP", "Inspector", "GuardDuty", "Config", "Access Analyzer", "Other"];
|
|
7290
7296
|
function scoreColor(score) {
|
|
7291
7297
|
if (score >= 80) return "#22c55e";
|
|
@@ -7481,6 +7487,7 @@ function sharedCss() {
|
|
|
7481
7487
|
.filter-count{color:#64748b;font-size:13px;margin-left:auto}
|
|
7482
7488
|
@media print{
|
|
7483
7489
|
.filter-toolbar{display:none !important}
|
|
7490
|
+
.finding-card,.module-fold{display:block !important}
|
|
7484
7491
|
body{background:#fff;color:#1e293b;-webkit-print-color-adjust:exact;print-color-adjust:exact}
|
|
7485
7492
|
.container{max-width:100%;padding:20px}
|
|
7486
7493
|
.card,.score-card,.stat-card,.chart-box,.finding-fold,.top5-card,.trend-chart,.category-fold,.module-fold,.finding-card,.rec-fold{background:#fff;border:1px solid #e2e8f0}
|
|
@@ -8023,7 +8030,8 @@ ${remaining.map(renderRec).join("\n")}
|
|
|
8023
8030
|
document.querySelectorAll('.module-fold').forEach(function(f){
|
|
8024
8031
|
var mod=f.getAttribute('data-module');
|
|
8025
8032
|
if(activeMod!=='ALL'&&mod!==activeMod){f.style.display='none';return;}
|
|
8026
|
-
f.style
|
|
8033
|
+
var hasVisible=f.querySelectorAll('.finding-card:not([style*="display: none"])').length>0;
|
|
8034
|
+
f.style.display=hasVisible?'':'none';
|
|
8027
8035
|
});
|
|
8028
8036
|
document.querySelectorAll('.severity-group-fold').forEach(function(g){
|
|
8029
8037
|
g.style.display=g.querySelectorAll('.finding-card:not([style*="display: none"])').length?'':'none';
|