AWS Builder Center

Amazon Bedrock Security Baseline for Production GenAI

A defense-in-depth security baseline for Amazon Bedrock: least-privilege IAM, PrivateLink VPC endpoints, forced Guardrails, and audit logging you can ship to prod.

Series: Best Practices (7 articles)

  1. …
  2. 4
    Amazon Bedrock Security Baseline for Production GenAI This article
Lead Data Scientist

A Production Security Baseline for Amazon Bedrock (in Four Layers)

Most Bedrock proof-of-concepts share the same security posture: an IAM role with  bedrock:* , a public API call over the internet, and no idea what prompts or completions actually flowed through the model. That's fine for a demo. It is not fine the day real customer data starts hitting the API — and by then, retrofitting controls is painful.
The good news is that a solid Bedrock security baseline isn't exotic. It's four layers of defense-in-depth, each one catching what the others miss. Here's the framework I use when hardening a GenAI workload for production, and the decision behind each layer.

Layer 1: Least-privilege IAM (scope the what)

 bedrock:*  is the first thing to delete. In practice, most applications only need  bedrock:InvokeModel  and  bedrock:InvokeModelWithResponseStream  — and only against specific models. Scope the resource ARN to the exact model IDs you've approved so a compromised role can't silently switch to a pricier or unvetted model.
Then push further with condition keys. Two are worth adopting on day one:
json
JSON
{
"Effect": "Allow",
"Action": "bedrock:InvokeModel",
"Resource": "arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-5-haiku-20241022-v1:0",
"Condition": {
"StringEquals": { "aws:SourceVpce": "vpce-0abc123..." },
"StringEquals": { "bedrock:GuardrailIdentifier": "arn:aws:bedrock:us-east-1:111122223333:guardrail/xxxxxxxx" }
}
}
 aws:SourceVpce  forces every call through your VPC endpoint (Layer 2).  bedrock:GuardrailIdentifier  refuses any invocation that doesn't attach your approved guardrail (Layer 3) — a policy-level guarantee that no code path can skip content controls. Add  aws:PrincipalOrgID  at the org boundary so a leaked role can only be assumed from inside your organization.

Layer 2: Network isolation with PrivateLink (scope the where)

By default, Bedrock traffic leaves over the public internet. For regulated or sensitive workloads, create an interface VPC endpoint (AWS PrivateLink) for  bedrock-runtime  so inference traffic never touches the public internet — it stays on the AWS private network.
Two details make this real rather than theatrical. First, disable the public DNS option on the endpoint so  bedrock-runtime  resolves to the private endpoint IP from inside your VPC; otherwise callers may quietly fall back to the public path. Second, attach an endpoint policy — it's a second, independent place to restrict which models and actions are reachable, so even a misconfigured IAM role is boxed in by the network layer.

Layer 3: Guardrails (scope the content)

IAM and networking control who and from where; they say nothing about what the model is asked or answers. That's the job of Amazon Bedrock Guardrails: denied topics, content filters, word/profanity blocks, and — critically for compliance — PII detection and redaction on both input and output.
The best-practice move is the one from Layer 1: don't leave guardrail attachment to application code. Enforce it with the  bedrock:GuardrailIdentifier  condition key so the only invocations the platform permits are the ones carrying your guardrail. Defense-in-depth means the control survives a careless deploy.

Layer 4: Observability — separate the metadata trail from the content trail

You need two distinct audit streams, and conflating them is a common mistake.
CloudTrail is your activity audit: who called which Bedrock API, when, and from where. It's metadata — no prompt or completion bodies — and it belongs in an organization trail so it can't be disabled from a member account.
Model invocation logging is your content audit: enable it and Bedrock captures the actual request and response bodies to S3 and/or CloudWatch. That's powerful for debugging and compliance evidence, but those logs may contain the very sensitive data you're protecting — so encrypt them, lock down access with tight IAM, and set a retention policy. Treat the log bucket as a crown-jewel resource, not an afterthought.

The decision framework, in one line each

  • Every workload: least-privilege IAM scoped to specific model ARNs + forced Guardrail.
  • Sensitive/regulated data: add PrivateLink with public DNS disabled and an endpoint policy.
  • Anything audited: org-level CloudTrail for activity, plus model invocation logging (encrypted, retention-bound) for content.
  • Multi-account: enforce the above with SCPs so a single team can't opt out.

Why this matters / what I'd do

The pattern I want you to steal is enforcement over convention. It's tempting to write "always attach the guardrail" in a runbook and move on. But runbooks don't survive a rushed Friday deploy — policy conditions do. Every control here is expressed as something the platform enforces, not something a developer remembers: the model ARN is pinned in IAM, the guardrail is required by a condition key, the network path is required by  aws:SourceVpce . That's the difference between a security posture that degrades over time and one that holds.
If I were standing up a new Bedrock workload tomorrow, I'd wire all four layers before the first real prompt — because each one is an hour now or a very bad week later.
Which of these four layers is missing from your current Bedrock setup — and what's stopped you from closing it? I'd genuinely like to know where teams get stuck.
#AWS #Bedrock #GenAI #CloudSecurity #IAM #MachineLearning

Series: Best Practices (7 articles)

  1. …
  2. 4
    Amazon Bedrock Security Baseline for Production GenAI This article
Any opinions in this article are those of the individual author and may not reflect the opinions of AWS.
Enjoyed reading this content? Let the author know!

Your likes, comments, shares, and saves help creators reach more builders.

Loading recommendations

Loading article