基础数据自动化与S3访问点

编程语言 2026-07-10

我正在处理Bedrock数据自动化,希望通过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函数,尝试调用BDA项目

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" 
    }
    })

使用这段代码(我知道它并不完整),我遇到了一个错误:
发生错误 (AccessDeniedException):在调用InvokeDataAutomationAsync操作时:访问被拒绝。请检查S3 URI与读写权限。

我尝试通过S3访问点读取该文件,结果可以读取。因此我推断问题出在函数上

invoke_data_automation_async()

有没有人尝试过用S3访问点来调用BDA?带有S3访问点别名的URI能工作吗?还是可能因为BDA无法定位该URI而导致访问被拒绝?

解决方案

BDA不会在 s3Uri 字段中解析S3访问点别名。当BDA处理你的请求时,它的内部服务角色直接使用你提供的URI访问S3,并且它期望的是实际的桶名,而不是访问点别名。

你的Lambda能通过该访问点读取,是因为 你的 角色能够解析该别名。BDA的服务角色不能。

在调用BDA时,请使用实际的桶名:

s3_input_uri = "s3://data-bucket/bda-input/file.pdf"
s3_output_uri = "s3://data-bucket/bda-out/"

The AccessDeniedException 的说法具有误导性。据我所知,这只是解析失败,而不是权限问题。

这是在许多接受 s3:// URI的 AWS服务(如SageMaker、Textract异步、Transcribe等)中常见的坑;跨服务的S3 URI对访问点别名/ARN的支持不一致。请通过对BDA执行角色的IAM策略来控制访问。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章