AWS S3目录桶权限问题求助:创建会话遇AccessDenied及桶策略报错
解决S3 Directory Bucket的权限错误与CreateSession访问被拒问题
核心问题分析
Directory Bucket(属于S3 Express One Zone)的权限模型和通用S3桶有显著差异,你的问题主要来自三个点:
- IAM策略缺少S3 Express专属操作权限
- 桶策略使用了Directory Bucket不支持的匿名访问(
Principal: "*") - 可能误用了通用桶的ARN格式
分步解决方案
1. 修正IAM用户权限策略
Directory Bucket需要使用s3express命名空间的操作(比如CreateSession),而你当前的策略只包含s3:*,不覆盖这类操作。同时要确保使用正确的Directory Bucket ARN(格式为arn:aws:s3:::bucket-name--region--x-s3,比如你的桶在us-east-1区域,ARN就是arn:aws:s3:::my_bucket--us-east-1--x-s3)。
修正后的IAM策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowFullAccessToDirectoryBucket", "Effect": "Allow", "Action": [ "s3:*", "s3express:*" ], "Resource": [ "arn:aws:s3:::my_bucket--us-east-1--x-s3", "arn:aws:s3:::my_bucket--us-east-1--x-s3/*" ] } ] }
注意:替换示例中的区域和桶名,确保ARN与控制台中显示的一致。
2. 调整桶策略(禁止匿名访问)
Directory Bucket不支持匿名访问(Principal: "*"),这是由其设计定位(高性能内部访问)决定的。如果需要通过桶策略控制权限,必须指定具体的IAM身份(用户/角色ARN):
修正后的桶策略示例(允许指定IAM用户访问):
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSpecificIAMUserAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/your-iam-user-name" }, "Action": "s3:*", "Resource": [ "arn:aws:s3:::my_bucket--us-east-1--x-s3/*" ] } ] }
提示:大部分场景下,仅通过IAM策略控制Directory Bucket的权限即可,无需额外配置桶策略。
3. 验证CreateSession权限
CreateSession是访问Directory Bucket的必要操作,修正IAM策略后,该权限会被s3express:*覆盖,即可解决AccessDenied错误。
关键注意事项
- Directory Bucket的ARN格式与通用桶不同,必须包含区域和
--x-s3后缀,可在AWS S3控制台的桶详情页查看正确ARN。 - 不要尝试给Directory Bucket配置匿名访问,这是不被支持的操作,会导致策略创建失败。
- Flask应用连接时,确保使用的AWS SDK支持S3 Express One Zone(比如最新版本的boto3)。
内容的提问来源于stack exchange,提问作者Amir Adamov
相关产品推荐
相关产品推荐

