Help
RSS
API
Feed
Maltego
Contact
Domain > www.imrefitos.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2015-05-08
104.28.25.55
(
ClassC
)
2024-10-06
172.67.131.115
(
ClassC
)
Port 80
HTTP/1.1 200 OKDate: Sun, 06 Oct 2024 09:19:24 GMTContent-Type: text/html; charsetUTF-8Transfer-Encoding: chunkedConnection: keep-alivecf-edge-cache: cache,platformwordpressVary: accept,content-type,Accept-Encoding,User-AgentLink: https://www.imrefitos.com/wp-json/>; relhttps://api.w.org/Cache-Control: max-age600Expires: Sun, 06 Oct 2024 09:29:23 GMTCF-Cache-Status: DYNAMICReport-To: {endpoints:{url:https:\/\/a.nel.cloudflare.com\/report\/v4?sBUZPIU13%2BS7C%2Bsz1l8Vq8L1qssv5WpTchw7EnAya9M0IXVz7OedfwzdmEM3bQK44czDRgU7enaRTJ8%2FUfcL9cxzlJyk4zUvPCqucr1kq6IpjrtatbpBUtrPMe9E28FKuaLEGWw%3D%3D},group:cf-nel,max_age:604800}NEL: {success_fraction:0,report_to:cf-nel,max_age:604800}Speculation-Rules: /cdn-cgi/speculationServer: cloudflareCF-RAY: 8ce491c8b8c18426-YVR !DOCTYPE html>html langen-US>head>meta charsetUTF-8 />meta nameviewport contentwidthdevice-width />title>Imre Fitos | Startups, Technology and Organization/title>link relprofile hrefhttp://gmpg.org/xfn/11 />link relpingback hrefhttp://www.imrefitos.com/xmlrpc.php />link hrefhttps://fonts.googleapis.com/css?familyLibre+Baskerville:400,700,400italic relstylesheet typetext/css>!--if lt IE 9>script srchttp://www.imrefitos.com/wp-content/themes/readly/js/html5.js typetext/javascript>/script>!endif-->meta namerobots contentmax-image-preview:large />meta namegoogle-site-verification contentATIrlgsxKeIX8uKD-rfWw91tHbFR1L8gmYG53T0ZtPw />link reldns-prefetch href//secure.gravatar.com />link reldns-prefetch href//stats.wp.com />link reldns-prefetch href//v0.wordpress.com />link relalternate typeapplication/rss+xml titleImre Fitos » Feed hrefhttps://www.imrefitos.com/feed/ />link relalternate typeapplication/rss+xml titleImre Fitos » Comments Feed hrefhttps://www.imrefitos.com/comments/feed/ />script typetext/javascript>/* !CDATA */window._wpemojiSettings {baseUrl:https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/72x72\/,ext:.png,svgUrl:https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/svg\/,svgExt:.svg,source:{concatemoji:http:\/\/www.imrefitos.com\/wp-includes\/js\/wp-emoji-release.min.js?ver6.6.2}};/*! This file is auto-generated */!function(i,n){var o,s,e;function c(e){try{var t{supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var tnew Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return ert})}function u(e,t,n){switch(t){caseflag:return n(e,\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f,\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f)?!1:!n(e,\ud83c\uddfa\ud83c\uddf3,\ud83c\uddfa\u200b\ud83c\uddf3)&&!n(e,\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f,\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f);caseemoji:return!n(e,\ud83d\udc26\u200d\u2b1b,\ud83d\udc26\u200b\u2b1b)}return!1}function f(e,t,n){var rundefined!typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement(canvas),ar.getContext(2d,{willReadFrequently:!0}),o(a.textBaselinetop,a.font600 32px Arial,{});return e.forEach(function(e){oet(a,e,n)}),o}function t(e){var ti.createElement(script);t.srce,t.defer!0,i.head.appendChild(t)}undefined!typeof Promise&&(owpEmojiSettingsSupports,sflag,emoji,n.supports{everything:!0,everythingExceptFlag:!0},enew Promise(function(e){i.addEventListener(DOMContentLoaded,e,{once:!0})}),new Promise(function(t){var nfunction(){try{var eJSON.parse(sessionStorage.getItem(o));if(objecttypeof e&&numbertypeof e.timestamp&&(new Date).valueOf()e.timestamp+604800&&objecttypeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if(undefined!typeof Worker&&undefined!typeof OffscreenCanvas&&undefined!typeof URL&&URL.createObjectURL&&undefined!typeof Blob)try{var epostMessage(+f.toString()+(+JSON.stringify(s),u.toString(),p.toString().join(,)+));,rnew Blob(e,{type:text/javascript}),anew Worker(URL.createObjectURL(r),{name:wpTestEmojiSupports});return void(a.onmessagefunction(e){c(ne.data),a.terminate(),t(n)})}catch(e){}c(nf(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supportstet,n.supports.everythingn.supports.everything&&n.supportst,flag!t&&(n.supports.everythingExceptFlagn.supports.everythingExceptFlag&&n.supportst);n.supports.everythingExceptFlagn.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady!1,n.readyCallbackfunction(){n.DOMReady!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(en.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings);/* > *//script>style idwp-emoji-styles-inline-css typetext/css> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; }/style>link relstylesheet idwp-block-library-css hrefhttp://www.imrefitos.com/wp-includes/css/dist/block-library/style.min.css?ver6.6.2 typetext/css mediaall />link relstylesheet idmediaelement-css hrefhttp://www.imrefitos.com/wp-includes/js/mediaelement/mediaelementplayer-legacy.min.css?ver4.2.17 typetext/css mediaall />link relstylesheet idwp-mediaelement-css hrefhttp://www.imrefitos.com/wp-includes/js/mediaelement/wp-mediaelement.min.css?ver6.6.2 typetext/css mediaall />style idjetpack-sharing-buttons-style-inline-css typetext/css>.jetpack-sharing-buttons__services-list{display:flex;flex-direction:row;flex-wrap:wrap;gap:0;list-style-type:none;margin:5px;padding:0}.jetpack-sharing-buttons__services-list.has-small-icon-size{font-size:12px}.jetpack-sharing-buttons__services-list.has-normal-icon-size{font-size:16px}.jetpack-sharing-buttons__services-list.has-large-icon-size{font-size:24px}.jetpack-sharing-buttons__services-list.has-huge-icon-size{font-size:36px}@media print{.jetpack-sharing-buttons__services-list{display:none!important}}.editor-styles-wrapper .wp-block-jetpack-sharing-buttons{gap:0;padding-inline-start:0}ul.jetpack-sharing-buttons__services-list.has-background{padding:1.25em 2.375em}/style>style idclassic-theme-styles-inline-css typetext/css>/*! This file is auto-generated */.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}/style>style idglobal-styles-inline-css typetext/css>:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}/style>link relstylesheet idfancybox-style-css hrefhttp://www.imrefitos.com/wp-content/themes/readly/fancybox/jquery.fancybox.css?v2.1.5&ver6.6.2 typetext/css mediaall />link relstylesheet idreadly-style-css hrefhttp://www.imrefitos.com/wp-content/themes/readly/style.css?ver6.6.2 typetext/css mediaall />style idreadly-style-inline-css typetext/css>.gallery .gallery-item { max-width: 150px;}/style>script typetext/javascript srchttp://www.imrefitos.com/wp-includes/js/jquery/jquery.min.js?ver3.7.1 idjquery-core-js>/script>script typetext/javascript srchttp://www.imrefitos.com/wp-includes/js/jquery/jquery-migrate.min.js?ver3.4.1 idjquery-migrate-js>/script>script typetext/javascript srchttp://www.imrefitos.com/wp-content/themes/readly/js/jquery-ui-1.10.2.custom.min.js?ver20130317 idjquery-ui-js>/script>script typetext/javascript srchttp://www.imrefitos.com/wp-content/themes/readly/js/readly.js?ver20140331 idreadly-script-js>/script>link relhttps://api.w.org/ hrefhttps://www.imrefitos.com/wp-json/ />link relEditURI typeapplication/rsd+xml titleRSD hrefhttps://www.imrefitos.com/xmlrpc.php?rsd />meta namegenerator contentWordPress 6.6.2 />script> (function(i,s,o,g,r,a,m){iGoogleAnalyticsObjectr;irir||function(){ (ir.qir.q||).push(arguments)},ir.l1*new Date();as.createElement(o), ms.getElementsByTagName(o)0;a.async1;a.srcg;m.parentNode.insertBefore(a,m) })(window,document,script,https://www.google-analytics.com/analytics.js,ga); ga(create, UA-7707462-1, auto); ga(send, pageview);/script> style>img#wpstats{display:none}/style>style typetext/css idcustom-background-css>a { color: #1e83cb;}.entry-content a { -webkit-transition: border-bottom-color 0.2s linear; -moz-transition: border-bottom-color 0.2s linear; -o-transition: border-bottom-color 0.2s linear; transition: border-bottom-color 0.2s linear;}.entry-content a:hover { border-bottom-color: #1e83cb;}#masthead .site-title a, #site-navigation a, .sub-menu a, #nav-below a, .entry-title a, #image-navigation a { -webkit-transition: color 0.2s linear; -moz-transition: color 0.2s linear; -o-transition: color 0.2s linear; transition: color 0.2s linear;}#masthead .site-title a:hover, #nav-below a:hover, .entry-title a:hover, #image-navigation a:hover { color: #1e83cb;}#s, #commentform inputtypetext, #commentform textarea, .password_protected, #social a, a.more-link { -webkit-transition: background-color 0.2s linear; -moz-transition: background-color 0.2s linear; -o-transition: background-color 0.2s linear; transition: background-color 0.2s linear;}a.more-link span { -webkit-transition: border-left-color 0.2s linear; -moz-transition: border-left-color 0.2s linear; -o-transition: border-left-color 0.2s linear; transition: border-left-color 0.2s linear;}#s:focus, #commentform inputtypetext:focus, #commentform textarea:focus, .password_protected:focus { background-color: #fff;}#social a:hover { background-color: #1e83cb;}a.more-link:hover { background-color: #1e83cb;}a.more-link:hover span { border-left-color: #1e83cb;}.entry-meta a, footer .site-info a, #comments a, .link_post_p a { -webkit-transition: color 0.2s linear, border-bottom-color 0.2s linear; -moz-transition: color 0.2s linear, border-bottom-color 0.2s linear; -o-transition: color 0.2s linear, border-bottom-color 0.2s linear; transition: color 0.2s linear, border-bottom-color 0.2s linear;}.entry-meta a:hover, footer .site-info a:hover, #comments a:hover, #comments a#cancel-comment-reply-link:hover, .link_post_p a:hover { color: #1e83cb; border-bottom-color: #1e83cb;}@media only screen and (min-width : 641px) { #site-navigation a:hover, .sub-menu a:hover { color: #1e83cb; }}html { position: relative; min-height: 100%;}.hentry .mejs-controls .mejs-time-rail .mejs-time-current { background: #1e83cb;}/style>script typetext/javascript>var hover_color #1e83cb;/script>style typetext/css>.recentcomments a{display:inline !important;padding:0 !important;margin:0 !important;}/style>meta propertyog:type contentwebsite />meta propertyog:title contentImre Fitos />meta propertyog:description contentStartups, Technology and Organization />meta propertyog:url contenthttps://www.imrefitos.com/ />meta propertyog:site_name contentImre Fitos />meta propertyog:image contenthttps://s0.wp.com/i/blank.jpg />meta propertyog:image:alt content />meta propertyog:locale contenten_US />/head>body classhome blog>header idmasthead classsite-header rolebanner>div idheader-wrapper>hgroup>div idhgroup-wrapper>div idhgroup-wrapper2>h1 classsite-title>a hrefhttps://www.imrefitos.com/ titleImre Fitos relhome>Imre Fitos/a>/h1>h2 classsite-description>Startups, Technology and Organization/h2>/div>/div>/hgroup>nav idsite-navigation classnavigation-main rolenavigation>div idsite-navigation-wrapper>div idsite-navigation-wrapper2>h1 classmenu-toggle>Menuspan>m/span>/h1>div classassistive-text skip-link>a href#content titleSkip to content>Skip to content/a>/div>/div>/div>/nav>/div>/header>div idpage classhfeed site>div idmain classsite-main>div idprimary classcontent-area>div idcontent classsite-content rolemain>article idpost-283 classpost-283 post type-post status-publish format-standard hentry category-uncategorized tag-automation tag-aws tag-devops tag-ssm>header classentry-header>div classentry-meta>a hrefhttps://www.imrefitos.com/archives/283/aws-ssm-patch-failed-no-imds-credentials-s3-access-denied-solution/ title10:38 relbookmark>time classentry-date datetimeMay 9th, 2024>May 9th, 2024/time>/a>/div>h1 classentry-title>a hrefhttps://www.imrefitos.com/archives/283/aws-ssm-patch-failed-no-imds-credentials-s3-access-denied-solution/ titlePermalink to AWS SSM Patch Failed – No IMDS credentials – S3 Access Denied – Solution relbookmark>AWS SSM Patch Failed – No IMDS credentials – S3 Access Denied – Solution/a>/h1>/header>div classentry-content>p>Another impossible to debug AWS issue:/p>p>I ran an AWS Systems Manager Patch Manager RunPatchBaseline association on a managed instance. My managed instance uses a custom IAM Role slash Instance Profile, but I read the documentation and added the proper permissions./p>p>I ran RunPatchBaseline and got an Association Failed status on the instance with the custom role. The Run Command Output showed the following error:/p>blockquote classwp-block-quote is-layout-flow wp-block-quote-is-layout-flow>pre classwp-block-code>code>No IMDS credentials found on instance.failed to run commands: exit status 156/code>/pre>/blockquote>p>I connected to the instance and verified that IMDS does work fine on the instance, following the AWS documentation here: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html/p>p>Further details under the Run Command Output showed a completely different error:/p>blockquote classwp-block-quote is-layout-flow wp-block-quote-is-layout-flow>pre classwp-block-code>code>ClientError: An error occurred (403) when calling the HeadObject operation: Forbidden/code>/pre>/blockquote>p>Further up in the logs I found that the SSM agent was trying to download the code>baseline_overrides.json/code> from a dedicated S3 bucket operated by Amazon, starting with code>aws-quicksetup-patchpolicy-ACCOUNTID-QUICKSETUPCONFIGID/code>. My IAM profile, even though it is setup to allow access to this bucket, and can list the baseline_overrides.json object, is blocked from downloading it./p>p>Solution: by comparing the custom role to the Amazon generated QuickSetup role, I figured out that I have to manually add a Tag to the custom IAM role for this to work. S3 is checking if the ROLE has a special Tag associated before allowing access to the object. It is documented on AWS here: a hrefhttps://docs.aws.amazon.com/systems-manager/latest/userguide/quick-setup-patch-manager.html>https://docs.aws.amazon.com/systems-manager/latest/userguide/quick-setup-patch-manager.html/a>/p>figure classwp-block-pullquote>blockquote>p>“You must tag your IAM instance profile or IAM service role with the following key-value pair.br>Key: QSConfigId-quick-setup-configuration-id, Value: quick-setup-configuration-id”/p>/blockquote>/figure>p>Hope This Helps,/p>p>imre Fitos/p>/div>div classarticle-separator>j j j/div>/article>article idpost-276 classpost-276 post type-post status-publish format-standard hentry category-uncategorized tag-aws tag-boto tag-python tag-python3 tag-stackoverflow>header classentry-header>div classentry-meta>a hrefhttps://www.imrefitos.com/archives/276/solution-to-boto3-s3-createmultipartupload-access-denied-problem/ title09:54 relbookmark>time classentry-date datetimeNovember 22nd, 2023>November 22nd, 2023/time>/a>/div>h1 classentry-title>a hrefhttps://www.imrefitos.com/archives/276/solution-to-boto3-s3-createmultipartupload-access-denied-problem/ titlePermalink to Solution to BOTO3 S3 CreateMultipartUpload Access Denied problem relbookmark>Solution to BOTO3 S3 CreateMultipartUpload Access Denied problem/a>/h1>/header>div classentry-content>p>We ran into a weird problem when we tried to stream to an S3 file using boto3, and all the posts on Stack Overflow had wildly inaccurate and generally non-working solutions, so I’m posting this hoping that maybe it will save someone some time./p>p>The problem: You write an S3 upload in python, and it gives you the following error:/p>pre classwp-block-code>code>ValueError: the bucket XXX does not exist, or is forbidden for access (ClientError(An error occurred (AccessDenied) when calling the CreateMultipartUpload operation: Access Denied))/code>/pre>p>The error clearly spells out that this is a permission problem, so you spend some time trying to add the proper permissions. You learn that there is no such thing as an S3:CreateMultipartUpload permission – boto3 uses the normal s3:PutObject permission. So you google some more./p>p>Then you think it’s an ACL permission – nope./p>p>Then you think maybe your encrypted S3 bucket is the problem and you need to add kms:GenerateDataKey permission? But no, you use encryption with Amazon S3 managed keys (SSE-S3) and it does not require extra kms permissions. Another dead end. How did it ever work for other people?/p>p>Then you throw all the permissions that exist on the user and it’s still failing. What gives?/p>p>You enable boto3 debug logs with code>boto3.set_stream_logger()/code> but the log looks okay, except that it gets a 403 access denied from Amazon./p>p>Then your brilliant colleague Fatih Elmali reads the code and says that regardless of all the examples Amazon has published, the following is not enough:/p>pre classwp-block-code>code>client boto3.client(s3, aws_access_key_id...)/code>/pre>p>The proper way to setup authentication for a boto3 s3 client is the following:/p>pre classwp-block-code>code>session boto3.Session(aws_access_key_id...)client session.client(s3)/code>/pre>p>This will set up the proper session authentication and streaming to an S3 file object will work./p>/div>div classarticle-separator>j j j/div>/article>article idpost-265 classpost-265 post type-post status-publish format-standard hentry category-uncategorized tag-management tag-monday-com tag-project tag-project-management tag-resource-leveling tag-resource-management tag-resource-based-project-scheduling>header classentry-header>div classentry-meta>a hrefhttps://www.imrefitos.com/archives/265/resource-based-project-scheduling-and-monday-com/ title14:11 relbookmark>time classentry-date datetimeJanuary 27th, 2023>January 27th, 2023/time>/a>/div>h1 classentry-title>a hrefhttps://www.imrefitos.com/archives/265/resource-based-project-scheduling-and-monday-com/ titlePermalink to Resource-based project scheduling and Monday.com relbookmark>Resource-based project scheduling and Monday.com/a>/h1>/header>div classentry-content>p>strong>Resource-based project scheduling/strong> or Resource-constrained project scheduling has been around for decades, but it is more common in in construction industry and not that well known in software development. /p>p>Most everybody is familiar with strong>Time-based project scheduling/strong> – the work breakdown and the deadline specification happens first, and then the PM tries to get resources to meet the deadlines. The manual method of making resources work is called strong>resource leveling/strong>./p>p>Resource-based project scheduling puts the availability of resources first. Each resource, e.g. a software developer, has a calendar of availability, with the already allocated dates blocked out. The PM assigns the task to the resource, and the system allocates the first available time period automatically./p>p>If a PM rearranges the order of tasks or entire projects, the system rearranges the date ranges allocated to the tasks. The PM can easily see if a proposed deadline can be met with the available resources, or do other projects need to be re-prioritized to ensure success./p>p>This system makes managing project portfolios much easier – no chance of double booking, and if a task takes less effort than originally planned, the delivery dates of the remaining tasks automatically move earlier./p>p>These features also make rebaselining and reallocation much easier, simpler, faster, and makes resource leveling completely automatic./p>hr classwp-block-separator has-alpha-channel-opacity />p>Monday.com is a popular online project management platform. While it is mostly Time-based, it has a few features that help with resource management./p>p>The major component is creating a Dashboard and a Timeline Widget on the Dashboard. Connect all the project boards that you want to manage together, and the Timeline will be automatically populated with swimlines per Person, and all the tasks assigned to them from all the connected projects./p>p>At this point the PM can move the tasks up and down on the timeline to make sure that people are not double booked or underused, and the changes are immediately implemented on all the connected project boards./p>p>This ensures that all projects are properly resourced, and makes it easy to respond to changes in resource availability./p>p>Another component is creating a project board dedicated to Vacation/PTO. On this board people can reserve their time off, and then this will be plainly visible on the main Timeline Widget, so their time off won’t be double-booked with work and they can meet their deadlines./p>p>This means that you can go from this:/p>figure classwp-block-image size-large>a hrefhttp://www.imrefitos.com/wp-content/uploads/2023/01/monday-unleveled.png>img fetchpriorityhigh decodingasync width1024 height316 srchttp://www.imrefitos.com/wp-content/uploads/2023/01/monday-unleveled-1024x316.png alt classwp-image-268 srcsethttp://www.imrefitos.com/wp-content/uploads/2023/01/monday-unleveled-1024x316.png 1024w, http://www.imrefitos.com/wp-content/uploads/2023/01/monday-unleveled-300x93.png 300w, http://www.imrefitos.com/wp-content/uploads/2023/01/monday-unleveled-768x237.png 768w, http://www.imrefitos.com/wp-content/uploads/2023/01/monday-unleveled-1536x475.png 1536w, http://www.imrefitos.com/wp-content/uploads/2023/01/monday-unleveled-920x284.png 920w, http://www.imrefitos.com/wp-content/uploads/2023/01/monday-unleveled.png 1803w sizes(max-width: 1024px) 100vw, 1024px />/a>figcaption classwp-element-caption>project portfolio before leveling/figcaption>/figure>p>To this, only by using a Dashboard Timeline Widget:/p>figure classwp-block-image size-large>a hrefhttp://www.imrefitos.com/wp-content/uploads/2023/01/monday-leveled.png>img decodingasync width1024 height248 srchttp://www.imrefitos.com/wp-content/uploads/2023/01/monday-leveled-1024x248.png alt classwp-image-269 srcsethttp://www.imrefitos.com/wp-content/uploads/2023/01/monday-leveled-1024x248.png 1024w, http://www.imrefitos.com/wp-content/uploads/2023/01/monday-leveled-300x73.png 300w, http://www.imrefitos.com/wp-content/uploads/2023/01/monday-leveled-768x186.png 768w, http://www.imrefitos.com/wp-content/uploads/2023/01/monday-leveled-1536x371.png 1536w, http://www.imrefitos.com/wp-content/uploads/2023/01/monday-leveled-920x222.png 920w, http://www.imrefitos.com/wp-content/uploads/2023/01/monday-leveled.png 1799w sizes(max-width: 1024px) 100vw, 1024px />/a>figcaption classwp-element-caption>project portfolio after leveling/figcaption>/figure>hr classwp-block-separator has-alpha-channel-opacity />p>Monday.com is quite popular and I hope they will implement even more features to help managing project portfolios. There are many other solutions out there, but if your organization is committed to Monday.com, you can make it work. Let’s see what they do next!/p>/div>div classarticle-separator>j j j/div>/article>article idpost-261 classpost-261 post type-post status-publish format-standard hentry category-uncategorized tag-aws tag-awschatbot tag-devops>header classentry-header>div classentry-meta>a hrefhttps://www.imrefitos.com/archives/261/aws-chatbot-custom-message-solution/ title17:40 relbookmark>time classentry-date datetimeSeptember 23rd, 2022>September 23rd, 2022/time>/a>/div>h1 classentry-title>a hrefhttps://www.imrefitos.com/archives/261/aws-chatbot-custom-message-solution/ titlePermalink to AWS Chatbot custom message – solution relbookmark>AWS Chatbot custom message – solution/a>/h1>/header>div classentry-content>p>Most DevOps people who set up AWS Chatbot integrations with other AWS services eventually start wondering how to send custom messages through Chatbot./p>p>At this point I would to remind you that your life will be much easier if you give up on the idea and instead send your message directly to Slack using a web hook./p>p>But if you want to see this to the end:/p>p>Tom Stroobants documented the general SNS message format that Chatbot expects and it looks like this:/p>pre classwp-block-code>code>{ version: 0, time: 1970-01-01T00:00:00Z, id: 00000000-0000-0000-0000-000000000000, account: [your real account id, region: [a real region, source: aws.[a service prefix e.g. ec2, detail-type: [you can use this field for your message, resources: [, detail: {}}/code>/pre>p>As long as these fields are present in the message AWS Chatbot will forward the message to Slack, but will not display any more details other than the text in the “detail-type” field, and doubles up that text./p>p>To make AWS Chatbot deliver a more detailed message, one has to format the message according to the AWS Events that Chatbot supports. Which means our messages will have to have a predefined “detail-type” and “source”./p>p>To see examples of all message formats that Chatbot can display, to find one that we could co-opt for our purposes:/p>ol classwp-block-list>li>Open the EventBridge console at a relnoreferrer noopener hrefhttps://docs.aws.amazon.com/chatbot/latest/adminguide/create-eventbridge-rule.html target_blank>https://console.aws.amazon.com/events/./a>/li>li>In the navigation pane, choose strong>Rules/strong>./li>li>Choose strong>Create rule/strong>./li>li>Enter a name and description for the rule. /li>li>For strong>Define pattern/strong>, choose strong>Rule with an event pattern/strong>./li>li>Hit Next./li>li>For Event source, leave it on strong>AWS events/strong>/li>li>Now you can browse all available events under strong>Sample Event/strong> / AWS events./li>/ol>p>You will quickly notice that the event names are quite specific, and you might not want to use “strong>VoiceId Batch Fraudster Registration Action/strong>” for your custom message./p>p>I found that the “AWS Health Event” is innocent enough to be reusable, and now I am able to send free form paragraphs using the following:/p>pre classwp-block-code>code>{ version: 0, id: 00000000-0000-0000-0000-000000000000, account: [my AWS account number, time: 1970-01-01T00:00:00Z, region: us-east-1, source: aws.health, detail-type: AWS Health Event, resources: [, detail: { eventDescription: [{ language: en_US, latestDescription: Long form message\nMore lines } }}/code>/pre>p>I hope somebody with good enough connections to the AWS Chatbot team will get more details out of them, right now their official line is “AWS Chatbot only supports AWS Services”. Help?/p>p>HTH, imre/p>/div>div classarticle-separator>j j j/div>/article>article idpost-228 classpost-228 post type-post status-publish format-standard hentry category-uncategorized tag-aws tag-forcemfa tag-iam tag-security>header classentry-header>div classentry-meta>a hrefhttps://www.imrefitos.com/archives/228/aws-force-mfa-example-policy-doesnt-work-on-administrators-fix/ title08:00 relbookmark>time classentry-date datetimeMay 2nd, 2022>May 2nd, 2022/time>/a>/div>h1 classentry-title>a hrefhttps://www.imrefitos.com/archives/228/aws-force-mfa-example-policy-doesnt-work-on-administrators-fix/ titlePermalink to AWS Force MFA example policy doesn’t work on Administrators – Fix relbookmark>AWS Force MFA example policy doesn’t work on Administrators – Fix/a>/h1>/header>div classentry-content>p>There are several example policies written by Amazon itself, and also by other security providers like Yubico that claim to enforce MFA use, but simply do not work on users who have AdministratorAccess policy.br>br>Here is an actual example policy written by Amazon that actually works: https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_aws_my-sec-creds-self-manage.html/p>/div>div classarticle-separator>j j j/div>/article>article idpost-215 classpost-215 post type-post status-publish format-standard hentry category-uncategorized tag-aws-2 tag-awslambda-3 tag-awssam-2 tag-lambda-2 tag-node tag-nodejs tag-serveless>header classentry-header>div classentry-meta>a hrefhttps://www.imrefitos.com/archives/215/aws-sam-and-the-case-of-missing-directories-solution/ title08:54 relbookmark>time classentry-date datetimeFebruary 16th, 2022>February 16th, 2022/time>/a>/div>h1 classentry-title>a hrefhttps://www.imrefitos.com/archives/215/aws-sam-and-the-case-of-missing-directories-solution/ titlePermalink to AWS SAM and the case of missing directories – Solution relbookmark>AWS SAM and the case of missing directories – Solution/a>/h1>/header>div classentry-content>p>I think serverless is the future, so I have been going through a Nodejs Lambda tutorial to learn more about it. Amazon recommends SAM for provisioning Lambda functions and it’s pretty straightforward at first sight.br>br>Later you will learn that AWS SAM is opinionated, and it keeps its opinions to itself. It doesn’t tell you what it does, how it does it, there are no options to change it, and not much of a debug function to see what goes wrong.br>br>code>sam build/code> did not copy a directory into my Node package. Documentation says nothing about this behavior. Debug shows no information about what gets copied. Googling led nowhere. Eventually I simply guessed that it reads my .gitignore file and it ignores everything that I want Git to ignore, and I was right. And I was grumpy.br>br>TL/DR: If you have missing files or missing directories in your sam build package, look at your .gitignore/p>/div>div classarticle-separator>j j j/div>/article>article idpost-205 classpost-205 post type-post status-publish format-standard hentry category-uncategorized tag-alb tag-aws tag-awslambda-2 tag-elb tag-lambda tag-serverless>header classentry-header>div classentry-meta>a hrefhttps://www.imrefitos.com/archives/205/lambdaaccessdenied-error-in-aws-load-balancer-solution/ title08:16 relbookmark>time classentry-date datetimeJanuary 16th, 2022>January 16th, 2022/time>/a>/div>h1 classentry-title>a hrefhttps://www.imrefitos.com/archives/205/lambdaaccessdenied-error-in-aws-load-balancer-solution/ titlePermalink to LambdaAccessDenied error in AWS Load Balancer – Solution relbookmark>LambdaAccessDenied error in AWS Load Balancer – Solution/a>/h1>/header>div classentry-content>p>Permission handling in ELB and Lambda is somewhat magical, some of the tools autoprovision permissions behind the scene, and some of them sometimes mess up.br>br>I had a Lambda that I was invoking from a load balancer and it simply did not work. The only hint was “LambdaAccessDenied” in the ALB logs.br>br>I had everything configured correctly. I have added a lambda permission for the entire elasticloadbalancing.amazonaws.com service to invoke my function. I had the proper target groups. I had even enabled AWS SAM to autoprovision the IAM roles. The Lambda function was firing correctly, I had logs to show that it was executing. br>br>But I kept getting “502 Bad Gateway” from the load balancer and the logs kept showing LambdaAccessDenied. br>br>I removed all the custom stuff I created. I removed the alias. I removed and re provisioned the entire lambda function. I removed and recreated the target group.br>br>Eventually I removed the target group and the permission I created, br>and provisioned an “Application Load Balancer” Trigger from the Lambda console. This created a new target group and a new resource-based policy under Permissions, and suddenly everything started working, even though the new entries looked exactly the same as the entries I created.br>br>Since there are only five entries on Google that even mention this error message, I figured you might want to save some time and learn from my experience./p>/div>div classarticle-separator>j j j/div>/article>article idpost-166 classpost-166 post type-post status-publish format-standard hentry category-uncategorized tag-backup tag-ca tag-easy-rsa tag-easyrsa tag-easyrsa3 tag-howto tag-pki tag-restore>header classentry-header>div classentry-meta>a hrefhttps://www.imrefitos.com/archives/166/how-to-backup-and-restore-an-easy-rsa-certificate-authority/ title14:55 relbookmark>time classentry-date datetimeApril 15th, 2021>April 15th, 2021/time>/a>/div>h1 classentry-title>a hrefhttps://www.imrefitos.com/archives/166/how-to-backup-and-restore-an-easy-rsa-certificate-authority/ titlePermalink to How to backup and restore an Easy-RSA certificate authority relbookmark>How to backup and restore an Easy-RSA certificate authority/a>/h1>/header>div classentry-content>p>Easy-RSA is great, but the documentation doesn’t cover much about backup and restore, so this is a quick write up on this topic./p>p>If you want to back up your entire CA, save your easyrsa3/pki directory. You can simply restore this pki directory in a new install of easy-rsa and you will be back in business./p>p>If you don’t want to backup your issued certificates, because for example you are using your CA for VPN authentication (then you only need the certificate serials for revocation, those are in pki/index.txt), then you only need to save the following four files:/p>pre classwp-block-code>code>pki/ca.crtpki/private/ca.keypki/issued/server.crtpki/private/server.key/code>/pre>p>These files don’t ever change, so you don’t need to back them up frequently./p>p>When you want to restore your easy-rsa install, you first have to create a skeleton pki directory with the code>easy-rsa init-pki/code> command, then put the four files from above back in their previous places./p>p>easy-rsa will still complain about other missing files and directories, but it doesn’t expect any data in those, so we can simply create empty files and directories to fix this:/p>pre classwp-block-code>code>touch easy-rsa/easyrsa3/pki/serialtouch easy-rsa/easyrsa3/pki/index.txttouch easy-rsa/easyrsa3/pki/index.txt.attrmkdir easy-rsa/easyrsa3/pki/certs_by_serial/code>/pre>p>So if you see errors like:/p>pre classwp-block-code>code>Easy-RSA error:Missing expected CA file: serial (perhaps you need to run build-ca?)/code>/pre>p>Then run the empty file creation commands above./p>p>If you have any questions, your best bet is to reach me on twitter at a hrefhttps://twitter.com/imreFitos>https://twitter.com/imreFitos/a>/p>/div>div classarticle-separator>j j j/div>/article>article idpost-156 classpost-156 post type-post status-publish format-standard hentry category-uncategorized tag-elte tag-elte-hu tag-stunnel tag-vpn>header classentry-header>div classentry-meta>a hrefhttps://www.imrefitos.com/archives/156/elte-stunnel-setup-for-mac-in-2021/ title11:15 relbookmark>time classentry-date datetimeMarch 10th, 2021>March 10th, 2021/time>/a>/div>h1 classentry-title>a hrefhttps://www.imrefitos.com/archives/156/elte-stunnel-setup-for-mac-in-2021/ titlePermalink to ELTE stunnel setup for Mac in 2021 relbookmark>ELTE stunnel setup for Mac in 2021/a>/h1>/header>div classentry-content>p>ELTE is a great university but they don’t support Apple products well. If you are an ELTE student, use a Mac, and trying to access ELTE resources from home during the lockdown, this is the tutorial you need./p>p>You have to have a Caesar or IIG username and password for this to work./p>h2 classwp-block-heading>Step 1: install the Homebrew package manager from https://brew.sh//h2>ul classwp-block-list>li>Click on Applications -> Utilities -> Terminal/li>li>Copy the following line into the Terminal window (this is one single line):/li>/ul>pre classwp-block-code>code>/bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)/code>/pre>ul classwp-block-list>li>When it asks you for your password, enter your computer’s password./li>/ul>p>Please note: this can take 10-20 minutes to complete./p>h2 classwp-block-heading>Step 2: install the stunnel package using Homebrew/h2>ul classwp-block-list>li>in the same Terminal window, type the following line:/li>/ul>pre classwp-block-code>code>brew install stunnel/code>/pre>h2 classwp-block-heading>Step 3: put the ELTE stunnel.conf file in the stunnel directory/h2>p>The following 7 lines are the configuration for stunnel. You need to save this into a file on your computer called /usr/local/etc/stunnel/stunnel.conf/p>pre classwp-block-code>code>foreground yessocket l:TCP_NODELAY1socket r:TCP_NODELAY1[proxysaccept 8080connect proxy.elte.hu:8443client yes/code>/pre>h2 classwp-block-heading>Step 4: Start up stunnel/h2>pre classwp-block-code>code>brew services start stunnel/code>/pre>p>This will make sure that stunnel will always be running on your computer, even after rebooting./p>h2 classwp-block-heading>Step 5: Configure your computer to go through ELTE for web browsing/h2>ul classwp-block-list>li>Go to Apple Icon -> System Preferences -> Network/li>li>Click on the “Advanced” button in the bottom right corner/li>li>Click on the “Proxies” tab on the top row/li>li>Select “Web Proxy (HTTP)”/li>li>Add 127.0.0.1 under Web Proxy Server/li>li>Add 8080 next to the 127.0.0.1 after the colon symbol/li>li>Enable the “Proxy server requires password” option/li>li>Enter your Caesar/IIG username and password/li>li>ALSO repeat this under “Secure Web Proxy (HTTPS)”/li>/ul>p>This is it! Your web browsers will start going through ELTE with all their traffic./p>p>To test, start up a browser, and google the following phrase “what is my ip address”. If you did everything right, the IP address Google will report back will start with 157.181./p>h2 classwp-block-heading>Step 6: Turn off the ELTE browser redirect when you don’t need it/h2>p>The setup above will send all your web browsing through ELTE, including YouTube and Netflix traffic, so it will be slow for you and problematic for them. It’s better to turn it off when you don’t need it./p>ul classwp-block-list>li>Go to Apple Icon -> System Preferences -> Network/li>li>Click on the “Advanced” button in the bottom right corner/li>li>Click on the “Proxies” tab on the top row/li>li>UNselect “Web Proxy (HTTP)”/li>li>UNselect “Secure Web Proxy (HTTPS)”/li>/ul>p>That’s it, you are all set./p>p>imre/p>p>/p>/div>div classarticle-separator>j j j/div>/article>article idpost-138 classpost-138 post type-post status-publish format-standard hentry category-uncategorized tag-alarm tag-alert tag-production tag-rails tag-ruby tag-sidekiq tag-sidekiq-retry tag-sidekiq-retry-queue>header classentry-header>div classentry-meta>a hrefhttps://www.imrefitos.com/archives/138/how-to-monitor-and-alert-on-the-sidekiq-retry-queue/ title16:41 relbookmark>time classentry-date datetimeDecember 26th, 2020>December 26th, 2020/time>/a>/div>h1 classentry-title>a hrefhttps://www.imrefitos.com/archives/138/how-to-monitor-and-alert-on-the-sidekiq-retry-queue/ titlePermalink to How to monitor and alert on the Sidekiq Retry Queue relbookmark>How to monitor and alert on the Sidekiq Retry Queue/a>/h1>/header>div classentry-content>p>Sidekiq is the most popular queue processing service for Ruby on Rails. It has many brilliant features, one of them is its automatic retry when a queued job fails, to account for intermittent problems.br>br>The retry system is automatic, by default Sidekiq retries a job 25 times before putting it on the Dead Job Queue. The retry delay grows exponentially – by the 25th retry a job would have spent three weeks in the Retry Queue!br>br>Of course generally everybody has an alert system for when jobs fail. But, the Sidekiq retry logic works well and most errors are transient, so people grow complacent and start ignoring the messages about the failed jobs.br>br>This works well until it doesn’t. This was the point when I started looking into ways to properly monitor the Sidekiq Retry Queue. /p>p>I had the following questions:/p>ul classwp-block-list>li>How to alert on jobs that have failed too many times for comfort?/li>li>How to alert if a deluge of jobs fail?/li>li>How to make sure the alerts we send are actionable?/li>li>How to check if the alerting system is operational?/li>/ul>p>I took some time during Christmas and wrote a single file ruby app called a relnoreferrer noopener hrefhttps://github.com/imreFitos/sidekiq_retry_alert data-typeURL data-idhttps://github.com/imreFitos/sidekiq_retry_alert target_blank>https://github.com/imreFitos/sidekiq_retry_alert/a>. This app queries a Sidekiq server’s Retry Queue and sends alerts to a Slack channel when a single job keeps failing repeatedly, and if it finds a lot of failing jobs, it tallies them up into easily read Slack messages. /p>p>This is how it looks in Slack:/p>pre classwp-block-code>code>PRODUCTION ALARM: 2 NameOfTheImportantJobs on the Important queue have failed X+ times/code>/pre>p>The app remembers the previous state of the queue, so you only get messages when the queue’s state changes./p>p>To check if the alerting system works, I wrote a second script that simply sends a daily report to the Slack channel. If you don’t see the daily report, chances are your alert system has stopped working./p>p>This is how the daily report looks in Slack:/p>pre classwp-block-code>code>Daily report on production sidekiq retries:ImportantQueue: 2 NameOfTheImportantJobs are retried/code>/pre>p>I recommend running them from cron./p>p>I hope this helps!/p>p>imre/p>/div>div classarticle-separator>j j j/div>/article>nav rolenavigation idnav-below classnavigation-paging>div idnav-below-separator>h1 classassistive-text>Post navigation/h1>div classprevious previous_total>a hrefhttps://www.imrefitos.com/page/2/>span classmeta-nav>/span>Older posts/a> /div>div classtotal>1 span>of/span> 3/div>div classnext next_total>/div>/div>/nav>/div>/div>div idsecondary classwidget-area rolecomplementary>aside idsearch classwidget widget_search>form methodget idsearchform classsearchform actionhttps://www.imrefitos.com/ rolesearch>label fors classassistive-text>Search/label>input typesearch classfield names value ids placeholderSearch … />input typesubmit classsubmit idsearchsubmit valueSearch />/form>/aside>/div>/div>/div>footer idcolophon classsite-footer rolecontentinfo>div idfooter-wrapper>div classsite-info>div idsite-info-wrapper>div idsite-info-wrapper2>© Copyright 2014 a hrefhttps://www.imrefitos.com/>Imre Fitos/a>. Powered By a hrefhttp://wordpress.org/ titleA Semantic Personal Publishing Platform relgenerator>WordPress/a>.br/>Designed & Crafted by a hrefhttp://wpshower.com/>Wpshower/a>./div>/div>/div>/div>/footer>script typetext/javascript srchttp://www.imrefitos.com/wp-content/themes/readly/js/navigation.js?ver20120206 idnavigation-js>/script>script typetext/javascript srchttp://www.imrefitos.com/wp-content/themes/readly/js/skip-link-focus-fix.js?ver20130115 idskip-link-focus-fix-js>/script>script typetext/javascript idmediaelement-core-js-before>/* !CDATA */var mejsL10n {language:en,strings:{mejs.download-file:Download File,mejs.install-flash:You are using a browser that does not have Flash player enabled or installed. Please turn on your Flash player plugin or download the latest version from https:\/\/get.adobe.com\/flashplayer\/,mejs.fullscreen:Fullscreen,mejs.play:Play,mejs.pause:Pause,mejs.time-slider:Time Slider,mejs.time-help-text:Use Left\/Right Arrow keys to advance one second, Up\/Down arrows to advance ten seconds.,mejs.live-broadcast:Live Broadcast,mejs.volume-help-text:Use Up\/Down Arrow keys to increase or decrease volume.,mejs.unmute:Unmute,mejs.mute:Mute,mejs.volume-slider:Volume Slider,mejs.video-player:Video Player,mejs.audio-player:Audio Player,mejs.captions-subtitles:Captions\/Subtitles,mejs.captions-chapters:Chapters,mejs.none:None,mejs.afrikaans:Afrikaans,mejs.albanian:Albanian,mejs.arabic:Arabic,mejs.belarusian:Belarusian,mejs.bulgarian:Bulgarian,mejs.catalan:Catalan,mejs.chinese:Chinese,mejs.chinese-simplified:Chinese (Simplified),mejs.chinese-traditional:Chinese (Traditional),mejs.croatian:Croatian,mejs.czech:Czech,mejs.danish:Danish,mejs.dutch:Dutch,mejs.english:English,mejs.estonian:Estonian,mejs.filipino:Filipino,mejs.finnish:Finnish,mejs.french:French,mejs.galician:Galician,mejs.german:German,mejs.greek:Greek,mejs.haitian-creole:Haitian Creole,mejs.hebrew:Hebrew,mejs.hindi:Hindi,mejs.hungarian:Hungarian,mejs.icelandic:Icelandic,mejs.indonesian:Indonesian,mejs.irish:Irish,mejs.italian:Italian,mejs.japanese:Japanese,mejs.korean:Korean,mejs.latvian:Latvian,mejs.lithuanian:Lithuanian,mejs.macedonian:Macedonian,mejs.malay:Malay,mejs.maltese:Maltese,mejs.norwegian:Norwegian,mejs.persian:Persian,mejs.polish:Polish,mejs.portuguese:Portuguese,mejs.romanian:Romanian,mejs.russian:Russian,mejs.serbian:Serbian,mejs.slovak:Slovak,mejs.slovenian:Slovenian,mejs.spanish:Spanish,mejs.swahili:Swahili,mejs.swedish:Swedish,mejs.tagalog:Tagalog,mejs.thai:Thai,mejs.turkish:Turkish,mejs.ukrainian:Ukrainian,mejs.vietnamese:Vietnamese,mejs.welsh:Welsh,mejs.yiddish:Yiddish}};/* > *//script>script typetext/javascript srchttp://www.imrefitos.com/wp-includes/js/mediaelement/mediaelement-and-player.min.js?ver4.2.17 idmediaelement-core-js>/script>script typetext/javascript srchttp://www.imrefitos.com/wp-includes/js/mediaelement/mediaelement-migrate.min.js?ver6.6.2 idmediaelement-migrate-js>/script>script typetext/javascript idmediaelement-js-extra>/* !CDATA */var _wpmejsSettings {pluginPath:\/wp-includes\/js\/mediaelement\/,classPrefix:mejs-,stretching:responsive,audioShortcodeLibrary:mediaelement,videoShortcodeLibrary:mediaelement};/* > *//script>script typetext/javascript srchttp://www.imrefitos.com/wp-includes/js/mediaelement/wp-mediaelement.min.js?ver6.6.2 idwp-mediaelement-js>/script>script typetext/javascript srchttp://www.imrefitos.com/wp-content/themes/readly/js/wpshower-responsive-videos.js?ver20140331 idwpshower-responsive-videos-js>/script>script typetext/javascript srchttp://www.imrefitos.com/wp-content/themes/readly/js/jquery.mousewheel.js?ver3.1.6 idjquery-mousewheel-js>/script>script typetext/javascript srchttp://www.imrefitos.com/wp-content/themes/readly/fancybox/jquery.fancybox.js?ver3b1 idfancybox-js>/script>script typetext/javascript srchttp://stats.wp.com/e-202440.js idjetpack-stats-js data-wp-strategydefer>/script>script typetext/javascript idjetpack-stats-js-after>/* !CDATA */_stq window._stq || ;_stq.push( view, JSON.parse({\v\:\ext\,\blog\:\117351720\,\post\:\0\,\tz\:\-4\,\srv\:\www.imrefitos.com\,\j\:\1:13.9\}) );_stq.push( clickTrackerInit, 117351720, 0 );/* > *//script>/body>/html>
Port 443
HTTP/1.1 200 OKDate: Sun, 06 Oct 2024 09:19:24 GMTContent-Type: text/html; charsetUTF-8Transfer-Encoding: chunkedConnection: keep-alivecf-edge-cache: cache,platformwordpressVary: accept,content-type,Accept-Encoding,User-AgentLink: https://www.imrefitos.com/wp-json/>; relhttps://api.w.org/Cache-Control: max-age600Expires: Sun, 06 Oct 2024 09:29:24 GMTCF-Cache-Status: DYNAMICReport-To: {endpoints:{url:https:\/\/a.nel.cloudflare.com\/report\/v4?sSUZkSW8h6AdAU4f3BXK2MDMkclvFhZWc4JxkVpp9PrRu1jyFx%2BItBvEAhZwabGEWrwfXlmTehPu8Q5luAua4UxJSIP7%2BOU63syj8wn811xVVKabs%2FkK4klrQjwfpP60Zms3row%3D%3D},group:cf-nel,max_age:604800}NEL: {success_fraction:0,report_to:cf-nel,max_age:604800}Speculation-Rules: /cdn-cgi/speculationServer: cloudflareCF-RAY: 8ce491d028ba61f9-YVR !DOCTYPE html>html langen-US>head>meta charsetUTF-8 />meta nameviewport contentwidthdevice-width />title>Imre Fitos | Startups, Technology and Organization/title>link relprofile hrefhttps://gmpg.org/xfn/11 />link relpingback hrefhttps://www.imrefitos.com/xmlrpc.php />link hrefhttps://fonts.googleapis.com/css?familyLibre+Baskerville:400,700,400italic relstylesheet typetext/css>!--if lt IE 9>script srchttps://www.imrefitos.com/wp-content/themes/readly/js/html5.js typetext/javascript>/script>!endif-->meta namerobots contentmax-image-preview:large />meta namegoogle-site-verification contentATIrlgsxKeIX8uKD-rfWw91tHbFR1L8gmYG53T0ZtPw />link reldns-prefetch href//secure.gravatar.com />link reldns-prefetch href//stats.wp.com />link reldns-prefetch href//v0.wordpress.com />link relalternate typeapplication/rss+xml titleImre Fitos » Feed hrefhttps://www.imrefitos.com/feed/ />link relalternate typeapplication/rss+xml titleImre Fitos » Comments Feed hrefhttps://www.imrefitos.com/comments/feed/ />script typetext/javascript>/* !CDATA */window._wpemojiSettings {baseUrl:https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/72x72\/,ext:.png,svgUrl:https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/svg\/,svgExt:.svg,source:{concatemoji:https:\/\/www.imrefitos.com\/wp-includes\/js\/wp-emoji-release.min.js?ver6.6.2}};/*! This file is auto-generated */!function(i,n){var o,s,e;function c(e){try{var t{supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var tnew Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return ert})}function u(e,t,n){switch(t){caseflag:return n(e,\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f,\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f)?!1:!n(e,\ud83c\uddfa\ud83c\uddf3,\ud83c\uddfa\u200b\ud83c\uddf3)&&!n(e,\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f,\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f);caseemoji:return!n(e,\ud83d\udc26\u200d\u2b1b,\ud83d\udc26\u200b\u2b1b)}return!1}function f(e,t,n){var rundefined!typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement(canvas),ar.getContext(2d,{willReadFrequently:!0}),o(a.textBaselinetop,a.font600 32px Arial,{});return e.forEach(function(e){oet(a,e,n)}),o}function t(e){var ti.createElement(script);t.srce,t.defer!0,i.head.appendChild(t)}undefined!typeof Promise&&(owpEmojiSettingsSupports,sflag,emoji,n.supports{everything:!0,everythingExceptFlag:!0},enew Promise(function(e){i.addEventListener(DOMContentLoaded,e,{once:!0})}),new Promise(function(t){var nfunction(){try{var eJSON.parse(sessionStorage.getItem(o));if(objecttypeof e&&numbertypeof e.timestamp&&(new Date).valueOf()e.timestamp+604800&&objecttypeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if(undefined!typeof Worker&&undefined!typeof OffscreenCanvas&&undefined!typeof URL&&URL.createObjectURL&&undefined!typeof Blob)try{var epostMessage(+f.toString()+(+JSON.stringify(s),u.toString(),p.toString().join(,)+));,rnew Blob(e,{type:text/javascript}),anew Worker(URL.createObjectURL(r),{name:wpTestEmojiSupports});return void(a.onmessagefunction(e){c(ne.data),a.terminate(),t(n)})}catch(e){}c(nf(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supportstet,n.supports.everythingn.supports.everything&&n.supportst,flag!t&&(n.supports.everythingExceptFlagn.supports.everythingExceptFlag&&n.supportst);n.supports.everythingExceptFlagn.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady!1,n.readyCallbackfunction(){n.DOMReady!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(en.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings);/* > *//script>style idwp-emoji-styles-inline-css typetext/css> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; }/style>link relstylesheet idwp-block-library-css hrefhttps://www.imrefitos.com/wp-includes/css/dist/block-library/style.min.css?ver6.6.2 typetext/css mediaall />link relstylesheet idmediaelement-css hrefhttps://www.imrefitos.com/wp-includes/js/mediaelement/mediaelementplayer-legacy.min.css?ver4.2.17 typetext/css mediaall />link relstylesheet idwp-mediaelement-css hrefhttps://www.imrefitos.com/wp-includes/js/mediaelement/wp-mediaelement.min.css?ver6.6.2 typetext/css mediaall />style idjetpack-sharing-buttons-style-inline-css typetext/css>.jetpack-sharing-buttons__services-list{display:flex;flex-direction:row;flex-wrap:wrap;gap:0;list-style-type:none;margin:5px;padding:0}.jetpack-sharing-buttons__services-list.has-small-icon-size{font-size:12px}.jetpack-sharing-buttons__services-list.has-normal-icon-size{font-size:16px}.jetpack-sharing-buttons__services-list.has-large-icon-size{font-size:24px}.jetpack-sharing-buttons__services-list.has-huge-icon-size{font-size:36px}@media print{.jetpack-sharing-buttons__services-list{display:none!important}}.editor-styles-wrapper .wp-block-jetpack-sharing-buttons{gap:0;padding-inline-start:0}ul.jetpack-sharing-buttons__services-list.has-background{padding:1.25em 2.375em}/style>style idclassic-theme-styles-inline-css typetext/css>/*! This file is auto-generated */.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}/style>style idglobal-styles-inline-css typetext/css>:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}/style>link relstylesheet idfancybox-style-css hrefhttps://www.imrefitos.com/wp-content/themes/readly/fancybox/jquery.fancybox.css?v2.1.5&ver6.6.2 typetext/css mediaall />link relstylesheet idreadly-style-css hrefhttps://www.imrefitos.com/wp-content/themes/readly/style.css?ver6.6.2 typetext/css mediaall />style idreadly-style-inline-css typetext/css>.gallery .gallery-item { max-width: 150px;}/style>script typetext/javascript srchttps://www.imrefitos.com/wp-includes/js/jquery/jquery.min.js?ver3.7.1 idjquery-core-js>/script>script typetext/javascript srchttps://www.imrefitos.com/wp-includes/js/jquery/jquery-migrate.min.js?ver3.4.1 idjquery-migrate-js>/script>script typetext/javascript srchttps://www.imrefitos.com/wp-content/themes/readly/js/jquery-ui-1.10.2.custom.min.js?ver20130317 idjquery-ui-js>/script>script typetext/javascript srchttps://www.imrefitos.com/wp-content/themes/readly/js/readly.js?ver20140331 idreadly-script-js>/script>link relhttps://api.w.org/ hrefhttps://www.imrefitos.com/wp-json/ />link relEditURI typeapplication/rsd+xml titleRSD hrefhttps://www.imrefitos.com/xmlrpc.php?rsd />meta namegenerator contentWordPress 6.6.2 />script> (function(i,s,o,g,r,a,m){iGoogleAnalyticsObjectr;irir||function(){ (ir.qir.q||).push(arguments)},ir.l1*new Date();as.createElement(o), ms.getElementsByTagName(o)0;a.async1;a.srcg;m.parentNode.insertBefore(a,m) })(window,document,script,https://www.google-analytics.com/analytics.js,ga); ga(create, UA-7707462-1, auto); ga(send, pageview);/script> style>img#wpstats{display:none}/style>style typetext/css idcustom-background-css>a { color: #1e83cb;}.entry-content a { -webkit-transition: border-bottom-color 0.2s linear; -moz-transition: border-bottom-color 0.2s linear; -o-transition: border-bottom-color 0.2s linear; transition: border-bottom-color 0.2s linear;}.entry-content a:hover { border-bottom-color: #1e83cb;}#masthead .site-title a, #site-navigation a, .sub-menu a, #nav-below a, .entry-title a, #image-navigation a { -webkit-transition: color 0.2s linear; -moz-transition: color 0.2s linear; -o-transition: color 0.2s linear; transition: color 0.2s linear;}#masthead .site-title a:hover, #nav-below a:hover, .entry-title a:hover, #image-navigation a:hover { color: #1e83cb;}#s, #commentform inputtypetext, #commentform textarea, .password_protected, #social a, a.more-link { -webkit-transition: background-color 0.2s linear; -moz-transition: background-color 0.2s linear; -o-transition: background-color 0.2s linear; transition: background-color 0.2s linear;}a.more-link span { -webkit-transition: border-left-color 0.2s linear; -moz-transition: border-left-color 0.2s linear; -o-transition: border-left-color 0.2s linear; transition: border-left-color 0.2s linear;}#s:focus, #commentform inputtypetext:focus, #commentform textarea:focus, .password_protected:focus { background-color: #fff;}#social a:hover { background-color: #1e83cb;}a.more-link:hover { background-color: #1e83cb;}a.more-link:hover span { border-left-color: #1e83cb;}.entry-meta a, footer .site-info a, #comments a, .link_post_p a { -webkit-transition: color 0.2s linear, border-bottom-color 0.2s linear; -moz-transition: color 0.2s linear, border-bottom-color 0.2s linear; -o-transition: color 0.2s linear, border-bottom-color 0.2s linear; transition: color 0.2s linear, border-bottom-color 0.2s linear;}.entry-meta a:hover, footer .site-info a:hover, #comments a:hover, #comments a#cancel-comment-reply-link:hover, .link_post_p a:hover { color: #1e83cb; border-bottom-color: #1e83cb;}@media only screen and (min-width : 641px) { #site-navigation a:hover, .sub-menu a:hover { color: #1e83cb; }}html { position: relative; min-height: 100%;}.hentry .mejs-controls .mejs-time-rail .mejs-time-current { background: #1e83cb;}/style>script typetext/javascript>var hover_color #1e83cb;/script>style typetext/css>.recentcomments a{display:inline !important;padding:0 !important;margin:0 !important;}/style>meta propertyog:type contentwebsite />meta propertyog:title contentImre Fitos />meta propertyog:description contentStartups, Technology and Organization />meta propertyog:url contenthttps://www.imrefitos.com/ />meta propertyog:site_name contentImre Fitos />meta propertyog:image contenthttps://s0.wp.com/i/blank.jpg />meta propertyog:image:alt content />meta propertyog:locale contenten_US />/head>body classhome blog>header idmasthead classsite-header rolebanner>div idheader-wrapper>hgroup>div idhgroup-wrapper>div idhgroup-wrapper2>h1 classsite-title>a hrefhttps://www.imrefitos.com/ titleImre Fitos relhome>Imre Fitos/a>/h1>h2 classsite-description>Startups, Technology and Organization/h2>/div>/div>/hgroup>nav idsite-navigation classnavigation-main rolenavigation>div idsite-navigation-wrapper>div idsite-navigation-wrapper2>h1 classmenu-toggle>Menuspan>m/span>/h1>div classassistive-text skip-link>a href#content titleSkip to content>Skip to content/a>/div>/div>/div>/nav>/div>/header>div idpage classhfeed site>div idmain classsite-main>div idprimary classcontent-area>div idcontent classsite-content rolemain>article idpost-283 classpost-283 post type-post status-publish format-standard hentry category-uncategorized tag-automation tag-aws tag-devops tag-ssm>header classentry-header>div classentry-meta>a hrefhttps://www.imrefitos.com/archives/283/aws-ssm-patch-failed-no-imds-credentials-s3-access-denied-solution/ title10:38 relbookmark>time classentry-date datetimeMay 9th, 2024>May 9th, 2024/time>/a>/div>h1 classentry-title>a hrefhttps://www.imrefitos.com/archives/283/aws-ssm-patch-failed-no-imds-credentials-s3-access-denied-solution/ titlePermalink to AWS SSM Patch Failed – No IMDS credentials – S3 Access Denied – Solution relbookmark>AWS SSM Patch Failed – No IMDS credentials – S3 Access Denied – Solution/a>/h1>/header>div classentry-content>p>Another impossible to debug AWS issue:/p>p>I ran an AWS Systems Manager Patch Manager RunPatchBaseline association on a managed instance. My managed instance uses a custom IAM Role slash Instance Profile, but I read the documentation and added the proper permissions./p>p>I ran RunPatchBaseline and got an Association Failed status on the instance with the custom role. The Run Command Output showed the following error:/p>blockquote classwp-block-quote is-layout-flow wp-block-quote-is-layout-flow>pre classwp-block-code>code>No IMDS credentials found on instance.failed to run commands: exit status 156/code>/pre>/blockquote>p>I connected to the instance and verified that IMDS does work fine on the instance, following the AWS documentation here: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html/p>p>Further details under the Run Command Output showed a completely different error:/p>blockquote classwp-block-quote is-layout-flow wp-block-quote-is-layout-flow>pre classwp-block-code>code>ClientError: An error occurred (403) when calling the HeadObject operation: Forbidden/code>/pre>/blockquote>p>Further up in the logs I found that the SSM agent was trying to download the code>baseline_overrides.json/code> from a dedicated S3 bucket operated by Amazon, starting with code>aws-quicksetup-patchpolicy-ACCOUNTID-QUICKSETUPCONFIGID/code>. My IAM profile, even though it is setup to allow access to this bucket, and can list the baseline_overrides.json object, is blocked from downloading it./p>p>Solution: by comparing the custom role to the Amazon generated QuickSetup role, I figured out that I have to manually add a Tag to the custom IAM role for this to work. S3 is checking if the ROLE has a special Tag associated before allowing access to the object. It is documented on AWS here: a hrefhttps://docs.aws.amazon.com/systems-manager/latest/userguide/quick-setup-patch-manager.html>https://docs.aws.amazon.com/systems-manager/latest/userguide/quick-setup-patch-manager.html/a>/p>figure classwp-block-pullquote>blockquote>p>“You must tag your IAM instance profile or IAM service role with the following key-value pair.br>Key: QSConfigId-quick-setup-configuration-id, Value: quick-setup-configuration-id”/p>/blockquote>/figure>p>Hope This Helps,/p>p>imre Fitos/p>/div>div classarticle-separator>j j j/div>/article>article idpost-276 classpost-276 post type-post status-publish format-standard hentry category-uncategorized tag-aws tag-boto tag-python tag-python3 tag-stackoverflow>header classentry-header>div classentry-meta>a hrefhttps://www.imrefitos.com/archives/276/solution-to-boto3-s3-createmultipartupload-access-denied-problem/ title09:54 relbookmark>time classentry-date datetimeNovember 22nd, 2023>November 22nd, 2023/time>/a>/div>h1 classentry-title>a hrefhttps://www.imrefitos.com/archives/276/solution-to-boto3-s3-createmultipartupload-access-denied-problem/ titlePermalink to Solution to BOTO3 S3 CreateMultipartUpload Access Denied problem relbookmark>Solution to BOTO3 S3 CreateMultipartUpload Access Denied problem/a>/h1>/header>div classentry-content>p>We ran into a weird problem when we tried to stream to an S3 file using boto3, and all the posts on Stack Overflow had wildly inaccurate and generally non-working solutions, so I’m posting this hoping that maybe it will save someone some time./p>p>The problem: You write an S3 upload in python, and it gives you the following error:/p>pre classwp-block-code>code>ValueError: the bucket XXX does not exist, or is forbidden for access (ClientError(An error occurred (AccessDenied) when calling the CreateMultipartUpload operation: Access Denied))/code>/pre>p>The error clearly spells out that this is a permission problem, so you spend some time trying to add the proper permissions. You learn that there is no such thing as an S3:CreateMultipartUpload permission – boto3 uses the normal s3:PutObject permission. So you google some more./p>p>Then you think it’s an ACL permission – nope./p>p>Then you think maybe your encrypted S3 bucket is the problem and you need to add kms:GenerateDataKey permission? But no, you use encryption with Amazon S3 managed keys (SSE-S3) and it does not require extra kms permissions. Another dead end. How did it ever work for other people?/p>p>Then you throw all the permissions that exist on the user and it’s still failing. What gives?/p>p>You enable boto3 debug logs with code>boto3.set_stream_logger()/code> but the log looks okay, except that it gets a 403 access denied from Amazon./p>p>Then your brilliant colleague Fatih Elmali reads the code and says that regardless of all the examples Amazon has published, the following is not enough:/p>pre classwp-block-code>code>client boto3.client(s3, aws_access_key_id...)/code>/pre>p>The proper way to setup authentication for a boto3 s3 client is the following:/p>pre classwp-block-code>code>session boto3.Session(aws_access_key_id...)client session.client(s3)/code>/pre>p>This will set up the proper session authentication and streaming to an S3 file object will work./p>/div>div classarticle-separator>j j j/div>/article>article idpost-265 classpost-265 post type-post status-publish format-standard hentry category-uncategorized tag-management tag-monday-com tag-project tag-project-management tag-resource-leveling tag-resource-management tag-resource-based-project-scheduling>header classentry-header>div classentry-meta>a hrefhttps://www.imrefitos.com/archives/265/resource-based-project-scheduling-and-monday-com/ title14:11 relbookmark>time classentry-date datetimeJanuary 27th, 2023>January 27th, 2023/time>/a>/div>h1 classentry-title>a hrefhttps://www.imrefitos.com/archives/265/resource-based-project-scheduling-and-monday-com/ titlePermalink to Resource-based project scheduling and Monday.com relbookmark>Resource-based project scheduling and Monday.com/a>/h1>/header>div classentry-content>p>strong>Resource-based project scheduling/strong> or Resource-constrained project scheduling has been around for decades, but it is more common in in construction industry and not that well known in software development. /p>p>Most everybody is familiar with strong>Time-based project scheduling/strong> – the work breakdown and the deadline specification happens first, and then the PM tries to get resources to meet the deadlines. The manual method of making resources work is called strong>resource leveling/strong>./p>p>Resource-based project scheduling puts the availability of resources first. Each resource, e.g. a software developer, has a calendar of availability, with the already allocated dates blocked out. The PM assigns the task to the resource, and the system allocates the first available time period automatically./p>p>If a PM rearranges the order of tasks or entire projects, the system rearranges the date ranges allocated to the tasks. The PM can easily see if a proposed deadline can be met with the available resources, or do other projects need to be re-prioritized to ensure success./p>p>This system makes managing project portfolios much easier – no chance of double booking, and if a task takes less effort than originally planned, the delivery dates of the remaining tasks automatically move earlier./p>p>These features also make rebaselining and reallocation much easier, simpler, faster, and makes resource leveling completely automatic./p>hr classwp-block-separator has-alpha-channel-opacity />p>Monday.com is a popular online project management platform. While it is mostly Time-based, it has a few features that help with resource management./p>p>The major component is creating a Dashboard and a Timeline Widget on the Dashboard. Connect all the project boards that you want to manage together, and the Timeline will be automatically populated with swimlines per Person, and all the tasks assigned to them from all the connected projects./p>p>At this point the PM can move the tasks up and down on the timeline to make sure that people are not double booked or underused, and the changes are immediately implemented on all the connected project boards./p>p>This ensures that all projects are properly resourced, and makes it easy to respond to changes in resource availability./p>p>Another component is creating a project board dedicated to Vacation/PTO. On this board people can reserve their time off, and then this will be plainly visible on the main Timeline Widget, so their time off won’t be double-booked with work and they can meet their deadlines./p>p>This means that you can go from this:/p>figure classwp-block-image size-large>a hrefhttps://www.imrefitos.com/wp-content/uploads/2023/01/monday-unleveled.png>img fetchpriorityhigh decodingasync width1024 height316 srchttps://www.imrefitos.com/wp-content/uploads/2023/01/monday-unleveled-1024x316.png alt classwp-image-268 srcsethttps://www.imrefitos.com/wp-content/uploads/2023/01/monday-unleveled-1024x316.png 1024w, https://www.imrefitos.com/wp-content/uploads/2023/01/monday-unleveled-300x93.png 300w, https://www.imrefitos.com/wp-content/uploads/2023/01/monday-unleveled-768x237.png 768w, https://www.imrefitos.com/wp-content/uploads/2023/01/monday-unleveled-1536x475.png 1536w, https://www.imrefitos.com/wp-content/uploads/2023/01/monday-unleveled-920x284.png 920w, https://www.imrefitos.com/wp-content/uploads/2023/01/monday-unleveled.png 1803w sizes(max-width: 1024px) 100vw, 1024px />/a>figcaption classwp-element-caption>project portfolio before leveling/figcaption>/figure>p>To this, only by using a Dashboard Timeline Widget:/p>figure classwp-block-image size-large>a hrefhttps://www.imrefitos.com/wp-content/uploads/2023/01/monday-leveled.png>img decodingasync width1024 height248 srchttps://www.imrefitos.com/wp-content/uploads/2023/01/monday-leveled-1024x248.png alt classwp-image-269 srcsethttps://www.imrefitos.com/wp-content/uploads/2023/01/monday-leveled-1024x248.png 1024w, https://www.imrefitos.com/wp-content/uploads/2023/01/monday-leveled-300x73.png 300w, https://www.imrefitos.com/wp-content/uploads/2023/01/monday-leveled-768x186.png 768w, https://www.imrefitos.com/wp-content/uploads/2023/01/monday-leveled-1536x371.png 1536w, https://www.imrefitos.com/wp-content/uploads/2023/01/monday-leveled-920x222.png 920w, https://www.imrefitos.com/wp-content/uploads/2023/01/monday-leveled.png 1799w sizes(max-width: 1024px) 100vw, 1024px />/a>figcaption classwp-element-caption>project portfolio after leveling/figcaption>/figure>hr classwp-block-separator has-alpha-channel-opacity />p>Monday.com is quite popular and I hope they will implement even more features to help managing project portfolios. There are many other solutions out there, but if your organization is committed to Monday.com, you can make it work. Let’s see what they do next!/p>/div>div classarticle-separator>j j j/div>/article>article idpost-261 classpost-261 post type-post status-publish format-standard hentry category-uncategorized tag-aws tag-awschatbot tag-devops>header classentry-header>div classentry-meta>a hrefhttps://www.imrefitos.com/archives/261/aws-chatbot-custom-message-solution/ title17:40 relbookmark>time classentry-date datetimeSeptember 23rd, 2022>September 23rd, 2022/time>/a>/div>h1 classentry-title>a hrefhttps://www.imrefitos.com/archives/261/aws-chatbot-custom-message-solution/ titlePermalink to AWS Chatbot custom message – solution relbookmark>AWS Chatbot custom message – solution/a>/h1>/header>div classentry-content>p>Most DevOps people who set up AWS Chatbot integrations with other AWS services eventually start wondering how to send custom messages through Chatbot./p>p>At this point I would to remind you that your life will be much easier if you give up on the idea and instead send your message directly to Slack using a web hook./p>p>But if you want to see this to the end:/p>p>Tom Stroobants documented the general SNS message format that Chatbot expects and it looks like this:/p>pre classwp-block-code>code>{ version: 0, time: 1970-01-01T00:00:00Z, id: 00000000-0000-0000-0000-000000000000, account: [your real account id, region: [a real region, source: aws.[a service prefix e.g. ec2, detail-type: [you can use this field for your message, resources: [, detail: {}}/code>/pre>p>As long as these fields are present in the message AWS Chatbot will forward the message to Slack, but will not display any more details other than the text in the “detail-type” field, and doubles up that text./p>p>To make AWS Chatbot deliver a more detailed message, one has to format the message according to the AWS Events that Chatbot supports. Which means our messages will have to have a predefined “detail-type” and “source”./p>p>To see examples of all message formats that Chatbot can display, to find one that we could co-opt for our purposes:/p>ol classwp-block-list>li>Open the EventBridge console at a relnoreferrer noopener hrefhttps://docs.aws.amazon.com/chatbot/latest/adminguide/create-eventbridge-rule.html target_blank>https://console.aws.amazon.com/events/./a>/li>li>In the navigation pane, choose strong>Rules/strong>./li>li>Choose strong>Create rule/strong>./li>li>Enter a name and description for the rule. /li>li>For strong>Define pattern/strong>, choose strong>Rule with an event pattern/strong>./li>li>Hit Next./li>li>For Event source, leave it on strong>AWS events/strong>/li>li>Now you can browse all available events under strong>Sample Event/strong> / AWS events./li>/ol>p>You will quickly notice that the event names are quite specific, and you might not want to use “strong>VoiceId Batch Fraudster Registration Action/strong>” for your custom message./p>p>I found that the “AWS Health Event” is innocent enough to be reusable, and now I am able to send free form paragraphs using the following:/p>pre classwp-block-code>code>{ version: 0, id: 00000000-0000-0000-0000-000000000000, account: [my AWS account number, time: 1970-01-01T00:00:00Z, region: us-east-1, source: aws.health, detail-type: AWS Health Event, resources: [, detail: { eventDescription: [{ language: en_US, latestDescription: Long form message\nMore lines } }}/code>/pre>p>I hope somebody with good enough connections to the AWS Chatbot team will get more details out of them, right now their official line is “AWS Chatbot only supports AWS Services”. Help?/p>p>HTH, imre/p>/div>div classarticle-separator>j j j/div>/article>article idpost-228 classpost-228 post type-post status-publish format-standard hentry category-uncategorized tag-aws tag-forcemfa tag-iam tag-security>header classentry-header>div classentry-meta>a hrefhttps://www.imrefitos.com/archives/228/aws-force-mfa-example-policy-doesnt-work-on-administrators-fix/ title08:00 relbookmark>time classentry-date datetimeMay 2nd, 2022>May 2nd, 2022/time>/a>/div>h1 classentry-title>a hrefhttps://www.imrefitos.com/archives/228/aws-force-mfa-example-policy-doesnt-work-on-administrators-fix/ titlePermalink to AWS Force MFA example policy doesn’t work on Administrators – Fix relbookmark>AWS Force MFA example policy doesn’t work on Administrators – Fix/a>/h1>/header>div classentry-content>p>There are several example policies written by Amazon itself, and also by other security providers like Yubico that claim to enforce MFA use, but simply do not work on users who have AdministratorAccess policy.br>br>Here is an actual example policy written by Amazon that actually works: https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_aws_my-sec-creds-self-manage.html/p>/div>div classarticle-separator>j j j/div>/article>article idpost-215 classpost-215 post type-post status-publish format-standard hentry category-uncategorized tag-aws-2 tag-awslambda-3 tag-awssam-2 tag-lambda-2 tag-node tag-nodejs tag-serveless>header classentry-header>div classentry-meta>a hrefhttps://www.imrefitos.com/archives/215/aws-sam-and-the-case-of-missing-directories-solution/ title08:54 relbookmark>time classentry-date datetimeFebruary 16th, 2022>February 16th, 2022/time>/a>/div>h1 classentry-title>a hrefhttps://www.imrefitos.com/archives/215/aws-sam-and-the-case-of-missing-directories-solution/ titlePermalink to AWS SAM and the case of missing directories – Solution relbookmark>AWS SAM and the case of missing directories – Solution/a>/h1>/header>div classentry-content>p>I think serverless is the future, so I have been going through a Nodejs Lambda tutorial to learn more about it. Amazon recommends SAM for provisioning Lambda functions and it’s pretty straightforward at first sight.br>br>Later you will learn that AWS SAM is opinionated, and it keeps its opinions to itself. It doesn’t tell you what it does, how it does it, there are no options to change it, and not much of a debug function to see what goes wrong.br>br>code>sam build/code> did not copy a directory into my Node package. Documentation says nothing about this behavior. Debug shows no information about what gets copied. Googling led nowhere. Eventually I simply guessed that it reads my .gitignore file and it ignores everything that I want Git to ignore, and I was right. And I was grumpy.br>br>TL/DR: If you have missing files or missing directories in your sam build package, look at your .gitignore/p>/div>div classarticle-separator>j j j/div>/article>article idpost-205 classpost-205 post type-post status-publish format-standard hentry category-uncategorized tag-alb tag-aws tag-awslambda-2 tag-elb tag-lambda tag-serverless>header classentry-header>div classentry-meta>a hrefhttps://www.imrefitos.com/archives/205/lambdaaccessdenied-error-in-aws-load-balancer-solution/ title08:16 relbookmark>time classentry-date datetimeJanuary 16th, 2022>January 16th, 2022/time>/a>/div>h1 classentry-title>a hrefhttps://www.imrefitos.com/archives/205/lambdaaccessdenied-error-in-aws-load-balancer-solution/ titlePermalink to LambdaAccessDenied error in AWS Load Balancer – Solution relbookmark>LambdaAccessDenied error in AWS Load Balancer – Solution/a>/h1>/header>div classentry-content>p>Permission handling in ELB and Lambda is somewhat magical, some of the tools autoprovision permissions behind the scene, and some of them sometimes mess up.br>br>I had a Lambda that I was invoking from a load balancer and it simply did not work. The only hint was “LambdaAccessDenied” in the ALB logs.br>br>I had everything configured correctly. I have added a lambda permission for the entire elasticloadbalancing.amazonaws.com service to invoke my function. I had the proper target groups. I had even enabled AWS SAM to autoprovision the IAM roles. The Lambda function was firing correctly, I had logs to show that it was executing. br>br>But I kept getting “502 Bad Gateway” from the load balancer and the logs kept showing LambdaAccessDenied. br>br>I removed all the custom stuff I created. I removed the alias. I removed and re provisioned the entire lambda function. I removed and recreated the target group.br>br>Eventually I removed the target group and the permission I created, br>and provisioned an “Application Load Balancer” Trigger from the Lambda console. This created a new target group and a new resource-based policy under Permissions, and suddenly everything started working, even though the new entries looked exactly the same as the entries I created.br>br>Since there are only five entries on Google that even mention this error message, I figured you might want to save some time and learn from my experience./p>/div>div classarticle-separator>j j j/div>/article>article idpost-166 classpost-166 post type-post status-publish format-standard hentry category-uncategorized tag-backup tag-ca tag-easy-rsa tag-easyrsa tag-easyrsa3 tag-howto tag-pki tag-restore>header classentry-header>div classentry-meta>a hrefhttps://www.imrefitos.com/archives/166/how-to-backup-and-restore-an-easy-rsa-certificate-authority/ title14:55 relbookmark>time classentry-date datetimeApril 15th, 2021>April 15th, 2021/time>/a>/div>h1 classentry-title>a hrefhttps://www.imrefitos.com/archives/166/how-to-backup-and-restore-an-easy-rsa-certificate-authority/ titlePermalink to How to backup and restore an Easy-RSA certificate authority relbookmark>How to backup and restore an Easy-RSA certificate authority/a>/h1>/header>div classentry-content>p>Easy-RSA is great, but the documentation doesn’t cover much about backup and restore, so this is a quick write up on this topic./p>p>If you want to back up your entire CA, save your easyrsa3/pki directory. You can simply restore this pki directory in a new install of easy-rsa and you will be back in business./p>p>If you don’t want to backup your issued certificates, because for example you are using your CA for VPN authentication (then you only need the certificate serials for revocation, those are in pki/index.txt), then you only need to save the following four files:/p>pre classwp-block-code>code>pki/ca.crtpki/private/ca.keypki/issued/server.crtpki/private/server.key/code>/pre>p>These files don’t ever change, so you don’t need to back them up frequently./p>p>When you want to restore your easy-rsa install, you first have to create a skeleton pki directory with the code>easy-rsa init-pki/code> command, then put the four files from above back in their previous places./p>p>easy-rsa will still complain about other missing files and directories, but it doesn’t expect any data in those, so we can simply create empty files and directories to fix this:/p>pre classwp-block-code>code>touch easy-rsa/easyrsa3/pki/serialtouch easy-rsa/easyrsa3/pki/index.txttouch easy-rsa/easyrsa3/pki/index.txt.attrmkdir easy-rsa/easyrsa3/pki/certs_by_serial/code>/pre>p>So if you see errors like:/p>pre classwp-block-code>code>Easy-RSA error:Missing expected CA file: serial (perhaps you need to run build-ca?)/code>/pre>p>Then run the empty file creation commands above./p>p>If you have any questions, your best bet is to reach me on twitter at a hrefhttps://twitter.com/imreFitos>https://twitter.com/imreFitos/a>/p>/div>div classarticle-separator>j j j/div>/article>article idpost-156 classpost-156 post type-post status-publish format-standard hentry category-uncategorized tag-elte tag-elte-hu tag-stunnel tag-vpn>header classentry-header>div classentry-meta>a hrefhttps://www.imrefitos.com/archives/156/elte-stunnel-setup-for-mac-in-2021/ title11:15 relbookmark>time classentry-date datetimeMarch 10th, 2021>March 10th, 2021/time>/a>/div>h1 classentry-title>a hrefhttps://www.imrefitos.com/archives/156/elte-stunnel-setup-for-mac-in-2021/ titlePermalink to ELTE stunnel setup for Mac in 2021 relbookmark>ELTE stunnel setup for Mac in 2021/a>/h1>/header>div classentry-content>p>ELTE is a great university but they don’t support Apple products well. If you are an ELTE student, use a Mac, and trying to access ELTE resources from home during the lockdown, this is the tutorial you need./p>p>You have to have a Caesar or IIG username and password for this to work./p>h2 classwp-block-heading>Step 1: install the Homebrew package manager from https://brew.sh//h2>ul classwp-block-list>li>Click on Applications -> Utilities -> Terminal/li>li>Copy the following line into the Terminal window (this is one single line):/li>/ul>pre classwp-block-code>code>/bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)/code>/pre>ul classwp-block-list>li>When it asks you for your password, enter your computer’s password./li>/ul>p>Please note: this can take 10-20 minutes to complete./p>h2 classwp-block-heading>Step 2: install the stunnel package using Homebrew/h2>ul classwp-block-list>li>in the same Terminal window, type the following line:/li>/ul>pre classwp-block-code>code>brew install stunnel/code>/pre>h2 classwp-block-heading>Step 3: put the ELTE stunnel.conf file in the stunnel directory/h2>p>The following 7 lines are the configuration for stunnel. You need to save this into a file on your computer called /usr/local/etc/stunnel/stunnel.conf/p>pre classwp-block-code>code>foreground yessocket l:TCP_NODELAY1socket r:TCP_NODELAY1[proxysaccept 8080connect proxy.elte.hu:8443client yes/code>/pre>h2 classwp-block-heading>Step 4: Start up stunnel/h2>pre classwp-block-code>code>brew services start stunnel/code>/pre>p>This will make sure that stunnel will always be running on your computer, even after rebooting./p>h2 classwp-block-heading>Step 5: Configure your computer to go through ELTE for web browsing/h2>ul classwp-block-list>li>Go to Apple Icon -> System Preferences -> Network/li>li>Click on the “Advanced” button in the bottom right corner/li>li>Click on the “Proxies” tab on the top row/li>li>Select “Web Proxy (HTTP)”/li>li>Add 127.0.0.1 under Web Proxy Server/li>li>Add 8080 next to the 127.0.0.1 after the colon symbol/li>li>Enable the “Proxy server requires password” option/li>li>Enter your Caesar/IIG username and password/li>li>ALSO repeat this under “Secure Web Proxy (HTTPS)”/li>/ul>p>This is it! Your web browsers will start going through ELTE with all their traffic./p>p>To test, start up a browser, and google the following phrase “what is my ip address”. If you did everything right, the IP address Google will report back will start with 157.181./p>h2 classwp-block-heading>Step 6: Turn off the ELTE browser redirect when you don’t need it/h2>p>The setup above will send all your web browsing through ELTE, including YouTube and Netflix traffic, so it will be slow for you and problematic for them. It’s better to turn it off when you don’t need it./p>ul classwp-block-list>li>Go to Apple Icon -> System Preferences -> Network/li>li>Click on the “Advanced” button in the bottom right corner/li>li>Click on the “Proxies” tab on the top row/li>li>UNselect “Web Proxy (HTTP)”/li>li>UNselect “Secure Web Proxy (HTTPS)”/li>/ul>p>That’s it, you are all set./p>p>imre/p>p>/p>/div>div classarticle-separator>j j j/div>/article>article idpost-138 classpost-138 post type-post status-publish format-standard hentry category-uncategorized tag-alarm tag-alert tag-production tag-rails tag-ruby tag-sidekiq tag-sidekiq-retry tag-sidekiq-retry-queue>header classentry-header>div classentry-meta>a hrefhttps://www.imrefitos.com/archives/138/how-to-monitor-and-alert-on-the-sidekiq-retry-queue/ title16:41 relbookmark>time classentry-date datetimeDecember 26th, 2020>December 26th, 2020/time>/a>/div>h1 classentry-title>a hrefhttps://www.imrefitos.com/archives/138/how-to-monitor-and-alert-on-the-sidekiq-retry-queue/ titlePermalink to How to monitor and alert on the Sidekiq Retry Queue relbookmark>How to monitor and alert on the Sidekiq Retry Queue/a>/h1>/header>div classentry-content>p>Sidekiq is the most popular queue processing service for Ruby on Rails. It has many brilliant features, one of them is its automatic retry when a queued job fails, to account for intermittent problems.br>br>The retry system is automatic, by default Sidekiq retries a job 25 times before putting it on the Dead Job Queue. The retry delay grows exponentially – by the 25th retry a job would have spent three weeks in the Retry Queue!br>br>Of course generally everybody has an alert system for when jobs fail. But, the Sidekiq retry logic works well and most errors are transient, so people grow complacent and start ignoring the messages about the failed jobs.br>br>This works well until it doesn’t. This was the point when I started looking into ways to properly monitor the Sidekiq Retry Queue. /p>p>I had the following questions:/p>ul classwp-block-list>li>How to alert on jobs that have failed too many times for comfort?/li>li>How to alert if a deluge of jobs fail?/li>li>How to make sure the alerts we send are actionable?/li>li>How to check if the alerting system is operational?/li>/ul>p>I took some time during Christmas and wrote a single file ruby app called a relnoreferrer noopener hrefhttps://github.com/imreFitos/sidekiq_retry_alert data-typeURL data-idhttps://github.com/imreFitos/sidekiq_retry_alert target_blank>https://github.com/imreFitos/sidekiq_retry_alert/a>. This app queries a Sidekiq server’s Retry Queue and sends alerts to a Slack channel when a single job keeps failing repeatedly, and if it finds a lot of failing jobs, it tallies them up into easily read Slack messages. /p>p>This is how it looks in Slack:/p>pre classwp-block-code>code>PRODUCTION ALARM: 2 NameOfTheImportantJobs on the Important queue have failed X+ times/code>/pre>p>The app remembers the previous state of the queue, so you only get messages when the queue’s state changes./p>p>To check if the alerting system works, I wrote a second script that simply sends a daily report to the Slack channel. If you don’t see the daily report, chances are your alert system has stopped working./p>p>This is how the daily report looks in Slack:/p>pre classwp-block-code>code>Daily report on production sidekiq retries:ImportantQueue: 2 NameOfTheImportantJobs are retried/code>/pre>p>I recommend running them from cron./p>p>I hope this helps!/p>p>imre/p>/div>div classarticle-separator>j j j/div>/article>nav rolenavigation idnav-below classnavigation-paging>div idnav-below-separator>h1 classassistive-text>Post navigation/h1>div classprevious previous_total>a hrefhttps://www.imrefitos.com/page/2/>span classmeta-nav>/span>Older posts/a> /div>div classtotal>1 span>of/span> 3/div>div classnext next_total>/div>/div>/nav>/div>/div>div idsecondary classwidget-area rolecomplementary>aside idsearch classwidget widget_search>form methodget idsearchform classsearchform actionhttps://www.imrefitos.com/ rolesearch>label fors classassistive-text>Search/label>input typesearch classfield names value ids placeholderSearch … />input typesubmit classsubmit idsearchsubmit valueSearch />/form>/aside>/div>/div>/div>footer idcolophon classsite-footer rolecontentinfo>div idfooter-wrapper>div classsite-info>div idsite-info-wrapper>div idsite-info-wrapper2>© Copyright 2014 a hrefhttps://www.imrefitos.com/>Imre Fitos/a>. Powered By a hrefhttp://wordpress.org/ titleA Semantic Personal Publishing Platform relgenerator>WordPress/a>.br/>Designed & Crafted by a hrefhttp://wpshower.com/>Wpshower/a>./div>/div>/div>/div>/footer>script typetext/javascript srchttps://www.imrefitos.com/wp-content/themes/readly/js/navigation.js?ver20120206 idnavigation-js>/script>script typetext/javascript srchttps://www.imrefitos.com/wp-content/themes/readly/js/skip-link-focus-fix.js?ver20130115 idskip-link-focus-fix-js>/script>script typetext/javascript idmediaelement-core-js-before>/* !CDATA */var mejsL10n {language:en,strings:{mejs.download-file:Download File,mejs.install-flash:You are using a browser that does not have Flash player enabled or installed. Please turn on your Flash player plugin or download the latest version from https:\/\/get.adobe.com\/flashplayer\/,mejs.fullscreen:Fullscreen,mejs.play:Play,mejs.pause:Pause,mejs.time-slider:Time Slider,mejs.time-help-text:Use Left\/Right Arrow keys to advance one second, Up\/Down arrows to advance ten seconds.,mejs.live-broadcast:Live Broadcast,mejs.volume-help-text:Use Up\/Down Arrow keys to increase or decrease volume.,mejs.unmute:Unmute,mejs.mute:Mute,mejs.volume-slider:Volume Slider,mejs.video-player:Video Player,mejs.audio-player:Audio Player,mejs.captions-subtitles:Captions\/Subtitles,mejs.captions-chapters:Chapters,mejs.none:None,mejs.afrikaans:Afrikaans,mejs.albanian:Albanian,mejs.arabic:Arabic,mejs.belarusian:Belarusian,mejs.bulgarian:Bulgarian,mejs.catalan:Catalan,mejs.chinese:Chinese,mejs.chinese-simplified:Chinese (Simplified),mejs.chinese-traditional:Chinese (Traditional),mejs.croatian:Croatian,mejs.czech:Czech,mejs.danish:Danish,mejs.dutch:Dutch,mejs.english:English,mejs.estonian:Estonian,mejs.filipino:Filipino,mejs.finnish:Finnish,mejs.french:French,mejs.galician:Galician,mejs.german:German,mejs.greek:Greek,mejs.haitian-creole:Haitian Creole,mejs.hebrew:Hebrew,mejs.hindi:Hindi,mejs.hungarian:Hungarian,mejs.icelandic:Icelandic,mejs.indonesian:Indonesian,mejs.irish:Irish,mejs.italian:Italian,mejs.japanese:Japanese,mejs.korean:Korean,mejs.latvian:Latvian,mejs.lithuanian:Lithuanian,mejs.macedonian:Macedonian,mejs.malay:Malay,mejs.maltese:Maltese,mejs.norwegian:Norwegian,mejs.persian:Persian,mejs.polish:Polish,mejs.portuguese:Portuguese,mejs.romanian:Romanian,mejs.russian:Russian,mejs.serbian:Serbian,mejs.slovak:Slovak,mejs.slovenian:Slovenian,mejs.spanish:Spanish,mejs.swahili:Swahili,mejs.swedish:Swedish,mejs.tagalog:Tagalog,mejs.thai:Thai,mejs.turkish:Turkish,mejs.ukrainian:Ukrainian,mejs.vietnamese:Vietnamese,mejs.welsh:Welsh,mejs.yiddish:Yiddish}};/* > *//script>script typetext/javascript srchttps://www.imrefitos.com/wp-includes/js/mediaelement/mediaelement-and-player.min.js?ver4.2.17 idmediaelement-core-js>/script>script typetext/javascript srchttps://www.imrefitos.com/wp-includes/js/mediaelement/mediaelement-migrate.min.js?ver6.6.2 idmediaelement-migrate-js>/script>script typetext/javascript idmediaelement-js-extra>/* !CDATA */var _wpmejsSettings {pluginPath:\/wp-includes\/js\/mediaelement\/,classPrefix:mejs-,stretching:responsive,audioShortcodeLibrary:mediaelement,videoShortcodeLibrary:mediaelement};/* > *//script>script typetext/javascript srchttps://www.imrefitos.com/wp-includes/js/mediaelement/wp-mediaelement.min.js?ver6.6.2 idwp-mediaelement-js>/script>script typetext/javascript srchttps://www.imrefitos.com/wp-content/themes/readly/js/wpshower-responsive-videos.js?ver20140331 idwpshower-responsive-videos-js>/script>script typetext/javascript srchttps://www.imrefitos.com/wp-content/themes/readly/js/jquery.mousewheel.js?ver3.1.6 idjquery-mousewheel-js>/script>script typetext/javascript srchttps://www.imrefitos.com/wp-content/themes/readly/fancybox/jquery.fancybox.js?ver3b1 idfancybox-js>/script>script typetext/javascript srchttps://stats.wp.com/e-202440.js idjetpack-stats-js data-wp-strategydefer>/script>script typetext/javascript idjetpack-stats-js-after>/* !CDATA */_stq window._stq || ;_stq.push( view, JSON.parse({\v\:\ext\,\blog\:\117351720\,\post\:\0\,\tz\:\-4\,\srv\:\www.imrefitos.com\,\j\:\1:13.9\}) );_stq.push( clickTrackerInit, 117351720, 0 );/* > *//script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]