我必须使用带有boto3
.
我创建了一个访问点,其策略允许读取和写入(<access_point_arn>
是我的访问点ARN
):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "<access_point_arn>/object/*"
]
}
在官方文档中提到了接入点,其中接入点ARN
必须代替存储桶名称(https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html) . 官方文档站点上没有针对开发人员的示例 ( https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html )。
因此,根据信息,我认为正确的使用方法是:
import boto3
s3 = boto3.resource('s3')
s3.Bucket('<access_point_arn>').download_file('hello.txt', '/tmp/hello.txt')
当我在附加了托管策略的 Lambda 中执行此代码时,AmazonS3FullAccess
我得到一个ClientError: An error occurred (403) when calling the HeadObject operation: Forbidden
Lambda 和 S3 接入点都连接到同一个 VPC。