はじめに
AWS が Bedrock の新機能として API キーの導入を発表。
API キー認証の仕組み
従来の認証方法の課題
これまで Bedrock を使用するには、以下の複雑な手順が必要でした:
- IAM アイデンティティの作成:AWS IAM Identity Center または IAM でユーザーを作成
- 権限の設定:適切な IAM ポリシーをアタッチ
- 認証情報の生成:API コール用の認証情報を取得
APIキーによる簡素化
新しい API キー機能では、これらの手順が大幅に簡素化されます。
開発者は最小限の設定で Bedrock API にアクセスできるようなりました。
APIキーの種類
Bedrock の AP Iキーには2つのタイプがある。
1. 長期 API キー(Long-term API Keys)
- 有効期限:1 日から無期限まで設定可能
- 用途:Amazon Bedrock の探索や学習に適している
-
特徴:
- 自動的に作成される IAM ユーザーに関連付け
-
AmazonBedrockLimitedAccess
ポリシーが自動適用 - IAM サービスで権限をカスタマイズ可能
2. 短期 API キー(Short-term API Keys)
- 有効期限:アカウントセッション終了時または最大 12 時間
- 用途:高いセキュリティレベルが必要な本番環境に推奨
-
特徴:
- 現在の IAM 権限を使用
- AWS Signature Version 4 で認証
- スクリプトによる自動更新が可能
対応している機能
AWS ブログによると、オンデマンド推論、プロビジョニングされたスループット推論、モデルの微調整、蒸留、評価などのメソッドで API キー認証をサポートしているとのこと。
エージェントやナレッジベース、最近ではプロンプト管理も利用するため、このあたりが対応してなさそうなのはまだまだですかね。
実際の使用方法
1. APIキーの生成
左ナビゲーションで API Keys を選択し、Short-term API keys または Long-term API keys いずれかを選択し作成可能です。
Long-term API keys を選択した場合、APIキーの種類 にも記載の通り、自動的に IAM ユーザーが作成され、AmazonBedrockLimitedAccess
ポリシーが適用されていました。
正直 足りないポリシーを追加すのであれば良いのですが、AmazonBedrockLimitedAccess
ポリシーでは権限が大きく後から自信で絞る必要があるため、このあたりはデメリットにも思えました。
2. 環境変数の設定
API リクエストを行うときに自動的に認識されるよう、API キーを環境変数として設定します。
export AWS_BEARER_TOKEN_BEDROCK=${api-key}
set AWS_BEARER_TOKEN_BEDROCK=${api-key}
3. API 実行
Boto3 SDK は、Bedrock クライアントを作成するときに環境変数を自動的に検出して、API が実行されるとのことです。
import boto3
client = boto3.client('bedrock-runtime')
response = client.invoke_model(
modelId='anthropic.claude-3-sonnet-20240229-v1:0',
contentType='application/json',
accept='application/json',
body=json.dumps({
"messages": [{"role": "user", "content": "Hello, world!"}],
"max_tokens": 100
})
)
セキュリティ
簡素化された一方でセキュリティ対策も把握しておく必要があります。
API キーが侵害された場合
長期 API キーの場合
- API キーのステータスを非アクティブに設定する
- API キーをリセットする
- API キーを完全に削除する
長期・短期 API キー共通
-
bedrock:CallWithBearerToken
の IAM ポリシーをアタッチし、アクションを拒否する- 長期 API キー: API キーに関連付けられた IAM ユーザーへポリシーをアタッチ
- 短期 API キー: API キーの生成に使用される IAM ロールのポリシーにアタッチ
短期 API キー共通
- IAM ロールのセッションを無効にする