You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用S3访问点调用Bedrock Data Automation遇权限拒绝问题求助

问题:使用S3访问点调用Bedrock Data Automation时出现AccessDeniedException

我正在使用Bedrock Data Automation,希望通过S3访问点访问数据:

  • 文件存储在S3桶data-bucket中,路径为bda-input/file.pdf
  • 已为该桶创建S3访问点my-data-bucket-ap,策略如下:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowListViaAccessPoint",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789:role/bda-role"   
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:us-east-1:123456789:accesspoint/my-data-bucket-ap",
                "arn:aws:s3:us-east-1:123456789:accesspoint/my-data-bucket-ap/object/*"
            ]
        }
    ]
}
  • 访问点别名为my-data-bucket-ap-wdfeg-s3alias
  • 角色arn:aws:iam::123456789:role/bda-role拥有完全访问权限,且与Bedrock、SageMaker、Lambda、S3建立了信任关系
  • 桶策略允许账号内所有角色通过S3访问点访问

通过Lambda调用Bedrock Data Automation项目的代码如下:

import os
import time
import json
import boto3
from pathlib import Path
from urllib.parse import urlparse

AWS_REGION = os.environ["AWS_REGION"]

s3 = boto3.client('s3')
bda = boto3.client("bedrock-data-automation-runtime", region_name=AWS_REGION)

def lambda_handler(event, context):

    s3_uri = "s3://my-data-bucket-ap-wdfeg-s3alias/bda-input/file.pdf"
    s3_output_uri = "s3://my-data-bucket-ap-wdfeg-s3alias/bda-out/"
    DATA_AUTOMATION_PROJECT_ARN = ""
    profile_arn=""
    resp = bda.invoke_data_automation_async({
        "inputConfiguration": {"s3Uri": s3_input_uri},
        "outputConfiguration": {"s3Uri": s3_output_uri},
        "dataAutomationConfiguration": {
        "dataAutomationProjectArn": project_arn,
        "stage": "LIVE" 
    }
    })

执行代码时出现错误:

An error occurred (AccessDeniedException) when calling the InvokeDataAutomationAsync operation: Access Denied. Check S3 URIs and read/write permissions.

我已验证通过S3访问点读取文件正常,因此推测问题出在invoke_data_automation_async函数上。想请教:

  • 是否有人尝试过通过S3访问点调用Bedrock Data Automation?
  • 使用S3访问点别名的S3 URI是否有效?
  • 是否因Bedrock无法定位URI导致权限拒绝?

解决方案

1. 修正S3访问点URI格式

Bedrock Data Automation目前不支持直接使用访问点别名的S3 URI格式(s3://访问点别名/路径),需要改用访问点ARN标准URI格式:

s3://arn:aws:s3:<区域>:<账号ID>:accesspoint/<访问点名称>/<文件路径>

对应你的场景,输入和输出URI应修改为:

s3_input_uri = "s3://arn:aws:s3:us-east-1:123456789:accesspoint/my-data-bucket-ap/bda-input/file.pdf"
s3_output_uri = "s3://arn:aws:s3:us-east-1:123456789:accesspoint/my-data-bucket-ap/bda-out/"

2. 修复代码中的变量错误

你的代码存在两处变量不匹配问题,可能引发隐性错误:

  • 定义了s3_uri但调用时用了未定义的s3_input_uri,需改为"s3Uri": s3_input_uri(先统一变量名)
  • 定义了DATA_AUTOMATION_PROJECT_ARN但调用时用了project_arn,需统一变量名并补充实际ARN

修正后的核心代码片段:

def lambda_handler(event, context):
    s3_input_uri = "s3://arn:aws:s3:us-east-1:123456789:accesspoint/my-data-bucket-ap/bda-input/file.pdf"
    s3_output_uri = "s3://arn:aws:s3:us-east-1:123456789:accesspoint/my-data-bucket-ap/bda-out/"
    project_arn = "你的Bedrock Data Automation项目ARN"
    resp = bda.invoke_data_automation_async({
        "inputConfiguration": {"s3Uri": s3_input_uri},
        "outputConfiguration": {"s3Uri": s3_output_uri},
        "dataAutomationConfiguration": {
            "dataAutomationProjectArn": project_arn,
            "stage": "LIVE" 
        }
    })

3. 确认Bedrock的权限传递

即使Lambda角色有访问权限,Bedrock服务执行时需要能继承角色的S3访问点权限:

  • 检查bda-role的信任策略,确保包含Bedrock服务主体:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": ["bedrock.amazonaws.com", "lambda.amazonaws.com"]
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    
  • 确认访问点策略的Resource范围已覆盖输入输出路径(当前策略的object/*已满足,无需修改)

内容的提问来源于stack exchange,提问作者vll1990

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 13:43:11