Based on the DEA-C01 exam guideReport an error
Yesterday we reviewed the pipeline through which data flows. Today we bundle the areas that run that pipeline reliably and protect it safely. The two domains connect on a single pipeline like this.
Expanded into the exam guide's tasks, it looks like this.
| Exam guide task | What it asks | Where to go back |
|---|---|---|
| 3.1 Automating processing | MWAA and Step Functions orchestration, diagnosing workflow failures, Lambda and EventBridge automation, Athena queries | Week 5 Day 3, Week 7 Day 2 |
| 3.2 Data analysis | QuickSight visualization, Redshift and Athena SQL and views, provisioned versus serverless trade-offs | Week 7 |
| 3.3 Maintenance and monitoring | Extracting logs for audits, notifications, performance diagnosis, CloudTrail, CloudWatch Logs, log analysis | Week 8 Days 1 and 3 |
| 3.4 Data quality | Quality checks during processing, rule definition, consistency investigation, sampling, data skew | Week 4 Day 4, Week 8 Day 2 |
| 4.1 Authentication | Security groups, IAM roles, Secrets Manager credential rotation, PrivateLink | Week 9 Day 1 |
| 4.2 Authorization | Custom IAM policies, credential storage, Redshift permissions, Lake Formation | Week 6 Day 2, Week 9 Day 1 |
| 4.3 Encryption and masking | KMS, cross-account encryption, in-transit encryption, masking and anonymization | Week 9 Days 2 and 3 |
| 4.4 Audit logs | CloudTrail, CloudTrail Lake, CloudWatch Logs, log analysis | Week 8 Day 3, Week 9 Day 4 |
| 4.5 Privacy and governance | Redshift data sharing, identifying PII, blocking replication to disallowed Regions, AWS Config | Week 9 Days 3 and 4 |
Orchestration is tying multiple jobs together according to order and dependencies.
| Requirement | Service | Characteristics |
|---|---|---|
| Data workflow scheduling and dependencies (Airflow) | Amazon MWAA | Managed Apache Airflow, DAG-based |
| Serverless state machine, visual branching and retries | AWS Step Functions | Coordinates steps across Lambda, Glue, EMR, and others |
| Flows dedicated to Glue jobs and crawlers | Glue Workflows | Built-in Glue triggers and workflows |
| Simple cron schedule trigger | EventBridge Scheduler | Time-based events |
💡 Related theory: If you "want to keep using an existing Airflow DAG as is," MWAA is the answer; to "coordinate heterogeneous AWS services (Lambda, ECS, Glue) with branching, retries, and parallelism," Step Functions is the answer. If you are only chaining Glue jobs, Glue Workflows is enough.
This is another point where the choice splits from an operations standpoint (Week 5 Day 5).
.sync) works only in Standard. Express runs for at most 5 minutes, so it is not the default for ETL orchestration.Retry and the Glue job's own retry, they multiply. Put retries in one layer only, and branch to notification (SNS) or compensation handling with Catch.The three kinds of pipeline observability:
- Metric → "notify when a threshold is exceeded" with a CloudWatch Alarm
- Log → "trace the cause" with CloudWatch Logs Insights
- Audit → "who performed this action" with CloudTrail💡 Related theory: Separate them this way: "trace why it failed" is CloudWatch Logs, "threshold-based alert" is a CloudWatch Alarm, and "trace who called this API" is CloudTrail. Not mixing these three up is a scoring point in Domain 3.
Even when everyone says "leave a record," each tool records something different.
| Tool | What it records | Default behavior and limits |
|---|---|---|
| CloudWatch Logs | Logs the application wrote (Glue, Lambda, and EMR execution logs) | A metric filter turns a log pattern into a metric so you can set an alarm |
| CloudWatch Logs Insights | Interactive queries over log groups | A query tool, not a storage tool |
| CloudTrail event history | The last 90 days of management events | Viewed in the console with no extra setup. There are no data events |
| CloudTrail trail | Continuously delivers events to S3 (and CloudWatch Logs if needed) | By default, only management events are recorded. Data events such as S3 object-level operations must be turned on yourself |
| CloudTrail Lake | Collects events in an event data store and queries them with SQL | Usable without a trail, and keeps events from multiple accounts and Regions for years |
| AWS Config | The history of when and how a resource configuration changed | It shows what state something was in, not who called what |
# Glue Data Quality rule (DQDL) example
ruleset = """
Rules = [
IsComplete "order_id",
ColumnValues "amount" >= 0,
Uniqueness "order_id" > 0.99
]
"""
# If the rules pass, load; if they fail, route to the quarantine bucketThe quality task contains two more concepts besides defining rules.
| Concept | Content | How it is used on the exam |
|---|---|---|
| Sampling | Inspect only part of the data instead of all of it. There are random sampling, stratified sampling that preserves group proportions, and systematic sampling that picks at regular intervals | The basis for reducing the cost of profiling large volumes. DataBrew builds a Recipe from a sample and applies it to everything with a Job |
| Data skew | A phenomenon where rows pile up on particular keys so that only some partitions or tasks take long or run out of memory | Mitigated with salting (adding a random suffix to the key to spread it), repartitioning, and processing the skewed keys separately |
| Two entry points | Evaluation against a Data Catalog table (checking stored data) and evaluation inside an ETL job (blocking before load) | If it says "block before loading," it is evaluation inside the job |
The analysis task asks not about service names but "when do you keep always-on capacity and when do you pay for what you use."
| Axis | Provisioned (Redshift provisioned cluster, EMR on EC2, MWAA) | Serverless (Athena, Glue, Redshift Serverless, EMR Serverless) |
|---|---|---|
| Billing | Time kept running | What you use (scan volume, DPU and RPU hours, and so on) |
| Favorable workload | Steady all-day load, predictable performance | Intermittent, unpredictable load |
| Tuning knobs | Node type and count, Spot, detailed settings | Almost none. Fix the data side (format, partitions) |
| Operational burden | Sizing, patching, scaling | Low |
*.If "a Glue job must access S3 and KMS," grant those permissions to the job's execution role (IAM Role). A choice that hardcodes access keys in the job script is wrong.
| Distinction | AWS Secrets Manager | Systems Manager Parameter Store |
|---|---|---|
| Main use | Secrets such as DB credentials and API keys | Configuration values and secrets (SecureString) |
| Automatic rotation | Supported (set a rotation schedule) | No built-in feature |
| Cue | "Rotate credentials periodically" | "Store configuration values in a hierarchy," minimal cost |
GRANT to the database's users, groups, and roles, not through IAM. To let data be read across accounts or clusters without copying, use Redshift data sharing.| Keyword | Answer |
|---|---|
| Key rotation, per-key access control, auditing required | SSE-KMS (customer managed key) |
| Simplest managed encryption | SSE-S3 |
| Client encrypts itself before uploading | Client-side encryption |
What you can do with a KMS key differs by who manages it.
| Key type | Edit key policy | Automatic rotation | Cross-account use |
|---|---|---|---|
| AWS owned key | Not possible (not visible) | The service decides | Not applicable |
AWS managed key (aws/s3 and so on) | Not possible | Automatic every year. It cannot be turned off and the period cannot be changed | Not possible |
| Customer managed key | Possible | Optional. When on, the default period is 365 days and you can specify the period yourself | Possible if the key policy allows the other account |
aws/s3), the other account cannot decrypt it. You must encrypt with a customer managed key and add the other account to the key policy.aws:SecureTransport is false in the bucket policy, and Redshift accepts only TLS connections through require_ssl in the parameter group.For the scenario "sensitive information (PII) is scattered all over our S3 buckets and we want to find and classify it automatically," the answer is Amazon Macie. Macie is "detection/classification"; access control is Lake Formation/IAM, and protection is handled by KMS and masking, a division of roles.
When several choices say "handles sensitive information," separate them by where and when they act.
| Tool | Where it acts | What it does | Original data |
|---|---|---|---|
| Amazon Macie | S3 buckets | Analyzes objects and reports the location of sensitive data as findings. Also evaluates the public and shared status of buckets | Does not change it |
| Glue's sensitive data detection transform | During ETL job execution | Finds PII and writes the result masked (fully or partially) or replaced with a hash | A processed copy is created |
| Lake Formation data filters | At query time (Athena, Redshift Spectrum, EMR, and so on) | Hides columns, rows, and cells from certain principals | Does not change it |
| Redshift dynamic data masking | At Redshift query time | Attaches a masking policy to users and roles so the same column looks different to different people | Does not change it |
aws:RequestedRegion).A confusing type in security questions is "I granted the permission but still get AccessDenied." A single query that reads a Lake Formation managed table with Athena passes through three layers in turn.
① IAM permission to run the query and read the catalog + lakeformation:GetDataAccess
↓
② Lake Formation has SELECT on the table, columns, and rows been granted to that principal?
↓ (if it passes, it issues temporary credentials for the registered S3 location)
③ KMS if the object is SSE-KMS, can it be decrypted with that key (key policy)?lakeformation:GetDataAccess must be in IAM. The bucket where query results are written is separate, so S3 permissions on that side are still required.| Symptom | Cause | Action |
|---|---|---|
A Glue job gets AccessDenied while reading S3 | It has bucket permissions but no permission to use the KMS key | Give the job execution role kms:Decrypt (kms:GenerateDataKey for writing), and allow that role in the key policy |
| "Insufficient Lake Formation permissions" in Athena | IAM is sufficient but SELECT was not granted in LF | Grant table and column permissions in LF |
| Another account cannot open objects in a shared bucket | The objects are encrypted with an AWS managed key | Encrypt with a customer managed key and allow the other account in the key policy |
| CloudTrail has no record of who deleted an S3 object | Data events were not turned on | Record data events for that bucket in the trail |
| You cannot find the API call record from four months ago | Event history covers only 90 days | Store in S3 with a trail, or use CloudTrail Lake |
| The job succeeded but the dashboard numbers are wrong | Value validity was not checked | A Glue Data Quality gate before loading |
| No alarm fired and the failure was learned of afterward | The failure was left only in logs, not in a metric | Turn the log pattern into a metric with a metric filter, or send job state change events through EventBridge → SNS |
| Only a few Spark tasks never finish | Data skew | Salting, repartitioning |
| KMS throttling and request cost are high on an SSE-KMS bucket | KMS is called for every object | Enable the S3 Bucket Key |
| A sensitive column is visible to all analysts | Only bucket-level permissions exist | LF column permissions and data filters; for Redshift, dynamic data masking |
| Scenario | Decisive cue | Answer |
|---|---|---|
| Pull the list of Glue APIs called by a particular role last month | Who, when, which API | CloudTrail |
| Gather audit events from several accounts in one place and query them with SQL | Centralized, SQL | CloudTrail Lake |
| See when and how a security group rule changed | Configuration change history | AWS Config |
| Find the stack trace of a failed Glue job | Execution log, cause | CloudWatch Logs (Logs Insights) |
| Notify the owner immediately when a job fails | State change, notification | EventBridge rule → SNS |
| Change a DB password automatically every 30 days | Credential rotation | Secrets Manager |
| Each team may see different rows (by region) | Row level | Lake Formation data filter |
| Grant permissions on hundreds of tables at once by classification | Tag-based, scalability | LF-Tag based access control |
| Call center staff see only the last four digits of the card number (Redshift) | Role-based hiding at query time | Dynamic data masking |
| Convert the email column to a hash before loading into the lake | Processing during ETL | Glue sensitive data detection transform |
| Audit key usage and let only a specific role decrypt | Key policy, auditing | SSE-KMS customer managed key |
| Another account queries the production cluster's data without copying (Redshift) | Live sharing, no copy | Redshift data sharing |
Tomorrow we match the real exam pace with comprehensive scenarios that mix all four domains.
Click a choice to reveal the answer and explanation.
Question 1
A team wants to run its existing Apache Airflow DAGs as a managed service on AWS with almost no modification. Which service is the most suitable?
Question 2
A security audit requires the ability to trace "when a specific IAM user called which Glue API." Which service is the most suitable?
Question 3
You must encrypt data stored in S3 and also need key rotation, per-key access control, and auditing of key usage. Which approach is the most suitable?
Question 4
There is compliance risk because it is unclear where and how much customer PII exists across multiple S3 buckets. You want to automatically discover and classify the sensitive data. Which service is the most suitable?
Question 5
You want a Glue ETL job to automatically validate before loading that "order_id is not empty, amount is greater than or equal to 0, and order_id is nearly unique," and to quarantine data that violates the rules. Which feature is the most suitable?