11
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

BedrockのAPIキーについての諸々

Posted at

BedrockがAPIキーに対応しました。

これまでは、他のAWSサービス同様にアクセスキーやシークレットキー、セッショントークンを使用した認証情報が必要でしたが、これらの代わりに一つのAPIキーでアクセスが可能になります。
OpenAIのAPIやAnthripicのAPIなど、APIキーだけで呼び出せるAPIが多いので、Bedrockでも同様のことができるようになりました。

APIキーの種類

APIキーは、短期間(12時間)だけ使えるものと、長期間(1日以上366,000日、または無期限)使えるものの二種類あり、仕組みが異なっています。

短期APIキーは、キーを生成したIAMロールと同じ権限を持つトークンが発行されます。
長期APIキーは、任意のIAMユーザーを指定して、トークンを発行します。

短期APIキーの発行方法

マネジメントコンソールで作成する他に、専用のライブラリーが用意されています。

Python

Java

JavaScript/TypeScript

長期APIキーの発行方法

長期APIキーは、なんとIAMのAPIで作成します。こんな感じで生成できます。(CloudShellで実行できます)

export IAM_USER_NAME=bedrock-api-user
export NUMBER_OF_DAYS=1

aws iam create-user --user-name ${IAM_USER_NAME}

aws iam attach-user-policy \
  --user-name ${IAM_USER_NAME} \
  --policy-arn arn:aws:iam::aws:policy/AmazonBedrockLimitedAccess

aws iam create-service-specific-credential \
  --user-name ${IAM_USER_NAME} \
  --service-name bedrock.amazonaws.com \
  --credential-age-days ${NUMBER_OF_DAYS}
{
    "ServiceSpecificCredential": {
        "CreateDate": "2025-07-10T13:03:12+00:00",
        "ExpirationDate": "2025-07-11T13:03:12+00:00",
        "ServiceName": "bedrock.amazonaws.com",
        "ServiceCredentialAlias": "bedrock-api-user-at-637423213562",
        "ServiceCredentialSecret": ...トークン,
        "ServiceSpecificCredentialId": "ACCAZI2LCLP5IQSQEZBRM",
        "UserName": "bedrock-api-user",
        "Status": "Active"
    }
}

長期APIキーはリセットできます。

aws iam reset-service-specific-credential \
  --service-specific-credential-id ACCAZI2LCLP5IQSQEZBRM \
  --user-name ${IAM_USER_NAME}

削除もできます。

aws iam delete-service-specific-credential \
  --service-specific-credential-id ACCAZI2LCLP5IQSQEZBRM \
  --user-name ${IAM_USER_NAME}

Converse APIを呼んでみる

短期APIキー、長期APIキーともに、環境変数のAWS_BEARER_TOKEN_BEDROCKにセットするだけで動作します。Boto3が1.39.0以降、APIキーに対応しています。

import boto3

client = boto3.client("bedrock-runtime", region_name="ap-northeast-1")

response = client.converse(modelId="apac.amazon.nova-micro-v1:0", messages=[{"role":"user", "content":[{"text": "hello"}]}])

print(response)

実行

export AWS_BEARER_TOKEN_BEDROCK=.....
python main.py

LangChainで呼んでみる

こちらも環境変数をセットするだけです。内部でBoto3が使われているからだと思います。

from langchain_aws import ChatBedrockConverse

chat_model = ChatBedrockConverse(model="apac.amazon.nova-micro-v1:0", region_name="ap-northeast-1")

result = chat_model.invoke("Hello")

print(result)

APIキーが利用できるのはBedrockとBedrock Runtimeだけの模様

Bedrock AgentやBedrock Agent Runtimeでは使えないので、以下の機能は使え無さそうです。

  • エージェント
  • ナレッジベース
  • フロー
  • プロンプト管理

逆に、以下の操作は可能なので、長期APIキーの場合はIAM権限からDenyしておいたほうが安心かもです。

  • カスタムモデル
  • インポートモデル
  • プロビジョンドスループット
11
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?