[アップデート] AWS IAM の条件キーを使って、Amazon Bedrock API キーの生成・使用時に特定期間のみ許可できるようになりました
いわさです。
Amazon Bedrock では API キーを発行し、それを使って Bedrock API 呼び出し時の認証用に使うことができます。
これまで様々な条件の API キーを作成することができたのですが、先日のアップデートで IAM 条件キーがいくつか追加され、より細かいコントロールができるようになりました。
例を挙げると以下のようなことができるようになります。
- 短期キーの使用を禁止する
- 長期キーは有効期限 5 日以内のものしか生成できないようにする
使ってみたので紹介します。
使ってみる
まずはそのまま API キーが正常に動作するか確認しておきましょう。
Bedrock コンソールの API keys メニューから短期キー(Short-term API keys)、長期キー(Long-term API keys)の発行が可能です。
発行されたキーを cURL で使ってみます。モデルは適当に Haiku 3.5 にしました。
% export AWS_BEARER_TOKEN_BEDROCK=hogehoge
% curl -X POST "https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-haiku-20241022-v1:0/converse" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AWS_BEARER_TOKEN_BEDROCK" \
-d '{
"messages": [
{
"role": "user",
"content": [{"text": "Hello"}]
}
]
}'
{"metrics":{"latencyMs":1139},"output":{"message":{"content":[{"text":"Hi there! How are you doing today? Is there anything I can help you with?"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":8,"outputTokens":21,"totalTokens":29}}
応答を得ることができていますね。
キー使用時のコントロール
では、まずはキー使用時のコントールを行ってみましょう。
API キーを使うとbedrock:CallWithBearerToken
アクションが呼び出されるのですが、今回のアップデートでbedrock:bearerTokenType
条件キーを使うことができるようになりました。
値として指定できるのはSHORT_TERM
かLONG_TERM
です。
これを使うことで短期キーのみbedrock:CallWithBearerToken
などの設定が可能です。
今回は次のようにbedrock:bearerTokenType
がSHORT_TERM
の時にbedrock:CallWithBearerToken
を拒否するポリシーを追加してみます。
API キーを使って呼び出ししてみると、短期キーが使えなくなりました。
% curl -X POST "https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-haiku-20241022-v1:0/converse" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AWS_BEARER_TOKEN_BEDROCK" \
-d '{
"messages": [
{
"role": "user",
"content": [{"text": "Hello"}]
}
]
}'
{"Message":"User: arn:aws:sts::123456789012:assumed-role/cm-iwasa.takahito/cm-iwasa.takahito is not authorized to perform: bedrock:CallWithBearerToken on resource: * with an explicit deny in an identity-based policy"}
この状態で長期キーを使って呼び出してみると、こちらは成功します。なるほど。
% export AWS_BEARER_TOKEN_BEDROCK=fugafuga
% curl -X POST "https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-haiku-20241022-v1:0/converse" \ -H "Content-Type: application/json" \
-H "Authorization: Bearer $AWS_BEARER_TOKEN_BEDROCK" \
-d '{
"messages": [
{
"role": "user",
"content": [{"text": "Hello"}]
}
]
}'
{"metrics":{"latencyMs":1430},"output":{"message":{"content":[{"text":"Hi there! How are you doing today? Is there anything I can help you with?"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":8,"outputTokens":21,"totalTokens":29}}
長期キー生成時のコントロール
次はキー生成権限をコントロールしてみます。
前提として短期キーの生成は拒否することはできません。短期キーをコントロールしたい場合は前述の方法でキー使用を禁止する方向になると思います。
ここでは長期キー生成時に細かい条件を設定してみます。
長期キーは 1 日から、期限なしあるいは最大 366,000 日まで設定することができます。
長期キーは許可するが 30 日とかはちょっと嫌だな。みたいな時に、今回追加されたiam:ServiceSpecificCredentialServiceName
とiam:ServiceSpecificCredentialAgeDays
を使ってコントロールができます。
個別の認証情報を作成できるサービスは Bedrock 以外にもあるのですが、iam:ServiceSpecificCredentialServiceName
を使ってどのサービスを条件にするか指定ができます。
そして、iam:ServiceSpecificCredentialAgeDays
を使って日数の条件を設定することができます。
今回は次のように Bedrock API キー生成時に 5 日より大きい日数の場合は拒否するポリシーを設定してみました。
アクションはiam:CreateServiceSpecificCredential
です。
API キーを生成してみましょう。有効期限 5 日の場合はこれまでどおり作成することができました。
有効期限 30 日の場合は次のようにエラーが発生して生成ができませんでした。なるほど。
ただし、長期キーの場合は IAM ユーザーが作成される仕組みになっているのですが、IAM ユーザー自体は作成されていました。
確認してみると Bedrock API キーは発行されていなかったので、たしかに長期キーの生成はできていないのですが。
さいごに
本日は AWS IAM の条件キーを使って、Amazon Bedrock API キーの生成・使用時に特定期間のみ許可できるようになったので使ってみました。
Bedrock API キーに関して、より細かい発行条件・使用条件を設定できるようになりました。
良いですね。これまでよりも認証情報やセキュリティの要件に合わせやすくなったのではないでしょうか。