<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>secure-architectures on Alperen Doc</title><link>https://blog.ulutasalperen.com/docs/aws-saa/secure-architectures/</link><description>Recent content in secure-architectures on Alperen Doc</description><generator>Hugo</generator><language>en</language><atom:link href="https://blog.ulutasalperen.com/docs/aws-saa/secure-architectures/index.xml" rel="self" type="application/rss+xml"/><item><title>iam-policies-roles-cross-account</title><link>https://blog.ulutasalperen.com/docs/aws-saa/secure-architectures/iam-policies-roles-cross-account/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.ulutasalperen.com/docs/aws-saa/secure-architectures/iam-policies-roles-cross-account/</guid><description>&lt;h1 id="iam-identity-and-access-management-policies-roles-and-cross-account-access"&gt;IAM (Identity and Access Management) Policies, Roles and Cross-Account Access&lt;a class="anchor" href="#iam-identity-and-access-management-policies-roles-and-cross-account-access"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;IAM is the backbone of every security question on the exam. If a scenario says &amp;ldquo;grant access&amp;rdquo;, the answer almost always involves &lt;strong&gt;IAM roles&lt;/strong&gt; - never sharing credentials, never embedding keys.&lt;/p&gt;&#10;&lt;h2 id="policy-structure"&gt;Policy structure&lt;a class="anchor" href="#policy-structure"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Every policy is a JSON document:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;Version&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;2012-10-17&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;Statement&amp;#34;&lt;/span&gt;: [&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;Effect&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;Allow&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;Action&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;s3:GetObject&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;Resource&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;arn:aws:s3:::my-bucket/*&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;Condition&amp;#34;&lt;/span&gt;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;StringEquals&amp;#34;&lt;/span&gt;: {&lt;span style="color:#f92672"&gt;&amp;#34;aws:RequestedRegion&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;eu-central-1&amp;#34;&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The four levers you can pull: &lt;strong&gt;Effect&lt;/strong&gt; (Allow/Deny), &lt;strong&gt;Action&lt;/strong&gt; (what API call), &lt;strong&gt;Resource&lt;/strong&gt; (which ARN (Amazon Resource Name)), &lt;strong&gt;Condition&lt;/strong&gt; (when/where/from which IP).&lt;/p&gt;</description></item><item><title>identity-federation-and-cognito</title><link>https://blog.ulutasalperen.com/docs/aws-saa/secure-architectures/identity-federation-and-cognito/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.ulutasalperen.com/docs/aws-saa/secure-architectures/identity-federation-and-cognito/</guid><description>&lt;h1 id="identity-federation-and-cognito"&gt;Identity Federation and Cognito&lt;a class="anchor" href="#identity-federation-and-cognito"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;Creating IAM (Identity and Access Management) users inside AWS for every employee is a management nightmare - and the exam knows it. The right answer for &amp;ldquo;our 500 employees use Active Directory&amp;rdquo; is always &lt;strong&gt;federation&lt;/strong&gt;: let an external identity provider handle the humans, and give them &lt;strong&gt;temporary AWS credentials&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;h2 id="federation-with-saml-security-assertion-markup-language-20-corporate-identities"&gt;Federation with SAML (Security Assertion Markup Language) 2.0 (corporate identities)&lt;a class="anchor" href="#federation-with-saml-security-assertion-markup-language-20-corporate-identities"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The scenario keyword is &lt;strong&gt;Active Directory / ADFS / Okta / Azure AD&lt;/strong&gt;. Pattern:&lt;/p&gt;</description></item><item><title>kms-encryption-deep-dive</title><link>https://blog.ulutasalperen.com/docs/aws-saa/secure-architectures/kms-encryption-deep-dive/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.ulutasalperen.com/docs/aws-saa/secure-architectures/kms-encryption-deep-dive/</guid><description>&lt;h1 id="kms-key-management-service-and-encryption-deep-dive"&gt;KMS (Key Management Service) and Encryption Deep Dive&lt;a class="anchor" href="#kms-key-management-service-and-encryption-deep-dive"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;Encryption questions on the exam come down to one choice: &lt;strong&gt;which encryption option and where do the keys live&lt;/strong&gt;. AWS KMS is the default answer for almost all of them.&lt;/p&gt;&#10;&lt;h2 id="kms-key-types"&gt;KMS key types&lt;a class="anchor" href="#kms-key-types"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Key&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Managed by&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Use case&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;AWS owned keys (&lt;code&gt;aws/s3&lt;/code&gt;, &lt;code&gt;aws/ebs&lt;/code&gt;&amp;hellip;)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;AWS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Zero setup, no key policy to manage&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;AWS managed key&lt;/strong&gt; (&lt;code&gt;aws/s3&lt;/code&gt; etc.)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;AWS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Automatic for most services, cannot rotate on demand&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Customer managed key (CMK)&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;You&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Full control: key policy, rotation, disable, grants&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Asymmetric keys&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;You&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Sign/verify or public-key encryption outside KMS&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Multi-region keys&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;You&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Global tables, cross-region DR (disaster recovery) with one key&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Automatic rotation: customer managed keys rotate &lt;strong&gt;once a year&lt;/strong&gt; (you can trigger early rotation). You cannot export the key material - KMS is the boundary.&lt;/p&gt;</description></item><item><title>secrets-manager-vs-parameter-store</title><link>https://blog.ulutasalperen.com/docs/aws-saa/secure-architectures/secrets-manager-vs-parameter-store/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.ulutasalperen.com/docs/aws-saa/secure-architectures/secrets-manager-vs-parameter-store/</guid><description>&lt;h1 id="secrets-manager-vs-ssm-systems-manager-parameter-store"&gt;Secrets Manager vs SSM (Systems Manager) Parameter Store&lt;a class="anchor" href="#secrets-manager-vs-ssm-systems-manager-parameter-store"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;The exam loves this comparison - a scenario mentions database passwords or API keys, and you must pick the right vault. Both store secrets encrypted with KMS (Key Management Service), but the differences decide the answer.&lt;/p&gt;&#10;&lt;h2 id="side-by-side"&gt;Side by side&lt;a class="anchor" href="#side-by-side"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;AWS Secrets Manager&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;SSM Parameter Store&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Purpose&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Secrets (DB creds, API keys)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Config + secrets&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Rotation&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Built-in&lt;/strong&gt; (Lambda-backed, automatic)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;DIY (custom automation)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Cross-account&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Native (resource policy)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Via IAM (Identity and Access Management), more work&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Pricing&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;~$0.40/secret/month&lt;/strong&gt; + API calls&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Standard tier: &lt;strong&gt;free&lt;/strong&gt;; Advanced: $0.05/param&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Size limit&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;64 KB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Standard 4 KB / Advanced 8 KB&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Versioning&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Automatic versions + staging labels (&lt;code&gt;AWSCURRENT&lt;/code&gt;)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Labeled versions&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Integration&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RDS (Relational Database Service), Redshift, DocumentDB native&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Everything via SSM API&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="decision-rule"&gt;Decision rule&lt;a class="anchor" href="#decision-rule"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&amp;ldquo;Passwords must be &lt;strong&gt;rotated automatically&lt;/strong&gt;&amp;rdquo; → &lt;strong&gt;Secrets Manager&lt;/strong&gt;, no question&lt;/li&gt;&#10;&lt;li&gt;&amp;ldquo;Cross-account secret sharing&amp;rdquo; → &lt;strong&gt;Secrets Manager&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&amp;ldquo;App config, feature flags, non-secret parameters, budget-conscious&amp;rdquo; → &lt;strong&gt;Parameter Store&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&amp;ldquo;Database credentials for RDS/Redshift/DocumentDB&amp;rdquo; → &lt;strong&gt;Secrets Manager&lt;/strong&gt; (it integrates and rotates them out of the box)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="how-secrets-manager-rotation-works"&gt;How Secrets Manager rotation works&lt;a class="anchor" href="#how-secrets-manager-rotation-works"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;pre class="mermaid"&gt;sequenceDiagram&#10; participant SM as Secrets Manager&#10; participant L as Rotation Lambda&#10; participant DB as RDS/Aurora&#10; SM-&amp;gt;&amp;gt;L: trigger rotation&#10; L-&amp;gt;&amp;gt;DB: create new password&#10; L-&amp;gt;&amp;gt;SM: store new version (AWSPENDING)&#10; L-&amp;gt;&amp;gt;DB: test connection&#10; L-&amp;gt;&amp;gt;SM: label as AWSCURRENT&lt;/pre&gt;&lt;p&gt;The app keeps asking Secrets Manager for the secret by name - it always gets the current version, so the app never knows the password changed.&lt;/p&gt;</description></item><item><title>s3-security-and-access-points</title><link>https://blog.ulutasalperen.com/docs/aws-saa/secure-architectures/s3-security-and-access-points/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.ulutasalperen.com/docs/aws-saa/secure-architectures/s3-security-and-access-points/</guid><description>&lt;h1 id="s3-simple-storage-service-security-and-access-points"&gt;S3 (Simple Storage Service) Security and Access Points&lt;a class="anchor" href="#s3-simple-storage-service-security-and-access-points"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;S3 security questions usually start with &amp;ldquo;an object was accidentally made public&amp;rdquo; or &amp;ldquo;only this VPC (Virtual Private Cloud) may access the bucket&amp;rdquo;. The answer set is small: &lt;strong&gt;Block Public Access&lt;/strong&gt;, bucket policies, IAM (Identity and Access Management), and &lt;strong&gt;Access Points&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;h2 id="the-access-control-toolkit"&gt;The access control toolkit&lt;a class="anchor" href="#the-access-control-toolkit"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Mechanism&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;What it does&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Exam note&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Block Public Access&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Master switch; overrides everything&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Turn on account-wide, &amp;ldquo;prevent any public access&amp;rdquo;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Bucket policy&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Resource-based JSON on the bucket&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Cross-account access&lt;/strong&gt;, VPC-only access&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;IAM policies&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Identity-based permissions&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Same-account access for users/roles&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;ACLs&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Legacy per-object permissions&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&amp;ldquo;ACL disabled / Object Ownership: Bucket owner enforced&amp;rdquo; is the modern answer&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Access Points&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Per-workload entry point with its own policy&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Huge buckets, many teams/VPCs&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Pre-signed URLs&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Time-limited URL signed with credentials&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&amp;ldquo;Share a private object for 1 hour&amp;rdquo;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Handy labs: &lt;a href="../../../aws/s3/aws-s3-bucket/"&gt;aws-s3-bucket&lt;/a&gt;, &lt;a href="../../../aws/cdn/presigned-urls/"&gt;presigned-urls&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>network-security-sg-nacl-vpc-endpoints</title><link>https://blog.ulutasalperen.com/docs/aws-saa/secure-architectures/network-security-sg-nacl-vpc-endpoints/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.ulutasalperen.com/docs/aws-saa/secure-architectures/network-security-sg-nacl-vpc-endpoints/</guid><description>&lt;h1 id="network-security-security-groups-nacls-network-access-control-list-and-vpc-virtual-private-cloud-endpoints"&gt;Network Security: Security Groups, NACLs (Network Access Control List) and VPC (Virtual Private Cloud) Endpoints&lt;a class="anchor" href="#network-security-security-groups-nacls-network-access-control-list-and-vpc-virtual-private-cloud-endpoints"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;Two firewall layers and one private connectivity mechanism - and the exam will absolutely ask you to compare the first two.&lt;/p&gt;&#10;&lt;h2 id="security-group-vs-nacl---the-mandatory-table"&gt;Security Group vs NACL - the mandatory table&lt;a class="anchor" href="#security-group-vs-nacl---the-mandatory-table"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;Security Group&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;NACL&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Attaches to&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ENI (Elastic Network Interface) / instance&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Subnet&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;State&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Stateful&lt;/strong&gt; (reply traffic auto-allowed)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Stateless&lt;/strong&gt; (allow + deny rules for each direction)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Rules&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Allow only&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Allow &lt;strong&gt;and deny&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Evaluation&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;All rules evaluated&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Rules in &lt;strong&gt;number order&lt;/strong&gt;, lowest first&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Default&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Deny all inbound, allow all outbound&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Allow all in/out&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Use when&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Instance-level filtering&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Block a specific IP at subnet level&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Key consequences:&lt;/p&gt;</description></item><item><title>security-services-waf-guardduty-inspector</title><link>https://blog.ulutasalperen.com/docs/aws-saa/secure-architectures/security-services-waf-guardduty-inspector/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.ulutasalperen.com/docs/aws-saa/secure-architectures/security-services-waf-guardduty-inspector/</guid><description>&lt;h1 id="security-services-waf-web-application-firewall-shield-guardduty-inspector-macie-and-friends"&gt;Security Services: WAF (Web Application Firewall), Shield, GuardDuty, Inspector, Macie and friends&lt;a class="anchor" href="#security-services-waf-web-application-firewall-shield-guardduty-inspector-macie-and-friends"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;AWS has a swarm of security services with confusingly similar names. The exam doesn&amp;rsquo;t ask how they work internally - it gives you a one-line problem and expects you to name the right one. Learn the &lt;strong&gt;one keyword per service&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;h2 id="the-keyword-map"&gt;The keyword map&lt;a class="anchor" href="#the-keyword-map"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Service&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;What it does&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Scenario keyword&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;WAF&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Blocks bad &lt;strong&gt;HTTP requests&lt;/strong&gt; (SQLi, XSS, rate limiting)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&amp;ldquo;web app attacks&amp;rdquo;, &amp;ldquo;Layer 7&amp;rdquo;, &amp;ldquo;bad bots&amp;rdquo;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Shield Standard/Advanced&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;DDoS&lt;/strong&gt; protection&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&amp;ldquo;volumetric attack&amp;rdquo;, &amp;ldquo;availability during DDoS&amp;rdquo;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;GuardDuty&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Threat detection&lt;/strong&gt; on accounts/workloads&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&amp;ldquo;compromised credentials&amp;rdquo;, &amp;ldquo;malicious IP&amp;rdquo;, &amp;ldquo;crypto mining&amp;rdquo;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Inspector&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Vulnerability scanning&lt;/strong&gt; (EC2 (Elastic Compute Cloud), ECR (Elastic Container Registry), Lambda)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&amp;ldquo;CVEs&amp;rdquo;, &amp;ldquo;software vulnerabilities&amp;rdquo;, &amp;ldquo;patch status&amp;rdquo;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Macie&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Finds &lt;strong&gt;sensitive data (PII)&lt;/strong&gt; in S3 (Simple Storage Service)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&amp;ldquo;credit card numbers&amp;rdquo;, &amp;ldquo;PII discovery&amp;rdquo;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Security Hub&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Aggregates findings across accounts&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&amp;ldquo;single dashboard&amp;rdquo;, &amp;ldquo;security standards&amp;rdquo;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Detective&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Investigates&lt;/strong&gt; findings, visualizes root cause&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&amp;ldquo;why did this happen&amp;rdquo;, &amp;ldquo;investigation&amp;rdquo;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Network Firewall&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Managed firewall for VPC (Virtual Private Cloud) traffic&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&amp;ldquo;IPS/IDS for VPC&amp;rdquo;, &amp;ldquo;domain filtering&amp;rdquo;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Firewall Manager&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Centrally manage WAF/SG (Security Group)/Network Firewall across accounts&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&amp;ldquo;apply one policy to all accounts&amp;rdquo;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="waf-details-worth-knowing"&gt;WAF details worth knowing&lt;a class="anchor" href="#waf-details-worth-knowing"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Attaches to &lt;strong&gt;CloudFront, ALB (Application Load Balancer), API Gateway, AppSync&lt;/strong&gt; - not NLB (Network Load Balancer), WAF is Layer 7&lt;/li&gt;&#10;&lt;li&gt;Rules: allow / block / count, plus &lt;strong&gt;rate-based rules&lt;/strong&gt; (&amp;ldquo;more than N requests per 5 min from one IP → block&amp;rdquo;)&lt;/li&gt;&#10;&lt;li&gt;Managed rule groups cover OWASP Top 10 out of the box&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="shield-standard-vs-advanced"&gt;Shield: Standard vs Advanced&lt;a class="anchor" href="#shield-standard-vs-advanced"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Standard&lt;/strong&gt; - free, automatic for CloudFront, Route 53, ELB (Elastic Load Balancing)&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Advanced&lt;/strong&gt; - paid (~$3,000/month + usage), adds &lt;strong&gt;cost protection&lt;/strong&gt; against usage spikes during an attack, 24/7 &lt;strong&gt;DDoS Response Team&lt;/strong&gt;, and advanced diagnostics&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&amp;ldquo;Financial protection against DDoS-driven scaling bills&amp;rdquo; → Shield Advanced. That cost-protection angle is the favorite exam hint.&lt;/p&gt;</description></item><item><title>governance-monitoring-organizations-config-ssm</title><link>https://blog.ulutasalperen.com/docs/aws-saa/secure-architectures/governance-monitoring-organizations-config-ssm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.ulutasalperen.com/docs/aws-saa/secure-architectures/governance-monitoring-organizations-config-ssm/</guid><description>&lt;h1 id="governance-auditing--operations-organizations-config-cloudtrail-and-systems-manager"&gt;Governance, Auditing &amp;amp; Operations: Organizations, Config, CloudTrail and Systems Manager&lt;a class="anchor" href="#governance-auditing--operations-organizations-config-cloudtrail-and-systems-manager"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;Many security and operations questions ask &amp;ldquo;how do we prevent all accounts from doing X&amp;rdquo;, &amp;ldquo;who deleted the database yesterday&amp;rdquo;, or &amp;ldquo;how do we manage 200 EC2 (Elastic Compute Cloud) instances without opening SSH (Secure Shell)&amp;rdquo;. Each of those maps to a specific management service.&lt;/p&gt;&#10;&lt;h2 id="multi-account-governance-aws-organizations--control-tower"&gt;Multi-account governance: AWS Organizations &amp;amp; Control Tower&lt;a class="anchor" href="#multi-account-governance-aws-organizations--control-tower"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;pre class="mermaid"&gt;flowchart TB&#10; root[Management Account / Root]&#10; root --&amp;gt; ou_prod[OU: Production]&#10; root --&amp;gt; ou_dev[OU: Dev / Sandbox]&#10; ou_prod --&amp;gt; acc1[Account A] &amp;amp; acc2[Account B]&#10; ou_dev --&amp;gt; acc3[Account C]&#10; scp[SCP: Deny non-EU regions] -.-&amp;gt;|attached to| ou_prod &amp;amp; ou_dev&lt;/pre&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;AWS Organizations&lt;/strong&gt; groups multiple AWS accounts into &lt;strong&gt;Organizational Units (OUs)&lt;/strong&gt; with &lt;strong&gt;consolidated billing&lt;/strong&gt; (one bill + shared volume discounts, RIs (Reserved Instance) and Savings Plans across accounts).&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;SCP (Service Control Policy)&lt;/strong&gt; defines the &lt;strong&gt;maximum allowed permissions&lt;/strong&gt; for member accounts (including the account&amp;rsquo;s root user!).&#10;&lt;ul&gt;&#10;&lt;li&gt;SCPs &lt;strong&gt;never grant permissions&lt;/strong&gt; — you still need IAM (Identity and Access Management) policies inside the account.&lt;/li&gt;&#10;&lt;li&gt;SCPs &lt;strong&gt;do not apply to the management (master) account&lt;/strong&gt; itself.&lt;/li&gt;&#10;&lt;li&gt;Default strategy: &lt;strong&gt;FullAWSAccess&lt;/strong&gt; attached everywhere + explicit &lt;code&gt;Deny&lt;/code&gt; SCPs (e.g., deny leaving Organizations, deny disabling CloudTrail, restrict regions with &lt;code&gt;aws:RequestedRegion&lt;/code&gt;).&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;AWS Control Tower&lt;/strong&gt; sets up a multi-account &lt;strong&gt;Landing Zone&lt;/strong&gt; automatically using Organizations, IAM Identity Center, Config and CloudTrail, enforcing &lt;strong&gt;preventive guardrails&lt;/strong&gt; (SCPs) and &lt;strong&gt;detective guardrails&lt;/strong&gt; (Config rules).&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;AWS RAM (Resource Access Manager)&lt;/strong&gt; shares specific resources across accounts without duplicating them: &lt;strong&gt;Transit Gateway, Subnets, Route 53 Resolver rules, License Manager&lt;/strong&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;blockquote class='book-hint note'&gt;&#10;&lt;p&gt;&lt;strong&gt;Not:&lt;/strong&gt; Sınavda &amp;ldquo;tüm alt hesaplarda root dahil kimse X bölgesinde kaynak açamasın veya CloudTrail&amp;rsquo;i kapatamasın&amp;rdquo; deniyorsa cevap her zaman &lt;strong&gt;AWS Organizations + SCP&lt;/strong&gt;&amp;lsquo;dir. SCP izin vermez, sadece üst sınır çizer.&lt;/p&gt;&lt;/blockquote&gt;</description></item></channel></rss>