Getting Started with Claude on Amazon Bedrock — The Enterprise Setup Path
Amazon Bedrock is the managed AWS service for accessing Claude without operating model infrastructure yourself. For enterprise teams already inside AWS, Bedrock is usually the right deployment path: it handles authentication through IAM, keeps your data inside your AWS account boundary, and satisfies the security and compliance posture most enterprise procurement teams require. Here is what the setup path looks like in practice.
Step-by-step setup
- 1. Enable Bedrock in your AWS account: Navigate to Amazon Bedrock in the AWS console and request access to the Claude model family. Model access is granted per-region; enable it in every region you intend to deploy from. Cross-region inference profiles are available for latency and failover management.
- 2. Create an IAM role with Bedrock permissions: Attach the
AmazonBedrockFullAccesspolicy for development, or scope it down tobedrock:InvokeModeland specific model ARNs for production. Avoid embedding API keys — use IAM roles attached to your EC2 instances, Lambda functions, or ECS tasks. - 3. Choose the right Claude model: Claude Sonnet 4.5 is the best default for most production workloads — it balances speed, capability, and cost. Use Claude Opus 4.5 for tasks that require deep reasoning over complex documents. Use Claude Haiku 4.5 for high-throughput, cost-sensitive tasks like classification or short-form generation.
- 4. Use the Converse API for multi-turn: The Bedrock
converseAPI normalises the request/response format across model families and supports streaming out of the box — prefer it over the rawinvoke_modelendpoint for new workloads. - 5. Enable guardrails: Bedrock Guardrails let you apply content filtering, PII detection, and topic blocking as a managed layer independent of your system prompt. This separation of concerns makes the safety layer auditable and independent of the application code.
# Minimal Python example using boto3
import boto3, json
client = boto3.client("bedrock-runtime", region_name="us-east-1")
response = client.converse(
modelId="anthropic.claude-sonnet-4-5-20251001",
messages=[{"role": "user", "content": [{"text": "Summarise this contract in three bullet points."}]}],
system=[{"text": "You are a legal document analyst. Be concise and accurate."}],
)
print(response["output"]["message"]["content"][0]["text"])