AWS Bedrock AccessDeniedException修正:bedrock:InvokeModelを実行する権限がありません

intermediate🧠 AI Tools2026-06-20| AWS Bedrock、Python 3.8以降、boto3 1.28以降、任意のOS

Error Message

botocore.exceptions.ClientError: An error occurred (AccessDeniedException) when calling the InvokeModel operation: User: arn:aws:iam::123456789012:user/dev is not authorized to perform: bedrock:InvokeModel
#aws-bedrock#boto3#iam-policy

TL;DR

IAMユーザーまたはロールに bedrock:InvokeModel 権限が不足しています。以下のポリシーをアタッチして即座に修正してください:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "bedrock:InvokeModel",
        "bedrock:InvokeModelWithResponseStream"
      ],
      "Resource": "arn:aws:bedrock:*::foundation-model/*"
    }
  ]
}

AWSコンソールでモデルアクセスの有効化も必要な場合は、以下のステップ3を参照してください — Bedrockでは、IAM権限だけでは不十分です。

エラーの全文

botocore.exceptions.ClientError: An error occurred (AccessDeniedException) when calling the InvokeModel operation: User: arn:aws:iam::123456789012:user/dev is not authorized to perform: bedrock:InvokeModel

このエラーは、boto3 を使ってBedrockのファウンデーションモデルを呼び出す際に発生します。典型的なコードは以下の通りです:

import boto3
import json

client = boto3.client("bedrock-runtime", region_name="us-east-1")

response = client.invoke_model(
    modelId="anthropic.claude-3-sonnet-20240229-v1:0",
    body=json.dumps({"prompt": "Hello", "max_tokens": 100}),
)

根本原因

AWS Bedrockには、両方を満たす必要がある2つの独立したアクセス制御があります:

  • IAM権限 — ユーザー/ロールのポリシーに bedrock:InvokeModel が含まれている必要があります
  • モデルアクセス — Bedrockコンソールで、対象のファウンデーションモデルをAWSアカウント向けに有効化する必要があります

このエラーは、少なくともIAM権限が不足していることを意味します。エラーメッセージ内のARN(arn:aws:iam::123456789012:user/dev)が、アクセスを拒否されているプリンシパルを正確に示しています。

ステップ1 — IAMプリンシパルを特定する

boto3が実際に使用しているクレデンシャルを確認します:

aws sts get-caller-identity

出力例:

{
    "UserId": "AIDAEXAMPLEID",
    "Account": "123456789012",
    "Arn": "arn:aws:iam::123456789012:user/dev"
}

これが権限を付与すべきエンティティです。ロールの場合(EC2、Lambda、ECSで一般的)、ARNは arn:aws:sts::123456789012:assumed-role/MyRole/session のような形式になります。

ステップ2 — Bedrock IAMポリシーをアタッチする

オプションA:AWSコンソール経由

  • IAM → ユーザー(またはロール)に移動し、ステップ1で確認したプリンシパルを選択します
  • 権限を追加 → ポリシーを直接アタッチ → ポリシーを作成 をクリックします
  • JSON タブに切り替えて、以下のポリシーを貼り付けます
  • BedrockInvokeAccess という名前を付けて保存します

オプションB:AWS CLI経由

ポリシーファイル bedrock-policy.json を作成します:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "bedrock:InvokeModel",
        "bedrock:InvokeModelWithResponseStream"
      ],
      "Resource": "arn:aws:bedrock:*::foundation-model/*"
    }
  ]
}

次に、ポリシーを作成してアタッチします:

# ポリシーを作成する
aws iam create-policy \
  --policy-name BedrockInvokeAccess \
  --policy-document file://bedrock-policy.json

# ユーザーにアタッチする
aws iam attach-user-policy \
  --user-name dev \
  --policy-arn arn:aws:iam::123456789012:policy/BedrockInvokeAccess

# またはロールにアタッチする
aws iam attach-role-policy \
  --role-name MyLambdaRole \
  --policy-arn arn:aws:iam::123456789012:policy/BedrockInvokeAccess

すべてのモデル(/*)ではなく特定のモデルに制限する場合は、モデルARNを使用します:

"Resource": "arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0"

ステップ3 — Bedrockコンソールでモデルアクセスを有効化する

IAM権限が正しく設定されていても、アカウントでモデルが有効化されていない場合は AccessDeniedException が発生します。これはIAMとは別の、Bedrock固有のアクセスゲートです。

  • AWS Bedrockコンソールを開きます
  • 左サイドバーで モデルアクセス をクリックします
  • 対象モデル(例:Claude 3 Sonnet)を見つけ、モデルアクセスを管理 をクリックします
  • モデルの横のチェックボックスをオンにして、変更を保存 をクリックします

ほとんどのモデルは即時承認されます。Anthropicのモデルは利用規約への同意が必要な場合があります。MetaのLlamaモデルは簡単なフォームの送信が必要です。

ステップ4 — 修正を確認する

すべて正常に動作しているか、簡単なテストを実行して確認します:

import boto3
import json

client = boto3.client("bedrock-runtime", region_name="us-east-1")

try:
    response = client.invoke_model(
        modelId="amazon.titan-text-express-v1",
        contentType="application/json",
        accept="application/json",
        body=json.dumps({
            "inputText": "Say hello",
            "textGenerationConfig": {"maxTokenCount": 20}
        }),
    )
    body = json.loads(response["body"].read())
    print("Success:", body["results"][0]["outputText"])
except Exception as e:
    print("Error:", e)

Success: とテキストが出力されれば完了です。Amazon Titan Textは特別な承認が不要なため、テスト用モデルとして最適です。

ポリシーシミュレーターを使ってIAM権限を直接確認することもできます:

aws iam simulate-principal-policy \
  --policy-source-arn arn:aws:iam::123456789012:user/dev \
  --action-names bedrock:InvokeModel \
  --resource-arns "arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0"

出力に "EvalDecision": "allowed" が含まれているか確認してください。

よくある間違い

  • リージョンの間違い:Bedrockはすべてのリージョンで利用できるわけではありません。まず us-east-1 または us-west-2 を使用してください。boto3クライアントのリージョンは、モデルアクセスが有効化されているリージョンと一致する必要があります。
  • bedrock-runtime の代わりに bedrock クライアントを使用しているinvoke_modelbedrock-runtime クライアントに属しています。bedrock クライアントはモデルの一覧取得などの管理操作用です。
  • SCPが権限をブロックしている:AWS Organizationsでは、サービスコントロールポリシー(SCP)がポリシーを正しくアタッチしていてもIAM権限をブロックすることがあります。IAMポリシーが正しく見えるのにエラーが続く場合は、AWS管理者に確認してください。
  • 環境内の古いクレデンシャル:IAMポリシーを更新した後もエラーが続く場合、AWS_ACCESS_KEY_ID 環境変数が更新されたクレデンシャルを上書きしていないか確認してください。

Related Error Notes