AWS Lambda から AgentCore を実行する際の IAM ポリシー設定と CDK での設定方法

AWS Lambdaから Amazon Bedrock AgentCoreを実行するために必要なIAMポリシー設定を解説。特に「bedrock-agentcore:InvokeAgentRuntime」権限と、正しいリソースARN指定のポイントをCDKでの実装例とともに紹介。

広告ここから
広告ここまで

目次

    AWS Lambda 関数から Amazon Bedrock AgentCore を実行するためには、当然ですが IAM ポリシーによる許可が必要です。この記事では。どのようなポリシーを設定すればよいかや、権限が漏れている場合に発生するエラーについて簡単にまとめました。

    権限を設定しないと発生するエラー

    AgentCore Runtimeでデプロイしたアプリを Lambda などで呼び出すと、次のようなエラーが出ます。

    AccessDeniedException: User: arn:aws:sts::012345:assumed-role/ChatAgent-Y3TIbUItr5gx/hatAgent-Y3TIbUItr5gx is not authorized to perform: bedrock-agentcore:InvokeAgentRuntime on resource: arn:aws:bedrock-agentcore:us-east-1:012345:runtime/helpdeskagent-EmdlveFTRi because no identity-based policy allows the bedrock-agentcore:InvokeAgentRuntime action
    

    AgentCore Runtime を実行するには、InvokeAgentRuntime が必要なことがわかります。

    Bedrock AgentCore の実行権限を設定する際の注意点

    bedrock-agentcore:InvokeAgentRuntime を許可する必要があることは、エラーメッセージからわかりました。ここでポリシーを設定する際に注意したい点がリソース ARN です。通常、 Runtimeのリソース ARN を指定すると、以下ような構成になるはずです。

    arn:aws:bedrock-agentcore:{region}:{account-id}:runtime/{agent-id}
    

    AgentCore Runtimeを実行するには、もう1つリソース ARN の指定が必要です。それはAgentCore Runtimeのエンドポイントに関する ARN です。

    arn:aws:bedrock-agentcore:{region}:{account-id}:runtime/{agent-id}/runtime-endpoint/*
    

    この2つをリソース ARNとして指定することで、 Lambda などの AWS リソースから AgentCore Runtimeを実行できるようになります。

    CDK で実装する場合

    CDK でポリシーを設定する場合、 Runtime の ARN を定数的に定義しておくと便利です。Runtime と Runtime のエンドポイントの ARN の2つを指定する必要があるため、先に定義しておくことで、何回も ARN を指定する必要がなくなります。

    import { PolicyStatement, Effect } from 'aws-cdk-lib/aws-iam';
    
    // Bedrock Agent Runtime ARN を設定
    const bedrockAgentRuntimeArn = 
      props.bedrockAgentRuntimeArn || 
      `arn:aws:bedrock-agentcore:us-east-1:${this.account}:runtime/xxxxx`;
    

    次に、Lambda 関数に必要な権限を付与していきます。

    // Lambda 関数に Bedrock Agent Runtime の実行権限を付与
    lambdaResource.addToRolePolicy(
      new PolicyStatement({
        effect: Effect.ALLOW,
        actions: ['bedrock-agentcore:InvokeAgentRuntime'],
        resources: [
          bedrockAgentRuntimeArn,
          `${bedrockAgentRuntimeArn}/runtime-endpoint/*`
        ],
      })
    );
    

    Node.jsを実行する Lambda であれば、こんな感じになるかと思います。

    const lambdaResource = new NodejsFunction(
      this,
      'example',
      {
        entry: 'lambda/handler.ts',
        handler: 'handler',
        runtime: Runtime.NODEJS_22_X,
        memorySize: 512,
        environment: {
          BEDROCK_AGENT_RUNTIME_ARN: bedrockAgentRuntimeArn,
        },
      }
    );
    
    // SSM パラメータストアへの読み取り権限
    hubspotApiKey.grantRead(lambdaResource);
    
    // Bedrock Agent Runtime の実行権限を付与
    lambdaResource.addToRolePolicy(
      new PolicyStatement({
        effect: Effect.ALLOW,
        actions: ['bedrock-agentcore:InvokeAgentRuntime'],
        resources: [bedrockAgentRuntimeArn, `${bedrockAgentRuntimeArn}/runtime-endpoint/*`],
      })
    );
    

    まとめ

    AWS Lambda から Bedrock AgentCore を実行するためには、 bedrock-agentcore:InvokeAgentRuntime アクションを許可する iAM ポリシーを設定しましょう。また、リソース ARN では、 /runtime-endpointを含むリソース ARN の指定も忘れないようにしましょう。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark