Skip to content

Amazon Bedrock (control plane)

Protocol: REST-JSON Endpoint: http://localhost:4566/guardrails (SigV4 service bedrock)

This page covers the Bedrock control plane. Model invocation is a separate service that shares the same signing name: see Bedrock Runtime.

Supported Actions

Action Description
CreateGuardrail Create a guardrail; returns the DRAFT version, READY immediately
GetGuardrail Read a guardrail by id or ARN, at DRAFT or a numbered guardrailVersion
UpdateGuardrail Replace the DRAFT configuration
CreateGuardrailVersion Snapshot the DRAFT under the next numerical version
DeleteGuardrail Delete one numerical version, or the guardrail and all its versions
ListGuardrails List every guardrail's DRAFT, or every version of one guardrail
TagResource Tag a guardrail (POST /tagResource)
UntagResource Remove tags from a guardrail (POST /untagResource)
ListTagsForResource List a guardrail's tags (POST /listTagsForResource)

Guardrails are versioned. The working copy is DRAFT, and GetGuardrail without a guardrailVersion query parameter returns it. CreateGuardrailVersion copies the current DRAFT to 1, 2 and so on. Those snapshots are immutable, because UpdateGuardrail only ever writes DRAFT.

GuardrailStatus is READY from the first read, so aws_bedrock_guardrail's status poll completes without a transition. Policy blocks are submitted as the *Config shapes (topicPolicyConfig, contentPolicyConfig and the rest) and read back under their unsuffixed names (topicPolicy.topics, contentPolicy.filters), matching the AWS model.

ListGuardrails returns one DRAFT summary per guardrail. Passing guardrailIdentifier returns every version of that one guardrail instead. Both forms honour maxResults and nextToken.

DeleteGuardrail takes a GuardrailNumericalVersion, so a version query parameter of DRAFT is rejected with ValidationException. Omit the parameter to delete the guardrail and all of its versions.

Both an id (abc123def456) and a full ARN are accepted wherever the API takes a guardrailIdentifier or a resourceARN.

kmsKeyId on CreateGuardrail and UpdateGuardrail is a KmsKeyId: a key id, a key ARN, an alias name or an alias ARN. kmsKeyArn on the read shapes is a KmsKeyArn, which is only ever the full key ARN, so every accepted form is resolved through KMS to that one shape. A key that does not exist, is disabled, or is pending deletion is rejected with ValidationException.

The AWS model's length constraints are enforced: name is 1 to 50 characters matching [0-9a-zA-Z-_]+, description is 1 to 200, and blockedInputMessaging and blockedOutputsMessaging are 1 to 500 each. A value outside those bounds is rejected with ValidationException.

The model's tag limits are enforced as well. A TagList holds at most 200 items on one request, and a longer array is rejected with ValidationException. A guardrail holds at most 50 tags, counted over the tags already on it together with the tags in the current request, so CreateGuardrail and TagResource both raise TooManyTagsException once the resulting total would pass 50. Replacing the value of a tag key the guardrail already carries does not add to that total.

Not implemented

The rest of the Bedrock control plane is absent rather than stubbed, because emulating it faithfully would require behaviour Floci has no way to model:

  • ListFoundationModels and GetFoundationModel. The AWS service model carries no enumeration of foundation model ids, so any catalogue would be invented data.
  • Custom model, model customization, model import and distillation jobs. These depend on real training runs.
  • Model evaluation and evaluation jobs. These depend on real inference.
  • Provisioned throughput, inference profiles and prompt routers. These describe real capacity reservations and routing.
  • Model invocation logging, batch inference and async invoke. These are data-plane operations backed by real model execution.

Configuration

Variable Default Description
FLOCI_SERVICES_BEDROCK_ENABLED true Enable or disable the service

Examples

export AWS_ENDPOINT_URL=http://localhost:4566

aws bedrock create-guardrail \
  --name my-guardrail \
  --blocked-input-messaging "Blocked." \
  --blocked-outputs-messaging "Blocked." \
  --content-policy-config '{"filtersConfig":[{"type":"HATE","inputStrength":"HIGH","outputStrength":"HIGH"}]}'

aws bedrock get-guardrail --guardrail-identifier abc123def456

aws bedrock create-guardrail-version --guardrail-identifier abc123def456

aws bedrock list-guardrails

aws bedrock tag-resource \
  --resource-arn arn:aws:bedrock:us-east-1:000000000000:guardrail/abc123def456 \
  --tags key=team,value=ai

aws bedrock delete-guardrail --guardrail-identifier abc123def456