[アップデート]Amazon BedrockでAPIキー管理が簡単になりました
こんにちは、@takaakikakei です。
Amazon Bedrockのサービス画面のDiscoverにAPI Keysの項目が追加されました。本記事ではアップデートの概要をまとめます。
Generate Amazon Bedrock API keys to easily authenticate to the Amazon Bedrock API - Amazon Bedrock
3行まとめ
- Amazon Bedrockのサービス画面にAPI Keysの項目が追加され、APIキーの管理が容易に
- 長期と短期のAPIキーを生成可能で、利便性が向上
aws-bedrock-token-generator
パッケージを利用することで、APIキーのリフレッシュも可能
何が嬉しいか
Amazon Bedrockのサービス画面にAPI Keysの項目が追加されたことで、APIキーの管理が容易になりました。これにより、開発者はAPIキーを簡単に生成・管理できるようになり、利便性が向上します。
調査
Long-termのAPIキー
Long-termのAPIキーは、12時間を超える有効期限を持つAPIキーです。
作成方法
「Long-term API keys」タブから「Generate long-term API Keys」をクリックします。
ダイアログが表示されます。作成されるAPIキーの名前を確認できます。
必須の入力フィールドとして、APIキーの有効期限の選択があります。
オプションのフィールドとして、ポリシーの選択があります。デフォルトでは、AmazonBedrockLimitedAccessというAWS管理ポリシーが適用されます。オプションでマーケットプレイスモデルにアクセスするためのAmazonBedrockMarketplaceAccessポリシーを追加することも可能です。
「Generate」ボタンをクリックすると、APIキーが生成されます。
「Download API Key」ボタンをクリックすると、APIキーのファイルがCSV形式でダウンロードされます。「Close」ボタンをクリックすると、API Keysの画面に戻ります。
確認・編集方法
作成したAPIキーは一覧に表示されます。現時点では当該画面上で編集はできません。対象のAPIキーを選択し、右上の「Manage in IAM Console」をクリックすると、IAMコンソールに遷移します。
IAMユーザーの「セキュリティ認証情報」タブの画面に遷移します。Long-termのAPIキーの実体はIAMユーザーなんですね。「Amazon Bedrock の API キー」という項目があり、先程作成したAPIキーが表示されています。Long-termのAPIキーを削除したい場合は、IAMコンソール上でユーザーを削除すればOKでした。
IAMユーザーの「許可」のタブを確認します。「AmazonBedrockLimitedAccess」ポリシーがアタッチされています。
ポリシーの中身は以下でした。bedrock:Retrieve
やbedrock:RetrieveAndGenerate
のポリシーは含まれていないため、Bedrockのナレッジベースの機能は利用できないようです。必要であれば、IAMユーザーの「許可」のタブでポリシーを追加する形になるかと思います。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BedrockAPIs",
"Effect": "Allow",
"Action": [
"bedrock:Get*",
"bedrock:List*",
"bedrock:CallWithBearerToken",
"bedrock:BatchDeleteEvaluationJob",
"bedrock:CreateEvaluationJob",
"bedrock:CreateGuardrail",
"bedrock:CreateGuardrailVersion",
"bedrock:CreateInferenceProfile",
"bedrock:CreateModelCopyJob",
"bedrock:CreateModelCustomizationJob",
"bedrock:CreateModelImportJob",
"bedrock:CreateModelInvocationJob",
"bedrock:CreatePromptRouter",
"bedrock:CreateProvisionedModelThroughput",
"bedrock:DeleteCustomModel",
"bedrock:DeleteGuardrail",
"bedrock:DeleteImportedModel",
"bedrock:DeleteInferenceProfile",
"bedrock:DeletePromptRouter",
"bedrock:DeleteProvisionedModelThroughput",
"bedrock:StopEvaluationJob",
"bedrock:StopModelCustomizationJob",
"bedrock:StopModelInvocationJob",
"bedrock:TagResource",
"bedrock:UntagResource",
"bedrock:UpdateGuardrail",
"bedrock:UpdateProvisionedModelThroughput",
"bedrock:ApplyGuardrail",
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream"
],
"Resource": "*"
},
{
"Sid": "DescribeKey",
"Effect": "Allow",
"Action": [
"kms:DescribeKey"
],
"Resource": "arn:*:kms:*:::*"
},
{
"Sid": "APIsWithAllResourceAccess",
"Effect": "Allow",
"Action": [
"iam:ListRoles",
"ec2:DescribeVpcs",
"ec2:DescribeSubnets",
"ec2:DescribeSecurityGroups"
],
"Resource": "*"
},
{
"Sid": "MarketplaceOperationsFromBedrockFor3pModels",
"Effect": "Allow",
"Action": [
"aws-marketplace:Subscribe",
"aws-marketplace:ViewSubscriptions",
"aws-marketplace:Unsubscribe"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:CalledViaLast": "bedrock.amazonaws.com"
}
}
}
]
}
ちなみに、APIキー作成時のオプション項目で「AmazonBedrockMarketplaceAccess」ポリシーを選択した場合、下図のように、IAMユーザーの「許可」のタブに「AmazonBedrockMarketplaceAccess」ポリシーがアタッチされます。
公式ドキュメントにも書かれていますが、Long-termのAPIキーは検証や試用での推奨がされており、セキュリティ要件が高い本番環境などでは、AWS STSを利用した一時的なセキュリティ認証情報や後述のShort-termのAPIキーの利用が推奨されています。
Short-termのAPIキー
Short-termのAPIキーは、12時間で期限切れになるAPIキーです。
作成方法
「Short-term API keys」タブから「Generate short-term API Keys」をクリックします。
ダイアログが表示され、12時間で期限切れになるAPIキーが生成されます。Long-termのAPIキーと同様にAmazonBedrockLimitedAccessポリシーが適用されます。
ちなみにShort-term API keysを払い出しても、BedrockのAPI Keysの一覧には表示されません。またIAMユーザーも作成されません。
実行してみる
Short-termのAPIキーを利用して、BedrockのAPIを実行してみます。
Use an Amazon Bedrock API key - Amazon Bedrock
ターミナルで払い出されたAPIキーを環境変数に設定します。
export AWS_BEARER_TOKEN_BEDROCK=bedrock-api-key-xxxxx
以下のコードは、Pythonのboto3ライブラリを使用して、Amazon Bedrockのモデルにメッセージを送信するサンプルコードです。
import os
import boto3
def main():
client = boto3.client(
service_name="bedrock-runtime",
region_name="ap-northeast-1"
)
# Define the model and message
model_id = "anthropic.claude-3-haiku-20240307-v1:0"
messages = [{"role": "user", "content": [{"text": "Hello"}]}]
response = client.converse(
modelId=model_id,
messages=messages,
)
print(response)
if __name__ == "__main__":
main()
uvを使って実行します。問題なく応答を受け取ることができました。
% uv run main.py
{'ResponseMetadata': {'RequestId': '295a5795-acd8-4f93-a8f8-ed46803db2f6', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Tue, 08 Jul 2025 02:08:29 GMT', 'content-type': 'application/json', 'content-length': '214', 'connection': 'keep-alive', 'x-amzn-requestid': '295a5795-acd8-4f93-a8f8-ed46803db2f6'}, 'RetryAttempts': 0}, 'output': {'message': {'role': 'assistant', 'content': [{'text': 'Hello! How can I assist you today?'}]}}, 'stopReason': 'end_turn', 'usage': {'inputTokens': 8, 'outputTokens': 12, 'totalTokens': 20}, 'metrics': {'latencyMs': 347}}
別リージョンのモデルを指定して実行してみます。
import os
import boto3
def main():
client = boto3.client(
service_name="bedrock-runtime",
region_name="us-east-1"
)
# Define the model and message
model_id = "us.anthropic.claude-sonnet-4-20250514-v1:0"
messages = [{"role": "user", "content": [{"text": "Hello"}]}]
response = client.converse(
modelId=model_id,
messages=messages,
)
print(response)
if __name__ == "__main__":
main()
uvを使って実行します。AccessDeniedExceptionが発生しました。現時点では、Short-termのAPIキーは作成したリージョンに依存しているようです。
% uv run main.py
..snip..
botocore.errorfactory.AccessDeniedException: An error occurred (AccessDeniedException) when calling the Converse operation: Authentication failed: Please make sure your API Key is valid.
リフレッシュ方法
以下の公式ドキュメントの通り、aws-bedrock-token-generator
というパッケージが提供されており、有効期限が切れた場合にプログラムで新しいAPIキーを再生成することも可能です。これにより、本番環境におけるAPIキー利用でもさらにセキュリティを高めることができます。
Refresh short-term Amazon Bedrock API keys for greater control and security - Amazon Bedrock
おわりに
今回のAPIキーの管理が容易になり、セキュリティや開発効率が向上することが期待されます。公式ドキュメントとしては、以下にまとめられているので、あわせてご確認ください。
Generate Amazon Bedrock API keys to easily authenticate to the Amazon Bedrock API - Amazon Bedrock
それではまた!