Based on the DEA-C01 exam guideReport an error
Data governance deals with "how do we find, trust, share, and track data?" The first step is the catalog. A catalog manages the metadata of data assets (schema, location, owner, tags) in one place.
[S3 data] --crawler--> [Glue Data Catalog: databases/tables/partitions]
↑ share the same definitions
[Athena] [Redshift Spectrum] [EMR] [Glue ETL]| Category | Technical catalog | Business catalog |
|---|---|---|
| Representative service | Glue Data Catalog | Amazon DataZone (also offered as the catalog capability of SageMaker) |
| What it holds | Schema, location, partitions, format | Business terms, owner, description, quality and lineage, subscription approval flow |
| Main users | Query engines, engineers | Analysts and business staff who want to find and use data |
| Question it answers | "What are the columns and path of this table?" | "Who owns the sales data and how do I request it?" |
| Item | Glue crawler | Glue Schema Registry |
|---|---|---|
| Target | Stored data (S3, JDBC, etc.) | Data in motion (Kafka/MSK, Kinesis Data Streams) |
| Timing | Infers after data has accumulated | Validates before the producer sends |
| Result | Catalog tables and partitions | Schema versions and compatibility verdicts |
| Wrong schema | Only shows up after registration | Incompatible new versions are rejected at registration |
| Compatibility mode | Changes allowed | Meaning |
|---|---|---|
BACKWARD (recommended) | Delete fields, add optional fields | A consumer with the new schema can read data written with the previous version |
BACKWARD_ALL | Same as above | Can read data from all previous versions, not just the previous one |
FORWARD | Add fields, delete optional fields | A consumer with the old schema can read data written with the new version |
FORWARD_ALL | Same as above | Checked against all previous versions |
FULL / FULL_ALL | Only adding/deleting optional fields | Compatible in both directions |
NONE | Any change | No compatibility check (for development) |
DISABLED | None | Blocks registering new versions altogether |
BACKWARD, adding a required field is rejected. That's because a new consumer can't read old messages that lack that field. Adding it as an optional field passes.BACKWARD; "producers first" fits FORWARD.Lineage is a record of where data came from, what transformations it went through, and where it went.
| Use | Question | Direction |
|---|---|---|
| Impact analysis | "If I change this column's definition, which tables and reports break?" | Downward (downstream) |
| Root cause analysis | "Where did the wrong value in this report come from?" | Upward (upstream) |
| Compliance | "Where is PII stored and where has it flowed?" | Both directions |
💡 Related theory: Without lineage, a schema change becomes "change it and wait to see what breaks." The Week 8 incident (a downstream job failed because an upstream column name changed) could have been prevented by checking the blast radius with lineage before the change.
| Category | AWS Data Exchange | AWS Clean Rooms | Redshift data sharing | Lake Formation cross-account sharing |
|---|---|---|---|---|
| Purpose | Subscribe to / provide third-party data | Joint analysis without exposing raw data | Live sharing between warehouses | Sharing data lake tables |
| Does the other party see raw rows? | Yes | No (only agreed-upon results) | Yes (the granted objects) | Yes (within the filter scope) |
| Data movement | Files are copied via export; S3 and Redshift types are accessed in place | None. Each reads from its own location | None | None |
| Control mechanism | Subscription agreement, data grants | Analysis rules, differential privacy, cryptographic computing | Objects added to the datashare and GRANTs | Column/row filters, LF-Tags |
| Clue for choosing | "Regularly receive a third-party dataset" | "Each other's raw customer data must not be exposed" | "Latest data from another cluster without copying" | "Share tables to another account with fine granularity" |
| Control | What it does |
|---|---|
| Analysis rule | Restricts the allowed query shapes and output |
| Analysis template | Agrees on the query to be run in advance |
| Differential privacy | Mathematically defends against attempts to identify individuals from results |
| Cryptographic Computing (C3R) | Keeps data encrypted even while queries are processed |
| Analysis logs | Records queries that were run to support auditing |
Party A data ┐
├──> [Clean Rooms collaboration: only agreed aggregate queries] ──> only results returned
Party B data ┘ (neither can see the other's raw data)-- Producer
CREATE DATASHARE sales_share;
ALTER DATASHARE sales_share ADD SCHEMA sales;
ALTER DATASHARE sales_share ADD TABLE sales.orders;
GRANT USAGE ON DATASHARE sales_share TO ACCOUNT '444455556666';
-- Consumer (another account): attach the share as a database, then query
CREATE DATABASE sales_from_prod FROM DATASHARE sales_share
OF ACCOUNT '111122223333' NAMESPACE 'a1b2c3d4-5678-90ab-cdef-111122223333';
SELECT COUNT(*) FROM sales_from_prod.sales.orders;💡 Related theory: Data Exchange is the model that "hands over data (or access rights)"; Clean Rooms is the model that "doesn't hand over data and gets only the aggregated result." If a question says "neither party may see the other's raw data," bucket sharing, datashare, and Data Exchange are all eliminated, because the other party ends up reading the raw rows.
| Log | What it records | Default state | Delivery | Notes |
|---|---|---|---|---|
| CloudTrail management events | Configuration-change APIs for policies, keys, tables, etc. | Recorded | About every 15 minutes | First copy is free |
| CloudTrail data events | Object-level S3 GET/PUT, etc. | Off | About every 5 minutes | Billed per event count. Scope can be narrowed by prefix |
| S3 server access logs | Requests made to a bucket | Off | Within a few hours | Also records authentication failures and lifecycle transitions/expirations. No integrity validation feature |
| Redshift audit logs | Connections, user changes, executed queries | Off | S3 or CloudWatch Logs | See below |
| Lake Formation access | Credential vending requests, etc. | Recorded in CloudTrail | - | Cross-account access is also tracked via CloudTrail |
{
"eventName": "GetObject",
"userIdentity": { "arn": "arn:aws:sts::111122223333:assumed-role/RegionAnalyst/alice" },
"requestParameters": { "bucketName": "lake-curated", "key": "sales/dt=2026-06-25/part-0.parquet" },
"eventTime": "2026-06-25T09:14:02Z"
}enable_user_activity_logging. This is the cause of "I turned on audit logging but queries aren't recorded."CloudTrail management events are recorded by default, but S3 object-level access (data events) is off by default because of volume and cost. If you turn it on after an incident, there is no record from the time of the incident. Sensitive buckets must be enabled in advance.
[Catalog] find → [Lineage] trust → [Sharing] collaborate → [Audit] track
Glue DataZone Clean Rooms CloudTrail
Catalog Lineage Data Exchange audit logs
datashare| Missing axis | Resulting problem |
|---|---|
| Catalog | Multiple schemas for the same data; nobody knows what exists |
| Lineage | Unknown blast radius of changes; can't find copies on a deletion request |
| Sharing control | Copies spread through file copies and email forwarding |
| Auditing | Can't prove who viewed what, resulting in a compliance violation |
| Symptom | Cause | Action |
|---|---|---|
| Athena and EMR results differ | Each engine defines its own schema | Share the Glue Data Catalog |
| Consumer fails to deserialize after a producer deployment | Schema change without a compatibility check | Schema Registry + compatibility mode |
| Reports broke after changing a column | Change made without impact analysis | Check downstream with lineage |
| No object access records in CloudTrail | Data events not enabled | Data events on sensitive buckets |
| No query text in Redshift audit logs | enable_user_activity_logging is off | Enable it in the parameter group |
| Extract file given to a partner escaped control | Copy-based sharing | Clean Rooms or in-place access sharing |
| Clue in the question | Answer |
|---|---|
| "Schema mismatch across engines, single source of truth" | Shared Glue Data Catalog |
| "Version and compatibility management for streaming schemas" | Glue Schema Registry |
| "Which reports a column change affects" | Data lineage |
| "Joint analysis without exposing each other's raw data" | AWS Clean Rooms |
| "Subscribe to a third-party dataset and receive it regularly" | AWS Data Exchange |
| "Latest data to another Redshift cluster without copying" | Redshift datashare |
| "Who read which object in a sensitive bucket" | CloudTrail data events |
| "Who ran which query in Redshift" | Audit logging + user activity log |
Tomorrow we'll review this week's four axes (access control, encryption, sensitive data protection, governance) by tying them together in one end-to-end scenario.
Click a choice to reveal the answer and explanation.
Question 1
Two companies want to jointly measure ad effectiveness, but they must never expose each other's raw customer data. What should they use to share only the results of agreed-upon aggregate queries?
Question 2
Before changing the definition of a sales column, you want to know which downstream reports and tables it affects. Which governance feature helps most?
Question 3
Athena, Redshift Spectrum, and EMR define different schemas for the same S3 data, so their results are inconsistent. Which solution provides a single source of truth?
Question 4
The audit team wants to know "who read which objects in the sensitive S3 bucket last week." However, CloudTrail shows only management events. What action is needed?
Question 5
You want to regularly receive a third-party market research dataset and integrate it into your analytics pipeline. Which AWS service is most appropriate?