You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的boto3调用AccessAnalyzer list_findings()及理解eq/neq/contains参数

用boto3调用Access Analyzer list_findings() 过滤IAM角色结果的参数说明

核心逻辑先明确

list_findings()的filter参数是字典结构,键是要过滤的字段名(比如resourceType、status、resourceArn),值是包含操作符(eq/neq/contains)的字典,每个操作符对应列表形式的匹配值。


1. eq:精确匹配

用于严格匹配字段的枚举值或固定字符串,是过滤IAM角色结果最常用的方式。比如要只列出IAM角色相关的findings,就匹配resourceType等于AWS::IAM::Role:

import boto3

client = boto3.client('accessanalyzer')

response = client.list_findings(
    analyzerArn='你的分析器ARN',
    filter={
        'resourceType': {
            'eq': ['AWS::IAM::Role']
        }
    }
)

# 遍历输出结果
for finding in response.get('findings', []):
    print(f"角色ARN: {finding['resourceArn']}, 问题描述: {finding['findingDetails']}")

适合用eq的字段:resourceType(固定枚举值)、status(比如ACTIVE/ARCHIVED)、severity等。


2. neq:排除匹配

和eq逻辑相反,用于排除符合指定值的结果。比如要排除已经归档的IAM角色findings,就给status加neq过滤:

response = client.list_findings(
    analyzerArn='你的分析器ARN',
    filter={
        'resourceType': {
            'eq': ['AWS::IAM::Role']
        },
        'status': {
            'neq': ['ARCHIVED']
        }
    }
)

这样返回的就只有状态为ACTIVE或RESOLVED的IAM角色相关结果。


3. contains:模糊匹配

用于匹配字段值中包含指定子串的结果,适合字符串类型的字段(比如resourceArn、resourceName)。比如要找所有ARN包含my-app-role的IAM角色findings:

response = client.list_findings(
    analyzerArn='你的分析器ARN',
    filter={
        'resourceType': {
            'eq': ['AWS::IAM::Role']
        },
        'resourceArn': {
            'contains': ['my-app-role']
        }
    }
)

注意:不是所有字段都支持contains,比如resourceType是枚举值,就不支持这个操作符,具体要看字段的类型特性。


额外注意事项

  • 每个操作符的值是列表,可以传多个值,比如eq: ['AWS::IAM::Role', 'AWS::IAM::User']会同时匹配两种资源类型。
  • 多个过滤条件是逻辑与的关系,必须同时满足所有条件才会被返回。
  • 如果结果数量较多,需要循环调用list_findings()并传入nextToken参数实现分页获取。

内容的提问来源于stack exchange,提问作者Ashok S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:52:45