我有一个用例,我想使用由Cloud Custodian创建的定期运行的Lambda函数来查找已与特定帐户共享的AWS AMI。
为了测试这一点,我创建了两个AMI:一个是私有/未共享的,一个是与已知帐户共享的。当我运行Lambda函数时,收到消息Filtered from 2 to 2 ami
,即我使用的过滤器无法按照我希望的方式工作-我希望它可以从2到1 AMI进行过滤。
这是我使用的过滤器(我在此处输入了帐户的通用编号):
filters:
- type: image
key: LaunchPermissions[0].UserId
value: "123456789012"
我为密钥使用了不同的变体,但是在每种情况下都找不到我希望策略过滤器查找的AMI。我用https://jmespath.org对照下面的JSON检查了路径,它似乎返回了我想要的内容:
{
"ImageId": "ami-1234567890",
"LaunchPermissions": [
{
"UserId": "123456789012"
}
]
}
我确定我没有正确处理image属性,但是我似乎无法弄清楚哪个JMESPath将给我帐户ID字符串。
有人可以在这里给我指点吗?
答案 0 :(得分:0)
这种策略通常利用检查 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
过滤器。