Access OpenAI GPT models on Amazon Bedrock from Canada with cross-Region inference
Amazon Bedrock’s cross‑Region inference lets Canadian users call the latest OpenAI GPT models from Canada while routing requests to US or global regions for capacity.

Accessing OpenAI GPT Models on Amazon Bedrock from Canada
Canadian developers can now tap the newest OpenAI foundation models—GPT‑5.6, GPT‑6, and GPT‑6.1—through Amazon Bedrock’s cross‑Region inference (CRIS). The service lets you invoke these models from the Canada (Central) `ca-central-1` or Canada West (Calgary) `ca-west-1` regions while Bedrock transparently routes the request to a US or global region that hosts the model. This approach expands capacity, smooths demand spikes, and keeps your application code simple because you never need to manage destination‑region routing yourself.
---
1. Model Availability and Inference Profiles
| Model Family | Key Use‑case | Inference Profiles (Canada) | |--------------|--------------|-----------------------------| | GPT‑6.1 Sol | Strong reasoning & coding where performance and cost matter | `us.openai.gpt-6-1-sol` (US geographic) – routes within North America; `global.openai.gpt-6-1-sol` – routes to any commercial region | | GPT‑6 (Astra, Sol, Luna) | Complex end‑to‑end reasoning, agentic tasks, or high‑volume low‑cost inference | Same profile pattern as above (US geographic vs. global) | | GPT‑5.6 (Sol, Terra, Luna) | High‑reasoning, balanced production, or latency‑sensitive workloads | US geographic profile available from both Canadian regions; the global profile is only exposed from `ca-central-1` |
All models accept text and image inputs, return text, support a 1‑million‑token context window, reasoning mode, and tool calling. Prompt caching is also available on Bedrock.
---
2. Setting Up Permissions
Managed Policy (quick start)
Attach the AWS‑managed `AmazonBedrockLimitedAccess` policy to the IAM role or user that will invoke the models.
Least‑Privilege Custom Policy (production)
Below is a minimal policy that grants access to the GPT‑6 Astra global profile from `ca-central-1`:
```json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["bedrock:InvokeModel"], "Resource": [ "arn:aws:bedrock:ca-central-1::inference-profile/global.openai.gpt-6-astra" ] }, { "Effect": "Allow", "Action": ["bedrock:InvokeModel"], "Resource": ["arn:aws:bedrock:*::foundation-model/openai.gpt-6-astra"], "Condition": { "StringLike": { "bedrock:InferenceProfileArn": "arn:aws:bedrock:ca-central-1::inference-profile/global.openai.gpt-6-astra" } } } ] } ``` If you use the OpenAI SDK with an API‑key (bearer token), also add `bedrock:CallWithBearerToken`.
Service Control Policy (SCP) Example
When an organization restricts allowed regions, you can still permit CRIS traffic while blocking direct calls to disallowed regions:
```json { "Version": "2012-10-17", "Statement": [ { "Sid": "DenyBedrockOutsideCanadaUnlessCris", "Effect": "Deny", "Action": ["bedrock:InvokeModel"], "Resource": "", "Condition": { "StringNotEquals": { "aws:RequestedRegion": ["ca-central-1", "ca-west-1"] }, "ArnNotLike": { "bedrock:InferenceProfileArn": [ "arn:aws:bedrock:::inference-profile/us.openai.", "arn:aws:bedrock:::inference-profile/global.openai." ] } } } ] } ``` The condition lets Bedrock forward the request to the profile’s destination region even if that region is otherwise blocked.
---
3. Invoking a Model from Python
- Install required packages
```bash pip install openai boto3 aws-bedrock-token-generator ```
- Create a Bedrock client
```python import boto3, json from awsbedrocktoken_generator import BedrockTokenGenerator
region = "ca-central-1" # or ca-west-1 client = boto3.client("bedrock-runtime", region_name=region) ```
- Choose an inference profile – for example, the US geographic profile for GPT‑6 Astra:
```python model_id = "us.openai.gpt-6-astra" ```
- Call the OpenAI Chat Completions API via Bedrock
```python payload = { "model": modelid, "messages": [{"role": "user", "content": "Explain quantum tunneling in simple terms."}], "maxtokens": 500, "temperature": 0.7 }
response = client.invokemodel( body=json.dumps(payload).encode("utf-8"), modelId=modelid, contentType="application/json", accept="application/json" ) print(json.loads(response["body"].read())) ```
The same `model_id` works with the Responses API, Chat Completions API, or Bedrock Converse API; just adjust the request payload format accordingly. Streaming and tool‑use examples follow the same pattern—simply set `stream=true` or include a `tools` array in the payload.
---
4. Managing Quotas, Observability, and Cleanup
- Quota increases – Open a support ticket or use the AWS Service Quotas console to request higher `InvokeModel` limits for the specific inference profile.
- Observability – Bedrock emits CloudWatch metrics (`InvocationCount`, `InvocationLatency`, `ThrottledRequests`) and logs in the source region. Enable detailed monitoring to track cross‑Region latency and error rates.
- Cleanup – When a prototype is finished, revoke the custom IAM policy, delete any temporary IAM roles, and remove the Bedrock token generator credentials to avoid lingering permissions.
---
Closing Thoughts
Cross‑Region inference removes the traditional barrier of model locality, giving Canadian teams immediate access to the most capable OpenAI GPT models while preserving data‑residency preferences. By configuring the appropriate inference profile, applying least‑privilege IAM policies, and leveraging Bedrock’s built‑in observability, you can build scalable, cost‑effective generative‑AI applications that stay responsive during traffic spikes. Start with the managed policy for quick experiments, then tighten controls as you move to production—your AI workloads will benefit from the broader capacity pool without any code‑level routing complexity.
Source
Read original sourceWhy we picked this
Core model access announcement for OpenAI GPTs on Bedrock