2

我编写了以下查询,试图列出我组织中的所有 IAM 用户。

SELECT
  arn,
  COUNT(*)
WHERE
  resourceType = 'AWS::IAM::User'
GROUP BY
  arn

当我在高级查询编辑器中针对我的帐户运行此查询时,我得到了该帐户的一个结果(如预期的那样)

输出

arn                                     COUNT(*)
arn:aws:iam::99999999:user/foo            1

当我选择我的组织聚合器作为查询目标(在此处描述)时,我会为每个 ARN 获得多个结果 - 这是不可能的。

输出:

arn                                     COUNT(*)
arn:aws:iam::99999999:user/foo            15
arn:aws:iam::99999998:user/foo            15
arn:aws:iam::99999997:user/bar            15

到目前为止,我最好的猜测是我正在查询“配置项”,而不是资源,所以我得到了多个结果。Config 评估了 15 条规则,arn 字段是它评估的资源。

我正在尝试进行简单的库存查询,AWS config 似乎没有任何类型的唯一运算符可以在我的 SQL 语法中使用......我应该运行更好的查询,或者我的 AWS 配置错误配置环境?为什么 Config 多次返回同一个对象?

4

2 回答 2

0

到目前为止,我最好的猜测是我正在查询“配置项”,而不是资源,所以我得到了多个结果。

不,您的查询是正确的。AWS::Config::ResourceComplianceresourceType您用来查询合规性结果的。

是否有更好的查询我应该运行,或者我的 AWS 配置环境配置错误?为什么 Config 多次返回同一个对象?

你是偶然在 15 个地区录制的吗?如果是这样,您似乎在每个区域而不是一个主要区域中记录全局资源(例如 IAM 用户)。

您可以从 AWS Config Service 控制台页面进行检查:选择Settings,然后Edit,您应该会看到 的复选框Include global resources (e.g., AWS IAM resources)

于 2021-05-03T01:52:25.677 回答
0

IAM 用户与大多数 AWS IAM 资源一样,是一个全局资源,因此如果您为 15 个区域中记录的每个配置启用Include global resources/includeGlobalResourceTypes设置,则会记录同一 IAM 用户的 15 个配置项(每个区域一个),并且可在您的组织聚合器中查询。

AWS Config 高级查询目前不支持DISTINCT,并且awsRegionIAM 用户资源设置为global,因此看起来没有办法过滤掉重复项。

恐怕您唯一的选择是在除一个区域(例如)之外的所有区域(例如)中禁用Include global resources/includeGlobalResourceTypes设置您的配置记录器us-east-1,因此只为每个全局资源创建一个聚合的配置项。

于 2021-05-29T07:57:36.517 回答