跨多个账户运行 aws cli 的方法

问题描述 投票:0回答:4

我试图找出 10 个不同账户中运行非亚马逊 AMI 映像的所有 EC2 实例。以下 CLI 命令为我提供了所有 AMI 的列表:

aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[ImageId]' | sort | uniq -c

我想我可以进一步修改它以获取所有非亚马逊 AMI,但是有没有办法在一次调用中跨 10 个不同的帐户运行它?

amazon-web-services aws-cli amazon-ami
4个回答
2
投票

有没有一种方法可以在一次调用中跨 10 个不同的帐户运行此操作?

不,那是不可能的。您需要编写一个迭代每个帐户的循环,为每个帐户调用

ec2 describe-instances
一次。


0
投票

这是一个脚本,可以使用 AMI 查找所有者不是的实例

amazon
:

import boto3

ec2_client = boto3.client('ec2', region_name='ap-southeast-2')

instances = ec2_client.describe_instances()

# Get a set of AMIs used on all the instances
images = set(i['ImageId'] for r in instances['Reservations'] for i in r['Instances'])

# Find which of these are owned by Amazon
amis = ec2_client.describe_images(ImageIds=list(images), Owners=['amazon'])
amazon_amis = [i['ImageId'] for i in amis['Images']]

# Which instances are not using Amazon images?
non_amazon_instances = [(i['InstanceId'], i['ImageId']) for r in instances['Reservations'] for i in r['Instances'] if i['ImageId'] not in amazon_amis]

for i in non_amazon_instances:
    print(f"{i[0]} uses {i[1]}")

有几点需要注意:

  • 已弃用的 AMI 可能无法访问信息,因此可能会被标记为非 Amazon。
  • 此脚本,如所写,仅适用于一个区域。您可以将其更改为循环区域。
  • 此脚本,如所写,仅适用于一个帐户。您需要一种方法来循环访问其他帐户的凭据。

0
投票

使用AWS配置

  1. 在根账户或委托账户中创建聚合器(等待聚合器加载)
  2. 创建查询
SELECT
  accountId,
  resourceId,
  configuration.keyName,
  availabilityZone
WHERE
  resourceType = 'AWS::EC2::Instance'
  AND configuration.state.name = 'running'

更多详情 https://aws.amazon.com/blogs/mt/org-aggregator-deleated-admin/


0
投票

旧帖子,我知道,但刚刚遇到这个...我使用 Steampipe (steampipe.org) 进行这些类型的查询(及其 AWS 插件)。我们有十几个 AWS 账户,所以这绝对有帮助。我每天使用 Steampipe 进行工作查询,包括其他插件,如 CVS(很棒的插件)和 Crowdstrike。

Steampipe 使用 SQL 并将其映射到 API 调用。您不需要拥有丰富的 SQL 知识就可以使用它,一旦您的大脑习惯了它,它就会非常好。

从 aws_account_prod.aws_ec2_instance 中选择 account_id、instance_id、tags->>'名称' AS name_tag;

© www.soinside.com 2019 - 2024. All rights reserved.