Amazon Bedrock を API キー で管理する
2025.8.8
概要
Amazon Bedrock で API キーによる認証機能がリリースされました。
本記事では、この新機能の検証結果をまとめます。
Amazon Bedrock が開発の効率化のために API キーを導入
投稿日: 2025 年 7 月 8 日
本日、Amazon Bedrock の API キーのリリースを発表します。
これにより、このサービスを使い始めるのが簡単になり、生成 AI 開発を加速できます。
Amazon Bedrock の API キーを使用すると、デベロッパーは IAM プリンシパルとポリシーを手動で設定しなくても、Amazon Bedrock コンソールまたは AWS SDK 内で直接アクセス認証情報を簡単に生成できます。
Amazon Bedrock が開発効率化のための API キーを導入 – AWS
Bedrock API キーには以下の 2 つのタイプがあります。
- 長期キー
- Bedrock で基本的な API リクエストを実行するための権限を持つ API キーを作成
- IAM の権限を手動で設定したりすることなく、すぐに Bedrock API を使い始めることが可能
- 内部的に IAM ユーザーが作成され、選択した IAM ポリシーがアタッチ
- 1 日から無期限まで有効期限を設定可能
- 短期キー
- API キーの生成時に使用した IAM ユーザー/ロールと同じ権限を持つ Bedrock API キーを作成
- セッションと同じ期間有効(12 時間以内)
- セキュリティ強化のため認証情報を定期的に変更する本番環境に最適
- 有効期限切れ時の自動更新設定をアプリケーションで可能
AWS の推奨は短期キーまたは一時的なセキュリティ認証情報の利用です。
詳細は以下ドキュメントで確認できます。
Amazon Bedrock API キーを生成して、Amazon Bedrock API への認証を簡単に行う – Amazon Bedrock
検証環境
- リージョン: us-east-1 (バージニア北部)
- モデル:Claude Haiku 3.5, Sonnet 3.7, Opus 4(必要なモデルはすでに有効化済み)
- 実行環境:ローカル PC(Windows) から Python boto3 (バージョン 1.39.16)を使用
boto3 のバージョンが古い場合は、環境変数を正しく認識できずエラーになるためご注意ください。
なお、本記事では API キーを記載しておりますが、セキュリティの都合上一部データを加工しているため実態とは異なる点ご注意ください。
API キーの生成
長期キーと短期キーのそれぞれで試してみます。
長期キーの場合
Bedrock のコンソールから「API keys」を選択します。
API キーの有効期限を選択することが可能です。
プリセットとして用意されている期間もあれば、個別にカスタマイズすることも可能です。
また、オプション設定で Marketplace モデルへのアクセス権限を設定できます。
今回は設定しませんが、設定する場合はキーに関連付けられた IAM ユーザーに、「AmazonBedrockMarketplaceAccess ポリシー」が付与されます。
AmazonBedrockMarketplaceAccess – AWS 管理ポリシー
作成が完了すると、API キーが表示されます。
アクセスキー同様に後からこの画面に戻れないため、API キーのコピーやキーファイルのダウンロードを忘れないように気をつけてください。
ちなみに、ダウンロードしたファイルの中身は以下でした。
ファイル名:bedrock-long-term-api-key.csv API key name,API key BedrockAPIKey-n158-at-[AWS アカウントID],ABSKQmVkcm9ja0FQSUtleS1uMTU4MTY2MTQ3MzpPRE1kMjJtNWdlSk10K2Rm
作成後の画面では、API キーの一覧が表示されていますが、API キーに対しては操作はできないようです。
また、長期キーを作成すると、実態としては IAM ユーザーが作られるようなので、IAM ユーザーも確認してみます。
確認したところ、以下の IAM ユーザーが作成されていました。
また、セキュリティ認証情報の欄に、「Amazon Bedrock の API キー」が作成されていました。
アクセスキー同様に API キーに対して、無効化や削除が行えます。
権限は、「AmazonBedrockLimitedAccess」がアタッチされています。
AmazonBedrockLimitedAccess
説明: Amazon Bedrock およびそれに必要な関連サービスへの制限付きアクセスを提供します
AmazonBedrockLimitedAccess – AWS 管理ポリシー > Amazon Bedrock の AWS 管理ポリシー – Amazon Bedrock
短期キーの場合
では、続いては短期キーを作成します。
短期キーの場合は、長期キーと違って設定項目はないので、作成を押した段階で API キーが払い出されます。
ちなみに、長期キーと違って短期キーはかなり長い API キーでした。
set AWS_BEARER_TOKEN_BEDROCK=bedrock-api-key-YmVkcm9jay5hbWF6b25hd3MuY29tLz9BY3Rpb249Q2FsbFdpdGhCZWFyZXJUb2tlbiZYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFTSUFTRklYQzJBUTc3NjdXUldIJTJGMjAyNTA3MzAlMkZ1cy1lYXN0LTElMkZiZWRyb2NrJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTA3MzBUMDUyNDExWiZYLUFtei1FeHBpcmVzPTQzMjAwJlgtQW16LVNlY3VyaXR5LVRva2VuPUlRb0piM0pwWjJsdVgyVmpFSTclMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkZ3RWFDWFZ6TFdWaGMzUXRNU0pITUVVQ0lGSlhvNXVOTE5ucUF3WTlJQks2Mkx1bQWhwWGN1Q3RXVmc4aXVRMzlPJTJGdEhNZkxkRFRDMXlGTnpacmJBbUd
API キーの作成画面を閉じても作成したキーは表示されません。
API キーを使用した動作確認
それぞれ API キーを払い出したので、実際に API キーを使って Bedrock にリクエストを送ってみます。
以下、ドキュメントのサンプルコードを使用します。
Amazon Bedrock API キーを使用する – Amazon Bedrock
なお、サンプルコードからレスポンス結果を表示するために、末尾に「print(response)」を追加しています。
今回は、バージニア北部リージョンで検証を行っていますが、利用するリージョンが異なる場合はリージョン設定を変えてください。
import os import boto3 # If you already set the API key as an environment variable, you can comment this line out os.environ['AWS_BEARER_TOKEN_BEDROCK'] = "${api-key}" # Create an Amazon Bedrock client client = boto3.client( service_name="bedrock-runtime", region_name="us-east-1" # If you've configured a default region, you can omit this line ) # Define the model and message model_id = "us.anthropic.claude-3-5-haiku-20241022-v1:0" messages = [{"role": "user", "content": [{"text": "Hello"}]}] response = client.converse( modelId=model_id, messages=messages, ) print(response)
長期キーの場合
環境変数に API キーをセットして Bedrock を呼び出します。
C:\Users>set AWS_BEARER_TOKEN_BEDROCK_LONG_TERM=ABSKQmVkcm9ja0FQSUtleSMTU4LWF0LTE0ODc2MTY2 C:\Users>echo %AWS_BEARER_TOKEN_BEDROCK_LONG_TERM% ABSKQmVkcm9ja0FQSUtleS1uMTULWF0LTE0ODc2MTY2
リクエストが成功した場合は、以下のように結果が返ってきます。
{ "ResponseMetadata": { "RequestId": "57458784-b95e-4006-8a5f-faca4d53fcc1", "HTTPStatusCode": 200, "HTTPHeaders": { "date": "Wed, 30 Jul 2025 05:59:55 GMT", "content-type": "application/json", "content-length": "363", "connection": "keep-alive", "x-amzn-requestid": "57458784-b95e-4006-8a5f-faca4d53fcc1" }, "RetryAttempts": 0 }, "output": { "message": { "role": "assistant", "content": [ { "text": "Hi there! How are you doing today? Is there anything I can help you with?" } ] } }, "stopReason": "end_turn", "usage": { "inputTokens": 8, "outputTokens": 21, "totalTokens": 29, "cacheReadInputTokens": 0, "cacheWriteInputTokens": 0 }, "metrics": { "latencyMs": 952 } }
短期キーの場合
続いては、短期キーを試します。
今度は、環境変数ではなくコード上に API キーを埋め込んでリクエストしてみます。
import os import boto3 # If you already set the API key as an environment variable, you can comment this line out os.environ['AWS_BEARER_TOKEN_BEDROCK'] = "bedrock-api-key-YmVkcm9jay5hbWF6b25hd3MuY29tLz9BY3Rpb249Q2FsbFdpdGhCZWFyZXJUb2tlbiZYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFTSUFTRklYQzJBUTc3NjdXUldIJTJGMjAyNTA3MzAlMkZ1cy1lYXN0LTElMkZiWRyb2NrJTJGYXdzNF9yZXF1" # Create an Amazon Bedrock client client = boto3.client( service_name="bedrock-runtime", region_name="us-east-1" # If you've configured a default region, you can omit this line ) # Define the model and message model_id = "us.anthropic.claude-3-5-haiku-20241022-v1:0" messages = [{"role": "user", "content": [{"text": "Hello"}]}] response = client.converse( modelId=model_id, messages=messages, ) print(response)
こちらも変わりなく結果が返ってきました。
{ "ResponseMetadata": { "RequestId": "60b3af41-a3f7-4cc0-9e23-96fc32e19f61", "HTTPStatusCode": 200, "HTTPHeaders": { "date": "Wed, 30 Jul 2025 06:11:18 GMT", "content-type": "application/json", "content-length": "363", "connection": "keep-alive", "x-amzn-requestid": "60b3af41-a3f7-4cc0-9e23-96fc32e19f61" }, "RetryAttempts": 0 }, "output": { "message": { "role": "assistant", "content": [ { "text": "Hi there! How are you doing today? Is there anything I can help you with?" } ] } }, "stopReason": "end_turn", "usage": { "inputTokens": 8, "outputTokens": 21, "totalTokens": 29, "cacheReadInputTokens": 0, "cacheWriteInputTokens": 0 }, "metrics": { "latencyMs": 825 } }
CloudTrail を見てみる
ここで、API キーの操作ログが気になったため、CloudTrail を見てみたいと思います。
「Converse API」を使って Bedrock にリクエストをしますので、この API で検索してみます。
Converse API オペレーションとの会話を実行する – Amazon Bedrock
先ほど長期キーで検証した際の API は以下の通りです。
ユーザー名が「BedrockAPIKey-n158」になっています。
{ "eventVersion": "1.11", "userIdentity": { "type": "IAMUser", "principalId": "AIDASFIXC2AQQCYJWDOAT", "arn": "arn:aws:iam::012345678912:user/BedrockAPIKey-n158", "accountId": "012345678912", "userName": "BedrockAPIKey-n158" }, "eventTime": "2025-07-30T06:18:22Z", "eventSource": "bedrock.amazonaws.com", "eventName": "Converse", "awsRegion": "us-east-1", "sourceIPAddress": "0.0.0.0", "userAgent": "Boto3/1.39.16 md/Botocore#1.39.16 ua/2.1 os/windows#11 md/arch#amd64 lang/python#3.12.3 md/pyimpl#CPython m/D,b,Z,3 cfg/retry-mode#legacy Botocore/1.39.16", "requestParameters": { "modelId": "us.anthropic.claude-3-5-haiku-20241022-v1:0" }, "responseElements": null, "additionalEventData": { "callWithBearerToken": true, "inferenceRegion": "us-west-2" }, "requestID": "55b37cc0-b4c6-4e8e-92d4-2078e70bcc15", "eventID": "3b5c3c87-c6c4-4894-a8d6-18ae4d0c77b6", "readOnly": true, "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "012345678912", "eventCategory": "Management", "tlsDetails": { "tlsVersion": "TLSv1.3", "cipherSuite": "TLS_AES_128_GCM_SHA256", "clientProvidedHostHeader": "bedrock-runtime.us-east-1.amazonaws.com" } }
続いては、短期キーの API を見てみます。
長期キーと比較すると、ユーザー名が異なっています。
様々な検証を行った結果、API キーを作成した IAM ユーザーが使用されるようです。
{ "eventVersion": "1.11", "userIdentity": { "type": "AssumedRole", "principalId": "AROASFIXC2AQ3BHXLPMA3:kiryu.tsuji@nhn-techorus.com", "arn": "arn:aws:sts::012345678912:assumed-role/AWSReservedSSO_AdministratorAccess_5a101fcce3d90832/kiryu.tsuji@nhn-techorus.com", "accountId": "012345678912", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROASFIXC2AQ3BHXLPMA3", "arn": "arn:aws:iam::012345678912:role/aws-reserved/sso.amazonaws.com/ap-northeast-1/AWSReservedSSO_AdministratorAccess_5a101fcce3d90832", "accountId": "012345678912", "userName": "AWSReservedSSO_AdministratorAccess_5a101fcce3d90832" }, "attributes": { "creationDate": "2025-07-30T01:09:17Z", "mfaAuthenticated": "false" } } }, "eventTime": "2025-07-30T06:29:58Z", "eventSource": "bedrock.amazonaws.com", "eventName": "Converse", "awsRegion": "us-east-1", "sourceIPAddress": "0.0.0.0", "userAgent": "Boto3/1.39.16 md/Botocore#1.39.16 ua/2.1 os/windows#11 md/arch#amd64 lang/python#3.12.3 md/pyimpl#CPython m/3,b,Z,D cfg/retry-mode#legacy Botocore/1.39.16", "requestParameters": { "modelId": "us.anthropic.claude-3-7-sonnet-20250219-v1:0" }, "responseElements": null, "additionalEventData": { "callWithBearerToken": true, "inferenceRegion": "us-east-2" }, "requestID": "5771ac7c-0fbe-4263-9597-8ad63d38536b", "eventID": "019b9a12-0091-475b-8367-a4fd7ca72f79", "readOnly": true, "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "012345678912", "eventCategory": "Management", "tlsDetails": { "tlsVersion": "TLSv1.3", "cipherSuite": "TLS_AES_128_GCM_SHA256", "clientProvidedHostHeader": "bedrock-runtime.us-east-1.amazonaws.com" }, "sessionCredentialFromConsole": "true" }
試しに、別の IAM ユーザーを作成してから API キーを払い出して、先ほどと同じ環境でプログラムを呼び出します。
すると今度は、作成した IAM ユーザーの名前で記録されています。
{ "eventVersion": "1.11", "userIdentity": { "type": "IAMUser", "principalId": "AIDASFIXC2AQTPRNQM33S", "arn": "arn:aws:iam::012345678912:user/cold-airflow", "accountId": "012345678912", "userName": "cold-airflow", "sessionContext": { "attributes": { "creationDate": "2025-07-30T06:42:35Z", "mfaAuthenticated": "false" } } }, "eventTime": "2025-07-30T06:45:04Z", "eventSource": "bedrock.amazonaws.com", "eventName": "Converse", "awsRegion": "us-east-1", "sourceIPAddress": "0.0.0.0", "userAgent": "Boto3/1.39.16 md/Botocore#1.39.16 ua/2.1 os/windows#11 md/arch#amd64 lang/python#3.12.3 md/pyimpl#CPython m/b,3,D,Z cfg/retry-mode#legacy Botocore/1.39.16", "requestParameters": { "modelId": "us.anthropic.claude-opus-4-20250514-v1:0" }, "responseElements": null, "additionalEventData": { "callWithBearerToken": true, "inferenceRegion": "us-west-2" }, "requestID": "ff8e1404-abc7-484c-b0f8-d4110dea40fd", "eventID": "6f379a89-6651-428d-a0ae-cfe45cf3631c", "readOnly": true, "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "012345678912", "eventCategory": "Management", "tlsDetails": { "tlsVersion": "TLSv1.3", "cipherSuite": "TLS_AES_128_GCM_SHA256", "clientProvidedHostHeader": "bedrock-runtime.us-east-1.amazonaws.com" }, "sessionCredentialFromConsole": "true" }
API キーが侵害された場合の対処法
API キーが侵害されたときの対処法も気になったので検証してみました。
API キーは、以下の方法で使用権限を取り消すことができます。
- 長期キー
- キーのステータスの無効化
- キーは後で再アクティブ化可能
- キーをリセット
- キーを完全に削除
- IAM ユーザーの権限を削除
- IAM ユーザー/ロールのセッションを無効にする
- 短期キー
- IAM ユーザー/ロールのセッションを無効にする
侵害された長期および短期の Amazon Bedrock API キーの処理 – Amazon Bedrock
キーのステータスの無効化
IAM の画面から操作を行います。
アクセスキー同様に、対象の API キーを選択して無効化することができます。
無効化した状態で呼び出すとエラーになります。
botocore.errorfactory.AccessDeniedException: An error occurred (AccessDeniedException) when calling the Converse operation: Authentication failed: Please make sure your API Key is valid.
再度有効化することも可能です。
キーをリセット
API キーの再発行という形になります。
リセットすると作成時と同じように API キーの画面が表示されます。
キーを完全に削除
API キーを削除するだけです。
ただし、削除前に無効化する必要があります。
無効化すると、「confirm」が入力できます。
IAM ユーザーの権限を削除
長期キーの実態としては、IAM ユーザーが存在するので、その IAM ユーザーからポリシーを削除すれば実行できなくなります。
IAM ユーザー/ロールのセッションを無効にする
認証したセッションを無効化する方法です。
この方法は、短期キーを作成した際に使用したプリンシパル(IAM ユーザー/ロール)によって操作方法が異なります。
IAM ユーザーで短期キーを作成した場合は、そのユーザーのコンソールアクセスを無効にする際に、アクティブなセッションを取り消すオプションが利用できます。
アクセスの無効化を行い、自動的に付与されたポリシーが以下の通りです。
この状態でプログラムを実行すると、以下のエラーが発生します。
botocore.errorfactory.AccessDeniedException: An error occurred (AccessDeniedException) when calling the Converse operation: User: arn:aws:iam::012345678912:user/cold-airflow is not authorized to perform: bedrock:InvokeModel on resource: arn:aws:bedrock:us-east-1:012345678912:inference-profile/us.anthropic.claude-opus-4-20250514-v1:0 with an explicit deny in an identity-based policy
IAM ロールで短期キーを作成した場合は、IAM ロールの管理画面から「セッションの取り消し」操作を行います。
IAM ロールの一時的なセキュリティ認証情報を取り消す – AWS Identity and Access Management
短期キーを更新する
「aws-bedrock-token-generator」 を使うことで新しいキーを作成することができるようです。
AWS Bedrock Token Generator for Python は、 AWS Bedrock API 認証用の短期ベアラートークンを生成する軽量ユーティリティライブラリです。
このライブラリは、長期的な認証情報を公開することなく、AWS Bedrock サービスへの認証に使用できる、安全で期限付きのトークンの作成プロセスを簡素化します。
https://github.com/aws/aws-bedrock-token-generator-python
基本的には、使い捨てで新しいキーを作成する形になります。
詳細は以下をご覧ください。
制御とセキュリティを強化するために、短期の Amazon Bedrock API キーを更新します – Amazon Bedrock
API キーの有効期限切れの動作
有効期限切れになった API キーを呼び出すとどうなるのか気になったので検証しました。
長期キーの場合
有効期限中と同じようにリクエストを投げてみます。
すると以下のエラーが表示されました。
botocore.errorfactory.AccessDeniedException: An error occurred (AccessDeniedException) when calling the Converse operation: Authentication failed: Please make sure your API Key is valid. ↓翻訳 botocore.errorfactory.AccessDeniedException: Converse 操作を呼び出した際にエラーが発生しました (AccessDeniedException): 認証に失敗しました: API キーが有効であることを確認してください。
コンソールで API キーを確認すると、期限切れになっていました。
短期キーの場合
こちらも同じように実行します。
長期キーとは違ったエラーになりました。
botocore.errorfactory.AccessDeniedException: An error occurred (AccessDeniedException) when calling the Converse operation: Bearer Token has expired ↓翻訳 botocore.errorfactory.AccessDeniedException: Converse 操作を呼び出した際にエラーが発生しました (AccessDeniedException): ベアラートークンが期限切れです
まとめ
様々な検証を行いましたが、セキュリティ上のリスクを考慮すると、設定する権限や漏洩時の対策を十分に検討する必要がありそうです。
しかし、手軽に Bedrock をプログラムから呼び出す際にはとても便利かなと思いました。
また、この API キーならクロスアカウントや SaaS から Bedrock を利用したい際にも活用できそうです。
参考資料
短期 Amazon Bedrock API キーを更新して制御とセキュリティを強化する – Amazon Bedrock
Amazon Bedrock が開発効率化のための API キーを導入 – AWS
Amazon Bedrock API キーで AI 開発を加速 | 人工知能
Amazon Bedrock の API キー – AWS Identity and Access Management
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitter2021年新卒入社。インフラエンジニアです。RDBが三度の飯より好きです。 主にデータベースやAWSのサーバレスについて書く予定です。あと寒いのは苦手です。
Recommends
こちらもおすすめ
Special Topics
注目記事はこちら

データ分析入門
これから始めるBigQuery基礎知識
2024.02.28

AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16