
Implementing Cross-Region Inference with Amazon Bedrock while Maintaining Your Landing Zone Structure
Learn how to implement Amazon Bedrock cross-region inference while maintaining your AWS Landing Zone structure
- Preserving existing governance controls while expanding AI capabilities
- Managing traffic spikes through multi-region inference distribution
- Centralizing CloudTrail logs and management in the existing source region
- Implementing precise access controls through IAM policies
- Review the existing Landing Zone
- Solution: Extending the Landing Zone
- Ensure Role Permissions
- Ensure Model Access in the source region
- Extend your existing Service Control Policies (SCPs)to enable cross-region usage
- Run Inference
- Observe the CloudTrail events
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyAllOutsideEU",
"Effect": "Deny",
"NotAction": [
"cloudfront:*",
"route53:*",
...
"trustedadvisor:*",
"waf-regional:*",
"waf:*",
"wafv2:*",
"wellarchitected:*"
],
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:RequestedRegion": [
"eu-central-1",
"us-east-1"
]
},
"ArnNotLike": {
"aws:PrincipalARN": [
"arn:aws:iam::*:role/`Role1AllowedToBypassThisSCP`",
"arn:aws:iam::*:role/`Role1AllowedToBypassThisSCP`"
]
}
}
}
]
}
eu.amazon.nova-pro-v1:0
, where the prefix “eu” indicates that inference can utilize a fixed set of EU regions. At the time of writing, the Nova models are available over cross-region inference as shown in the AWS Management Console.1
2
3
aws bedrock-runtime converse \
--model-id eu.amazon.nova-pro-v1:0 \
--messages '[{"role": "user", "content": [{"text": "Describe the purpose of a \"hello world\" program in one line."}]}]'
An error occurred (AccessDeniedException) when calling the Converse operation: User: arn:aws:sts::***:assumed-role/YourAssumedRole/username is not authorized to perform: bedrock:InvokeModel on resource: arn:aws:bedrock:eu-west-3::foundation-model/amazon.nova-pro-v1:0 with an explicit deny in a service control policy
eu-central-1
) without having to set up and manage governance for an additional region, we perform the following steps:- a) Ensure your IAM Role has the permissions to run inference calls
- b) Verify that the desired model is enabled in the source region.
- c) Extend your existing Service Control Policies (SCPs)to enable cross-region inference
eu.amazon.nova-pro-v1:0
inference profile in AWS account 111122223333 in the Europe Frankfurt Region (eu-central-1)
:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream"
],
"Resource": [
"arn:aws:bedrock:eu-central-1:111122223333:inference-profile/eu.amazon.nova-pro-v1:0"
]
},
{
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream"
],
"Resource": [
"arn:aws:bedrock:eu-north-1::foundation-model/amazon.nova-pro-v1:0",
"arn:aws:bedrock:eu-west-1::foundation-model/amazon.nova-pro-v1:0",
"arn:aws:bedrock:eu-west-3::foundation-model/amazon.nova-pro-v1:0",
"arn:aws:bedrock:eu-central-1::foundation-model/amazon.nova-pro-v1:0"
],
"Condition": {
"StringLike": {
"bedrock:InferenceProfileArn": "arn:aws:bedrock:eu-central-1:111122223333:inference-profile/eu.amazon.nova-pro-v1:0"
}
}
}
]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream"
],
"Resource": [
"arn:aws:bedrock:eu-central-1:111122223333:inference-profile/eu.*"
]
},
{
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream"
],
"Resource": [
"arn:aws:bedrock:eu-north-1::foundation-model/*",
"arn:aws:bedrock:eu-west-1::foundation-model/*",
"arn:aws:bedrock:eu-west-3::foundation-model/*",
"arn:aws:bedrock:eu-central-1::foundation-model/*"
],
"Condition": {
"StringLike": {
"bedrock:InferenceProfileArn": "arn:aws:bedrock:eu-central-1:111122223333:inference-profile/eu.*"
}
}
}
]
}
eu-central-1
(Frankfurt). You can check in the AWS console if the model you want to use is already enabled.eu-central-1
, even when using cross-region inference is used.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyAllOutsideEU",
"Effect": "Deny",
"NotAction": [
"cloudfront:*",
"route53:*",
...
"trustedadvisor:*",
"waf-regional:*",
"waf:*",
"wafv2:*",
"wellarchitected:*"
],
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:RequestedRegion": [
"eu-central-1",
"us-east-1"
]
},
"ArnNotLike": {
"aws:PrincipalARN": [
"arn:aws:iam::*:role/Role1AllowedToBypassThisSCP",
"arn:aws:iam::*:role/Role1AllowedToBypassThisSCP"
],
"bedrock:InferenceProfileArn": [
"arn:aws:bedrock:eu-central-1:*:inference-profile/eu.*"
]
}
}
}
]
}
1
"arn:aws:bedrock:eu-central-1:111122223333:inference-profile/eu.amazon.nova-pro-v1:0"
:0
utilizes a fixed list of eu regions. This list could only change through new inference_profile versions coming in the future.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
~ $ aws bedrock-runtime converse --model-id eu.amazon.nova-pro-v1:0 --messages '[{"role": "user", "content": [{"text": "Describe the purpose of a \"hello world\" program in one line."}]}]'
{
"output": {
"message": {
"role": "assistant",
"content": [
{
"text": "To demonstrate the basic syntax and structure of a programming language."
}
]
}
},
"stopReason": "end_turn",
"usage": {
"inputTokens": 14,
"outputTokens": 12,
"totalTokens": 26
},
"metrics": {
"latencyMs": 442
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
{
"eventVersion": "1.11",
"userIdentity": {
"type": "AssumedRole",
"principalId": "AROASIVGK32XK12345678:demo_user@mail.com",
"arn": "arn:aws:sts::111122223333:assumed-role/YourAssumedRole/username",
"accountId": "111122223333",
"accessKeyId": "REDACTED",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"principalId": "REDACTED",
"arn": "arn:aws:iam::111122223333:role/aws-reserved/sso.amazonaws.com/eu-central-1/YourAssumedRole",
"accountId": "111122223333",
"userName": "YourAssumedRole"
},
"attributes": {
"creationDate": "2025-03-03T08:10:59Z",
"mfaAuthenticated": "false"
}
}
},
"eventTime": "2025-03-03T09:01:24Z",
"eventSource": "bedrock.amazonaws.com",
"eventName": "Converse",
"awsRegion": "eu-central-1",
"sourceIPAddress": "63.176.150.221",
"userAgent": "aws-cli/2.23.13 md/awscrt#0.23.8 ua/2.0 os/linux#6.1.127-135.201.amzn2023.x86_64 md/arch#x86_64 lang/python#3.12.6 md/pyimpl#CPython exec-env/CloudShell cfg/retry-mode#standard md/installer#exe md/distrib#amzn.2023 md/prompt#off md/command#bedrock-runtime.converse",
"requestParameters": {
"modelId": "eu.amazon.nova-pro-v1:0"
},
"responseElements": null,
"requestID": "252ac8af-158b-4be3-82c5-b4d79942c745",
"eventID": "dc144679-96ce-435c-bf01-b7f5ec96eca9",
"readOnly": true,
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "111122223333",
"eventCategory": "Management",
"tlsDetails": {
"tlsVersion": "TLSv1.3",
"cipherSuite": "TLS_AES_128_GCM_SHA256",
"clientProvidedHostHeader": "bedrock-runtime.eu-central-1.amazonaws.com"
},
"sessionCredentialFromConsole": "true"
}
1
2
3
4
5
# contained in cloud trail events only if inference outside of source region
"additionalEventData": {
"inferenceRegion": "eu-west-3"
},
- Maintain existing governance controls while expanding AI inference capabilities
- Handle traffic spikes efficiently by using cross-region inference
- Keep all CloudTrail logs and management within your source region
- Implement fine-grained access control through customized IAM policies
Any opinions in this post are those of the individual author and may not reflect the opinions of AWS.