MWAA中使用S3KeySensor遇403权限错误的排查求助
MWAA中S3KeySensor报403 Forbidden问题排查
问题场景
使用MWAA的S3KeySensor监听S3文件时,代码如下:
sensor = S3KeySensor( task_id="wait-for-my-file", bucket_key="my-file.txt", bucket_name="my-bucket", )
持续收到错误:
botocore.exceptions.ClientError: An error occurred (403) when calling the HeadObject operation: Forbidden
已配置权限
通过Terraform为MWAA执行角色添加了以下权限(已在AWS控制台确认生效):
statement { effect = "Allow" actions = ["s3:HeadObject"] resources = [ "arn:aws:s3:::my-bucket", "arn:aws:s3:::my-bucket/*", ] }
同时按照文档添加了s3:GetAccountPublicAccessBlock权限:
statement { effect = "Allow" actions = ["s3:GetAccountPublicAccessBlock"] resources = ["*"] }
可能遗漏的配置点
- S3桶Bucket Policy限制:检查目标S3桶的Bucket Policy,确认存在允许MWAA执行角色调用
s3:HeadObject的语句,且没有优先级更高的Deny语句拦截请求。例如,若桶策略设置了仅允许特定IP或账号访问,需确保MWAA执行角色符合条件。 - KMS加密权限(若启用):如果目标S3桶启用了SSE-KMS加密,执行角色需要额外添加
kms:Decrypt权限(对应加密所用的KMS密钥ARN),因为HeadObject操作需要读取加密对象的元数据,会触发KMS解密操作。 - AWS组织SCP限制:若账号属于AWS组织,检查服务控制策略(SCP)是否存在限制
s3:HeadObject操作的规则,确保组织层面未禁止该权限。 - 角色权限边界(Permission Boundary):确认MWAA执行角色未被附加权限边界,或权限边界允许
s3:HeadObject和相关操作。 - 文件路径准确性:虽然错误是403而非404,但仍需确认
bucket_key是否完全匹配文件的实际路径(例如是否包含子目录前缀)。
关于自定义aws_conn_id的说明
默认情况下,S3KeySensor会使用Airflow的aws_default连接,MWAA会自动配置该连接使用执行角色的权限,无需额外指定自定义aws_conn_id。除非你修改过aws_default的配置,或需要使用其他IAM身份,否则不需要自定义该参数。
内容的提问来源于stack exchange,提问作者0x26res
相关产品推荐
相关产品推荐

