全部,
我有多个AWS账户(300多个且在增长),每个账户有4个地区。每个帐户都有不同的资源集。这意味着在每个帐户上运行的服务在所有帐户中并不一致。
现在,我希望使用cloudtrail事件来自动化资源标记,例如";由";现有资源和新资源。
请告诉我什么是自动为多个帐户/地区/资源应用标签的最佳方法。
这是大多数组织面临的最繁忙的场景之一。但是,对于新创建的资源,有一个简单易行的解决方案可以实现。对于现有资源,这有点复杂,因为我们必须依赖仅持续90天的Cloudtrail事件历史记录。
该解决方案很简单,只要在帐户中创建了资源,后端lambda就会自动用您提到的Key标记该资源;创建者;值是从Cloudtrail获取的用户名(创建者)。
例如,如果您想自动标记ec2实例和lambda,请使用以下模式创建一个事件桥规则,并添加一个lambda函数作为目标
{
"detail": {
"configurationItem": {
"configurationItemStatus": ["ResourceDiscovered"],
"resourceType": ["AWS::Lambda::function","AWS::EC2::Instance"]
},
"messageType": ["ConfigurationItemChangeNotification"]
},
"detail-type": ["Config Configuration Item Change"],
"source": ["aws.config"]
}
Eventbridge的来源为aws.config.
lambda有以下python代码,用于执行自动标记功能
import json
import boto3
def lambda_handler(event, context):
client = boto3.client('cloudtrail')
resource_type = event["detail"]["configurationItem"]["resourceType"]
resource_arn = event["resources"][0]
if resource_type == "AWS::Lambda::Function":
resource_name = event["detail"]["configurationItem"]["configuration"]["functionName"]
response = client.lookup_events(
LookupAttributes=[
{
'AttributeKey': 'ResourceName',
'AttributeValue': resource_name
},
],
)
user_name=response["Events"][0]["Username"]
client = boto3.client('lambda')
client.tag_resource(
Resource=resource_arn,
Tags={'Created_by': user_name}
)
print("Lambda function "+resource_name+" tagged with username = " + user_name)
elif resource_type == "AWS::EC2::Instance":
resource_name = event["detail"]["configurationItem"]["configuration"]["instanceId"]
print(resource_name)
response = client.lookup_events(
LookupAttributes=[
{
'AttributeKey': 'ResourceName',
'AttributeValue': resource_name
},
],
)
user_name=response["Events"][0]["Username"]
client = boto3.client('ec2')
client.create_tags(
Resources=[ resource_name ],
Tags=[
{
'Key': 'Created_by',
'Value': user_name
},
])
print("EC2 Instance "+resource_name+" tagged with username = " + user_name)
并确保为lambda函数添加必要的权限。
有关详细信息,请查看以下链接
https://medium.com/@TechStoryLines/automatically-tagging-aws-resources-with-usernames-abrief-automation-guide-57d70455e66a
https://techstorylines.hashnode.dev/automatically-tagging-aws-resources-with-usernames-a-brief-automation-guide