目次
はじめに
この記事では、別アカウントのAmazon Bedrockを、Lambda経由で呼び出すためのクロスアカウント構成について解説します。
通常、同一アカウントで呼び出す場合がほとんどだと思いますが、以下のように同一アカウントでの利用が難しい場合があります。
- クオータ値が低く設定されているアカウントの場合
- AWSチャネルパートナーから提供されているアカウントの場合
特に新規AWSアカウントでは、Anthropic Claude Sonnet 4.5など人気のモデルに対する呼び出しクオータが低く設定されていることが多く、利用状況に応じてクオータ値が変動します。先日新規作成したアカウントでは「Cross-region model inference requests per minute for Anthropic Claude Sonnet 4.5 V1」が「2」と設定されており、クオータ値を超えると「ThrottlingException: Too many requests」のエラーとなってしまいます。
クオータ上限の緩和申請は可能ですが、申請に時間がかかったり引き上げが難しいケースもあるようです。このような場合にクオータに余裕のある別のAWSアカウントのBedrockを呼び出すことで、制限を回避して利用を継続することができます。
別AWSアカウントのBedrockを呼び出す方法
本記事では検証用に2つのAWSアカウントを使用し、以下の構成を作成します。
- 呼び出し元アカウントにLambda関数を用意します。
- Bedrockアカウント側にはBedrockを呼び出す権限を与えたIAMロール(クロスアカウントロール)を準備します。
- このクロスアカウントロールに対し、呼び出し元アカウントLambdaからのAssumeRoleを許可します。
- Lambda内でAssumeRoleを実行し、一時認証情報を利用しBedrockアカウント側のBedrockを呼び出します。
構成図にすると以下になります。

1.Bedrockの呼び出しを実行するLambda関数の作成
まず、呼び出し元アカウント(1111xxxxxxxx)に、以下のPythonのLambda関数を作成します。
モデルには、Anthropic Claude Sonnet 4.5の国内限定のクロスリージョン推論プロファイル「jp.anthropic.claude-sonnet-4-5-20250929-v1:0」を利用します。
この関数では、コードの24行目以降で、Bedrockアカウント側のロールにAssumeRoleを実行し、取得した一時認証情報を用いてBedrockのモデルの呼び出しを行っています。
|
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
import json import boto3 def lambda_handler(event, context): """ クロスアカウントBedrockアクセスのサンプル実装 別AWSアカウントのBedrockモデルを呼び出す """ # 現在のアカウントIDを取得 sts_client = boto3.client('sts') current_identity = sts_client.get_caller_identity() current_account = current_identity['Account'] target_account_role_arn = 'arn:aws:iam::2222xxxxxxxx:role/BedrockAccessRole' target_account = target_account_role_arn.split(':')[4] model_id = 'jp.anthropic.claude-sonnet-4-5-20250929-v1:0' prompt = 'クロスアカウントでのBedrock呼び出しテストです' print(f"Lambda Account: {current_account}") print(f"Target Account: {target_account}") print("Assuming role...") # 別アカウントのIAMロールにAssumeRole assumed_role = sts_client.assume_role( RoleArn=target_account_role_arn, RoleSessionName='lambda-bedrock-cross-account', DurationSeconds=900 ) assumed_account = assumed_role['AssumedRoleUser']['Arn'].split(':')[4] print(f"Role assumed: {current_account} -> {assumed_account}") # AssumeRoleで取得した一時認証情報 credentials = assumed_role['Credentials'] # 別アカウントのBedrockクライアントを作成 bedrock_client = boto3.client( 'bedrock-runtime', aws_access_key_id=credentials['AccessKeyId'], aws_secret_access_key=credentials['SecretAccessKey'], aws_session_token=credentials['SessionToken'], region_name='ap-northeast-1' ) print("Invoking Bedrock...") # Bedrockモデルを呼び出し response = bedrock_client.invoke_model( modelId=model_id, body=json.dumps({ "anthropic_version": "bedrock-2023-05-31", "max_tokens": 1000, "messages": [ { "role": "user", "content": prompt } ] }), contentType='application/json' ) print("Bedrock invocation successful") # レスポンスを解析 response_body = json.loads(response['body'].read()) return { 'statusCode': 200, 'body': json.dumps({ 'message': 'Cross-account Bedrock access successful', 'lambda_account': current_account, 'bedrock_account': assumed_account, 'response': response_body['content'][0]['text'] }, ensure_ascii=False) } |
2.Bedrockアクセス用ロールの作成
次に、Bedrockアカウント(2222xxxxxxxx)側にて、 Lambda側からAssumeRoleを許可するクロスアカウントロールを作成します。
信頼ポリシーには、呼び出し元アカウントのLambda実行ロールからのみAssumeRoleを許可するよう設定します。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::1111xxxxxxxx:role/lambda-execution-role" }, "Action": "sts:AssumeRole" } ] } |
権限ポリシーは、Bedrockモデルへのアクセス許可を設定します。
今回は「jp.anthropic.claude-sonnet-4-5-20250929-v1:0」のため、 推論プロファイル(inference-profile)および呼び出されるリージョンの基盤モデルへのアクセス許可が必要です。
(東京:ap-northeast-1および大阪:ap-northeast-3の基盤モデルARNを許可)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "bedrock:InvokeModel", "Resource": [ "arn:aws:bedrock:ap-northeast-1:2222xxxxxxxx:inference-profile/jp.anthropic.claude-sonnet-4-5-20250929-v1:0", "arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-sonnet-4-5-20250929-v1:0", "arn:aws:bedrock:ap-northeast-3::foundation-model/anthropic.claude-sonnet-4-5-20250929-v1:0" ] } ] } |
3.AssumeRole権限の付与
再度、呼び出し元アカウント(1111xxxxxxxx)側に戻って、 Lambdaの実行ロールに2.で作成したBedrockアカウント側のロールへのAssumeRoleの権限を設定します。
|
1 2 3 4 5 6 7 8 9 10 |
"lambda_execution_role_policy": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::2222xxxxxxxx:role/BedrockAccessRole" } ] } |
4.実行確認
実環境で検証した際の、Lambda実行ログは以下のようになります。(アカウント名等は置き換えています)
AssumeRoleでアカウントを切り替え後に、Bedrockの呼び出しが行われていることがわかります。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
START RequestId: 3174d738-45ca-4308-a114-35b250e23ba1 Version: $LATEST Lambda Account: 1111xxxxxxxx Target Account: 2222xxxxxxxx Assuming role... Role assumed: 1111xxxxxxxx -> 2222xxxxxxxx Invoking Bedrock... Bedrock invocation successful Bedrock Response: クロスアカウントでのBedrock呼び出しテストを確認しました。 現在、正常に応答できています。テストは成功です。 何か特定の機能や動作を確認したい項目はありますか? END RequestId: 3174d738-45ca-4308-a114-35b250e23ba1 REPORT RequestId: 3174d738-45ca-4308-a114-35b250e23ba1 Duration: 3456.73 ms Billed Duration: 3457 ms Memory Size: 128 MB Max Memory Used: 81 MB |
まとめ
今回は 別アカウントのBedrockを呼び出せるようにする方法を紹介しました。 この方法を利用することで、クオータの制限で困っている場合の一時的な回避や、Bedrockの利用を集約して制御することも可能となります。
また利用するモデルの制限をBedrock側のアカウントで一元管理できる、請求書払いでの海外送金分を集約できるなど副次的なメリットもあります。
同一アカウントでのBedrock呼び出しが難しい場合は、クロスアカウント構成も検討してみてください。
執筆者プロフィール

- tdi デジタルイノベーション技術部
-
開発PJの技術支援や新技術検証などを行っています。
2024-2025 Japan AWS Top Engineers (Services) / 2023-2025 Japan AWS All Certifications Engineers
この執筆者の最新記事
Pick UP!2025年11月20日AssumeRoleを使ってLambda関数から別アカウントのBedrockを呼び出す
Pick UP!2025年4月2日MFA必須化に備える!IAMルートアクセス管理の導入方法と注意点を解説!
Pick UP!2023年12月28日コンソール操作からコードを生成する「AWS Console-to-Code」
AWS・クラウド2020年1月16日Alexaフラッシュブリーフィングスキルの作り方
