如何限制调用AWS Textract的Lambda仅访问指定S3存储桶?
问题解答
首先明确:Textract 不会继承Lambda的S3权限。Lambda的角色权限仅用于Lambda自身执行时的操作,而Textract调用S3是使用它自己的服务身份,因此需要单独配置限制规则。
要实现Textract仅访问指定S3桶的需求,需完成两项配置:
- 细化Lambda的IAM角色中Textract调用权限:避免给
textract:DetectDocumentText授予*资源权限,而是指定对应S3桶的Textract资源ARN。Textract的资源ARN格式为arn:aws:textract:你的区域:你的账号ID:document/s3-object/bucket/桶名/object/对象键,若要限制整个桶,可使用通配符:arn:aws:textract:你的区域:你的账号ID:document/s3-object/bucket/my-foot-bucket/* - 给目标S3桶添加桶策略:直接允许Textract服务主体仅对该桶执行必要操作(如
s3:GetObject),因为Textract是直接访问S3的,桶策略是控制其访问权限的关键。
调整后的Lambda IAM角色策略示例
[ { "Effect": "Allow", "Action": [ "textract:DetectDocumentText" ], "Resource": [ "arn:aws:textract:你的区域:你的账号ID:document/s3-object/bucket/my-foot-bucket/*" ] }, { "Sid": "S3AccessForLambda", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::my-foot-bucket", "arn:aws:s3:::my-foot-bucket/*" ] } ]
注:将原策略中过于宽泛的s3:*权限,改为Lambda实际需要的操作(如读写所需的GetObject和PutObject),遵循最小权限原则。
S3桶策略示例(限制Textract仅访问该桶)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "textract.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-foot-bucket/*", "Condition": { "StringEquals": { "aws:SourceAccount": "你的账号ID" } } } ] }
核心说明
- Lambda的角色权限是用于让Lambda调用Textract,以及Lambda自身操作S3(如上传文件)的权限,和Textract访问S3的权限是相互独立的。
- 结合Lambda角色中对Textract资源的限制,以及S3桶策略对Textract的授权,就能确保Textract仅能处理指定桶内的文件。
内容的提问来源于stack exchange,提问作者Lester Gray
相关产品推荐
相关产品推荐

