Logo
skrypnyk.kostiantyn@gmail.com
DEVOPS

AWS INFRASTRUCTURE VIA
TERRAFORM AND TERRAGRUNT

by Kostiantyn Skrypnyk

Azure Entra ID
User Sync
AWS IAM Identity Center

Duration

2.5 hours

Level

All Levels

Format

Video Lessons

Support

Community Access

What You'll Learn

What You’ll Learn

This course is designed for cloud engineers, DevOps professionals, and architects who want to implement real-world identity & access management across AWS and Azure.

AWS Azure Entra ID SSO & SAML SCIM ABAC
Multi-cloud identity architecture diagram

Course Overview

Modern cloud infrastructures rely heavily on centralized identity, single sign-on (SSO), and automated access management.

You’ll learn how identity works across AWS and Azure, how to federate access using SAML, and how to manage users and permissions at scale with AWS IAM Identity Center and Azure Entra ID.

The course follows a practical path—from fundamentals to enterprise-grade multi-account and multi-cloud setups—reinforced with hands-on labs.

Learning Outcomes

  • Core identity and access management concepts in AWS and Azure
  • Secure AWS and Azure account setup using MFA and best practices
  • AWS IAM fundamentals: users, roles, policies, and organizations
  • Azure Entra ID: users, groups, roles, and licensing models
  • SAML federation: using Azure as an Identity Provider (IdP) for AWS
  • Why IAM-only federation is limited and when Identity Center is required
  • AWS IAM Identity Center: permission sets, assignments, org integration
  • Automated user and group provisioning using SCIM
  • Attribute-Based Access Control (ABAC) using session tags
  • Identity logging and auditing with AWS CloudTrail and CloudWatch
  • Production-ready patterns for enterprise environments

Schema Slot

Use this area for a diagram: SSO flow, federation steps, org structure, etc.

SSO flow schema placeholder

About the Instructor

Hi, I’m Kostia — Cloud/Infrastructure Architect with expertise in system design, DevOps, and cloud infrastructure. I hold multiple certifications, including AWS Solutions Architect and Terraform Professional.

With years of hands-on experience building dynamic, scalable systems using Terraform, I’m here to share practical experience with you.

Key Features

  • High-quality video content: concise, focused lessons
  • Step-by-step guidance: build and manage resources together
  • Useful links & resources: curated references and official documentation

Requirements

  • A computer and internet access
  • Ability to create AWS and Azure accounts (setup is covered in the course)

Why take this course?

You’ll gain the skills and confidence to design, implement, and operate secure identity and access management solutions across AWS and Azure—covering SSO, federation, automated provisioning, and centralized access control.

Built for cloud engineers, DevOps professionals, and architects who want practical, production-ready identity knowledge that goes beyond theory—and can be applied immediately in enterprise environments.

Have a question?

Feel free to reach out if you need more details or have any questions about this course.

More Courses

Multi-Cloud Identity Pro: AWS & Azure

Multi-Cloud Identity Pro: AWS & Azure

<section class="identity-flow-v3"> <div class="flow-container"> <!-- Azure Entra ID --> <div class="flow-icon azure-icon"> <img src="/uploads/header_icon1_5ba29d5b59.png" alt="Azure Entra ID" draggable="false" /> </div> <!-- Connection Line with small User Icon in the middle --> <div class="flow-connection"> <div class="connection-line"></div> <div class="flow-icon user-sync-icon"> <img src="/uploads/header_icon3_bfd9f2c9ff.png" alt="User Sync" draggable="false" /> </div> </div> <!-- AWS Identity Center --> <div class="flow-icon aws-icon"> <img src="/uploads/header_icon2_1fc177ce35.png" alt="AWS IAM Identity Center" draggable="false" /> </div> </div> </section> <style> .identity-flow-v3 { display: flex; justify-content: center; align-items: center; padding: clamp(24px, 4vw, 40px) 0; max-width: 100%; margin: 0 auto; width: 100%; user-select: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; } .flow-container { display: flex; align-items: center; justify-content: center; gap: 0; position: relative; width: 100%; max-width: min(90%, 700px); margin: 0 auto; } .flow-icon { position: relative; background: linear-gradient(135deg, rgba(59, 130, 246, 0.12), rgba(99, 102, 241, 0.06)); border: 2.5px solid rgba(59, 130, 246, 0.35); border-radius: 20px; padding: clamp(16px, 3vw, 24px); transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1); cursor: pointer; box-shadow: 0 6px 20px rgba(0, 0, 0, 0.15); backdrop-filter: blur(8px); z-index: 2; } .flow-icon img { display: block; width: clamp(64px, 10vw, 100px); height: clamp(64px, 10vw, 100px); object-fit: contain; pointer-events: none; user-select: none; -webkit-user-drag: none; filter: drop-shadow(0 2px 8px rgba(0, 0, 0, 0.2)); } .flow-icon:hover { border-color: rgba(59, 130, 246, 0.9); background: linear-gradient(135deg, rgba(59, 130, 246, 0.25), rgba(99, 102, 241, 0.12)); box-shadow: 0 0 0 4px rgba(59, 130, 246, 0.25), 0 12px 32px rgba(59, 130, 246, 0.3); transform: translateY(-4px) scale(1.08); } .azure-icon { background: linear-gradient(135deg, rgba(0, 120, 212, 0.15), rgba(59, 130, 246, 0.08)); border-color: rgba(0, 120, 212, 0.4); } .azure-icon:hover { border-color: rgba(0, 120, 212, 0.9); background: linear-gradient(135deg, rgba(0, 120, 212, 0.28), rgba(59, 130, 246, 0.15)); box-shadow: 0 0 0 4px rgba(0, 120, 212, 0.25), 0 12px 32px rgba(0, 120, 212, 0.35); } .aws-icon { background: linear-gradient(135deg, rgba(255, 153, 0, 0.12), rgba(232, 119, 34, 0.06)); border-color: rgba(255, 153, 0, 0.4); } .aws-icon:hover { border-color: rgba(255, 153, 0, 0.9); background: linear-gradient(135deg, rgba(255, 153, 0, 0.22), rgba(232, 119, 34, 0.12)); box-shadow: 0 0 0 4px rgba(255, 153, 0, 0.25), 0 12px 32px rgba(255, 153, 0, 0.35); } .flow-connection { position: relative; flex: 1; display: flex; align-items: center; justify-content: center; height: auto; margin: 0 clamp(-16px, -2vw, -12px); z-index: 1; } .connection-line { position: absolute; width: 100%; height: 3px; background: linear-gradient(90deg, rgba(0, 120, 212, 0.6) 0%, rgba(96, 165, 250, 0.8) 25%, rgba(167, 139, 250, 0.8) 50%, rgba(96, 165, 250, 0.8) 75%, rgba(255, 153, 0, 0.6) 100% ); box-shadow: 0 0 12px rgba(96, 165, 250, 0.5); transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1); z-index: 1; } .connection-line::after { content: ''; position: absolute; right: -8px; top: 50%; transform: translateY(-50%); width: 0; height: 0; border-left: 12px solid rgba(255, 153, 0, 0.7); border-top: 8px solid transparent; border-bottom: 8px solid transparent; filter: drop-shadow(0 0 6px rgba(255, 153, 0, 0.6)); } .flow-connection:hover .connection-line { height: 4px; box-shadow: 0 0 20px rgba(96, 165, 250, 0.8), 0 0 40px rgba(167, 139, 250, 0.4); background: linear-gradient(90deg, rgba(0, 120, 212, 0.8) 0%, rgba(96, 165, 250, 1) 25%, rgba(167, 139, 250, 1) 50%, rgba(96, 165, 250, 1) 75%, rgba(255, 153, 0, 0.8) 100% ); } .user-sync-icon { position: relative; z-index: 10; background: linear-gradient(135deg, rgba(167, 139, 250, 0.25), rgba(139, 92, 246, 0.15)); border-color: rgba(167, 139, 250, 0.6); padding: clamp(10px, 2vw, 14px); border-radius: 14px; animation: pulse-glow 2.5s ease-in-out infinite; } .user-sync-icon img { width: clamp(32px, 5vw, 48px); height: clamp(32px, 5vw, 48px); } .user-sync-icon:hover { border-color: rgba(167, 139, 250, 1); background: linear-gradient(135deg, rgba(167, 139, 250, 0.4), rgba(139, 92, 246, 0.25)); box-shadow: 0 0 0 4px rgba(167, 139, 250, 0.35), 0 8px 24px rgba(167, 139, 250, 0.45); animation-play-state: paused; transform: translateY(-3px) scale(1.15); } @keyframes pulse-glow { 0%, 100% { box-shadow: 0 0 0 0 rgba(167, 139, 250, 0.4), 0 6px 18px rgba(0, 0, 0, 0.15); } 50% { box-shadow: 0 0 0 8px rgba(167, 139, 250, 0.1), 0 6px 24px rgba(167, 139, 250, 0.3); } } /* Responsive adjustments */ @media (max-width: 768px) { .flow-container { max-width: 95%; } .flow-icon { padding: clamp(12px, 2.5vw, 18px); border-radius: 16px; } .flow-icon img { width: clamp(52px, 9vw, 72px); height: clamp(52px, 9vw, 72px); } .user-sync-icon { padding: clamp(8px, 1.5vw, 12px); } .user-sync-icon img { width: clamp(28px, 4.5vw, 40px); height: clamp(28px, 4.5vw, 40px); } } @media (max-width: 480px) { .identity-flow-v3 { padding: clamp(20px, 3vw, 32px) 0; } .flow-container { max-width: 98%; } .flow-icon { padding: clamp(10px, 2vw, 14px); border-radius: 14px; } .flow-icon img { width: clamp(44px, 8vw, 56px); height: clamp(44px, 8vw, 56px); } .user-sync-icon { padding: clamp(6px, 1.2vw, 10px); border-radius: 12px; } .user-sync-icon img { width: clamp(24px, 4vw, 32px); height: clamp(24px, 4vw, 32px); } .connection-line { height: 2px; } .connection-line::after { border-left-width: 10px; border-top-width: 6px; border-bottom-width: 6px; right: -6px; } .flow-connection { margin: 0 clamp(-12px, -1.5vw, -8px); } } /* Accessibility */ .flow-icon:focus-visible { outline: 3px solid rgba(59, 130, 246, 0.7); outline-offset: 3px; } /* Prevent text selection */ .identity-flow-v3 * { user-select: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; } </style>

$24.99

AWS Secure Landing Zone with Control Tower and AFT

AWS Secure Landing Zone with Control Tower and AFT

Small description

$54.99

HashiCorp Certified: Terraform Professional

HashiCorp Certified: Terraform Professional

<section class="terraform-flow"> <div class="tf-container"> <div class="tf-terminal"> <div class="terminal-header"> <div class="terminal-dot red"></div> <div class="terminal-dot yellow"></div> <div class="terminal-dot green"></div> <span class="terminal-title">main.tf</span> </div> <div class="terminal-body"> <div class="code-lines"> <div class="phase code-phase"> <div class="tl tl1"><span class="kw">resource</span> <span class="str">"aws_vpc"</span> <span class="str">"main"</span> <span class="br">{</span></div> <div class="tl tl2"><span class="attr"> cidr_block</span> <span class="op">=</span> <span class="str">"10.0.0.0/16"</span></div> <div class="tl tl3"><span class="attr"> tags</span> <span class="op">=</span> <span class="br">{</span> <span class="attr">Name</span> <span class="op">=</span> <span class="str">"prod"</span> <span class="br">}</span></div> <div class="tl tl4"><span class="br">}</span></div> </div> <div class="phase apply-phase"> <div class="tl tl-cmd"><span class="prompt">$</span> terraform apply</div> <div class="ol ol1">aws_vpc.main: Creating...</div> <div class="ol ol2"><span class="ok">aws_vpc.main: Created</span></div> <div class="ol ol3"><span class="ok">Apply complete!</span> 1 added.<span class="cb">_</span></div> </div> </div> </div> </div> <div class="tf-connection"> <div class="tf-line"></div> </div> <div class="tf-icon terraform-icon"> <img src="/uploads/course_3_icon1_7760ee5b46.png" alt="Terraform" draggable="false" /> </div> </div> </section> <style> .terraform-flow { display: flex; justify-content: center; align-items: center; padding: clamp(6px, 1vw, 12px) 0; max-width: 100%; margin: 0 auto; width: 100%; user-select: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; } .tf-container { display: flex; align-items: center; justify-content: center; gap: 0; position: relative; width: 100%; max-width: min(90%, 500px); margin: 0 auto; } .tf-icon { position: relative; background: linear-gradient(135deg, rgba(87, 75, 144, 0.15), rgba(99, 102, 241, 0.08)); border: 2.5px solid rgba(87, 75, 144, 0.4); border-radius: 20px; padding: clamp(16px, 3vw, 24px); transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1); cursor: pointer; box-shadow: 0 6px 20px rgba(0, 0, 0, 0.15); backdrop-filter: blur(8px); z-index: 2; flex-shrink: 0; animation: icon-pulse 3s ease-in-out infinite; } .tf-icon img { display: block; width: clamp(64px, 10vw, 100px); height: clamp(64px, 10vw, 100px); object-fit: contain; pointer-events: none; user-select: none; -webkit-user-drag: none; filter: drop-shadow(0 2px 8px rgba(0, 0, 0, 0.2)); } .tf-icon:hover { border-color: rgba(87, 75, 144, 0.9); background: linear-gradient(135deg, rgba(87, 75, 144, 0.28), rgba(99, 102, 241, 0.15)); box-shadow: 0 0 0 4px rgba(87, 75, 144, 0.25), 0 12px 32px rgba(87, 75, 144, 0.35); transform: translateY(-4px) scale(1.08); animation-play-state: paused; } @keyframes icon-pulse { 0%, 100% { box-shadow: 0 0 0 0 rgba(87, 75, 144, 0.4), 0 6px 18px rgba(0, 0, 0, 0.15); } 50% { box-shadow: 0 0 0 8px rgba(87, 75, 144, 0.1), 0 6px 24px rgba(87, 75, 144, 0.3); } } .tf-connection { position: relative; width: clamp(40px, 8vw, 80px); display: flex; align-items: center; justify-content: center; flex-shrink: 0; z-index: 1; margin: 0 clamp(-8px, -1vw, -4px); } .tf-line { width: 100%; height: 3px; background: linear-gradient(90deg, rgba(59, 130, 246, 0.6) 0%, rgba(167, 139, 250, 0.8) 50%, rgba(87, 75, 144, 0.6) 100%); box-shadow: 0 0 12px rgba(96, 165, 250, 0.5); transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1); } .tf-line::after { content: ''; position: absolute; right: -6px; top: 50%; transform: translateY(-50%); width: 0; height: 0; border-left: 10px solid rgba(87, 75, 144, 0.7); border-top: 7px solid transparent; border-bottom: 7px solid transparent; filter: drop-shadow(0 0 6px rgba(87, 75, 144, 0.5)); } .tf-connection:hover .tf-line { height: 4px; box-shadow: 0 0 20px rgba(96, 165, 250, 0.8), 0 0 40px rgba(167, 139, 250, 0.4); } .tf-terminal { flex-shrink: 0; width: clamp(180px, 32vw, 240px); border-radius: 8px; overflow: hidden; border: 2px solid rgba(59, 130, 246, 0.3); box-shadow: 0 6px 20px rgba(0, 0, 0, 0.35), 0 0 12px rgba(59, 130, 246, 0.1); transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1); z-index: 2; } .tf-terminal:hover { border-color: rgba(59, 130, 246, 0.6); box-shadow: 0 8px 28px rgba(0, 0, 0, 0.45), 0 0 20px rgba(59, 130, 246, 0.2); transform: translateY(-2px); } .terminal-header { display: flex; align-items: center; gap: 4px; padding: 4px 8px; background: #1a1a2e; border-bottom: 1px solid rgba(255, 255, 255, 0.08); } .terminal-dot { width: 6px; height: 6px; border-radius: 50%; } .terminal-dot.red { background: #ff5f57; } .terminal-dot.yellow { background: #febc2e; } .terminal-dot.green { background: #28c840; } .terminal-title { margin-left: 4px; font-size: 8px; color: rgba(255, 255, 255, 0.45); font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace; } .terminal-body { background: #0d1117; padding: 4px 6px; overflow: hidden; } .code-lines { position: relative; font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', 'Consolas', monospace; font-size: clamp(7px, 0.9vw, 9px); line-height: 1.15; white-space: pre; } /* Two phases overlaid — code-phase in flow sets height, apply-phase absolute on top */ .code-phase { animation: code-vis 12s linear infinite; } .apply-phase { position: absolute; top: 0; left: 0; right: 0; animation: apply-vis 12s linear infinite; } @keyframes code-vis { 0%, 35% { opacity: 1; } 38%, 97% { opacity: 0; } 100% { opacity: 1; } } @keyframes apply-vis { 0%, 35% { opacity: 0; } 38%, 79% { opacity: 1; } 82%, 100% { opacity: 0; } } /* Typing lines — char by char via width + steps() */ .tl { display: block; overflow: hidden; width: 0; } .tl1 { animation: t1 12s linear infinite; } .tl2 { animation: t2 12s linear infinite; } .tl3 { animation: t3 12s linear infinite; } .tl4 { animation: t4 12s linear infinite; } .tl-cmd { animation: tc 12s linear infinite; } /* 28 chars: resource "aws_vpc" "main" { */ @keyframes t1 { 0%, 2.5% { width: 0; animation-timing-function: steps(28, end); } 12%, 93% { width: 28ch; animation-timing-function: steps(1, end); } 94%, 100% { width: 0; } } /* 28 chars: cidr_block = "10.0.0.0/16" */ @keyframes t2 { 0%, 13.3% { width: 0; animation-timing-function: steps(28, end); } 23%, 93% { width: 28ch; animation-timing-function: steps(1, end); } 94%, 100% { width: 0; } } /* 26 chars: tags = { Name = "prod" } */ @keyframes t3 { 0%, 24.2% { width: 0; animation-timing-function: steps(26, end); } 33%, 93% { width: 26ch; animation-timing-function: steps(1, end); } 94%, 100% { width: 0; } } /* 1 char: } */ @keyframes t4 { 0%, 34.2% { width: 0; animation-timing-function: steps(1, end); } 34.5%, 93% { width: 1ch; animation-timing-function: steps(1, end); } 94%, 100% { width: 0; } } /* 17 chars: $ terraform apply */ @keyframes tc { 0%, 38.5% { width: 0; animation-timing-function: steps(17, end); } 44%, 88% { width: 17ch; animation-timing-function: steps(1, end); } 89%, 100% { width: 0; } } /* Output lines — fade in line by line */ .ol { opacity: 0; } .ol1 { animation: o1 12s linear infinite; } .ol2 { animation: o2 12s linear infinite; } .ol3 { animation: o3 12s linear infinite; } @keyframes o1 { 0%, 48% { opacity: 0; animation-timing-function: steps(1, end); } 48.1%, 88% { opacity: 1; animation-timing-function: steps(1, end); } 89%, 100% { opacity: 0; } } @keyframes o2 { 0%, 52.5% { opacity: 0; animation-timing-function: steps(1, end); } 52.6%, 88% { opacity: 1; animation-timing-function: steps(1, end); } 89%, 100% { opacity: 0; } } @keyframes o3 { 0%, 57% { opacity: 0; animation-timing-function: steps(1, end); } 57.1%, 88% { opacity: 1; animation-timing-function: steps(1, end); } 89%, 100% { opacity: 0; } } /* Syntax colors */ .tl .kw { color: #ff79c6; } .tl .str { color: #a5d6ff; } .tl .attr { color: #d2a8ff; } .tl .op { color: #ff7b72; } .tl .br { color: #e6edf3; } .tl .prompt { color: #7ee787; } .tl-cmd { color: #e6edf3; } .ol { color: rgba(230, 237, 243, 0.7); } .ol .ok { color: #7ee787; } /* Blinking cursor */ .cb { color: #7ee787; font-weight: bold; animation: blink 0.8s step-end infinite; } @keyframes blink { 0%, 100% { opacity: 1; } 50% { opacity: 0; } } /* Responsive — sizes unchanged */ @media (max-width: 768px) { .tf-container { max-width: 95%; } .tf-icon { padding: clamp(12px, 2.5vw, 18px); border-radius: 16px; } .tf-icon img { width: clamp(52px, 9vw, 72px); height: clamp(52px, 9vw, 72px); } .tf-terminal { width: clamp(150px, 28vw, 200px); } .code-lines { font-size: clamp(6px, 0.8vw, 8px); } .tf-connection { width: clamp(30px, 6vw, 50px); } } @media (max-width: 480px) { .terraform-flow { padding: clamp(4px, 0.8vw, 8px) 0; } .tf-container { max-width: 98%; } .tf-icon { padding: clamp(10px, 2vw, 14px); border-radius: 14px; } .tf-icon img { width: clamp(44px, 8vw, 56px); height: clamp(44px, 8vw, 56px); } .tf-terminal { width: clamp(120px, 26vw, 160px); } .terminal-body { padding: 3px 4px; } .code-lines { font-size: 6px; line-height: 1.1; } .terminal-header { padding: 3px 6px; } .terminal-dot { width: 5px; height: 5px; } .tf-connection { width: clamp(20px, 5vw, 36px); } .tf-line::after { border-left-width: 8px; border-top-width: 5px; border-bottom-width: 5px; right: -5px; } } .tf-icon:focus-visible, .tf-terminal:focus-visible { outline: 3px solid rgba(59, 130, 246, 0.7); outline-offset: 3px; } .terraform-flow * { user-select: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; } </style>

$44.99

Open to Opportunities

  • Freelance & Contract work
  • Startup & Business collaborations
  • Mentoring
  • Speaking engagements