Skip to main content
security · aws

Bedrock guardrails with no sensitive-information (PII) policy

resource types
1
rule IDs covered
1
severity
high

What does ZopNight detect here?

ZopNight inspects each Bedrock guardrail's DRAFT configuration and raises a high-severity finding when the sensitive-information policy is confirmed "disabled": a guardrail that filters topics but lets names, emails and SSNs pass. Absent enrichment data produces no finding, and the rec claims $0. The gap is safety, not spend.

Signal and threshold

How ZopNight evaluates Bedrock guardrails with no sensitive-information (PII) policy.
Field Value
Rule IDsRC-1615
Categorysecurity
Severityhigh
Metricnone — pure configuration read
Sourcebedrock_guardrail_pii.go

Topic filters without a sensitive-information policy

A Bedrock guardrail bundles several independent policies: content filters, denied topics, word lists, and a sensitive-information policy that catches PII entities and custom regex patterns. Teams routinely configure the first three and skip the last, leaving a guardrail that blocks off-topic conversation while personal data (names, emails, phone numbers, SSNs) flows through both prompts and responses untouched. For any workload whose purpose includes protecting personal data, that half-configured guardrail is a false sense of safety, so the finding ships at high severity under the security category.

Why the DRAFT config is what gets judged

Enrichment calls GetGuardrail without a version argument, which returns the DRAFT working copy, and stamps the result onto the resource as piiProtection: enabled or disabled. DRAFT is the current intended configuration and normally sits at or ahead of any published version, so it is a fair proxy for what production enforces. The known blind edge: if a protected version was published and DRAFT was later edited to drop the PII policy while traffic stays pinned to the older version, the rule over-reports. Resolving that would require knowing which guardrail version production actually invokes, which Bedrock’s control-plane APIs alone cannot tell you. When the flag is absent because enrichment never ran, the rule stays silent; only a confirmed disabled fires.

Inspecting sensitiveInformationPolicy directly

Terminal window
aws bedrock get-guardrail --guardrail-identifier gr-abc123 \
--query 'sensitiveInformationPolicy'

null reproduces the finding: no PII entities and no regexes are configured on the DRAFT. Add --guardrail-version 1 to audit a published version instead of the working copy.

Block, Mask, and publishing a new version

Add a sensitive-information filter with the PII entity types the workload can encounter, plus regex patterns for anything domain-specific like account numbers. Choose the action deliberately: Block rejects the whole exchange, Mask replaces the entity with a tag and lets the conversation continue, usually the right default for assistants. Then publish a new guardrail version and move consumers to it; editing DRAFT alone protects nobody until a version carrying the policy is what production invokes.

See it fire on your bill.

Connect an account read-only. The first findings land in minutes.

417 rule families across 353 resource types on 22 platforms. Every threshold, metric, and IAM action is documented on these pages before you grant anything.

417 rule families documented
353 resource types covered
read-only default access level
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·