What Happened

AWS has introduced Amazon Bedrock Projects, a cost attribution feature that lets engineering and finance teams assign AI inference spending to specific workloads. By attaching resource tags to a project and passing a project ID in API calls, organizations can filter and analyze spend in AWS Cost Explorer and AWS Data Exports at the workload level rather than the account level.

The feature supports AWS's OpenAI-compatible APIs — specifically the Responses API and Chat Completions API — meaning teams already using the OpenAI SDK pointed at Bedrock endpoints can adopt it without changing their core inference logic. Any request sent without a project ID is automatically bucketed into a default project, preventing unattributed spend from disappearing into noise.

Required IAM permissions are bundled under the managed policy AmazonBedrockMantleFullAccess for prototyping, though AWS recommends least-privilege scoping for production. Cost allocation tags must be activated in the AWS Billing and Cost Management console before they appear as filterable dimensions in Cost Explorer — a step that can take up to 24 hours to propagate.

Technical Deep Dive

A Bedrock Project is a logical boundary — not a separate AWS account or VPC — that maps to a workload such as a production application, a staging environment, or a one-off experiment. The attribution flow works in three layers:

  • Tagging layer: You define key-value tags (e.g., team=platform, env=prod, app=customer-support-bot) and attach them to the project resource at creation time.
  • API layer: Each inference request includes the project ID as a parameter. Bedrock stamps that ID and its associated tags onto the usage record.
  • Billing layer: Activated cost allocation tags surface in Cost Explorer as filterable dimensions, enabling grouping by project, team, or environment.

A minimal Python example using the OpenAI SDK against Bedrock would look like:

from openai import OpenAI

client = OpenAI(
    base_url="https://bedrock-runtime.us-east-1.amazonaws.com/",
    api_key="..."  # AWS credentials via SDK chain
)

response = client.chat.completions.create(
    model="anthropic.claude-3-5-sonnet-20241022-v2:0",
    messages=[{"role": "user", "content": "Summarize this ticket."}],
    extra_body={"project_id": "proj-abc123"}
)

Unlike AWS Cost Allocation Tags applied to static resources (EC2 instances, S3 buckets), Bedrock Projects tags are applied to ephemeral inference calls, which previously had no native grouping mechanism beyond account-level billing. Competing approaches — such as running separate Bedrock accounts per team — achieve isolation but add operational overhead and complicate cross-team model access. Bedrock Projects keeps everything in one account while providing the attribution granularity of multi-account setups.

AWS Data Exports (formerly Cost and Usage Reports) can ingest the same tag dimensions for longer-retention analysis or feeding into a data warehouse like Redshift or Athena for custom dashboards.

Who Should Care

Platform and MLOps teams managing shared Bedrock environments across multiple product squads will get the most immediate value. When a cost spike appears, project-level attribution lets you identify which application or experiment caused it within minutes rather than correlating timestamps across logs.

Finance and FinOps teams running AI chargeback programs can now produce per-team or per-product invoices directly from Cost Explorer without building custom log-parsing pipelines. This is particularly relevant for enterprises where AI budgets are allocated at the business-unit level.

Developers running experiments — fine-tuning evaluations, prompt engineering comparisons, A/B tests — can create short-lived projects to isolate experimental spend from production, then delete the project when the experiment concludes. This prevents experimental costs from inflating production cost centers.

Teams already using the OpenAI SDK with Bedrock as a drop-in backend face minimal migration effort since the project ID is passed as an extra body parameter rather than requiring SDK changes.

What To Do This Week

Follow these steps to get cost attribution running in a test environment:

  • Ensure your IAM role has AmazonBedrockMantleFullAccess or equivalent least-privilege permissions for Bedrock Projects and tagging.
  • Create a project via the AWS Console or CLI: aws bedrock create-project --name "my-app-prod" --tags team=platform,env=prod
  • Activate cost allocation tags in the AWS Billing console under Cost Allocation Tags — search for your tag keys and activate them. Allow up to 24 hours for propagation.
  • Update your inference calls to pass the project ID using extra_body={"project_id": "proj-xxxx"} in the OpenAI SDK or the equivalent parameter in Boto3.
  • After 48 hours of traffic, open AWS Cost Explorer, group by your activated tag key, and verify spend is attributed correctly before rolling out to production workloads.