Skip to content

Primary SAA curriculum

Secure Partner File Ingest On S3

How partner SFTP uploads into encrypted, isolated, retryable S3 ingestion that promotes only validated files into trusted data zones.

27 min read

After this, you will understand

Learn why receiving a file is only the first trust transition: identity, storage authorization, encryption, duplicate events, validation, quarantine, classification, and replay still need explicit boundaries.

Article guideprerequisites, mental models, and concepts

Article overview

intermediateCloudCertificationSecurity

Three useful mental models

In plain terms

Transfer Family accepts the partner's SFTP session, S3 stores the upload in an untrusted landing area, SQS buffers arrival events, and an idempotent processor promotes only validated files.

Decision pressure

Partners share broad storage access, incoming files land directly in trusted datasets, duplicate events repeat processing, KMS policies block consumers, or Macie is mistaken for malware protection.

Exam-ready model

Preserve the partner protocol, isolate identities and prefixes, encrypt the landing zone, buffer events, validate files idempotently, and separate incoming, quarantine, and trusted data.

Think before reading

What does a successful SFTP upload prove?

It proves that bytes were transferred through an authenticated session—not that the file is correctly named, complete at the business level, schema-valid, malware-free, or safe for downstream use.

Connected learning

These lessons add useful context to the current core lesson.
  1. 1Analytics Data Lake On S3AWS Scenario

Concepts Covered

  • Protocol compatibility as an architecture requirement
  • AWS Transfer Family managed Secure File Transfer Protocol (SFTP) endpoints
  • Partner authentication, folder-like SFTP views (logical directories), and AWS Identity and Access Management (IAM) storage roles
  • S3 incoming, quarantine, failed, and processed zones
  • S3 Block Public Access and server-side encryption with AWS Key Management Service keys (SSE-KMS)
  • S3 event notifications, duplicates, and ordering
  • Amazon SQS buffering, AWS Lambda processing, and dead-letter queues (DLQs)
  • Duplicate-safe (idempotent) file validation and promotion
  • Macie sensitive data discovery versus malware scanning
  • Audit, on-time arrival (freshness), reprocessing (replay), and retention controls
  • AWS Solutions Architect Associate exam (SAA-C03) transfer and data-security signals

1. Situation

In this scenario, a partner is another company—such as a shipping carrier, warehouse operator, or supplier—that exchanges data with the logistics company. Every night, Partner A's system exports a file such as shipments-2026-09-04.csv. One file may contain many shipment records, including order IDs, tracking numbers, delivery statuses, timestamps, and customer addresses.

This file-based integration is common when two companies have already agreed on a file format and delivery schedule, especially when one side uses older software that exchanges whole files on a schedule rather than handling individual API requests. Replacing it with an API would require coordinated changes on both sides, so the logistics company must preserve the partner's existing Secure File Transfer Protocol (SFTP) workflow.

An SFTP client is software running on the partner's side. It connects to the receiving company's SFTP server over an encrypted Secure Shell (SSH) connection, authenticates with a password or cryptographic SSH key, and uploads the file to a remote directory. You can think of SFTP as working with a secure remote folder. A successful upload confirms that the server received the bytes; SFTP does not understand whether the shipment records inside those bytes are correct.

In this AWS design, AWS Transfer Family plays the role of the managed SFTP server, and Amazon S3, AWS object storage, stores the uploaded file behind it. The partner keeps using its existing SFTP client and does not need AWS credentials or new S3 API code.

After arrival, the file is not sent directly into reports or operational systems. A validation program—the processor—checks details such as the expected partner and date, filename, schema, row count, integrity, and security policy. Validated files become trusted input for analytics, such as shipment-performance reports, and reconciliation—comparing the partner's shipment records with the company's internal orders to find missing, duplicated, or inconsistent data. Files that fail the trust checks go to quarantine for investigation.

partner system creates a shipment file
  -> SFTP client uploads it
  -> AWS Transfer Family accepts the SFTP session
  -> S3 stores it in an untrusted incoming area
  -> Amazon Simple Queue Service (SQS) holds a small work item until a processor is ready
  -> a processor validates the file
  -> trusted data goes to analytics and reconciliation; rejected data goes to quarantine

The business requirements are:

  1. partners keep their existing SFTP clients;
  2. one partner cannot see another partner's files;
  3. files are encrypted and never public;
  4. downstream systems do not trust a file merely because it arrived;
  5. processing survives bursts and temporary failures;
  6. repeated events do not process the same object twice; and
  7. operators can tell which expected files arrived, failed, or remain delayed.

The central lesson is:

received bytes != trusted business data
Transfer success proves that bytes arrived. Validation and security policy decide whether downstream systems may trust them.

This architecture is a trust transition, not simply a file-copy diagram.

2. Naive Design

Naive option 1: operate an SFTP server on an EC2 virtual machine

Running SFTP on EC2 also means owning patching, identity, keys, high availability, capacity, logs, and storage integration.

This can work, but the team owns host patching, SFTP configuration, high availability, user lifecycle, host keys, logging, scaling, and storage integration.

The partner requires SFTP—not necessarily a server the company operates itself.

Naive option 2: give partners IAM users and broad S3 access

This forces partners to change tooling and creates long-lived AWS credentials. An AWS Identity and Access Management (IAM) user is an AWS identity with permissions and potentially long-lived access keys. A broad IAM policy can allow one partner to list, read, overwrite, or delete another partner's objects.

Naive option 3: upload directly into the trusted analytics location

Partner A -> trusted/partner-a/shipments-2026-09-04.csv -> analytics starts

The SFTP transfer completed, but the file may have the wrong name, wrong partner, wrong schema, unexpected row count, corrupted business contents, or prohibited sensitive data. Transfer success is not validation success.

Naive option 4: invoke processing directly without a failure plan

An S3 event invokes one Lambda function for every arrival. Traffic bursts create high concurrency, large files exceed the processing model, duplicate notifications repeat side effects, and failed files have no durable work queue or replay process.

3. What Breaks

These are not five failures in the finished architecture. Each story starts with a plausible but incomplete version of the same pipeline: a partner uploads a file, Transfer Family stores it in S3, and software processes it for downstream use. In each version, one control is missing or misconfigured. The failure shows why the completed design in the next section adds that control.

Failure 1: the SFTP folder looks private, but the storage permissions are broad

Starting design: Transfer Family authenticates Partner A and presents incoming/partner-a/ as the partner's SFTP home directory. This logical home directory is a folder-like view created by configuration. However, the IAM role used for Partner A still permits access to a wider path such as incoming/*, which includes every partner's files.

What breaks: The screen looks isolated, but S3 does not have an independent policy rule that rejects access outside Partner A's area. A mapping mistake or overly broad request could therefore expose Partner B's objects. The fix uses both layers: directory mapping controls what the SFTP client displays, while the IAM role and S3 bucket policy allow only Partner A's S3 prefix—the path-like beginning of an object name, such as incoming/partner-a/.

Directory mapping changes what the partner sees; IAM and the bucket policy decide which S3 objects the partner can actually access.

Failure 2: S3 announces the same upload more than once

Starting design: Partner A uploads shipments-2026-09-04.csv. S3 stores the file and sends an object-created notification—a small message saying which S3 object arrived—to the processor. The processor copies the validated records into the trusted area and records the job as complete.

What breaks: S3 may deliver that notification again, or notifications for several uploads may arrive in a different order. This is its at-least-once, unordered delivery model. If the processor treats every message as new work, it can publish the same shipment records twice. The fix is idempotent processing: record a stable identity such as bucket, object key, object version, and processor version, then make repeated notifications for that identity produce only one completed business result. Adding SQS preserves and retries work, but the processor still owns this duplicate protection.

Failure 3: the upload succeeds, but the processor cannot decrypt the file

Starting design: The private S3 bucket encrypts incoming objects with a customer-managed AWS Key Management Service (KMS) key, whose permissions the company controls. Transfer Family writes the object using one IAM role. Later, a different processor role reads the object to validate it.

What breaks: Transfer Family has permission to write and encrypt, so the partner sees a successful upload. The processor has S3 read permission but lacks permission to use the KMS key for decryption, so processing later fails with an access-denied error. One successful actor does not automatically authorize the next actor. The fix gives every required writer, reader, scanner, and recovery process the appropriate S3 permissions and KMS permissions through both IAM and the key policy or grant.

Failure 4: a large file exceeds the Lambda processing design

Starting design: Every new S3 object invokes a Lambda function, and that function downloads, decompresses, scans, and validates the entire file. This works for the small CSV files used during testing.

What breaks: A partner later uploads a multi-gigabyte archive or a file whose validation needs more execution time, memory, or temporary storage than the Lambda design provides. The function repeatedly fails even though the file itself may be valid. A burst of files can also create more concurrent processing than a scanner or database can handle. The fix places SQS between arrival and processing, then chooses compute from the actual workload: Lambda for short, bounded work, or services such as ECS on Fargate, AWS Batch, or Glue for heavier processing.

Failure 5: sensitive data reaches analytics before Macie reports it

Starting design: The company places every successful SFTP upload directly in the trusted analytics area and starts downstream jobs immediately. It assumes Amazon Macie will inspect the file before anything unsafe happens.

What breaks: Macie later discovers personally identifiable information that the file was not supposed to contain, but analytics users may already have read it. Macie performs sensitive-data discovery; it is not an inline approval gate or antivirus engine. The fix lands every upload in an untrusted incoming area first, runs the required schema, business, malware, and classification checks, and promotes the file into the trusted area only after those checks pass. Rejected files go to quarantine instead.

4. AWS Architecture

Build the ingest path one trust boundary at a time.

Step 1: preserve SFTP with a managed Transfer Family endpoint

Partner A already has software that uploads its nightly CSV through SFTP. The logistics company wants that software to keep working, wants the file stored in S3, and does not want to operate SFTP servers. AWS Transfer Family bridges those requirements: Partner A uses SFTP as before, Transfer Family accepts the connection, and S3 stores incoming/partner-a/shipments-2026-09-04.csv.

Transfer Family preserves the partner's SFTP protocol while AWS operates the endpoint and S3 stores the received objects privately.

The simple flow is Partner A → SFTP → Transfer Family → private S3. Direct S3 access would require Partner A to adopt AWS-specific APIs and credentials. A self-managed SFTP server on Amazon EC2 would preserve SFTP, but the company would own patching, availability, keys, scaling, and logs. Transfer Family preserves the familiar protocol while AWS operates the SFTP endpoint.

The endpoint can be publicly accessible when partners connect over the internet. A VPC-hosted endpoint places it in an Amazon Virtual Private Cloud (VPC)—the company's isolated AWS network—and can be internet-facing with selected network controls or internal for VPC and privately connected networks. The choice changes how partners reach the server; it does not change the basic Transfer Family-to-S3 flow.

Transfer Family also needs to know who is connecting. An identity provider is the system that verifies Partner A's password or SSH key. Transfer Family can store users itself or connect to supported external identity sources. After authentication, each user is mapped to:

  • an IAM role that controls which S3 operations and object keys the user may access; and
  • a home or logical directory that controls the folder-like view shown in the SFTP client.

For example, Partner A may log in and see /shipments-2026-09-04.csv, while Transfer Family maps that view to s3://partner-ingest/incoming/partner-a/shipments-2026-09-04.csv. The mapping controls what Partner A sees. The IAM role and S3 bucket policy control what Partner A can actually list, read, or write. Hiding Partner B's location is helpful navigation, but it is not authorization.

Step 2: isolate partners in an encrypted incoming zone

Map each partner to a dedicated incoming prefix:

s3://partner-ingest/incoming/partner-a/shipments-2026-09-04.csv
s3://partner-ingest/incoming/partner-b/shipments-2026-09-04.csv
Each partner role permits only its own object-key prefix; the folder-like prefix is useful organization, while policy creates isolation.

Keep S3 Block Public Access enabled so public bucket or object permissions cannot accidentally expose the files. Use least-privilege identity and bucket policies so a partner can perform only the required operations in its mapped prefix.

S3 stores objects by object key rather than in a traditional folder tree. For this file, the key is incoming/partner-a/shipments-2026-09-04.csv, and the prefix is its path-like beginning: incoming/partner-a/. Consoles and SFTP clients make that prefix look like a folder, but the folder appearance provides no security. Isolation comes from policies that allow Partner A's role to access only keys beginning with its prefix. Use separate buckets or accounts when legal or containment requirements need a stronger boundary than prefix policies.

S3 encrypts stored objects by default. Choose server-side encryption with AWS KMS keys (SSE-KMS) when the business needs customer-controlled key permissions, separation of duties, detailed key-use auditing, or specific cross-account access. In that design, S3 encrypts Partner A's CSV using a KMS key, and every later actor that must read the file also needs permission to use that key.

Step 3: turn an object arrival into buffered work

After S3 stores Partner A's CSV, the processor needs to learn that new work exists. Configure an S3 ObjectCreated event notification for the incoming/ prefix and send that small notification to Amazon SQS.

S3 announces arrival; SQS holds the work through bursts and retries until processing succeeds or repeated failure is isolated.

The prefix filter matters. If the processor writes to processed/, that output must not match the same incoming notification and create a processing loop.

SQS is the durable work-ticket tray between S3 and the processor. The CSV bytes stay in S3. The queue message contains a reference closer to bucket = partner-ingest and key = incoming/partner-a/shipments-2026-09-04.csv, plus safe event metadata. When a processor is ready, it reads the ticket and uses its own S3 and KMS permissions to fetch the file. This lets SQS absorb bursts and preserve work while processors are busy or unavailable without trying to carry a multi-megabyte or multi-gigabyte file inside the message.

The queue carries a small work ticket, not the file. The processor follows the reference and uses its own S3 and KMS permissions.

Because S3 notifications can be duplicated or arrive out of order, the queue and processor must not assume one perfectly ordered event per object.

Step 4: make file processing idempotent

Suppose S3 announces shipments-2026-09-04.csv twice. The second notification should not create a second trusted output or load the same shipment records again. This is the same pattern used in the preceding event-driven scenario: at-least-once delivery requires an idempotent consumer—repeating the same work request must not repeat its business effect.

The processor therefore creates a stable identity for the exact work: bucket, object key, object version, and processor version. With S3 Versioning, an overwritten file at the same key receives a new version ID, so it is legitimate new work. A newer processor version can also intentionally revalidate the old source after a rule is corrected. A DynamoDB item or another durable record can atomically claim this identity and record one completed result. The claim must be one conditional write, not a separate "check, then insert": two workers could otherwise both see no existing record and both continue. The conditional write lets one worker create the claim; the other sees that it lost and stops before producing a second business result.

identity = bucket + object key + version ID + processor version
example  = partner-ingest + incoming/partner-a/shipments-2026-09-04.csv + v123 + validator-v4
The processor deduplicates one object-processing version while still allowing an overwritten object or corrected validator to run intentionally.

Then validate what the business actually cares about:

  • expected partner and path;
  • filename and allowed extension;
  • object size and required metadata;
  • checksum or integrity evidence supplied by the workflow;
  • schema, columns, and data types;
  • row counts and business rules; and
  • encryption and classification requirements.

An S3 object-created event means the object write completed from S3's perspective. It does not prove that the partner sent the complete business dataset or correct records.

Choose compute from what the file processor must actually do. A Lambda function may be a good fit for checking the filename, metadata, and schema of a small CSV. Downloading, decompressing, and scanning a multi-gigabyte archive may need more time, memory, temporary storage, or specialized software. In that case, use containers through Amazon ECS on AWS Fargate, managed jobs through AWS Batch, or data transformation through AWS Glue. Lambda can still coordinate the job without processing every byte itself.

Step 5: promote or quarantine explicitly

Now give the file an explicit trust state. These states are implemented with S3 prefixes or separate buckets, but first remember what each state means:

A pass promotes trusted output, a policy failure quarantines the file, and an infrastructure failure remains retryable operational work.

These outcomes mean different things:

  • Incoming, such as incoming/partner-a/shipments-2026-09-04.csv, means, "We received Partner A's bytes, but we do not trust the contents yet."
  • Processed, such as processed/partner-a/shipments-2026-09-04.csv, means, "The defined checks passed, so downstream systems may use the approved output."
  • Quarantine, such as quarantine/partner-a/shipments-2026-09-04.csv, means, "We successfully inspected the file and found a data or policy problem, such as the wrong schema."
  • Failed processing means, "The system could not finish the decision because the processor or a dependency failed." The source file remains untrusted while its work ticket retries or moves to the DLQ.

Do not delete the only raw copy until validation, reconciliation, and the retention policy allow it. In S3, a logical "move" is commonly implemented as a copy to the new key followed by deletion of the old key, so make the operation retry-safe.

Downstream analytics should consume the processed zone, not watch the raw incoming area directly.

Step 6: add sensitive-data discovery without confusing its job

Two security questions sound similar but need different controls. Amazon Macie asks, "Does this S3 data appear to contain sensitive information such as personally identifiable information (PII) or financial data?" A dedicated malware scanner asks, "Is this file malicious?" Use Macie for sensitive-data discovery and S3 data-security risk, not as antivirus.

Macie finds sensitive data and S3 security risk; a dedicated malware control answers a different security question.

Macie analyzes supported S3 objects and produces findings when it discovers categories such as personally identifiable or financial data. A finding gives the security team evidence to review; it does not by itself decide that the file is trusted.

If sensitive data must block promotion, design an explicit classification workflow whose timing, supported formats, KMS access, and failure behavior match that requirement. Do not assume automated discovery is a synchronous upload gate.

Step 7: make freshness and audit visible

Monitor the business promise as well as the AWS machinery. For example: Did Partner A's expected nightly CSV arrive by the deadline? If it arrived, is it still waiting in incoming/, stuck as an old SQS message, quarantined, or already promoted? Useful signals include:

  • partner authentication and transfer failures;
  • expected file arrival by deadline;
  • SQS queue depth and age;
  • processor errors, duration, and concurrency;
  • messages in the ingest DLQ;
  • files in quarantine or failed zones;
  • KMS and access-denied errors; and
  • time from upload to trusted promotion.

AWS CloudTrail records relevant AWS API and configuration activity. Transfer Family and processing logs provide operational evidence. S3 Versioning keeps earlier object versions, while S3 Object Lock can prevent versions from being deleted or overwritten during a required retention period. Use these or dedicated archival controls when the business must preserve immutable—unchangeable—evidence.

Completed architecture

File bytes stay in private S3 while SQS carries the work reference; identity, encryption, trust decisions, and operational failure remain separate controls.

5. Request Or Data Flow

Learn three lifecycles: transfer, validation, and failure recovery.

Lifecycle 1: partner upload

  1. Partner A's SFTP client connects to the Transfer Family endpoint and uploads shipments-2026-09-04.csv.
  2. Transfer Family asks the configured identity provider to authenticate Partner A.
  3. The user mapping supplies Partner A's logical directory and its scoped S3 access role.
  4. Transfer Family writes the object to incoming/partner-a/shipments-2026-09-04.csv.
  5. S3 stores the bytes privately and encrypts them according to the bucket configuration.
  6. After object creation completes, S3 sends the ingest queue a notification that references the object.

Lifecycle 2: successful validation

  1. The processor receives the SQS work ticket and atomically claims this object-and-processor version so a duplicate message cannot repeat the result.
  2. It follows the bucket and key in the message, then reads Partner A's CSV using its own IAM and KMS permissions.
  3. It checks integrity evidence, filename, schema, row data, and required security rules.
  4. It writes normalized or approved output into the processed zone; downstream systems never need to read the untrusted incoming copy.
  5. It records successful completion and deletes the SQS message.
  6. Downstream systems discover only the trusted output.

Lifecycle 3: operational failure versus quarantine

If Partner A's CSV has the wrong schema, the processor completed its inspection and found a problem with the data. Record the reason and place the file in quarantine. That is a completed trust decision.

If the processor times out or cannot reach a dependency, it never finished inspecting the file. Do not call the data invalid. Let SQS retry the work ticket. After the configured receive attempts, move that failed message to the dead-letter queue (DLQ) and alert an owner.

This distinction prevents temporary infrastructure failures from being mistaken for bad partner data.

Quarantine answers what is wrong with the file; the operational DLQ answers why the pipeline could not finish processing it.

6. Security Controls

Isolate partner identities

Use a separate user identity and scoped storage role or session policy—temporary permission restrictions applied to that signed-in session—for each partner pattern. Limit bucket listing and object actions to the intended prefixes. Logical directories should complement, not replace, IAM and bucket policy enforcement.

Keep the bucket private

Enable S3 Block Public Access. Partners enter through the approved Transfer Family endpoint or another explicitly designed path—not a public bucket URL.

Coordinate KMS permissions

Follow Partner A's encrypted CSV through the system. The Transfer Family user role writes it, the processor later reads and decrypts it, a scanner may inspect it, and a recovery process may restore it. A successful upload proves only that the writer had the required permissions; it does not prove that every later reader can decrypt the object. With SSE-KMS, consider every actor:

  • the Transfer Family user role that writes incoming objects;
  • the processing role that decrypts incoming data and encrypts output;
  • Macie or scanning services that require access to in-scope objects; and
  • administrators or recovery workflows that need controlled access.

Reading the object and decrypting it are related but separate authorization checks. The processor needs S3 permission to read the object. It also needs IAM permission to request kms:Decrypt, while the KMS key policy or a KMS grant—a separate permission issued for a key—must allow that use, either directly or through IAM delegation. S3 read permission alone is not enough.

Every actor that uses an SSE-KMS object must pass both the IAM permission check and the KMS key-policy or grant check.

Separate transfer encryption from storage encryption

SFTP encrypts data in transit during the partner session. S3 server-side encryption protects stored objects. They cover different parts of the lifecycle.

Limit sensitive events and logs

Do not place file contents or unnecessary personal data in SQS messages or logs. Store object references, processing identifiers, and safe diagnostic metadata.

7. Resilience Controls

Transfer Family keeps the SFTP endpoint available without a self-managed server fleet, and S3 durably stores Partner A's CSV. Neither service guarantees that the validator will be available or complete its work, so the ingestion workflow still needs application-level recovery.

Use SQS to retain arrival work during processor outages and to control concurrency against scanners, databases, or partner-specific dependencies.

Make processing idempotent because both the S3 notification and SQS message delivery can repeat. Two deliveries for version v123 of Partner A's CSV should produce one result. If Partner A overwrites the same key and S3 creates version v124, the identity must treat that as new work rather than confusing it with the completed v123 record.

Retain raw input until the business retention and replay window closes. A corrected processor should be able to replay a known object without asking the partner to resend it unnecessarily.

Alarm on oldest-message age, DLQ depth, quarantine growth, expected-file freshness, and promotion latency. A queue with no visible errors can still represent a missed daily feed.

Use separate buckets or accounts when a mistake or compromise must be contained more strongly than prefix-based permissions allow, or when legal or organizational isolation requires it.

8. Performance Controls

Transfer speed depends on partner bandwidth, latency, protocol implementation, file size, and endpoint connectivity. A managed endpoint cannot make the partner's network faster.

Many small files create more transfer sessions, S3 requests, notifications, queue messages, and processor invocations than a smaller number of appropriately sized files.

Set processor concurrency from sustainable downstream capacity. SQS can absorb a burst, but excessive Lambda concurrency can overwhelm a malware scanner, database, or external validation API.

Start with the work, then choose the service. A short schema check on Partner A's normal CSV has very different runtime needs from decompressing and scanning a multi-gigabyte archive:

Work shapePossible processing direction
Check a small CSV's metadata and schema in a short, bounded invocationLambda may fit
Decompress or scan a large archive with longer CPU, memory, or storage needsECS/Fargate or AWS Batch may fit
Transform approved CSV data into analytics formats at scaleGlue or another data-processing service may fit
Coordinate validation, scanning, approval, and promotion as several stepsStep Functions can coordinate the workflow

Organize processed object keys by values such as date or partner so analytics jobs can skip unrelated files. Analytics systems call this partition pruning. A job should not scan the entire bucket to find one day's approved files.

9. Cost Controls

Important cost drivers include:

  • Transfer Family endpoint uptime and transferred data;
  • S3 storage, requests, versioning, and lifecycle;
  • KMS API usage;
  • SQS requests and Lambda or container processing;
  • malware or data-validation tooling;
  • Macie sensitive data analysis;
  • logs, metrics, and retained DLQ or quarantine objects.

Endpoint cost matters even when no partner is transferring a file. Compare the managed service with the full cost of operating and securing a highly available SFTP fleet, not only an EC2 hourly price.

Use lifecycle policies separately for incoming, processed, quarantine, failed, and audit data. Their retention requirements are not automatically the same.

Filter events to avoid recursive processing loops and unnecessary invocations. SQS batching lets one processor invocation receive several work messages; use it where that improves efficiency without making one failed file difficult to isolate from the rest of the batch.

Scope Macie discovery to the security requirement. Scanning every object continuously may cost more than risk-based automated discovery and targeted jobs.

10. Exam Variants

If the question says...Think...Why
"Partners must continue using SFTP while files land in S3"AWS Transfer FamilyIt provides the managed protocol endpoint backed by S3
"Move a large on-premises dataset through a managed transfer task"AWS DataSyncDataSync is a managed bulk-data movement service, not a partner SFTP endpoint
"Provide on-premises Network File System (NFS) or Server Message Block (SMB) access backed by AWS storage"AWS Storage GatewayStorage Gateway connects familiar on-premises storage protocols to AWS storage
"Prevent one partner from viewing another's uploads"Separate identity mapping + scoped IAM/bucket accessDirectory appearance alone is not authorization
"Process arrivals reliably during bursts"S3 notification → SQS → processorSQS buffers and supports retry isolation
"The same file event may arrive twice"Idempotent processingS3 notifications are at-least-once
"Encrypt with a customer-controlled key"SSE-KMS + IAM and key policy permissionsEvery required actor needs authorized key use
"Discover personally identifiable information (PII) or financial data in S3"Amazon MacieMacie performs sensitive data discovery
"Scan uploaded files for malware"Dedicated malware-scanning workflowMacie is not an antivirus engine
"Do not expose unvalidated files to analytics"Incoming/quarantine/processed trust zonesPromotion happens only after defined validation passes

11. Common Traps

TrapBetter reasoning
"SFTP means we must run an EC2 file server."Transfer Family supplies a managed SFTP endpoint backed by S3 or Amazon Elastic File System (EFS), AWS shared file storage.
"A logical home directory secures the bucket by itself."IAM, session, and bucket policies enforce access; directory mapping shapes what the user sees.
"A successful upload is trusted data."Transfer success proves arrival, not schema, business completeness, classification, or malware status.
"S3 sends exactly one event in upload order."Design for duplicate and out-of-order notifications.
"A queue makes the processor idempotent."SQS retains and retries work; the processor must prevent duplicate business effects.
"KMS encryption only needs an IAM allow."The key policy and relevant service/principal permissions must also support the operation.
"Macie scans uploads for malware."Macie discovers sensitive data and S3 security risk; malware scanning is a separate control.
"Quarantine and DLQ mean the same thing."Quarantine is a data-trust decision; a DLQ is operational failure isolation.
"Write processed output under the same triggering prefix."Use event filters and separate output paths to prevent loops.
"Lambda is always the processor for an S3 event."Choose compute from file size, duration, libraries, and downstream limits.

Final Mental Model: One-Minute Review

TermExact jobRemember it as
Transfer FamilyAccepts the partner's familiar file-transfer protocol without an EC2 SFTP fleetThe managed loading dock
User mapping and IAM roleAuthenticate the partner and scope its S3 operationsThe driver's ID and delivery permit
S3 incoming zoneDurably stores received but untrusted filesThe inspection bay
SSE-KMSEncrypts stored objects with customer-controlled key permissions when requiredThe locked storage container
S3 event notificationAnnounces that an object was created; delivery can repeat and be out of orderThe arrival bell
SQS ingest queueBuffers validation work and isolates processor outagesThe inspection-ticket tray
Idempotent processorValidates one object identity safely even when work repeatsThe receiving inspector
Processed and quarantine zonesSeparate trusted outputs from rejected inputsThe approved warehouse and isolation cage
MacieDiscovers sensitive data and S3 policy riskThe sensitive-data classifier, not antivirus
Authenticate the partner, land untrusted bytes, buffer inspection work, validate idempotently, then promote trusted output or quarantine rejected data.

For Partner A's CSV, the trust path is authenticate → land → buffer → validate → promote or quarantine. Transfer Family proves who delivered the bytes, S3 stores them, SQS preserves a work ticket, the validator decides trust, and Macie supplies sensitive-data visibility rather than malware protection.

Use AWS Transfer Family for protocols, endpoints, identity providers, logical directories, and storage backends. Review Amazon S3 for object storage and bucket controls, AWS Key Management Service for key-policy boundaries, Amazon SQS for buffered processing, and Amazon Macie for sensitive data discovery.

Continue to Analytics Data Lake On S3 after the ingest system can reliably produce trusted, organized data.

Official AWS references:

Finished reading?

Your reading history is saved in this browser so you can continue later.

Recommended Next

Analytics Data Lake On S3AWS Architecture Scenarios20 min read

This applies the foundation mental models to a real architecture decision instead of a service inventory.

Optional exploration

These links add context, but they do not replace the recommended next lesson.

Arcflow Plus is coming — review drills, research breakdowns, more AI. Get one email at launch.