Amazon web services 如何以编程方式列出所有aws资源和标记
我希望审核AWS中标记方案的符合性,因此我希望以编程方式从帐户检索所有资产并检查它们的标记 有没有一种合理的方法来实现这一点,而不必在boto或JavaAPI中迭代碎片化的aws客户机?如果我单独计算客户机,大约有40个,其中大多数的语义稍有不同。如果我真的编写了使用所有这些功能的代码,那么每次AWS角色推出新服务时,我都必须添加另一个客户端 我已经看过的内容:Amazon web services 如何以编程方式列出所有aws资源和标记,amazon-web-services,Amazon Web Services,我希望审核AWS中标记方案的符合性,因此我希望以编程方式从帐户检索所有资产并检查它们的标记 有没有一种合理的方法来实现这一点,而不必在boto或JavaAPI中迭代碎片化的aws客户机?如果我单独计算客户机,大约有40个,其中大多数的语义稍有不同。如果我真的编写了使用所有这些功能的代码,那么每次AWS角色推出新服务时,我都必须添加另一个客户端 我已经看过的内容: Bot3-40一些每个服务的客户端进行迭代,这使得它不可行。 AWS Java客户端-如上所述 AWS cli-同上 Complian
Bot3-40一些每个服务的客户端进行迭代,这使得它不可行。
AWS Java客户端-如上所述
AWS cli-同上
Compliance Monkey(Netflix)-只查看自动缩放组
AWS配置-您必须通过标记查询资源,这将无法跟踪未标记的资源 我即将看到的内容:
Netflix Edda 我现在所做的:
这正是我不想要的,通过boto3 cloudformation、ec2、s3和自动缩放客户端进行迭代。这总比什么都不做要好,但这种方法显然存在差距。不幸的是,您想要的解决方案并不存在 请记住,AWS不支持对其所有服务进行标记;因此,您想要做的甚至可能不可能(如果您想要的是某种查询所有服务并利用公共标记的通用方法) 存在诸如RightScale或如您所知的Boto之类的服务,它们在AWS之上提供抽象。但是,与AWS CLI相比,这些第三方抽象在支持新服务之前总是有一段延迟时间 如果您真正想要的是查询所有服务并处理当前不支持标记的服务的通用方法,建议您执行以下一项或全部操作:
--
另外,请记住,在您提到的“40个服务”中,只有一小部分可以实际“启动或标记”。这些服务大多不是真正的“资源”,例如AWS配置、CloudWatch、CloudTrail、SES、SNS、数据管道。因此,很多API都需要执行,但最终可能只有10个或更少 这里有一个整洁的小库,用于查询AWS资源,名为“” 它并不是针对所有的服务都实现的,但它很快就能实现
import skew
from skew.arn import ARN
arn = ARN()
services=arn.service.choices()
services.sort()
print('Enumerating all resources in the following services: ' + ' '.join(services) + '\n')
for service in services:
arn.service.pattern = service
for resource in arn:
print(resource)
Enumerating all resources in the following services: autoscaling cloudwatch dynamodb ec2 elb iam kinesis rds redshift route53 s3 sqs
arn:aws:cloudwatch:us-east-1:000012345678:alarm/arn:aws:cloudwatch:us-east-1:000012345678:alarm:xxxxxxxx
arn:aws:dynamodb:us-east-1:000012345678:table/yyyyyyyy
arn:aws:ec2:us-east-1:000012345678:subnet/subnet-abcdabcd
arn:aws:ec2:us-east-1:000012345678:instance/i-dcbadcba
arn:aws:s3:ap-southeast-1:000012345678:bucket/zzzzzzzz
一直在努力让上面共享的脚本@whorka正常工作,但我认为一定是更新了扫描资源的方式。不管怎么说,下面的脚本似乎可以做到这一点
#!/usr/bin/env python
import skew
from skew.arn import ARN
arn = ARN()
services=arn.service.choices()
services.sort()
#services=["route53", "iam"]
print('Enumerating all resources in the following services: ' + ' '.join(services) + '\n')
for service in services:
#skipping global services because the API endpoint fails due to it being a global service. Bug that needs fixing.
if service == "iam" or service == "route53":
print(service)
print('Skipping global services')
#uri = 'arn:aws:' + service + '::*:*/*'
#arn = skew.scan(uri)
#for i in arn:
# print(i.arn)
else:
print('******' + service + '******')
uri = 'arn:aws:' + service + ':*:*:*/*'
arn = skew.scan(uri)
for i in arn:
print(i.arn)
全球服务(如IAM和Route53)存在一个缺陷,因为API端点不包含导致扭曲的区域。FYI CloudFormer工具为资源发出模板,无论这些资源最初是否由CloudFormation创建。但它不是用于此类治理实践的正确工具。您应该看看AWS配置和Netflix Edda。Netflix看门人猴子也很有趣。我不明白这个问题。您不想编写代码来实现这一点吗?您是否尝试过控制台(web)界面,该界面列出了所有资源?@Max我很擅长编写代码。我只是不想迭代近40个boto3客户端,以确保我访问了所有的资源类型。你真的使用了AWS的所有40个服务吗?你可以调出上个月的账单,看看你实际使用了哪些服务,然后查询一下。根据你的问题,我假设有多个开发人员参与其中。他们都是全职管理员,可以创建他们想要的任何东西吗?不限于您希望他们使用的特定服务?您可以从S3存储桶获取账单详细信息。这可能有助于将查询的范围限制在正在使用的服务上。