我有一个使用案例,我想使用由Cloud Custodian创建的定期运行的Lambda函数来查找与特定帐户共享的AWS AMI。
为了测试这一点,我创建了两个AMI:一个是私有的/非共享的,另一个是与已知帐户共享的。当我运行Lambda函数时,我得到消息Filtered from 2 to 2 ami
,即我使用的过滤器没有以我想要的方式工作-我希望它能从2个AMI过滤到1个AMI。
下面是我使用的过滤器(我在这里为帐户输入了一个通用数字):
filters:
- type: image
key: LaunchPermissions[0].UserId
value: "123456789012"
我对键使用了不同的变体,但在每种情况下都找不到我希望策略筛选器查找的AMI。我使用https://jmespath.org根据下面的JSON检查路径,它似乎返回了我想要的:
{
"ImageId": "ami-1234567890",
"LaunchPermissions": [
{
"UserId": "123456789012"
}
]
}
我确信我没有正确地处理图像属性,但是我似乎就是不能确定哪个JMESPath会给我提供帐户ID字符串。
有人能在这里给我指点一下吗?
发布于 2021-04-15 02:58:23
这类策略通常利用检查AMI启动权限的cross-account过滤器。
基本用法将与帐户之间共享的任何AMI匹配:
policies:
- name: ami-cross-account
resource: ami
filters:
- type: cross-account
您可以跳过已知帐户:
policies:
- name: ami-cross-account
resource: ami
filters:
- type: cross-account
whitelist:
- 111111111111
- 222222222222
检查仅授予特定帐户的权限就不那么简单了。cross-account
筛选器本身不支持这种情况,但是如果没有该筛选器,ami
资源将不会包含启动权限详细信息。相反,您需要组合过滤器,例如:
policies:
- name: ami-cross-account
resource: ami
filters:
- type: cross-account
- type: value
key: '"c7n:LaunchPermissions"[].UserId'
value:
- "123456789012"
value_type: swap
op: intersect
因此,您有一些选择,但如果cross-account
过滤器能够满足您的需求,建议您单独使用它。
https://stackoverflow.com/questions/61824516
复制相似问题