-
Notifications
You must be signed in to change notification settings - Fork 0
/
component---src-app-templates-post-template-post-layout-ui-tsx-content-file-path-posts-2020-07-25-etc-aws-iam-security-md-8b71f14351f616025a0b.js.map
1 lines (1 loc) · 38.6 KB
/
component---src-app-templates-post-template-post-layout-ui-tsx-content-file-path-posts-2020-07-25-etc-aws-iam-security-md-8b71f14351f616025a0b.js.map
1
{"version":3,"file":"component---src-app-templates-post-template-post-layout-ui-tsx-content-file-path-posts-2020-07-25-etc-aws-iam-security-md-8b71f14351f616025a0b.js","mappings":"+LAGA,SAASA,EAAkBC,GACzB,MAAMC,EAAcC,OAAOC,OAAO,CAChCC,EAAG,IACHC,EAAG,IACHC,IAAK,MACLC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,WAAY,eACXC,EAAAA,EAAAA,KAAsBX,EAAMY,YAC/B,OAAOC,EAAAA,cAAoBA,EAAAA,SAAgB,KAAMA,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,OAAQS,EAAAA,cAAoBZ,EAAYI,EAAG,CACnIS,KAAM,4BACL,iBAAkB,yJAA0J,KAAMD,EAAAA,cAAoBZ,EAAYK,IAAK,CACxNS,IAAK,+BACLC,IAAK,cACH,KAAMH,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,8EAA+E,KAAMS,EAAAA,cAAoBZ,EAAYM,GAAI,KAAM,eAAgB,KAAMM,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,oIAAqI,KAAMS,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,qJAAsJ,KAAMS,EAAAA,cAAoBZ,EAAYM,GAAI,KAAM,mBAAoB,KAAMM,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,mKAAoK,KAAMS,EAAAA,cAAoBZ,EAAYK,IAAK,CAC33BS,IAAK,uCACLC,IAAK,aACH,KAAMH,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,iFAAkF,KAAMS,EAAAA,cAAoBZ,EAAYK,IAAK,CAC9KS,IAAK,uCACLC,IAAK,aACH,KAAMH,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,4CAA6C,KAAMS,EAAAA,cAAoBZ,EAAYK,IAAK,CACzIS,IAAK,uCACLC,IAAK,gBACH,KAAMH,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,2CAA4C,KAAMS,EAAAA,cAAoBZ,EAAYO,GAAI,KAAM,KAAMK,EAAAA,cAAoBZ,EAAYQ,GAAI,KAAM,4IAA6I,KAAMI,EAAAA,cAAoBZ,EAAYQ,GAAI,KAAM,gEAAiEI,EAAAA,cAAoBZ,EAAYI,EAAG,CAC9dS,KAAM,+OACL,YAAa,wDAAyD,KAAMD,EAAAA,cAAoBZ,EAAYQ,GAAI,KAAMI,EAAAA,cAAoBZ,EAAYI,EAAG,CAC1JS,KAAM,qJACL,iBAAkB,kHAAmH,MAAO,KAAMD,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,uIAAwI,KAAMS,EAAAA,cAAoBZ,EAAYK,IAAK,CAC/WS,IAAK,uCACLC,IAAK,mBACH,KAAMH,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,gCAAiC,KAAMS,EAAAA,cAAoBZ,EAAYK,IAAK,CAC7HS,IAAK,uCACLC,IAAK,yBACH,KAAMH,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,2FAA4FS,EAAAA,cAAoBZ,EAAYI,EAAG,CAChLS,KAAM,4DACL,sBAAuB,OAAQ,KAAMD,EAAAA,cAAoBZ,EAAYK,IAAK,CAC3ES,IAAK,uCACLC,IAAK,+BACH,KAAMH,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,qJAAsJ,KAAMS,EAAAA,cAAoBZ,EAAYK,IAAK,CAClPS,IAAK,uCACLC,IAAK,iBACH,KAAMH,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,+DAAgE,KAAMS,EAAAA,cAAoBZ,EAAYK,IAAK,CAC5JS,IAAK,uCACLC,IAAK,mCACH,KAAMH,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,kGAAmG,KAAMS,EAAAA,cAAoBZ,EAAYM,GAAI,KAAM,iBAAkB,KAAMM,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,qCAAsCS,EAAAA,cAAoBZ,EAAYI,EAAG,CAC9US,KAAM,wFACL,qBAAsB,qDAAsD,KAAMD,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,2CAA4CS,EAAAA,cAAoBZ,EAAYI,EAAG,CAC3MS,KAAM,4BACL,0BAA2B,iBAAkB,KAAMD,EAAAA,cAAoBZ,EAAYM,GAAI,KAAM,kBAAmB,KAAMM,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,kQAAmQ,KAAMS,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,8EAA+E,KAAMS,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,+HAAgI,KAAMS,EAAAA,cAAoBZ,EAAYK,IAAK,CAC3vBS,IAAK,uCACLC,IAAK,aACH,KAAMH,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,uGAAwG,KAAMS,EAAAA,cAAoBZ,EAAYK,IAAK,CACpMS,IAAK,wCACLC,IAAK,UACH,KAAMH,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,sCAAuC,KAAMS,EAAAA,cAAoBZ,EAAYK,IAAK,CACnIS,IAAK,wCACLC,IAAK,aACH,KAAMH,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,gBAAiB,KAAMS,EAAAA,cAAoBZ,EAAYK,IAAK,CAC7GS,IAAK,wCACLC,IAAK,aACH,KAAMH,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,iIAAkI,KAAMS,EAAAA,cAAoBZ,EAAYK,IAAK,CAC9NS,IAAK,wCACLC,IAAK,cACH,KAAMH,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,4DAA6D,KAAMS,EAAAA,cAAoBZ,EAAYM,GAAI,KAAM,kBAAmB,KAAMM,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,wDAAyD,KAAMS,EAAAA,cAAoBZ,EAAYK,IAAK,CACpUS,IAAK,wCACLC,IAAK,aACH,KAAMH,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,2EAA4E,KAAMS,EAAAA,cAAoBZ,EAAYK,IAAK,CACxKS,IAAK,wCACLC,IAAK,YACH,KAAMH,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,yCAA0C,KAAMS,EAAAA,cAAoBZ,EAAYK,IAAK,CACtIS,IAAK,wCACLC,IAAK,aACH,KAAMH,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,sFAAuF,KAAMS,EAAAA,cAAoBZ,EAAYM,GAAI,KAAM,OAAQ,KAAMM,EAAAA,cAAoBZ,EAAYK,IAAK,CAC3OS,IAAK,wCACLC,IAAK,qBACH,KAAMH,EAAAA,cAAoBZ,EAAYG,EAAG,KAAM,qLAAsL,KAAMS,EAAAA,cAAoBZ,EAAYM,GAAI,KAAM,aAAc,KAAMM,EAAAA,cAAoBZ,EAAYS,WAAY,KAAM,KAAMG,EAAAA,cAAoBZ,EAAYO,GAAI,KAAM,KAAMK,EAAAA,cAAoBZ,EAAYQ,GAAI,KAAMI,EAAAA,cAAoBZ,EAAYI,EAAG,CACheS,KAAM,2FACL,2BAA4B,KAAMD,EAAAA,cAAoBZ,EAAYQ,GAAI,KAAMI,EAAAA,cAAoBZ,EAAYI,EAAG,CAChHS,KAAM,kFACL,6BAA8B,KAAMD,EAAAA,cAAoBZ,EAAYQ,GAAI,KAAMI,EAAAA,cAAoBZ,EAAYI,EAAG,CAClHS,KAAM,sFACL,eAAgB,KAAMD,EAAAA,cAAoBZ,EAAYQ,GAAI,KAAMI,EAAAA,cAAoBZ,EAAYI,EAAG,CACpGS,KAAM,2LACL,qCAAsC,MAAO,MAClD,CAKA,MAJA,SAAoBd,QAAK,IAALA,IAAAA,EAAQ,CAAC,GAC3B,MAAOiB,QAASC,GAAahB,OAAOC,OAAO,CAAC,GAAGQ,EAAAA,EAAAA,KAAsBX,EAAMY,YAC3E,OAAOM,EAAYL,EAAAA,cAAoBK,EAAWlB,EAAOa,EAAAA,cAAoBd,EAAmBC,IAAUD,EAAkBC,EAC9H,E,8EChFA,SAASmB,EAAWC,GAClB,IAAIC,EAAuBC,EAC3B,IAAI,KAACC,EAAI,SAAEC,GAAYJ,EACvB,MAAM,KAACK,EAAI,KAAEC,EAAI,MAAEC,GAA4K,QAAlKN,EAAwBE,SAAuE,QAA1BD,EAAYC,EAAKK,WAA+B,IAAdN,OAA5C,EAA4EA,EAAUO,mBAAmD,IAA1BR,EAAmCA,EAAwB,CAAC,EACnQ,OAAOS,EAAAA,EAAAA,KAAKC,EAAAA,EAAe,CACzBP,UAAUQ,EAAAA,EAAAA,MAAMC,EAAAA,EAAW,CACzBC,UAAWC,EAAAA,EACXX,SAAU,EAACM,EAAAA,EAAAA,KAAKM,EAAAA,EAAiB,CAC/BF,UAAWG,EAAAA,EACXV,MAAOA,KACLG,EAAAA,EAAAA,KAAKQ,EAAAA,EAAgB,CACvBb,KAAMA,KACJK,EAAAA,EAAAA,KAAKS,EAAAA,EAAgB,CACvBb,KAAMA,KACJI,EAAAA,EAAAA,KAAKU,EAAAA,EAAmB,CAC1BhB,UAAUM,EAAAA,EAAAA,KAAKW,EAAAA,EAAa,CAC1BjB,SAAUA,UAKpB,CAGe,SAASkB,EAAiB1C,GACvC,OAAOa,EAAAA,cAAoBM,EAAYnB,EAAOa,EAAAA,cAAoB8B,EAAqB3C,GACzF,C,oECrCW4C,EAAwB,8D,UCMnC,SAASJ,EAAiBpB,GAA4C,IAA3C,SAAEI,EAAQ,UAAEU,KAAclC,GAAcoB,EACjE,OACEU,EAAAA,EAAAA,KAAA,OAAKI,WAAWW,EAAAA,EAAAA,GAAKD,EAAuBV,MAAgBlC,EAAKwB,SAC9DA,GAGP,C,qECZWsB,EAAqB,wD,UCMhC,SAASR,EAAclB,GAAwC,IAAvC,UAAEc,EAAS,KAAET,KAASzB,GAAcoB,EAC1D,OACEU,EAAAA,EAAAA,KAAA,QAAMI,WAAWW,EAAAA,EAAAA,GAAKC,EAAoBZ,MAAgBlC,EAAKwB,SAC5DC,GAGP,C,8ECZWsB,EAAiB,8C,UCM5B,SAASR,EAAcnB,GAAmB,IAAlB,KAAEM,GAAaN,EACrC,OACEU,EAAAA,EAAAA,KAACkB,EAAAA,EAAI,CAACd,UAAWa,EAAevB,SAC7BE,EAAKuB,KAAKC,IACTpB,EAAAA,EAAAA,KAACqB,EAAAA,KAAI,CAAWC,GAAE,SAAWF,EAAM1B,UACjCM,EAAAA,EAAAA,KAACkB,EAAAA,EAAKK,IAAG,CAACH,IAAKA,KADNA,MAMnB,C,qEChBWI,EAAsB,0D,UCKjC,SAASlB,EAAehB,GAAyC,IAAxC,UAAEc,EAAS,MAAEP,KAAU3B,GAAcoB,EAC5D,OACEU,EAAAA,EAAAA,KAAA,MAAII,WAAWW,EAAAA,EAAAA,GAAKS,EAAqBpB,MAAgBlC,EAAKwB,SAC3DG,GAGP,C,+ECTA,MAAM4B,EAAerD,OAAOC,QCI5B,SAAaiB,GAA4C,IAA3C,SAAEI,EAAQ,UAAEU,KAAclC,GAAcoB,EACpD,OACEU,EAAAA,EAAAA,KAAA,OAAKI,WAAWW,EAAAA,EAAAA,GCPE,gCDOaX,MAAgBlC,EAAKwB,SACjDA,GAGP,GDVyC,CACvC6B,IGMF,SAAYjC,GAAuC,IAAtC,UAAEc,EAAS,IAAEgB,KAAQlD,GAAcoB,EAC9C,OACEU,EAAAA,EAAAA,KAAA,QAAMI,WAAWW,EAAAA,EAAAA,GCXA,8BDWcX,MAAgBlC,EAAKwB,SACjD0B,GAGP,G,qEEfWM,EAAgB,0C,UCM3B,SAASvB,EAASb,GAA4C,IAA3C,SAAEI,EAAQ,UAAEU,KAAclC,GAAcoB,EACzD,OACEU,EAAAA,EAAAA,KAAA,OAAKI,WAAWW,EAAAA,EAAAA,GAAKW,EAAetB,MAAgBlC,EAAKwB,SACtDA,GAGP,C,qECZWiC,EAAkB,gD,UCM7B,SAASC,EAAWtC,GAA4C,IAA3C,SAAEI,EAAQ,UAAEU,KAAclC,GAAcoB,EAC3D,OACEU,EAAAA,EAAAA,KAAA,OAAKI,WAAWW,EAAAA,EAAAA,GAAKY,EAAiBvB,MAAgBlC,EAAKwB,SACxDA,GAGP,C,+ECZWmC,EAAQ,8BACRC,EAAa,oCACbC,EAAmB,0CACnBC,EAAuB,+CACvBC,EAA2B,oDAC3BC,EAAuB,+CACvBC,EAAa,oCACbvC,EAAO,6B,UCMlB,SAASwC,IACP,OACElC,EAAAA,EAAAA,MAAA,UAAQE,UAAW+B,EAAWzC,SAAA,EAC5BM,EAAAA,EAAAA,KAACqB,EAAAA,KAAI,CAACC,GAAG,IAAG5B,UACVM,EAAAA,EAAAA,KAAA,OACEf,IAAI,mBACJoD,OAAM,qDACNC,MAAM,kCACNpD,IAAI,kBACJkB,UAAW0B,OAGf9B,EAAAA,EAAAA,KAAA,OAAKI,UAAW2B,EAAiBrC,UAC/BQ,EAAAA,EAAAA,MAAA,MAAIE,UAAW8B,EAAqBxC,SAAA,EAClCM,EAAAA,EAAAA,KAAA,MAAII,UAAW4B,EAAqBtC,UAClCM,EAAAA,EAAAA,KAACqB,EAAAA,KAAI,CAACC,GAAG,QAAO5B,UACdM,EAAAA,EAAAA,KAAA,QACE,aAAW,OACXI,WAAWW,EAAAA,EAAAA,GAAKkB,EAA0BrC,UAIhDI,EAAAA,EAAAA,KAAA,MAAII,UAAW4B,EAAqBtC,UAClCM,EAAAA,EAAAA,KAAA,KAAGhB,KAAK,SAASuD,IAAI,WAAWC,OAAO,SAAQ9C,UAC7CM,EAAAA,EAAAA,KAAA,QACE,aAAW,QACXI,WAAWW,EAAAA,EAAAA,GAAKkB,EAA0BJ,gBAQ1D,CC/CO,IAAIY,EAAa,oCCCxB,SAASC,IACP,OACExC,EAAAA,EAAAA,MAAA,UAAQE,UAAWqC,EAAW/C,SAAA,EAC5BM,EAAAA,EAAAA,KAAA,QAAAN,SAAM,gDACNQ,EAAAA,EAAAA,MAAA,QAAAR,SAAA,CAAM,KAEJM,EAAAA,EAAAA,KAAA,KACEhB,KAAK,iCACLuD,IAAI,aACJC,OAAO,SAAQ9C,SAAC,aAEd,8BAKZ,C,cCZA,SAASO,EAAaX,GAAmC,IAAlC,SAAEI,GAA6BJ,EACpD,OACEY,EAAAA,EAAAA,MAAAyC,EAAAA,SAAA,CAAAjD,SAAA,EACEM,EAAAA,EAAAA,KAACoC,EAAM,KACPpC,EAAAA,EAAAA,KAAC4B,EAAAA,EAAW,CAAAlC,SAAEA,KACdM,EAAAA,EAAAA,KAAC0C,EAAM,MAGb,C,8ECbO,IAAIrC,EAAsB,mDACtBE,EAAkB,8C,4FCyB7B,MAAMqC,EAAkB,CAAC,EAEnBC,EAAa,gBAAoBD,GAUhC,SAASE,EAAiBhE,GAC/B,MAAMiE,EAAoB,aAAiBF,GAG3C,OAAO,WACL,WAEE,MAA0B,mBAAf/D,EACFA,EAAWiE,GAGb,IAAIA,KAAsBjE,EACnC,GACA,CAACiE,EAAmBjE,GAExB,CAWO,SAAS6B,EAAYqC,GAE1B,IAAIC,EAWJ,OAREA,EADED,EAAWE,qBAEsB,mBAA1BF,EAAWlE,WACdkE,EAAWlE,WAAW8D,GACtBI,EAAWlE,YAAc8D,EAEfE,EAAiBE,EAAWlE,YAGvC,gBACL+D,EAAWM,SACX,CAACC,MAAOH,GACRD,EAAWtD,SAEf,C,uBCnFA,SAAS2D,EAAEC,GAAG,IAAIC,EAAEC,EAAEC,EAAE,GAAG,GAAG,iBAAiBH,GAAG,iBAAiBA,EAAEG,GAAGH,OAAO,GAAG,iBAAiBA,EAAE,GAAGI,MAAMC,QAAQL,GAAG,CAAC,IAAIM,EAAEN,EAAEO,OAAO,IAAIN,EAAE,EAAEA,EAAEK,EAAEL,IAAID,EAAEC,KAAKC,EAAEH,EAAEC,EAAEC,OAAOE,IAAIA,GAAG,KAAKA,GAAGD,EAAE,MAAM,IAAIA,KAAKF,EAAEA,EAAEE,KAAKC,IAAIA,GAAG,KAAKA,GAAGD,GAAG,OAAOC,CAAC,CAAQ,SAAS1C,IAAO,IAAI,IAAIuC,EAAEC,EAAEC,EAAE,EAAEC,EAAE,GAAGG,EAAEE,UAAUD,OAAOL,EAAEI,EAAEJ,KAAKF,EAAEQ,UAAUN,MAAMD,EAAEF,EAAEC,MAAMG,IAAIA,GAAG,KAAKA,GAAGF,GAAG,OAAOE,CAAC,C","sources":["webpack://kyoungah-dev-blog/./posts/2020-07-25-etc-aws-iam-security.md","webpack://kyoungah-dev-blog/./src/app/templates/post-template/post-layout.ui.tsx","webpack://kyoungah-dev-blog/./src/app/templates/post-template/components/post-layout-content/post-layout.content.module.css","webpack://kyoungah-dev-blog/./src/app/templates/post-template/components/post-layout-content/post-layout-content.ui.tsx","webpack://kyoungah-dev-blog/./src/app/templates/post-template/components/post-layout-date/post-layout-date.module.css","webpack://kyoungah-dev-blog/./src/app/templates/post-template/components/post-layout-date/post-layout-date.tsx","webpack://kyoungah-dev-blog/./src/app/templates/post-template/components/post-layout-tags/post-layout.module.css","webpack://kyoungah-dev-blog/./src/app/templates/post-template/components/post-layout-tags/post-layout-tags.ui.tsx","webpack://kyoungah-dev-blog/./src/app/templates/post-template/components/post-layout-title/post-layout-title.module.css","webpack://kyoungah-dev-blog/./src/app/templates/post-template/components/post-layout-title/post-layout-title.ui.tsx","webpack://kyoungah-dev-blog/./src/entities/tags/index.ts","webpack://kyoungah-dev-blog/./src/entities/tags/tags.ui.tsx","webpack://kyoungah-dev-blog/./src/entities/tags/tags.module.css","webpack://kyoungah-dev-blog/./src/shared/uis/tag/tag.ui.tsx","webpack://kyoungah-dev-blog/./src/shared/uis/tag/tag.module.css","webpack://kyoungah-dev-blog/./src/shared/uis/container/container.module.css","webpack://kyoungah-dev-blog/./src/shared/uis/container/container.ui.tsx","webpack://kyoungah-dev-blog/./src/widgets/basic-layout/basic-layout.module.css","webpack://kyoungah-dev-blog/./src/widgets/basic-layout/basic-layout.ui.tsx","webpack://kyoungah-dev-blog/./src/widgets/header/header.module.css","webpack://kyoungah-dev-blog/./src/widgets/header/header.ui.tsx","webpack://kyoungah-dev-blog/./src/widgets/footer/footer.module.css","webpack://kyoungah-dev-blog/./src/widgets/footer/footer.ui.tsx","webpack://kyoungah-dev-blog/./src/widgets/default-layout/default-layout.ui.tsx","webpack://kyoungah-dev-blog/./src/app/templates/post-template/post-layout.module.css","webpack://kyoungah-dev-blog/./node_modules/@mdx-js/react/lib/index.js","webpack://kyoungah-dev-blog/./node_modules/clsx/dist/clsx.mjs"],"sourcesContent":["/*@jsxRuntime classic @jsx React.createElement @jsxFrag React.Fragment*/\nimport {useMDXComponents as _provideComponents} from \"@mdx-js/react\";\nimport React from \"react\";\nfunction _createMdxContent(props) {\n const _components = Object.assign({\n p: \"p\",\n a: \"a\",\n img: \"img\",\n h2: \"h2\",\n ul: \"ul\",\n li: \"li\",\n blockquote: \"blockquote\"\n }, _provideComponents(), props.components);\n return React.createElement(React.Fragment, null, React.createElement(_components.p, null, \"저번에 \", React.createElement(_components.a, {\n href: \"/2020-07-19-etc-aws-iam/\"\n }, \"IAM이 뭔지 알아보면서\"), \" IAM 사용자 추가 작업까지 한 후 IAM 보안 상태가 있다는걸 확인했다. 필수로 설정하지 않아도 되는 항목이라 이것까지 알아야될 필요가 있을까 싶었는데 좀 더 AWS를 안전하고 제대로 사용하려면 알고 있는게 나을거 같아서 항목 하나 하나씩 제대로 알아보기로 했다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-iam-16.png\",\n alt: \"IAM 보안 상태\"\n }), \"\\n\", React.createElement(_components.p, null, \"IAM 대시보드 창에 접속하면 IAM 보안 상태를 확인할 수 있다. 좀 더 안전한 AWS 사용을 위해 각각 보안 항목들을 설정해보자.\"), \"\\n\", React.createElement(_components.h2, null, \"루트 액세스 키 삭제\"), \"\\n\", React.createElement(_components.p, null, \"AWS CLI, PowerShell용 도구, AWS SDK 또는 직접 AWS API 호출을 할 때 액세스 키를 사용한다. Root 사용자의 액세스 키는 모든 리소스에 무제한적으로 접근할 수 있기 때문에 사용하지 않는것이 안전하다.\"), \"\\n\", React.createElement(_components.p, null, \"루트 액세스 키는 AWS 계정을 생성할 때 자동으로 생성되지 않기 때문에 이 항목에서 해줘야 할 작업은 없다. Root 액세스 키를 생성하는 것은 가능하나 이 액세스 키를 탈취 당하면 AWS의 모든 권한을 탈취당하는 것이나 마찬가지므로 왠만하면 생성 하지말자.\"), \"\\n\", React.createElement(_components.h2, null, \"루트 계정에서 MFA 활성화\"), \"\\n\", React.createElement(_components.p, null, \"루트 계정에서 MFA(Multi-factor authentication, 다중 요소 인증)활성화는 Root 사용자 로그인에 OTP(One-Time Password, 일회용 비밀번호) 인증을 더하는 것 이다. Root 사용자 로그인 시도 시 일회용 비밀번호를 입력해야 로그인이 가능하다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-iam-security-1.png\",\n alt: \"보안 상태 항목\"\n }), \"\\n\", React.createElement(_components.p, null, \"MFA를 활성화 하려면 보안 상태 항목에서 MFA 활성화 항목을 선택한 후 MFA 관리 버튼을 클릭하여 보안 자격 증명 화면으로 이동한다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-iam-security-2.png\",\n alt: \"멀티 팩터 인증\"\n }), \"\\n\", React.createElement(_components.p, null, \"멀티 팩터 인증(MFA) 항목을 선택하여 MFA 활성화 버튼을 클릭한다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-iam-security-3.png\",\n alt: \"MFA 디바이스 관리\"\n }), \"\\n\", React.createElement(_components.p, null, \"MFA 디바이스 관리 항목에서 원하는 MFA 디바이스 유형을 선택한다.\"), \"\\n\", React.createElement(_components.ul, null, \"\\n\", React.createElement(_components.li, null, \"가상 MFA 디바이스 유형은 가상 디바이스로 OTP를 발급받아 인증하는 방식이다. 가상 디바이스를 스마트폰으로 사용하는 경우 AWS에서 공식 지원하는 OTP 생성어플을 사용하면 된다. 대표적인 예로 Google Authenticator가 있다.\"), \"\\n\", React.createElement(_components.li, null, \"U2F(Universal 2nd Factor)는 FIDO Alliance에서 호스팅하는 공개 인증 표준이다. \", React.createElement(_components.a, {\n href: \"https://www.amazon.com/stores/page/8E6D7A52-6F69-4A70-A07B-4168A9FD33B0?ingress=0&visitId=4e887182-a088-465f-a4b3-b9f1b06da6a1&channel=SLP_FW_21D9BC02-6DFF-4BD7-A77F-4AE207A2AEFD&liveVideoDataUrl=https://amazonlive-portal.amazon.com/v2\"\n }, \"U2F 보안 키\"), \"는 USB 형식으로 되어 있는데 이걸 컴퓨터 USB 포트에 연결하여 이중 인증을 할 수 있다.\"), \"\\n\", React.createElement(_components.li, null, React.createElement(_components.a, {\n href: \"https://www.amazon.com/SafeNet-IDProve-Time-based-6-Digit-Services/dp/B002CRN5X8?ie=UTF8&keywords=gemalto%20aws&qid=1462806259&ref_=sr_1_1&sr=8-1\"\n }, \"하드웨어 MFA 디바이스\"), \"는 은행애서 사용하는 OTP 발생기 같은 하드웨어를 사용하여 인증을 하는 것이다. 역시 AWS에서 공식지원하는 하드웨어를 사용해야 한다. 대표적인 예로 Gemalto에서 만든 OTP 생성기가 있다.\"), \"\\n\"), \"\\n\", React.createElement(_components.p, null, \"위의 세 유형 중 원하는 유형을 선택하고 계속 버튼을 누르면 된다. U2F 보안 키, 하드웨어 MFA 디바이스 유형은 추가 장비를 구매해야 하기 때문에 스마트폰만 있으면 쉽게 인증할 수 있는 가상 MFA 디바이스 유형이 제일 무난하다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-iam-security-4.png\",\n alt: \"가상 MFA 디바이스 설정\"\n }), \"\\n\", React.createElement(_components.p, null, \"QR 코드 보기를 눌러 QR 코드를 화면에 띄웠다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-iam-security-5.png\",\n alt: \"Google Authenticator\"\n }), \"\\n\", React.createElement(_components.p, null, \"몇번 사용해본 적이 있어서 익숙한 Google Authenticator 어플로 OTP 인증을 받기로 했다. Google Authenticator 뿐만 아니라 \", React.createElement(_components.a, {\n href: \"https://aws.amazon.com/ko/iam/features/mfa/?audit=2019q1\"\n }, \"다른 앱들도 AWS에서 공식 지원\"), \"한다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-iam-security-6.png\",\n alt: \"Google Authenticator 항목 추가\"\n }), \"\\n\", React.createElement(_components.p, null, \"+ 버튼을 누른후 출력된 다이얼로그에서 바코드 스캔을 선택하여 QR 코드를 찍어주면 AWS OTP가 OTP 목록에 추가된다.\\n생성된 6자리 숫자를 MFA 코드 1 항목에 입력한 후 30초가 지난 후 바로 생성된 6자리 숫자를 MFA 코드 2 항목에 넣어준다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-iam-security-7.png\",\n alt: \"가상 MFA 할당 완료\"\n }), \"\\n\", React.createElement(_components.p, null, \"MFA 코드 1, MFA 코드 2 항목을 다 넣고 MFA 활성화 버튼을 클릭하면 MFA 활성화가 완료된다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-iam-security-8.png\",\n alt: \"Root 사용자로 로그인 시도 시 뜨는 멀티 펙터 인증\"\n }), \"\\n\", React.createElement(_components.p, null, \"이제 Root 사용자로 로그인을 시도하면 MFA 코드 입력창이 추가로 뜬다. 이 코드 역시 Google Authenticator에서 생성된 6자리 숫자를 입력하면 된다.\"), \"\\n\", React.createElement(_components.h2, null, \"개별 IAM 사용자 생성\"), \"\\n\", React.createElement(_components.p, null, \"WS에서는 Root 사용자는 무제한적인 액세스 권한이 있으니 \", React.createElement(_components.a, {\n href: \"https://docs.aws.amazon.com/ko_kr/general/latest/gr/aws_tasks-that-require-root.html\"\n }, \"Root 사용자로만 가능한 작업\"), \"을 할 때를 제외하고는 Root 사용자 보다는 IAM 사용자를 사용하기를 권장하고 있다.\"), \"\\n\", React.createElement(_components.p, null, \"이 항목은 저번 시간에 다뤄봤으므로 패스하겠다. 자세한 설명이 필요하면 \", React.createElement(_components.a, {\n href: \"/2020-07-19-etc-aws-iam/\"\n }, \"AWS IAM 및 IAM 사용자 추가하기\"), \" 를 참고하기를 바란다.\"), \"\\n\", React.createElement(_components.h2, null, \"그룹을 사용하여 권한 할당\"), \"\\n\", React.createElement(_components.p, null, \"IAM 그룹은 IAM 사용자들의 집합이다. 그룹에 정책을 연결할 수 있기 때문에 그룹을 활용하면 다수의 사용자들에 대한 권한을 지정함으로써 해당 사용자들에 대한 권한을 더 쉽게 관리할 수 있다. 여기서 정책이란 자격 증명(사용자, 사용자 그룹 또는 역할) 또는 리소스와 연결될 때 해당 권한을 정의하는 개체이다. 권한을 미리 정책으로 정의해두고 이 정책들을 부여하여 권한을 준다고 생각하면 될 것 같다. 대부분의 정책은 AWS에 JSON 문서로 저장된다.\"), \"\\n\", React.createElement(_components.p, null, \"특정 권한을 가진 그룹을 생성한 후 IAM 사용자들을 그룹에 포함시키면 그 그룹에 속하는 모든 사용자들에게 권한이 자동으로 부여된다.\"), \"\\n\", React.createElement(_components.p, null, \"그룹은 IAM 사용자를 생성하면서 같이 생성할 수도 있고 IAM 메뉴에서 그룹 생성을 선택하여 그룹을 생성할 수도 있다. IAM 사용자를 생성하면서 그룹 생성하는 것은 해봤으니 이번에는 그룹 메뉴에서 그룹 생성을 해보자.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-iam-security-9.png\",\n alt: \"보안 상태 항목\"\n }), \"\\n\", React.createElement(_components.p, null, \"보안상태 항목에서 그룹을 사용하여 권한 할당을 선택한 뒤 그룹 관리 버튼을 클릭하여 그룹 메뉴로 이동한다. IAM 대시보드 창에서 그룹을 선택하여 그룹 메뉴로 아동할 수도 있다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-iam-security-10.png\",\n alt: \"그룹 목록\"\n }), \"\\n\", React.createElement(_components.p, null, \"새로운 그룹 생성 버튼을 클릭하여 그룹 생성화면으로 이동한다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-iam-security-11.png\",\n alt: \"그룹 이름 설정\"\n }), \"\\n\", React.createElement(_components.p, null, \"그룹 이름을 입력한다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-iam-security-12.png\",\n alt: \"그룹 정책 연결\"\n }), \"\\n\", React.createElement(_components.p, null, \"그룹 정책을 선택한다. 예시를 들려고 AdministratorAccess 정책을 선택했는데 요 정책은 AWS의 모든 서비스 및 리소스에 대한 엑세스 및 권한을 허용하기 때문에 왠만하면 요 정책보다는 최소한의 정책을 설정하자.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-iam-security-13.png\",\n alt: \"생성할 그룹 검토\"\n }), \"\\n\", React.createElement(_components.p, null, \"검토화면에서 그룹 이름이랑 정책을 한번 더 확인하고 그룹 생성 버튼을 누르면 새로운 그룹이 생성된다.\"), \"\\n\", React.createElement(_components.h2, null, \"IAM 비밀번호 정책 적용\"), \"\\n\", React.createElement(_components.p, null, \"IAM 비밀번호 정책은 IAM 사용자들이 비밀번호를 설정할 때 비밀번호 규칙을 정하는 것이다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-iam-security-14.png\",\n alt: \"보안 상태 항목\"\n }), \"\\n\", React.createElement(_components.p, null, \"보안 상태 항목에서 IAM 비밀번호 정책 적용을 선택한 후 비밀번호 정책 관리 버튼을 클릭하여 비밀번호 정책 화면으로 이동한다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-iam-security-15.png\",\n alt: \"비밀번호 정책\"\n }), \"\\n\", React.createElement(_components.p, null, \"암호 정책 설정 버튼을 클릭하여 암호 정책 설정 화면으로 이동한다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-iam-security-16.png\",\n alt: \"암호 정책 설정\"\n }), \"\\n\", React.createElement(_components.p, null, \"암호 정책 요구사항 항목에서 원하는 항목들을 선택한다. 추후에 IAM 사용자들이 암호를 설정하거나 변경할 때 여기에서 선택한 항목들이 규칙이 된다.\"), \"\\n\", React.createElement(_components.h2, null, \"마무리\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-iam-security-17.png\",\n alt: \"AWS IAM 보안 설정 완료\"\n }), \"\\n\", React.createElement(_components.p, null, \"이렇게 위의 항목들을 다 설정하고 난 후 다시 보안 상태를 보면 모든 항목에 체크가 되어 있는 것을 확인할 수 있다. 프로덕션 배포 목적이 아니라 테스트나 공부 목적으로 AWS를 사용한다고 해도 계정이 해킹당해 요금 폭탄을 맞았다는 사례가 많으니 AWS가 권장하는 대로 보안을 튼튼히 하여 안전하게 AWS를 사용하자.\"), \"\\n\", React.createElement(_components.h2, null, \"Reference\"), \"\\n\", React.createElement(_components.blockquote, null, \"\\n\", React.createElement(_components.ul, null, \"\\n\", React.createElement(_components.li, null, React.createElement(_components.a, {\n href: \"https://docs.aws.amazon.com/ko_kr/general/latest/gr/aws-access-keys-best-practices.html\"\n }, \"AWS 액세스 키 관리를 위한 모범 사례\")), \"\\n\", React.createElement(_components.li, null, React.createElement(_components.a, {\n href: \"https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/id_credentials_mfa.html\"\n }, \"AWS에서 멀티 팩터 인증(MFA) 사용하기\")), \"\\n\", React.createElement(_components.li, null, React.createElement(_components.a, {\n href: \"https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/access_policies_create.html\"\n }, \"IAM 정책 만들기\")), \"\\n\", React.createElement(_components.li, null, React.createElement(_components.a, {\n href: \"https://www.44bits.io/ko/post/first_actions_for_setting_secure_account#%EB%A3%A8%ED%8A%B8-%EC%82%AC%EC%9A%A9%EC%9E%90%EC%9D%98-%EC%95%A1%EC%84%B8%EC%8A%A4-%ED%82%A4-%EC%82%AD%EC%A0%9C\"\n }, \"아마존 웹 서비스 계정 생성 후 해야하는 IAM 보안 조치\")), \"\\n\"), \"\\n\"));\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = Object.assign({}, _provideComponents(), props.components);\n return MDXLayout ? React.createElement(MDXLayout, props, React.createElement(_createMdxContent, props)) : _createMdxContent(props);\n}\nexport default MDXContent;\n","import React from \"react\";\nimport GATSBY_COMPILED_MDX from \"/Users/yookyoung.park/Workspace/kyoungah-dev-blog/posts/2020-07-25-etc-aws-iam-security.md\";\nimport {MDXProvider} from '@mdx-js/react';\nimport {Container} from '@/shared/uis/container';\nimport {DefaultLayout} from '@/widgets/default-layout';\nimport {PostLayoutContent} from './components/post-layout-content';\nimport {PostLayoutDate} from './components/post-layout-date';\nimport {PostLayoutTags} from './components/post-layout-tags';\nimport {PostLayoutTitle} from './components/post-layout-title';\nimport {postLayoutContainer, postLayoutTitle} from './post-layout.module.css';\nimport {jsx as _jsx} from \"react/jsx-runtime\";\nimport {jsxs as _jsxs} from \"react/jsx-runtime\";\nfunction PostLayout(_ref) {\n var _data$mdx$frontmatter, _data$mdx;\n let {data, children} = _ref;\n const {date, tags, title} = (_data$mdx$frontmatter = data === null || data === void 0 ? void 0 : (_data$mdx = data.mdx) === null || _data$mdx === void 0 ? void 0 : _data$mdx.frontmatter) !== null && _data$mdx$frontmatter !== void 0 ? _data$mdx$frontmatter : {};\n return _jsx(DefaultLayout, {\n children: _jsxs(Container, {\n className: postLayoutContainer,\n children: [_jsx(PostLayoutTitle, {\n className: postLayoutTitle,\n title: title\n }), _jsx(PostLayoutDate, {\n date: date\n }), _jsx(PostLayoutTags, {\n tags: tags\n }), _jsx(PostLayoutContent, {\n children: _jsx(MDXProvider, {\n children: children\n })\n })]\n })\n });\n}\nconst query = \"1347208223\";\nPostLayout\nexport default function GatsbyMDXWrapper(props) {\n return React.createElement(PostLayout, props, React.createElement(GATSBY_COMPILED_MDX, props));\n}\n","// extracted by mini-css-extract-plugin\nexport var postLayoutContentRoot = \"post-layout-content-module--post-layout-content-root--01754\";","import { clsx } from \"clsx\";\nimport { type HTMLAttributes, type PropsWithChildren } from \"react\";\n\nimport { postLayoutContentRoot } from \"./post-layout.content.module.css\";\n\ntype Props = PropsWithChildren & HTMLAttributes<HTMLDivElement>;\n\nfunction PostLayoutContent({ children, className, ...props }: Props) {\n return (\n <div className={clsx(postLayoutContentRoot, className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport { PostLayoutContent };\n","// extracted by mini-css-extract-plugin\nexport var postLayoutDateRoot = \"post-layout-date-module--post-layout-date-root--f34d1\";","import { clsx } from \"clsx\";\nimport { type HTMLAttributes } from \"react\";\n\nimport { postLayoutDateRoot } from \"./post-layout-date.module.css\";\n\ntype Props = { date: string } & HTMLAttributes<HTMLHeadingElement>;\n\nfunction PostLayoutDate({ className, date, ...props }: Props) {\n return (\n <span className={clsx(postLayoutDateRoot, className)} {...props}>\n {date}\n </span>\n );\n}\n\nexport { PostLayoutDate };\n","// extracted by mini-css-extract-plugin\nexport var postLayoutTags = \"post-layout-module--post-layout-tags--837df\";","import { Tags } from \"@/entities/tags\";\nimport { Link } from \"gatsby\";\n\nimport { postLayoutTags } from \"./post-layout.module.css\";\n\ntype Props = { tags: string[] };\n\nfunction PostLayoutTags({ tags }: Props) {\n return (\n <Tags className={postLayoutTags}>\n {tags.map((tag) => (\n <Link key={tag} to={`/tags/${tag}`}>\n <Tags.Tag tag={tag} />\n </Link>\n ))}\n </Tags>\n );\n}\n\nexport { PostLayoutTags };\n","// extracted by mini-css-extract-plugin\nexport var postLayoutTitleRoot = \"post-layout-title-module--post-layout-title-root--88374\";","import { clsx } from \"clsx\";\nimport { postLayoutTitleRoot } from \"./post-layout-title.module.css\";\nimport { HTMLAttributes } from \"react\";\n\ntype Props = { title: string } & HTMLAttributes<HTMLHeadingElement>;\n\nfunction PostLayoutTitle({ className, title, ...props }: Props) {\n return (\n <h1 className={clsx(postLayoutTitleRoot, className)} {...props}>\n {title}\n </h1>\n );\n}\n\nexport { PostLayoutTitle };\n","import { Tag } from '@/shared/uis/tag';\nimport { Tags } from './tags.ui';\n\nconst ComposedTags = Object.assign(Tags, {\n Tag,\n});\n\nexport { ComposedTags as Tags };\n","import { PropsWithChildren, type HTMLAttributes } from 'react';\nimport { clsx } from 'clsx';\n\nimport { tagsRoot } from './tags.module.css';\n\ntype Props = PropsWithChildren & HTMLAttributes<HTMLDivElement>;\n\nfunction Tags({ children, className, ...props }: Props) {\n return (\n <div className={clsx(tagsRoot, className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport { Tags };\n","// extracted by mini-css-extract-plugin\nexport var show = \"tags-module--show--7704b\";\nexport var tagsRoot = \"tags-module--tags-root--e3461\";","import { clsx } from 'clsx';\n\nimport type { HTMLAttributes, ReactNode } from 'react';\n\nimport { tagRoot } from './tag.module.css';\n\ntype Props = {\n tag: ReactNode;\n} & HTMLAttributes<HTMLSpanElement>;\n\nfunction Tag({ className, tag, ...props }: Props) {\n return (\n <span className={clsx(tagRoot, className)} {...props}>\n {tag}\n </span>\n );\n}\n\nexport type { Props as TagProps };\nexport { Tag };\n","// extracted by mini-css-extract-plugin\nexport var tagRoot = \"tag-module--tag-root--aae01\";","// extracted by mini-css-extract-plugin\nexport var containerRoot = \"container-module--container-root--3b208\";","import { clsx } from 'clsx';\nimport type { PropsWithChildren, HTMLAttributes } from 'react';\n\nimport { containerRoot } from './container.module.css';\n\ntype Props = PropsWithChildren & HTMLAttributes<HTMLSpanElement>;\n\nfunction Container({ children, className, ...props }: Props) {\n return (\n <div className={clsx(containerRoot, className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport { Container };\n","// extracted by mini-css-extract-plugin\nexport var basicLayoutRoot = \"basic-layout-module--basic-layout-root--a11e0\";","import { clsx } from 'clsx';\nimport { type HTMLAttributes, type PropsWithChildren } from 'react';\n\nimport { basicLayoutRoot } from './basic-layout.module.css';\n\ntype Props = PropsWithChildren & HTMLAttributes<HTMLDivElement>;\n\nfunction BasicLayout({ children, className, ...props }: Props) {\n return (\n <div className={clsx(basicLayoutRoot, className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport { BasicLayout };\n","// extracted by mini-css-extract-plugin\nexport var about = \"header-module--about--32ac9\";\nexport var headerLogo = \"header-module--header-logo--5bbdc\";\nexport var headerNavigation = \"header-module--header-navigation--24bcb\";\nexport var headerNavigationItem = \"header-module--header-navigation-item--ba248\";\nexport var headerNavigationItemLink = \"header-module--header-navigation-item-link--d6da9\";\nexport var headerNavigationList = \"header-module--header-navigation-list--3815c\";\nexport var headerRoot = \"header-module--header-root--01ceb\";\nexport var tags = \"header-module--tags--eb332\";","import { Link } from 'gatsby';\nimport { clsx } from 'clsx';\n\nimport {\n about,\n headerRoot,\n headerLogo,\n headerNavigation,\n headerNavigationList,\n headerNavigationItem,\n headerNavigationItemLink,\n tags,\n} from './header.module.css';\n\nfunction Header() {\n return (\n <header className={headerRoot}>\n <Link to=\"/\">\n <img\n src=\"/images/logo.png\"\n srcSet={`/images/logo-small.png 200w, /images/logo.png 300w`}\n sizes=\"(max-width: 360px) 200px, 300px\"\n alt=\"dev.kyoungah.me\"\n className={headerLogo}\n />\n </Link>\n <nav className={headerNavigation}>\n <ul className={headerNavigationList}>\n <li className={headerNavigationItem}>\n <Link to=\"/tags\">\n <span\n aria-label=\"tags\"\n className={clsx(headerNavigationItemLink, tags)}\n />\n </Link>\n </li>\n <li className={headerNavigationItem}>\n <a href=\"/about\" rel=\"noopener\" target=\"_blank\">\n <span\n aria-label=\"about\"\n className={clsx(headerNavigationItemLink, about)}\n />\n </a>\n </li>\n </ul>\n </nav>\n </header>\n );\n}\n\nexport { Header };\n","// extracted by mini-css-extract-plugin\nexport var footerRoot = \"footer-module--footer-root--795ff\";","import { footerRoot } from './footer.module.css';\n\nfunction Footer() {\n return (\n <footer className={footerRoot}>\n <span>Powered by Gatsby, Hosted by GitHub Pages.</span>\n <span>\n ©\n <a\n href=\"https://github.com/partykyoung\"\n rel=\"noreferrer\"\n target=\"_blank\">\n KyoungAh\n </a>\n , All rights reserved.\n </span>\n </footer>\n );\n}\n\nexport { Footer };\n","import type { PropsWithChildren } from \"react\";\n\nimport { Header } from \"../header\";\nimport { Footer } from \"../footer\";\nimport { BasicLayout } from \"../basic-layout\";\n\nfunction DefaultLayout({ children }: PropsWithChildren) {\n return (\n <>\n <Header />\n <BasicLayout>{children}</BasicLayout>\n <Footer />\n </>\n );\n}\n\nexport { DefaultLayout };\n","// extracted by mini-css-extract-plugin\nexport var postLayoutContainer = \"post-layout-module--post-layout-container--f40b5\";\nexport var postLayoutTitle = \"post-layout-module--post-layout-title--1c575\";","/**\n * @typedef {import('mdx/types.js').MDXComponents} MDXComponents\n * @typedef {import('react').Component<{}, {}, unknown>} Component\n * @typedef {import('react').ReactNode} ReactNode\n */\n\n/**\n * @callback MergeComponents\n * Custom merge function.\n * @param {Readonly<MDXComponents>} currentComponents\n * Current components from the context.\n * @returns {MDXComponents}\n * Additional components.\n *\n * @typedef Props\n * Configuration for `MDXProvider`.\n * @property {ReactNode | null | undefined} [children]\n * Children (optional).\n * @property {Readonly<MDXComponents> | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @property {boolean | null | undefined} [disableParentContext=false]\n * Turn off outer component context (default: `false`).\n */\n\nimport React from 'react'\n\n/** @type {Readonly<MDXComponents>} */\nconst emptyComponents = {}\n\nconst MDXContext = React.createContext(emptyComponents)\n\n/**\n * Get current components from the MDX Context.\n *\n * @param {Readonly<MDXComponents> | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @returns {MDXComponents}\n * Current components.\n */\nexport function useMDXComponents(components) {\n const contextComponents = React.useContext(MDXContext)\n\n // Memoize to avoid unnecessary top-level context changes\n return React.useMemo(\n function () {\n // Custom merge via a function prop\n if (typeof components === 'function') {\n return components(contextComponents)\n }\n\n return {...contextComponents, ...components}\n },\n [contextComponents, components]\n )\n}\n\n/**\n * Provider for MDX context.\n *\n * @param {Readonly<Props>} properties\n * Properties.\n * @returns {JSX.Element}\n * Element.\n * @satisfies {Component}\n */\nexport function MDXProvider(properties) {\n /** @type {Readonly<MDXComponents>} */\n let allComponents\n\n if (properties.disableParentContext) {\n allComponents =\n typeof properties.components === 'function'\n ? properties.components(emptyComponents)\n : properties.components || emptyComponents\n } else {\n allComponents = useMDXComponents(properties.components)\n }\n\n return React.createElement(\n MDXContext.Provider,\n {value: allComponents},\n properties.children\n )\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;"],"names":["_createMdxContent","props","_components","Object","assign","p","a","img","h2","ul","li","blockquote","_provideComponents","components","React","href","src","alt","wrapper","MDXLayout","PostLayout","_ref","_data$mdx$frontmatter","_data$mdx","data","children","date","tags","title","mdx","frontmatter","_jsx","DefaultLayout","_jsxs","Container","className","postLayoutContainer","PostLayoutTitle","postLayoutTitle","PostLayoutDate","PostLayoutTags","PostLayoutContent","MDXProvider","GatsbyMDXWrapper","GATSBY_COMPILED_MDX","postLayoutContentRoot","clsx","postLayoutDateRoot","postLayoutTags","Tags","map","tag","Link","to","Tag","postLayoutTitleRoot","ComposedTags","containerRoot","basicLayoutRoot","BasicLayout","about","headerLogo","headerNavigation","headerNavigationItem","headerNavigationItemLink","headerNavigationList","headerRoot","Header","srcSet","sizes","rel","target","footerRoot","Footer","_Fragment","emptyComponents","MDXContext","useMDXComponents","contextComponents","properties","allComponents","disableParentContext","Provider","value","r","e","t","f","n","Array","isArray","o","length","arguments"],"sourceRoot":""}