What Amazon Bedrock Protects And the One Thing It Doesn't
Amazon Web Services built a serious data protection story around Bedrock. It's real infrastructure, real compliance work, real commitment to keeping customer data where it belongs.
Bedrock doesn't store prompts or responses by default. Model invocation logging isn't enabled by default, and when it is enabled, logs can be encrypted using a KMS key. Model providers have zero visibility into your prompts. Your data doesn't train anyone else's model. The perimeter is genuinely well built.
But there's a question nobody in that conversation asks.
The perimeter and the prompt are two different things
Bedrock protects data moving to and from the model. Encryption in transit. Encryption at rest. Isolated infrastructure. No data sharing with third-party model providers.
All of that is about the perimeter, what leaves your environment and where it goes.
None of it addresses what the model actually reads when your agent processes a patient record, a financial transaction, or a legal document.
Amazon Bedrock Guardrails sits between your application and the model, evaluating content against predefined configurations and making decisions to either block the request, mask sensitive information, or allow it to proceed.
Guardrails is reactive. It analyzes what comes in and what goes out. It can detect and redact PII in prompts. It can block denied topics. It's a meaningful layer.
But it catches sensitive data after it's already in the pipeline. The model has already received the prompt. The raw value was already in the context window before Guardrails made its decision.
AWS's own security team acknowledges the risk: sensitive information such as PII, API keys, and bank account or card details can be present in prompts and outputs. The guidance is to implement validation layers between content processing and action execution, creating security boundaries that prevent compromised agents from accessing data they shouldn't.
That validation layer is exactly what most Bedrock deployments don't have.
What actually happens inside a Bedrock agent prompt
When a Bedrock agent processes a healthcare workflow, it receives a context object. That context typically includes whatever data your retrieval layer pulled, patient records from a connected database, insurance information from an API call, clinical notes from an EHR integration.
The agent sees all of it. The SSN is in the prompt. The diagnosis code is in the prompt. The name, the date of birth, the medication list, all in the prompt, in clear text, inside the model context window.
Sensitive data passed to the model at inference time can inadvertently be exposed in the model's outputs. An LLM operating on a company's internal documents can leak snippets of confidential information when prompted in the right way, and this risk materializes during inference, not just during fine-tuning.
The risk isn't theoretical. It's architectural. If the raw value is in the prompt, it can surface in outputs, in downstream tool calls, in memory systems, in logs that were never designed to hold PHI.
AWS's own guidance on least privilege for Bedrock deployments notes that model invocation logs may contain sensitive information, which is why they recommend encrypting them. But encrypting logs that contain PHI is not the same as preventing PHI from entering the logs in the first place. It's the same distinction as locking a filing cabinet versus never putting the sensitive document in the cabinet at all.
The Guardrails limitation most teams discover too late
AWS Bedrock Guardrails provides powerful native capabilities to protect against harmful content and ensure data privacy, configuring content filters, denied topics, sensitive information filters, and grounding checks to fine-tune models for security and operational standards.
That's a real and useful set of controls. For many use cases it's sufficient.
For regulated industries, healthcare, fintech, legal, it isn't. Here's why.
Guardrails operates on what it can detect. It looks for patterns, SSN formats, credit card patterns, email addresses. What it can't do is prevent the model from reasoning over a value it saw before the guardrail caught it. Detection and prevention are different operations.
More importantly: Guardrails is configured at the output layer. By the time it acts, the model has already processed the input. In a multi-step agentic workflow, where an agent calls tools, retrieves data, takes actions, and loops, sensitive data can move through multiple model calls before Guardrails has an opportunity to intervene.
The gap isn't in AWS's engineering. It's in the architecture. Guardrails wasn't designed to prevent sensitive data from entering the model context. It was designed to catch it leaving.
The layer that closes the gap
The fix isn't adding another guardrail on top of Guardrails. It's moving the interception point earlier, before the prompt is ever constructed.
Tokenize sensitive values before they reach the agent. The agent receives [CVT:NAME:A1B2] instead of "John Smith." [CVT:SSN:C3D4] instead of a real social security number. The agent reasons over tokens, makes decisions, executes actions, and at the moment of execution, a vault resolves the tokens back to real values. The real data never entered the model context.
Bedrock's perimeter stays intact. Guardrails still runs. But now there's nothing sensitive in the prompt for either layer to worry about. The raw values never moved through a surface they shouldn't have touched.
This is exactly what Astra is built for, a pre-prompt tokenization layer that works with any Bedrock deployment, any agent framework, and any workflow you already have running. Two lines of code.
AWS recommends centralized logging and monitoring, analytics, and comprehensive safeguards across every AI interaction. Astra makes those logs safe to hand to a regulator, because they contain tokens, not values.
Bedrock built the perimeter. Astra closes the one gap it was never designed to close.