首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于AMI的云托管筛选器密钥的JMESPath问题

用于AMI的云托管筛选器密钥的JMESPath问题
EN

Stack Overflow用户
提问于 2020-05-16 00:54:52
回答 1查看 143关注 0票数 0

我有一个使用案例,我想使用由Cloud Custodian创建的定期运行的Lambda函数来查找与特定帐户共享的AWS AMI。

为了测试这一点,我创建了两个AMI:一个是私有的/非共享的,另一个是与已知帐户共享的。当我运行Lambda函数时,我得到消息Filtered from 2 to 2 ami,即我使用的过滤器没有以我想要的方式工作-我希望它能从2个AMI过滤到1个AMI。

下面是我使用的过滤器(我在这里为帐户输入了一个通用数字):

代码语言:javascript
运行
复制
        filters:
          - type: image
            key: LaunchPermissions[0].UserId
            value: "123456789012"

我对键使用了不同的变体,但在每种情况下都找不到我希望策略筛选器查找的AMI。我使用https://jmespath.org根据下面的JSON检查路径,它似乎返回了我想要的:

代码语言:javascript
运行
复制
{
    "ImageId": "ami-1234567890",
    "LaunchPermissions": [
        {
            "UserId": "123456789012"
        }
    ]
}

我确信我没有正确地处理图像属性,但是我似乎就是不能确定哪个JMESPath会给我提供帐户ID字符串。

有人能在这里给我指点一下吗?

EN

回答 1

Stack Overflow用户

发布于 2021-04-15 02:58:23

这类策略通常利用检查AMI启动权限的cross-account过滤器。

基本用法将与帐户之间共享的任何AMI匹配:

代码语言:javascript
运行
复制
policies:
  - name: ami-cross-account
    resource: ami
    filters:
      - type: cross-account

您可以跳过已知帐户:

代码语言:javascript
运行
复制
policies:
  - name: ami-cross-account
    resource: ami
    filters:
      - type: cross-account
        whitelist:
          - 111111111111
          - 222222222222

检查仅授予特定帐户的权限就不那么简单了。cross-account筛选器本身不支持这种情况,但是如果没有该筛选器,ami资源将不会包含启动权限详细信息。相反,您需要组合过滤器,例如:

代码语言:javascript
运行
复制
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过滤器能够满足您的需求,建议您单独使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61824516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档