[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"cheat-sheet---en":3,"domain-info---en":3,"topic-info----en":3,"prev-cloud-computing-fundamentals-cloud-services-and-architecture-modern-cloud-architectures-devops-and-infrastructure-as-code-en":4,"lesson-cloud-computing-fundamentals-cloud-services-and-architecture-modern-cloud-architectures-devops-and-infrastructure-as-code-en":526,"next-cloud-computing-fundamentals-cloud-services-and-architecture-modern-cloud-architectures-devops-and-infrastructure-as-code-en":907},null,{"locked":5,"reason":3,"meta":6,"item":17},false,{"title":7,"description":8,"isFree":5,"estimatedMinutes":9,"difficulty":10,"learningObjectives":11},"Containers and Microservices","What a container actually packages, why splitting a monolith into microservices changes how a team ships and scales, and what an orchestrator like Kubernetes adds once you have more containers than you can manage by hand.",19,"intermediate",[12,13,14,15,16],"Explain what a container is and why it starts faster than a virtual machine","Describe how a container image keeps the runtime environment identical from a laptop to production","Distinguish a monolithic application from a microservices architecture by how each one is deployed and scaled","Identify what container orchestration adds on top of running individual containers by hand","Recognize the operational tradeoffs microservices introduce in exchange for independent scaling and deployment",{"id":18,"title":7,"body":19,"description":8,"difficulty":10,"estimatedMinutes":9,"extension":446,"infographics":447,"isFree":5,"learningObjectives":459,"meta":460,"navigation":461,"path":462,"quiz":463,"seo":523,"stem":524,"__hash__":525},"courses/courses/cloud-computing-fundamentals/en/domains/02-cloud-services-and-architecture/03-modern-cloud-architectures/02-containers-and-microservices.md",{"type":20,"value":21,"toc":437},"minimark",[22,27,31,35,38,86,129,144,148,151,156,159,163,166,170,176,364,370,374,426,430,433],[23,24,26],"h2",{"id":25},"the-last-lesson-answered-who-runs-the-code-this-one-asks-how-it-is-built","The last lesson answered who runs the code. This one asks how it is built",[28,29,30],"p",{},"The last lesson left compute answered: a serverless function, a virtual machine, or something in between runs your code, and the provider handles more or less of the surrounding work depending on which you pick. None of that says anything about how the application itself is put together. An application that started as one large codebase, one deployment, one team, runs into a specific kind of trouble as it grows: a small fix to the checkout flow means testing and redeploying the entire application, catalog, accounts, and all, and a traffic spike in one part of the app forces you to scale the whole thing. Containers and microservices are 2 separate ideas that, together, solve exactly that problem.",[23,32,34],{"id":33},"what-a-container-actually-packages","What a container actually packages",[28,36,37],{},"A container is an isolated process bundled with everything it needs to run: your code, its runtime, and its dependencies, all in one self-contained unit. Package a Node.js application into a container image and that image runs identically whether it started on a developer's laptop, a test server, or a production cluster, because the image carries its own runtime instead of depending on whatever happens to be installed on the host.",[39,40,45],"pre",{"className":41,"code":42,"language":43,"meta":44,"style":44},"language-dockerfile shiki shiki-themes material-theme-lighter github-light github-dark","FROM node:20-slim\nWORKDIR /app\nCOPY package*.json ./\nRUN npm install --production\nCOPY . .\nCMD [\"node\", \"server.js\"]\n","dockerfile","",[46,47,48,56,62,68,74,80],"code",{"__ignoreMap":44},[49,50,53],"span",{"class":51,"line":52},"line",1,[49,54,55],{},"FROM node:20-slim\n",[49,57,59],{"class":51,"line":58},2,[49,60,61],{},"WORKDIR /app\n",[49,63,65],{"class":51,"line":64},3,[49,66,67],{},"COPY package*.json ./\n",[49,69,71],{"class":51,"line":70},4,[49,72,73],{},"RUN npm install --production\n",[49,75,77],{"class":51,"line":76},5,[49,78,79],{},"COPY . .\n",[49,81,83],{"class":51,"line":82},6,[49,84,85],{},"CMD [\"node\", \"server.js\"]\n",[39,87,91],{"className":88,"code":89,"language":90,"meta":44,"style":44},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","docker build -t checkout-service:1.0 .\ndocker run -p 3000:3000 checkout-service:1.0\n","bash",[46,92,93,113],{"__ignoreMap":44},[49,94,95,99,103,107,110],{"class":51,"line":52},[49,96,98],{"class":97},"sbgvK","docker",[49,100,102],{"class":101},"s_sjI"," build",[49,104,106],{"class":105},"stzsN"," -t",[49,108,109],{"class":101}," checkout-service:1.0",[49,111,112],{"class":101}," .\n",[49,114,115,117,120,123,126],{"class":51,"line":58},[49,116,98],{"class":97},[49,118,119],{"class":101}," run",[49,121,122],{"class":105}," -p",[49,124,125],{"class":101}," 3000:3000",[49,127,128],{"class":101}," checkout-service:1.0\n",[28,130,131,132,135,136,139,140,143],{},"That ",[46,133,134],{},"Dockerfile"," describes the image; ",[46,137,138],{},"docker build"," packages it; ",[46,141,142],{},"docker run"," starts a container from it. The compute lesson already placed containers on the control-versus-convenience spectrum, starting in seconds instead of a virtual machine's minutes, because a container shares the host operating system's kernel instead of booting a full guest OS of its own.",[23,145,147],{"id":146},"from-monolith-to-microservices","From monolith to microservices",[28,149,150],{},"A monolith is one codebase, one deployment, and usually one shared database, no matter how many distinct features it contains. A microservices architecture splits that same application into a suite of small, independently deployable services, each built around one business capability (catalog, cart, checkout, user accounts) and communicating over lightweight APIs rather than in-process function calls. Each service typically owns its own database instead of sharing one, which is what makes it deployable and scalable on its own.",[152,153],"infographic",{"alt":154,"slug":155},"A side-by-side comparison of a monolith, one codebase and one database, against a microservices architecture split into independent services each with its own database.","containers-and-microservices-monolith-vs-microservices",[28,157,158],{},"Go back to the flash-sale scenario. In a monolith, a tripling of checkout traffic forces you to scale the entire deployment, catalog and accounts included, since there is only one deployable unit to scale. Split into microservices, the checkout service scales on its own, and catalog and accounts stay exactly as they were, because each one is now a separate, independently deployable piece.",[23,160,162],{"id":161},"the-trade-you-make-independence-for-coordination","The trade you make: independence for coordination",[28,164,165],{},"None of this is free. Splitting a monolith into microservices trades a single codebase's simplicity for a set of new problems that only show up once services are separate. A call from checkout to the user service now crosses a network instead of calling a function in the same process, which means it can time out or fail in ways an in-process call never could. Decentralized data, each service with its own database, means giving up one shared transaction across the whole request in favor of eventual consistency between services. And a single customer request that touches 5 services is harder to debug than one that touches one, since there is no longer a single stack trace to read. More services is not automatically better; it is a deliberate trade of simplicity for independence, one that only pays off once a team has the operational tooling to manage it, which is exactly what the next lesson covers.",[23,167,169],{"id":168},"orchestration-managing-more-containers-than-a-human-can-track","Orchestration: managing more containers than a human can track",[28,171,172,173,175],{},"Run one container by hand and ",[46,174,142],{}," is enough. Run 3 replicas of a checkout service for redundancy, plus a catalog service, plus a cart service, each with its own replicas, and manually watching all of them stops working quickly. A container orchestrator like Kubernetes takes a declarative description of what you want and continuously works to make reality match it.",[39,177,181],{"className":178,"code":179,"language":180,"meta":44,"style":44},"language-yaml shiki shiki-themes material-theme-lighter github-light github-dark","apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: checkout-service\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: checkout-service\n  template:\n    metadata:\n      labels:\n        app: checkout-service\n    spec:\n      containers:\n        - name: checkout\n          image: checkout-service:2.1\n          ports:\n            - containerPort: 8080\n","yaml",[46,182,183,196,206,214,224,231,242,250,258,268,276,284,292,302,310,318,332,343,351],{"__ignoreMap":44},[49,184,185,189,193],{"class":51,"line":52},[49,186,188],{"class":187},"sQzsp","apiVersion",[49,190,192],{"class":191},"sP7_E",":",[49,194,195],{"class":101}," apps/v1\n",[49,197,198,201,203],{"class":51,"line":58},[49,199,200],{"class":187},"kind",[49,202,192],{"class":191},[49,204,205],{"class":101}," Deployment\n",[49,207,208,211],{"class":51,"line":64},[49,209,210],{"class":187},"metadata",[49,212,213],{"class":191},":\n",[49,215,216,219,221],{"class":51,"line":70},[49,217,218],{"class":187},"  name",[49,220,192],{"class":191},[49,222,223],{"class":101}," checkout-service\n",[49,225,226,229],{"class":51,"line":76},[49,227,228],{"class":187},"spec",[49,230,213],{"class":191},[49,232,233,236,238],{"class":51,"line":82},[49,234,235],{"class":187},"  replicas",[49,237,192],{"class":191},[49,239,241],{"class":240},"srdBf"," 3\n",[49,243,245,248],{"class":51,"line":244},7,[49,246,247],{"class":187},"  selector",[49,249,213],{"class":191},[49,251,253,256],{"class":51,"line":252},8,[49,254,255],{"class":187},"    matchLabels",[49,257,213],{"class":191},[49,259,261,264,266],{"class":51,"line":260},9,[49,262,263],{"class":187},"      app",[49,265,192],{"class":191},[49,267,223],{"class":101},[49,269,271,274],{"class":51,"line":270},10,[49,272,273],{"class":187},"  template",[49,275,213],{"class":191},[49,277,279,282],{"class":51,"line":278},11,[49,280,281],{"class":187},"    metadata",[49,283,213],{"class":191},[49,285,287,290],{"class":51,"line":286},12,[49,288,289],{"class":187},"      labels",[49,291,213],{"class":191},[49,293,295,298,300],{"class":51,"line":294},13,[49,296,297],{"class":187},"        app",[49,299,192],{"class":191},[49,301,223],{"class":101},[49,303,305,308],{"class":51,"line":304},14,[49,306,307],{"class":187},"    spec",[49,309,213],{"class":191},[49,311,313,316],{"class":51,"line":312},15,[49,314,315],{"class":187},"      containers",[49,317,213],{"class":191},[49,319,321,324,327,329],{"class":51,"line":320},16,[49,322,323],{"class":191},"        -",[49,325,326],{"class":187}," name",[49,328,192],{"class":191},[49,330,331],{"class":101}," checkout\n",[49,333,335,338,340],{"class":51,"line":334},17,[49,336,337],{"class":187},"          image",[49,339,192],{"class":191},[49,341,342],{"class":101}," checkout-service:2.1\n",[49,344,346,349],{"class":51,"line":345},18,[49,347,348],{"class":187},"          ports",[49,350,213],{"class":191},[49,352,353,356,359,361],{"class":51,"line":9},[49,354,355],{"class":191},"            -",[49,357,358],{"class":187}," containerPort",[49,360,192],{"class":191},[49,362,363],{"class":240}," 8080\n",[28,365,131,366,369],{},[46,367,368],{},"replicas: 3"," line is a declaration, not a one-time command. If one of the 3 crashes, Kubernetes notices the mismatch between the declared state and reality and starts a replacement automatically, a capability called self-healing. Kubernetes also handles service discovery and load balancing across those replicas, and rolls updates out gradually instead of all at once, so a team stops babysitting containers by hand and starts describing the state they want instead.",[23,371,373],{"id":372},"exam-cues-spotting-the-fit-in-a-scenario","Exam cues: spotting the fit in a scenario",[375,376,377,390],"table",{},[378,379,380],"thead",{},[381,382,383,387],"tr",{},[384,385,386],"th",{},"The scenario says...",[384,388,389],{},"Points to",[391,392,393,402,410,418],"tbody",{},[381,394,395,399],{},[396,397,398],"td",{},"\"Package once, run identically everywhere\"",[396,400,401],{},"Container",[381,403,404,407],{},[396,405,406],{},"\"Independent teams ship independently, each owns its own data\"",[396,408,409],{},"Microservices",[381,411,412,415],{},[396,413,414],{},"\"Automatically restart failed instances, roll updates out gradually\"",[396,416,417],{},"Container orchestration (Kubernetes)",[381,419,420,423],{},[396,421,422],{},"\"One codebase, one deployment, one database\"",[396,424,425],{},"Monolith",[23,427,429],{"id":428},"where-this-leaves-you","Where this leaves you",[28,431,432],{},"Splitting an application into microservices and packaging each piece as a container are 2 separate decisions that happen to reinforce each other: the independent deployability microservices promise only holds up if each piece can actually ship and scale on its own, and a container is exactly what makes that practical. None of it, the builds, the rollouts, the ever-growing number of moving pieces, stays manageable by hand for long. The next lesson covers the practices and tooling, DevOps and infrastructure as code, that keep it manageable.",[434,435,436],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sQzsp, html code.shiki .sQzsp{--shiki-light:#E53935;--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":44,"searchDepth":64,"depth":64,"links":438},[439,440,441,442,443,444,445],{"id":25,"depth":58,"text":26},{"id":33,"depth":58,"text":34},{"id":146,"depth":58,"text":147},{"id":161,"depth":58,"text":162},{"id":168,"depth":58,"text":169},{"id":372,"depth":58,"text":373},{"id":428,"depth":58,"text":429},"md",[448],{"slug":155,"concept":449,"style":450,"aspectRatio":451,"labels":452},"A 2-panel side-by-side comparison. The left panel, labeled Monolith, shows a single large block containing UI, business logic, and data access, connected to one shared database icon. The right panel, labeled Microservices, shows 4 small independent boxes (Catalog, Cart, Checkout, User), each connected to its own small database icon, with thin arrows between boxes showing API calls. The monolith panel emphasizes one solid mass; the microservices panel emphasizes separation and multiple small parts. A footer strip carries the takeaway that splitting the code is the point, containers just make each piece easy to ship.","comparison","16:9",[453,454,455,456,457,458],"Monolith: one codebase, one deployment, one shared database.","A fix to checkout means redeploying the entire application.","Microservices: independent services, independent deployments.","Catalog, Cart, Checkout, and User each own their own database.","A fix to checkout redeploys only the checkout service.","Splitting the code is the point. Containers just make each piece easy to ship.",[12,13,14,15,16],{},true,"/courses/cloud-computing-fundamentals/en/domains/02-cloud-services-and-architecture/03-modern-cloud-architectures/02-containers-and-microservices",{"passingScore":464,"questions":465},70,[466,475,483,489,497,507,515],{"question":467,"type":468,"options":469,"correctAnswer":470,"explanation":474},"According to Docker's own documentation, what is a container, most fundamentally?","single",[470,471,472,473],"An isolated process bundled with everything it needs to run, sharing the host's kernel","A lightweight virtual machine with its own kernel","A cloud region reserved for one customer","A serverless function with a longer timeout","A container packages an application with its code, libraries, and dependencies into one self-contained, isolated process. Unlike a virtual machine, it shares the host operating system's kernel instead of running a full guest OS of its own.",{"question":476,"type":468,"options":477,"correctAnswer":481,"explanation":482},"Why does a container typically start in seconds while a comparable virtual machine takes minutes?",[478,479,480,481],"Containers use faster physical hard drives","Containers do not run any code, only configuration","Containers are always smaller in file size than any virtual machine image","A container shares the host operating system's kernel instead of booting its own, while a virtual machine boots a complete guest OS","Booting a full guest operating system, the way a virtual machine does, takes minutes. A container skips that step entirely by reusing the host's already-running kernel, so starting one is closer to starting a regular process than booting a computer.",{"question":484,"type":468,"options":485,"correctAnswer":487,"explanation":488},"A microservices architecture is defined mainly by how many servers an application runs on, not by how its code is organized into services.",[486,487],"True","False","Microservices are defined by organization, not server count: a single application built as a suite of small, independently deployable services, each built around a business capability and communicating over lightweight APIs. The same architecture could run on many servers or, at small scale, surprisingly few.",{"question":490,"type":468,"options":491,"correctAnswer":493,"explanation":496},"An online store built as microservices sees checkout traffic triple during a flash sale, while catalog browsing and account traffic stay flat. What can the team do that a monolith could not do as cleanly?",[492,493,494,495],"Nothing, containers do not change how scaling works","Scale only the checkout service, leaving catalog and user services untouched","Switch the whole application to serverless functions automatically","Redeploy the entire application to add more capacity everywhere","Because each microservice deploys and scales independently, the team can add capacity to checkout alone. A monolith bundles catalog, cart, checkout, and accounts into one deployable unit, so scaling it means scaling all of it, whether the extra capacity is needed there or not.",{"question":498,"type":499,"options":500,"correctAnswers":505,"explanation":506},"Which of the following are real costs a team takes on when it splits a monolith into microservices? (Select all that apply.)","multiple",[501,502,503,504],"Calls between services now cross a network and can fail in ways an in-process function call cannot","Each service can choose its own database, which trades strict consistency for eventual consistency across services","The application automatically becomes cheaper to run","Debugging a request that touches 5 services requires tracing across all of them, not just reading one stack trace",[501,502,504],"Microservices trade a monolith's simplicity for independence, and that trade has real costs: network calls can fail where a function call cannot, decentralized data means accepting eventual consistency instead of one shared transaction, and a single request's path across several services is harder to trace than one stack trace. None of that makes the application automatically cheaper; it can just as easily cost more to run and operate.",{"question":508,"type":468,"options":509,"correctAnswer":512,"explanation":514},"A team runs 3 replicas of a checkout service container, and one crashes under load. Which capability of a container orchestrator like Kubernetes addresses this automatically?",[510,511,512,513],"Encryption at rest","Automatic code review","Self-healing: it detects the failed replica and starts a replacement to match the declared desired state","Currency conversion for international customers","An orchestrator like Kubernetes continuously compares the actual state of the system to the desired state you declared, 3 healthy replicas, and starts a replacement the moment one falls short. That self-healing is exactly what running containers by hand with no orchestrator would leave to a human to notice and fix.",{"question":516,"type":468,"options":517,"correctAnswer":518,"explanation":522},"A Kubernetes Deployment file declares \"replicas: 3\" and Kubernetes continuously works to keep exactly 3 healthy copies running. What broader practice, covered in the next lesson, generalizes this same idea to a team's entire infrastructure?",[518,519,520,521],"Infrastructure as code: describing the desired state of infrastructure in a file instead of configuring it by hand","Vertical scaling","The shared responsibility model","Choosing a service model","Declaring \"replicas: 3\" and letting Kubernetes reconcile reality to match is the same underlying idea infrastructure as code applies to servers, networks, and every other piece of infrastructure: describe the state you want, let a tool make it happen and keep it that way.",{"title":7,"description":8},"courses/cloud-computing-fundamentals/en/domains/02-cloud-services-and-architecture/03-modern-cloud-architectures/02-containers-and-microservices","K33r70KDceWTgfhJn0KUHnXkUJutK27cms9eEqIJoqU",{"locked":5,"reason":3,"meta":527,"item":536},{"title":528,"description":529,"isFree":5,"estimatedMinutes":9,"difficulty":10,"learningObjectives":530},"DevOps and Infrastructure as Code","How development and operations merged into one continuous practice, what each stage of a CI/CD pipeline catches, and how describing infrastructure as code, instead of clicking through a console, keeps environments consistent and reproducible.",[531,532,533,534,535],"Explain what DevOps changes about how development and operations teams work together","Describe the stages of a CI/CD pipeline and what each stage catches before a change reaches production","Explain how infrastructure as code replaces manual console changes with versioned, declarative configuration","Identify configuration drift and why it happens when infrastructure is changed outside its code definition","Compare a declarative infrastructure-as-code tool's plan-then-apply workflow to making the same change by hand",{"id":537,"title":528,"body":538,"description":529,"difficulty":10,"estimatedMinutes":9,"extension":446,"infographics":837,"isFree":5,"learningObjectives":848,"meta":849,"navigation":461,"path":850,"quiz":851,"seo":904,"stem":905,"__hash__":906},"courses/courses/cloud-computing-fundamentals/en/domains/02-cloud-services-and-architecture/03-modern-cloud-architectures/03-devops-and-infrastructure-as-code.md",{"type":20,"value":539,"toc":828},[540,544,547,551,554,558,630,634,637,735,739,742,764,767,771,774,776,820,822,825],[23,541,543],{"id":542},"the-last-lesson-left-you-with-more-moving-pieces-than-one-deployment-can-handle","The last lesson left you with more moving pieces than one deployment can handle",[28,545,546],{},"The last lesson left you with a team running a growing number of independently deployable services, each shipping on its own schedule. Shipping one application by hand, tested manually and copied onto a server by whoever was on duty, was already slow and error-prone. Shipping 10 services that way is not just slower, it stops being something a person can reliably do at all. DevOps, and the practices built around it, exist to answer exactly that problem.",[23,548,550],{"id":549},"what-devops-actually-changes","What DevOps actually changes",[28,552,553],{},"Before DevOps, development and operations were usually 2 separate teams: developers wrote code and handed it off, operations deployed and ran it, and each side blamed the other when a release broke something. DevOps, in AWS's own framing, is a combination of cultural philosophies, practices, and tools that increases an organization's ability to deliver applications and services at high velocity. In practice, that means the same team writes, tests, deploys, and operates its own services, which gives that team a direct incentive to make deployment itself fast and safe, instead of throwing a build over a wall and hoping.",[23,555,557],{"id":556},"continuous-integration-continuous-delivery-what-actually-happens-at-each-stage","Continuous integration, continuous delivery: what actually happens at each stage",[375,559,560,573],{},[378,561,562],{},[381,563,564,567,570],{},[384,565,566],{},"Stage",[384,568,569],{},"What happens",[384,571,572],{},"What it catches",[391,574,575,586,597,608,619],{},[381,576,577,580,583],{},[396,578,579],{},"Source",[396,581,582],{},"A developer commits code to a shared repository",[396,584,585],{},"Nothing yet, this just starts the pipeline",[381,587,588,591,594],{},[396,589,590],{},"Build",[396,592,593],{},"The code compiles and packages into a deployable artifact",[396,595,596],{},"Syntax errors, missing dependencies",[381,598,599,602,605],{},[396,600,601],{},"Test",[396,603,604],{},"An automated test suite runs against the build",[396,606,607],{},"Regressions in existing behavior",[381,609,610,613,616],{},[396,611,612],{},"Staging",[396,614,615],{},"The build deploys to a pre-production environment",[396,617,618],{},"Integration and configuration problems",[381,620,621,624,627],{},[396,622,623],{},"Production",[396,625,626],{},"The build deploys to live users",[396,628,629],{},"Nothing further, this is the release",[152,631],{"alt":632,"slug":633},"A timeline of a CI/CD pipeline moving from source through build, test, staging, and production, looping back to source for the next commit.","devops-and-infrastructure-as-code-cicd-pipeline",[28,635,636],{},"Follow one commit through it. A developer pushes a fix to the checkout service from the last lesson. Continuous integration builds a new container image and runs the test suite against it; if a test fails, the pipeline stops right there, and the change never reaches staging, let alone production. If every test passes, continuous delivery takes over, deploying the same build to staging automatically, and, once checks there pass, promoting that exact build to production. No stage is skipped, and no human copies a file by hand.",[39,638,640],{"className":178,"code":639,"language":180,"meta":44,"style":44},"name: ci\non: [push]\njobs:\n  build-and-test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - run: docker build -t checkout-service:${{ github.sha }} .\n      - run: docker run checkout-service:${{ github.sha }} npm test\n",[46,641,642,652,669,676,683,693,700,713,724],{"__ignoreMap":44},[49,643,644,647,649],{"class":51,"line":52},[49,645,646],{"class":187},"name",[49,648,192],{"class":191},[49,650,651],{"class":101}," ci\n",[49,653,654,658,660,663,666],{"class":51,"line":58},[49,655,657],{"class":656},"syTEX","on",[49,659,192],{"class":191},[49,661,662],{"class":191}," [",[49,664,665],{"class":101},"push",[49,667,668],{"class":191},"]\n",[49,670,671,674],{"class":51,"line":64},[49,672,673],{"class":187},"jobs",[49,675,213],{"class":191},[49,677,678,681],{"class":51,"line":70},[49,679,680],{"class":187},"  build-and-test",[49,682,213],{"class":191},[49,684,685,688,690],{"class":51,"line":76},[49,686,687],{"class":187},"    runs-on",[49,689,192],{"class":191},[49,691,692],{"class":101}," ubuntu-latest\n",[49,694,695,698],{"class":51,"line":82},[49,696,697],{"class":187},"    steps",[49,699,213],{"class":191},[49,701,702,705,708,710],{"class":51,"line":244},[49,703,704],{"class":191},"      -",[49,706,707],{"class":187}," uses",[49,709,192],{"class":191},[49,711,712],{"class":101}," actions/checkout@v4\n",[49,714,715,717,719,721],{"class":51,"line":252},[49,716,704],{"class":191},[49,718,119],{"class":187},[49,720,192],{"class":191},[49,722,723],{"class":101}," docker build -t checkout-service:${{ github.sha }} .\n",[49,725,726,728,730,732],{"class":51,"line":260},[49,727,704],{"class":191},[49,729,119],{"class":187},[49,731,192],{"class":191},[49,733,734],{"class":101}," docker run checkout-service:${{ github.sha }} npm test\n",[23,736,738],{"id":737},"infrastructure-as-code-the-same-idea-aimed-at-infrastructure","Infrastructure as code: the same idea, aimed at infrastructure",[28,740,741],{},"CI/CD automates shipping application code. Infrastructure as code applies the same discipline to the servers, networks, and services that code runs on: provisioning and managing infrastructure using code instead of manual processes and console clicks. A storage bucket created by clicking through a console leaves no record of who created it, why, or how to recreate it. The same bucket declared in a file does.",[39,743,747],{"className":744,"code":745,"language":746,"meta":44,"style":44},"language-hcl shiki shiki-themes material-theme-lighter github-light github-dark","resource \"aws_s3_bucket\" \"uploads\" {\n  bucket = \"my-app-uploads\"\n}\n","hcl",[46,748,749,754,759],{"__ignoreMap":44},[49,750,751],{"class":51,"line":52},[49,752,753],{},"resource \"aws_s3_bucket\" \"uploads\" {\n",[49,755,756],{"class":51,"line":58},[49,757,758],{},"  bucket = \"my-app-uploads\"\n",[49,760,761],{"class":51,"line":64},[49,762,763],{},"}\n",[28,765,766],{},"Tools like Terraform work in 3 steps: write the configuration, plan (preview exactly what will be created, changed, or destroyed to match it), and apply (execute those changes in the right dependency order). That configuration is declarative: it describes the end state you want, not the individual commands to get there, and the tool works out the rest.",[23,768,770],{"id":769},"the-misconception-a-quick-manual-fix-in-the-console-is-fine","The misconception: \"a quick manual fix in the console is fine\"",[28,772,773],{},"It is tempting to think a fast fix in the console, bumping an overloaded instance's memory at 2 a.m. during an incident, is harmless as long as it solves the immediate problem. It is not: the infrastructure-as-code file still describes the old, smaller instance, so the code and the real infrastructure have quietly drifted apart. The next time someone applies that code, it can revert the emergency fix without anyone intending it to, or the team simply stops trusting the code to reflect what is actually running. Configuration drift is the name for that gap, and the fix is discipline, not cleverness: update the code to match the emergency change immediately, or revert the manual change and make the same fix through the code instead.",[23,775,373],{"id":372},[375,777,778,786],{},[378,779,780],{},[381,781,782,784],{},[384,783,386],{},[384,785,389],{},[391,787,788,796,804,812],{},[381,789,790,793],{},[396,791,792],{},"\"Automated build, test, and deploy on every commit\"",[396,794,795],{},"CI/CD pipeline",[381,797,798,801],{},[396,799,800],{},"\"Infrastructure defined in version-controlled files\"",[396,802,803],{},"Infrastructure as code",[381,805,806,809],{},[396,807,808],{},"\"A manual change made outside the deployment pipeline\"",[396,810,811],{},"Configuration drift risk",[381,813,814,817],{},[396,815,816],{},"\"Preview changes before they are applied\"",[396,818,819],{},"Declarative infrastructure-as-code plan step",[23,821,429],{"id":428},[28,823,824],{},"DevOps, CI/CD, and infrastructure as code are what make everything the last 2 lessons covered sustainable at real scale: a serverless function or a container image is only as reliable as the pipeline that builds, tests, and ships it, and the infrastructure it runs on is only as consistent as the code that describes it. The next domain in this course turns to what keeps systems secure and available once they are running, the shared responsibility model, identity, encryption, and disaster recovery, practices that infrastructure as code makes far easier to enforce the same way across every environment a team has.",[434,826,827],{},"html pre.shiki code .sQzsp, html code.shiki .sQzsp{--shiki-light:#E53935;--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .syTEX, html code.shiki .syTEX{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":44,"searchDepth":64,"depth":64,"links":829},[830,831,832,833,834,835,836],{"id":542,"depth":58,"text":543},{"id":549,"depth":58,"text":550},{"id":556,"depth":58,"text":557},{"id":737,"depth":58,"text":738},{"id":769,"depth":58,"text":770},{"id":372,"depth":58,"text":373},{"id":428,"depth":58,"text":429},[838],{"slug":633,"concept":839,"style":840,"aspectRatio":451,"labels":841},"A left-to-right timeline of a CI/CD pipeline with 5 stages: Source, Build, Test, Staging, Production. An arrow loops from Production back to Source, labeled 'next commit', to show the pipeline repeats continuously. A footer strip carries the takeaway that each stage automatically gates the next, so a failure at any stage stops the pipeline before it reaches production.","timeline",[842,843,844,845,846,847],"Source: a developer commits code to a shared repository.","Build: the code compiles and packages into a deployable artifact.","Test: automated tests run against the build.","Staging: the build deploys to a pre-production environment.","Production: the build deploys to live users.","A failure at any stage stops the pipeline before it reaches production.",[531,532,533,534,535],{},"/courses/cloud-computing-fundamentals/en/domains/02-cloud-services-and-architecture/03-modern-cloud-architectures/03-devops-and-infrastructure-as-code",{"passingScore":464,"questions":852},[853,861,868,872,880,889,897],{"question":854,"type":468,"options":855,"correctAnswer":856,"explanation":860},"According to AWS's definition, DevOps is best described as...",[856,857,858,859],"A combination of cultural philosophies, practices, and tools that helps deliver applications faster and more reliably","A single tool that automates deployments","A job title for someone who only writes deployment scripts","A cloud service that replaces the need for a development team","DevOps is not one tool or one job title, it is development and operations teams sharing responsibility for the entire application lifecycle, supported by the practices and tools that make frequent, reliable releases possible.",{"question":862,"type":468,"options":863,"correctAnswer":865,"explanation":867},"A commit triggers an automated process that compiles the code and runs the test suite, stopping immediately if anything fails. What part of the pipeline is this?",[864,865,803,866],"Configuration drift","Continuous integration","Continuous delivery","Continuous integration is the practice of merging code changes frequently and running automated builds and tests against them, catching bugs at the build and test stages before the change goes anywhere near production. Continuous delivery picks up from there, automating the path to staging and production.",{"question":869,"type":468,"options":870,"correctAnswer":487,"explanation":871},"As long as an emergency fix made directly in the cloud console solves the immediate problem, it is fine to leave the infrastructure-as-code files unchanged.",[486,487],"A console change that never makes it into the code creates configuration drift: the code no longer describes reality. The next time someone applies that code, it can silently revert the emergency fix, or leave the team unable to trust the code as an accurate source of truth at all. The fix needs to be reflected in the code, or reverted and reapplied through it.",{"question":873,"type":468,"options":874,"correctAnswer":877,"explanation":879},"A team edits a Terraform configuration file to add a new storage bucket, then runs the tool's preview step before making any change to the real infrastructure. What does this step show them?",[875,876,877,878],"A log of who has previously modified the infrastructure","The exact monthly bill for the new resource","An execution plan describing exactly what will be created, changed, or destroyed to match the new configuration","A list of security vulnerabilities in the code","Terraform's plan step compares the configuration file to the current state of the infrastructure and shows exactly what it will add, change, or destroy before anything actually happens. That preview is what lets a team catch an unintended change before it reaches real infrastructure, not after.",{"question":881,"type":499,"options":882,"correctAnswers":887,"explanation":888},"Which of the following are things a CI/CD pipeline stage can catch before a change reaches production? (Select all that apply.)",[883,884,885,886],"A syntax error that fails the build stage","A regression caught by the automated test stage","A configuration problem only visible once the change deploys to staging","A team's decision about which cloud region to launch in",[883,884,885],"Each pipeline stage exists to catch a different class of problem: the build stage catches code that will not even compile or package, the test stage catches regressions in behavior, and staging catches problems that only appear once the change runs in a production-like environment. Choosing a region is a design decision made before any of this, not something a pipeline stage detects.",{"question":890,"type":468,"options":891,"correctAnswer":895,"explanation":896},"Why is a Terraform configuration file described as declarative rather than imperative?",[892,893,894,895],"It lists step-by-step commands to run in order","It cannot be stored in version control","It only works with a single cloud provider","It describes the desired end state of the infrastructure, and the tool works out the steps needed to reach it","A declarative file says what the infrastructure should look like, one storage bucket with this name, for example, and leaves the how to the tool, which figures out the order of operations and the dependency graph. An imperative script would instead spell out each command to run, in order, to get there.",{"question":898,"type":468,"options":899,"correctAnswer":900,"explanation":903},"Infrastructure as code makes it easier to apply which practice consistently across every environment a team runs, a topic the next domain in this course covers in full?",[900,521,901,902],"Security controls such as identity and encryption settings","Writing a Dockerfile","Naming lesson slugs","Because infrastructure as code describes every environment in version-controlled files, the same security settings, identity policies, encryption, network rules, apply the same way everywhere instead of depending on someone remembering to click the same options by hand each time. The next domain covers exactly these controls in depth.",{"title":528,"description":529},"courses/cloud-computing-fundamentals/en/domains/02-cloud-services-and-architecture/03-modern-cloud-architectures/03-devops-and-infrastructure-as-code","aAbphIY88s1lTvgS-_RltVaOn18fgQF0ZePwZRhHr1Y",{"locked":5,"reason":3,"meta":908,"item":917},{"title":909,"description":910,"isFree":461,"estimatedMinutes":320,"difficulty":911,"learningObjectives":912},"The Shared Responsibility Model","Where your cloud provider's security duties end and yours begin, and why that boundary moves depending on whether you're using IaaS, PaaS, or SaaS.","beginner",[913,914,915,916],"Explain the shared responsibility model and state which security tasks the provider always owns versus which the customer always owns","Identify how the responsibility split shifts across IaaS, PaaS, and SaaS for a given resource","Apply the model to a worked example comparing an EC2-based application to a serverless one","Correct the misconception that a provider's compliance certification covers a customer's own application",{"id":918,"title":909,"body":919,"description":910,"difficulty":911,"estimatedMinutes":320,"extension":446,"infographics":1137,"isFree":461,"learningObjectives":1138,"meta":1139,"navigation":461,"path":1140,"quiz":1141,"seo":1196,"stem":1197,"__hash__":1198},"courses/courses/cloud-computing-fundamentals/en/domains/03-security-and-reliability/01-cloud-security/01-shared-responsibility-model.md",{"type":20,"value":920,"toc":1127},[921,925,928,931,935,938,941,945,948,1037,1040,1044,1047,1050,1054,1057,1061,1064,1068,1119,1122,1124],[23,922,924],{"id":923},"whose-failure-is-the-empty-bucket","Whose failure is the empty bucket",[28,926,927],{},"A team spins up a storage bucket to hold files their app's users upload. To move fast during testing, they turn on public access, meaning to lock it back down before launch. They forget. Six months later, a security researcher finds the entire bucket sitting one search away, every uploaded file readable by anyone with the link. Who failed: the cloud provider, or the team?",[28,929,930],{},"The team did. Not because they mistyped a command, but because they treated a decision that was always theirs to make as if the provider had made it for them. That gap between what a provider secures and what a customer configures is exactly what the shared responsibility model exists to close.",[23,932,934],{"id":933},"security-of-the-cloud-security-in-the-cloud","Security of the cloud, security in the cloud",[28,936,937],{},"AWS names its half of the split \"security of the cloud\": the physical data centers, the racks inside them, the hypervisor that carves one physical server into many virtual machines, and the global network connecting AWS regions. You never see any of it, and you never patch any of it. Azure and Google Cloud describe the same division for their own platforms, in different words but the same shape.",[28,939,940],{},"Your half is \"security in the cloud\": everything you build, configure, and store using the services the provider hands you. That always includes your data and your access policies. Depending on which service you picked, it can also include your guest operating system and your application code.",[23,942,944],{"id":943},"the-boundary-moves-with-the-service-model","The boundary moves with the service model",[28,946,947],{},"That split is not fixed in one place. It slides along the stack depending on how much of the stack you asked the provider to manage.",[375,949,950,966],{},[378,951,952],{},[381,953,954,957,960,963],{},[384,955,956],{},"Responsibility",[384,958,959],{},"IaaS (a virtual machine)",[384,961,962],{},"PaaS (a managed database or app platform)",[384,964,965],{},"SaaS (a ready-made application)",[391,967,968,980,992,1003,1015,1026],{},[381,969,970,973,976,978],{},[396,971,972],{},"Data and access configuration",[396,974,975],{},"Customer",[396,977,975],{},[396,979,975],{},[381,981,982,985,987,989],{},[396,983,984],{},"Application code and settings",[396,986,975],{},[396,988,975],{},[396,990,991],{},"Provider",[381,993,994,997,999,1001],{},[396,995,996],{},"Guest operating system",[396,998,975],{},[396,1000,991],{},[396,1002,991],{},[381,1004,1005,1008,1010,1013],{},[396,1006,1007],{},"Network controls (firewalls, routing)",[396,1009,975],{},[396,1011,1012],{},"Shared",[396,1014,991],{},[381,1016,1017,1020,1022,1024],{},[396,1018,1019],{},"Hypervisor and physical host",[396,1021,991],{},[396,1023,991],{},[396,1025,991],{},[381,1027,1028,1031,1033,1035],{},[396,1029,1030],{},"Physical network and data center",[396,1032,991],{},[396,1034,991],{},[396,1036,991],{},[28,1038,1039],{},"Read the table top to bottom rather than column by column: the top two rows almost never move to the provider, and the bottom two rows almost never move to the customer. The middle rows are where the interesting decisions live, and where most exam questions and most real misconfigurations happen.",[23,1041,1043],{"id":1042},"worked-example-the-same-feature-two-service-models","Worked example: the same feature, two service models",[28,1045,1046],{},"Say a team runs a Node.js API on an Ubuntu virtual machine. AWS handles the physical server, the hypervisor, and the network between availability zones. The team handles patching Ubuntu when a kernel vulnerability ships, configuring the security group so only port 443 is reachable, and rotating the SSH key used to log in. That is IaaS: heavy on the customer's side of the table.",[28,1048,1049],{},"Now the same team rebuilds the upload feature as an S3 bucket plus a Lambda function that resizes images on arrival. AWS now manages the operating system and runtime patching for Lambda's execution environment entirely; there is no server for the team to patch at all. What is still theirs: the S3 bucket's access policy, the IAM role the function assumes and what that role is allowed to touch, and whether the stored files are encrypted. Moving from IaaS to a serverless PaaS-style service removed an entire row from the customer's side of the table. It did not remove the top row.",[23,1051,1053],{"id":1052},"what-never-crosses-the-line","What never crosses the line",[28,1055,1056],{},"Regardless of IaaS, PaaS, or SaaS, two things stay the customer's job in every case: the data itself, including its classification and encryption choices, and identity and access management, meaning who can sign in and what they can do once they're in. A provider can encrypt a disk by default, but only the customer decides which files are sensitive enough to restrict further, and only the customer decides who on the team gets access to them. The next two lessons in this topic cover exactly those two rows in depth: identity first, then encryption.",[23,1058,1060],{"id":1059},"misconception-a-certificate-you-didnt-earn","Misconception: a certificate you didn't earn",[28,1062,1063],{},"It's tempting to assume that because your cloud provider is SOC 2 or ISO 27001 certified, your own application inherits that certification. It does not. The provider's certificate covers the infrastructure it operates: the data centers, the hypervisor, the internals of its managed services. Whether your application's access controls, encryption settings, and data-handling practices meet a given framework is a separate audit, and only you can produce evidence for it. The last lesson in this topic returns to this exact gap and walks through how teams close it.",[23,1065,1067],{"id":1066},"exam-cues-reading-a-shared-responsibility-question","Exam cues: reading a shared-responsibility question",[375,1069,1070,1078],{},[378,1071,1072],{},[381,1073,1074,1076],{},[384,1075,386],{},[384,1077,389],{},[391,1079,1080,1088,1096,1104,1112],{},[381,1081,1082,1085],{},[396,1083,1084],{},"\"Physical security of the data center,\" \"the hypervisor\"",[396,1086,1087],{},"Always the provider",[381,1089,1090,1093],{},[396,1091,1092],{},"\"Patching the guest operating system\" on a virtual machine",[396,1094,1095],{},"Customer (IaaS)",[381,1097,1098,1101],{},[396,1099,1100],{},"\"Patching the operating system\" a managed database runs on",[396,1102,1103],{},"Provider (PaaS)",[381,1105,1106,1109],{},[396,1107,1108],{},"\"Configuring a bucket policy,\" \"IAM permissions,\" \"encryption settings\"",[396,1110,1111],{},"Customer, in every service model",[381,1113,1114,1117],{},[396,1115,1116],{},"\"Physical network between data centers\"",[396,1118,1087],{},[28,1120,1121],{},"The trap to watch for: a question that mentions a managed or serverless service and expects you to assume the provider now owns everything. It owns more than it did under IaaS, but data and identity never move.",[23,1123,429],{"id":428},[28,1125,1126],{},"As you move from IaaS toward SaaS, the provider's slice of the table grows and the customer's shrinks, but the top two rows, data and identity, never cross that line in either direction. Learning to read a scenario and place it correctly on this table is the single most tested skill in cloud security fundamentals. The next lesson opens the identity half of that job in full: how the cloud actually verifies who you are and decides what you're allowed to do once it knows.",{"title":44,"searchDepth":64,"depth":64,"links":1128},[1129,1130,1131,1132,1133,1134,1135,1136],{"id":923,"depth":58,"text":924},{"id":933,"depth":58,"text":934},{"id":943,"depth":58,"text":944},{"id":1042,"depth":58,"text":1043},{"id":1052,"depth":58,"text":1053},{"id":1059,"depth":58,"text":1060},{"id":1066,"depth":58,"text":1067},{"id":428,"depth":58,"text":429},[],[913,914,915,916],{},"/courses/cloud-computing-fundamentals/en/domains/03-security-and-reliability/01-cloud-security/01-shared-responsibility-model",{"passingScore":464,"questions":1142},[1143,1151,1159,1163,1171,1180,1188],{"question":1144,"type":468,"options":1145,"correctAnswer":1147,"explanation":1150},"A team spins up a storage bucket for user uploads, turns on public access to test it quickly, and forgets to turn it back off. Six months later, a researcher finds the whole bucket exposed in a search engine. Whose failure is this?",[1146,1147,1148,1149],"The cloud provider's, since it hosts the data","The team's, since bucket access configuration is the customer's job under every service model","Nobody's, exposures like this cannot be prevented","The cloud provider's, since bucket defaults are its decision to make","Storage services default to private access precisely so a team has to make a deliberate choice to expose data. The provider secures the hardware and the service itself, but who can read a bucket's contents is a configuration decision that always belongs to the customer.",{"question":1152,"type":468,"options":1153,"correctAnswer":1156,"explanation":1158},"AWS, Azure, and Google Cloud each use a two-part phrase to describe their own half of the shared responsibility model. What is AWS's phrase for it?",[1154,1155,1156,1157],"Total cloud security","Infrastructure ownership","Security of the cloud","Provider-managed compliance","AWS calls its half \"security of the cloud\": the physical data centers, the hypervisor, and the global network. The customer's half is \"security in the cloud\": everything built on top of that infrastructure, including data, access policies, and, depending on the service, the guest operating system.",{"question":1160,"type":468,"options":1161,"correctAnswer":487,"explanation":1162},"Under an IaaS service like a virtual machine, the provider patches the guest operating system for you.",[486,487],"IaaS hands you the heaviest slice of the responsibility split. The provider patches the hypervisor and physical host, but the guest operating system, including its security patches, is the customer's job. That job moves to the provider only once you move up to a managed PaaS service.",{"question":1164,"type":468,"options":1165,"correctAnswer":1168,"explanation":1170},"A team migrates an image-upload feature from a Node.js server running on an EC2 instance to an S3 bucket plus a Lambda function. Which responsibility does this move from the team to AWS?",[1166,1167,1168,1169],"Encrypting the uploaded files","Setting the S3 bucket's access policy","Patching the operating system and runtime the function executes in","Deciding what the Lambda function's IAM role is allowed to touch","Lambda removes the guest operating system from the customer's plate entirely: there is no server to patch. Bucket access policy, IAM role permissions, and encryption choices stay with the customer no matter which compute service sits underneath, because those are data and identity decisions, not infrastructure ones.",{"question":1172,"type":499,"options":1173,"correctAnswers":1178,"explanation":1179},"Which of the following stay the customer's responsibility no matter whether the service is IaaS, PaaS, or SaaS? (Select all that apply.)",[1174,1175,1176,1177],"Data classification and encryption choices","Configuring identity and access management","Patching the hypervisor","Physical security of the data center",[1174,1175],"Data and identity never cross the line to the provider, regardless of how much of the stack it manages. The hypervisor and the physical data center sit at the opposite end: they are always the provider's job, since the customer never has physical or hypervisor-level access to change them.",{"question":1181,"type":468,"options":1182,"correctAnswer":1184,"explanation":1187},"A healthcare startup's cloud provider is ISO 27001 certified. What does that certification mean for the startup's own application?",[1183,1184,1185,1186],"The startup's application automatically inherits ISO 27001 certification","The certification covers the provider's infrastructure only; the startup still needs its own compliance evidence for its access controls and data handling","The startup no longer needs to configure any access controls","ISO 27001 only applies to on-premises data centers, not cloud providers","A provider's certification proves its own data centers, hypervisor, and managed services meet a standard. It says nothing about how the startup configured its buckets, wrote its access policies, or handled customer data on top of that infrastructure, which is exactly the gap a compliance audit checks.",{"question":1189,"type":468,"options":1190,"correctAnswer":1192,"explanation":1195},"An exam scenario asks who is responsible for configuring the security group rules on a virtual machine instance. Who is it?",[1191,1192,1193,1194],"The provider, since security groups are a network-layer control","The customer, since network access rules for an IaaS instance are the customer's configuration","It depends on the region the instance runs in","Neither; security groups are optional and rarely tested","Security groups act like a firewall around your instance, and under IaaS, configuring that firewall is squarely the customer's job. The provider secures the physical network between data centers; you decide which ports on your own instance are reachable and from where.",{"title":909,"description":910},"courses/cloud-computing-fundamentals/en/domains/03-security-and-reliability/01-cloud-security/01-shared-responsibility-model","dqw8QYJKVWltBzXhNhUxBUuhEuBDzLKtUbobZBYy53M"]