5.2 Cloud Storage (S3, GCS, Azure Blob) & Streaming Ingestion (Web/Mobile SDK, Ingestion API)
Key Takeaways
- Cloud Storage connectors (Amazon S3, Google Cloud Storage, Microsoft Azure Blob Storage, SFTP) support batch ingestion of CSV, TSV, and Apache Parquet files with gzip and zip compression.
- Amazon S3 connector authentication requires an AWS IAM Role configured with STS AssumeRole delegation, enforcing a Salesforce AWS Account ID and unique External ID, along with kms:Decrypt permissions if SSE-KMS encryption is active.
- The Salesforce Interactions Web & Mobile SDK captures client-side events in real time, leveraging a declarative sitemap to parse context and transitioning anonymous device UUIDs to authenticated profiles upon login.
- The Ingestion API is defined via an OpenAPI 3.0 (OAS) specification file, supporting a low-latency Streaming endpoint (up to 200 KB per request) for real-time events and an asynchronous Bulk endpoint (up to 150 MB compressed) for large-scale data loading.
- Batch Cloud Storage data streams track processed files via internal metadata catalogs; modifying a file in place without changing its file name will not trigger re-ingestion on subsequent scheduled sync runs.
Cloud Storage (S3, GCS, Azure Blob) & Streaming Ingestion (Web/Mobile SDK, Ingestion API)
While Salesforce CRM connectors handle transactional core records, modern enterprise Customer Data Platforms must ingest petabyte-scale data originating outside the core Salesforce perimeter. This includes nightly ERP inventory dumps stored in Amazon S3, behavioral telemetry streamed from digital storefronts via the Salesforce Interactions SDK, and real-time point-of-sale (POS) events pushed via the Ingestion API. A certified Data Cloud consultant must master the architectural patterns, security handshakes, schema definitions, and ingestion schedules across both file-based batch storage and low-latency streaming endpoints.
Cloud Storage Connectors: Architecture & Configuration
Salesforce Data Cloud provides native, high-throughput batch connectors for major enterprise cloud object stores and file transfer protocols:
- Amazon Web Services (AWS) S3
- Google Cloud Storage (GCS)
- Microsoft Azure Blob Storage
- Secure File Transfer Protocol (SFTP)
Supported File Formats & Compression
Cloud storage connectors extract structured tabular data from object storage buckets. Consultants must align source export pipelines with supported formats and compression types:
| File Format / Feature | Specifications & Requirements | Optimal Use Case |
|---|---|---|
| Delimited Text (CSV / TSV) | Standard comma-separated (.csv) or tab-separated (.tsv) files. Must contain a valid header row defining column names matching the Data Stream schema. UTF-8 encoding is strictly required. Quote characters and delimiter escaping must be consistently formatted. | General legacy ERP exports, POS batch files, third-party marketing agency extracts. |
Apache Parquet (.parquet) | Open-source columnar storage format. Parquet files are binary, type-safe, and self-describing, carrying schema metadata within the file footer. Provides faster parsing, superior compression, and lower network overhead than text formats. | Enterprise data lakes, Databricks/Snowflake export dumps, high-volume transactional logs. |
| Compression Types | Supports GZIP (.gz), ZIP (.zip), or uncompressed files. For CSV/TSV, gzip compression dramatically reduces network transfer time and storage costs. | Always recommend GZIP-compressed CSV or Parquet for production pipelines exceeding 1 GB. |
Directory Structures, File Naming Patterns & Wildcards
Cloud storage connectors locate files within buckets using directory pathing and wildcard matching expressions:
- Bucket and Subdirectory: e.g.,
s3://enterprise-customer-data/ingestion/pos_transactions/ - File Pattern (Wildcard): Using asterisks (
*) to capture timestamped or partitioned files, such aspos_transactions_*.csv.gzororders_daily_????-??-??.parquet. - Partitioned Directories: Data Cloud can navigate partitioned hierarchies, such as
/year={YYYY}/month={MM}/day={DD}/*.parquet.
The File Processing Lifecycle & Idempotency
Data Cloud tracks processed files by persisting an internal metadata catalog of ingested file names and their corresponding object modification timestamps.
[!CAUTION] The Stale File Overwrite Trap: If an external ETL job modifies an existing file in-place (e.g., re-uploading
customers_daily.csvwithout renaming the file), Data Cloud's scheduled sync may evaluate the file as already processed and skip it, leading to missed updates! Enterprise export pipelines must always employ unique timestamped or sequential file naming conventions (e.g.,customers_20260921_120000.csv.gz).
IAM Authentication, Role Delegation & Security Architecture
Connecting Data Cloud to external public cloud infrastructure requires enterprise-grade security. Data Cloud never requires hardcoding permanent administrative root credentials; instead, it enforces cross-account role delegation and scoped identity tokens.
Amazon S3 Authentication: AWS IAM AssumeRole & External ID
The industry-standard pattern for connecting Data Cloud to Amazon S3 is cross-account IAM Role Assumption:
- Salesforce Account ID & External ID: Within Data Cloud Setup, navigating to the S3 Connector interface generates a 12-digit Salesforce AWS Account ID and a unique, cryptographically random External ID specific to your Data Cloud tenant.
- AWS IAM Trust Policy: In the customer's AWS management console, an IAM Role is created with a Trust Relationship allowing the Salesforce AWS Account to execute the
sts:AssumeRoleaction, guarded by ansts:ExternalIdcondition to prevent the "confused deputy" problem:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "DataCloud-Tenant-Unique-External-ID-98765"
}
}
}
]
}
- IAM Permissions Policy: The role requires scoped permissions on the target S3 bucket:
s3:GetObject,s3:ListBucket. - AWS KMS Encryption Keys (SSE-KMS): If the S3 bucket is encrypted using AWS Key Management Service (KMS), the assumed role must also be granted explicit access to the customer-managed KMS key:
kms:Decryptandkms:DescribeKey. Omitting KMS permissions is the single most frequent cause of S3 ingestion connection failures.
Google Cloud Storage (GCS) Authentication
- Authenticates via a GCP Service Account. Data Cloud provides a service account principal that the customer binds to the target GCS bucket with the
Storage Object ViewerIAM role.
Microsoft Azure Blob Storage Authentication
- Utilizes either Shared Access Signature (SAS) Tokens (scoped to the container level with Read and List permissions and an explicit validity timeframe) or Microsoft Entra ID (Azure AD) service principals assigned the
Storage Blob Data Readerrole.
Salesforce Interactions Web & Mobile SDK
Capturing real-time digital engagement across web properties and mobile applications is fundamental for real-time personalization, cart-abandonment triggers, and behavioral segmentation. The Salesforce Interactions SDK provides client-side libraries for JavaScript (Web) and native mobile environments (iOS and Android).
Browser / Mobile App Event
│ (Clicks "Add to Cart", SKU: 88412, Price: $149.00)
▼
Salesforce Interactions SDK
│ Parses Web Sitemap / Mobile Event Schema
▼
Identity Capture Tier
├── Anonymous Visitor? --> Generates / Persists _anonId: "anon-uuid-77182"
└── Authenticated User? --> Captures Known ID: "cust-9941" (Email / CRM ID)
▼
Real-Time Streaming Edge Ingestion
▼
Data Cloud Data Lake Object (DLO: Web_Engagement__dlm)
│ EventTime: 2026-09-21T10:14:02Z | Category: Engagement
▼
Streaming Data Transform / Streaming Insights / Real-Time Data Actions
Declarative Web Sitemap Architecture
The Web SDK relies on a declarative Sitemap deployed via JavaScript. The sitemap monitors page URLs and DOM elements to determine:
- Page Type: Home, Category, Product Detail Page (PDP), Cart, Checkout, Order Confirmation.
- Contextual Metadata: Product SKU, price, currency, category breadcrumb, search query.
- Interaction Events:
viewItem,viewCategory,addToCart,purchase,search.
Anonymous-to-Known Profile Stitching
When a first-time user visits an e-commerce website, they have no established customer identity. The Interactions SDK automatically generates a pseudonymous cookie identifier (_anonId). All browsing actions, category views, and cart additions are ingested into Data Cloud as engagement records tied to this anonymous ID.
When the user subsequently authenticates (e.g., registers, logs into their portal, or completes a purchase providing an email address), the SDK captures the authenticated identifier (partyId). Data Cloud's Identity Resolution engine links the _anonId to the authenticated Individual profile, bridging the user's historical anonymous browsing journey with their master Customer 360 profile.
Ingestion API: Streaming vs. Bulk Architecture
The Ingestion API enables external applications, custom enterprise backends, mobile applications, microservices, and ETL platforms (such as MuleSoft, Informatica, or Talend) to push data directly into Data Cloud without intermediary cloud storage staging.
Schema Provisioning via OpenAPI Specification (OAS 3.0)
Before transmitting data through the Ingestion API, an administrator or developer must upload an OpenAPI 3.0 (OAS) schema file in YAML or JSON format. This schema defines:
- The object name and fields.
- Data types (string, number, date, dateTime).
- Primary Key definition.
Once the OAS file is uploaded in Data Cloud Setup, the platform automatically generates an Ingestion API connector and provisions the underlying Data Lake Objects (DLOs), ready to receive HTTP payloads.
Streaming vs. Bulk Ingestion API Endpoints
The Ingestion API exposes two distinct operational endpoints designed for divergent data velocity and volume requirements:
| Architectural Attribute | Ingestion API - Streaming Endpoint | Ingestion API - Bulk Endpoint |
|---|---|---|
| Primary Architectural Purpose | Real-time event streaming, transactional webhooks, immediate signal ingestion. | High-volume batch loading, historical migrations, daily delta updates. |
| HTTP Request URI | POST /api/v1/ingest/sources/{sourceName}/{objectName} | POST /api/v1/ingest/jobs (Job lifecycle: Open -> Ingest -> Close -> Status) |
| Maximum Payload Limit | Up to 200 KB per request (supports single records or micro-batches). | Up to 150 MB compressed (or ~4,000 to 150,000 records per upload chunk). |
| Processing Latency | Near-real-time (seconds to minutes); immediate ingestion into streaming pipeline. | Asynchronous batch processing queue (processed in background lifecycle jobs). |
| Rate & Concurrency Limits | High requests-per-second throughput; rate limits enforced per tenant. | Scoped to concurrent job limits and batch file size quotas. |
| Authentication Standard | OAuth 2.0 Connected App (JWT Bearer Token or Client Credentials flow). | OAuth 2.0 Connected App (JWT Bearer Token or Client Credentials flow). |
Refresh Schedules & Ingestion Cadences
For batch-oriented connectors (Cloud Storage, SFTP, and Bulk Ingestion API), consultants must configure the synchronization frequency:
- Standard Refresh Cadences: Hourly, Daily, Weekly, or Monthly scheduled runs.
- Manual Execution: Administrators can trigger an on-demand "Refresh Now" from the Data Stream interface for ad-hoc backfills or testing.
- Event-Driven Triggers: Cloud storage buckets can be paired with automated notification services (such as AWS SNS/SQS event notifications) to trigger Data Cloud ingestion pipelines immediately upon the arrival of a new file drop.
Critical Exam Traps & Consultant Pitfalls
[!WARNING] The AWS KMS "Access Denied" Trap An enterprise configures an S3 connector. The IAM Role is created with full
s3:GetObjectands3:ListBucketpermissions, and the AssumeRole Trust Relationship matches the External ID perfectly. When testing the connection, the bucket connects, but every scheduled Data Stream execution fails with an opaque "Access Denied / Extraction Failed" error.The Exam Cause: The enterprise S3 bucket is encrypted using AWS Key Management Service (SSE-KMS) with a Customer Managed Key (CMK). The IAM role lacked permissions to decrypt the data! A certified consultant must update the AWS KMS Key Policy to grant the IAM Role permissions for
kms:Decryptandkms:DescribeKeyon the key ARN.
[!CAUTION] The Ingestion API Schema Immutability Trap Once an Ingestion API schema is deployed via an OpenAPI 3.0 specification and mapped to canonical DMOs, you cannot arbitrarily modify, rename, or delete existing fields in the OpenAPI definition. Removing or altering fields requires deleting downstream DMO mappings, retiring the Data Stream, and deploying an updated OAS definition. Always validate your schema contracts thoroughly in sandbox environments before deploying to production.
A retail bank implements Salesforce Data Cloud and connects an Amazon S3 bucket containing daily credit card transaction logs stored as encrypted Parquet files. The AWS administrator configures an IAM Role with an sts:AssumeRole trust relationship matching Data Cloud's AWS Account ID and External ID, granting 's3:GetObject' and 's3:ListBucket' permissions. However, every Data Stream run terminates with an extraction error. What configuration step did the engineering team miss?
An enterprise integration architect needs to stream live point-of-sale (POS) checkout transactions from 850 retail stores into Salesforce Data Cloud. Each transaction payload is approximately 15 KB in size, and checkout events occur continuously throughout the business day. The marketing team requires transactions to be queryable in Data Cloud within minutes to trigger real-time mobile loyalty actions. Which ingestion method should the architect recommend?
A media company deploys the Salesforce Interactions Web SDK on its streaming video portal. An anonymous visitor browses documentary trailers, generating several 'viewItem' interaction events. Thirty minutes later, the visitor clicks 'Sign In' and logs into their existing subscriber account. How does the Web SDK and Data Cloud architecture handle the user's historical anonymous browsing activity?