原始代碼在每個部署的單個堆疊中創建了一個存盤桶和跟蹤,并將它們鏈接到同一堆疊中的一個函式:
trail_bucket = aws_s3.Bucket(
self,
"cloudtrail-bucket",
access_control=aws_s3.BucketAccessControl.PRIVATE,
block_public_access=aws_s3.BlockPublicAccess.BLOCK_ALL,
auto_delete_objects=True,
removal_policy=RemovalPolicy.DESTROY,
)
trail = aws_cloudtrail.Trail(
self,
"cloudtrail",
send_to_cloud_watch_logs=True,
bucket=trail_bucket,
cloud_watch_log_group=aws_logs.LogGroup(self, "api-user-log"),
removal_policy=RemovalPolicy.DESTROY,
)
trail.add_lambda_event_selector(
[import_status_endpoint_lambda],
include_management_events=False,
)
這已經成為 CI 的一個問題,因為我們經常達到每個賬戶五個跟蹤的限制(所有 CI 部署都到同一個賬戶)。因此,我正在研究將線索拉入自己的堆疊并通過通配符將其鏈接到相關函式的可能性。基本上,我想記錄來自 ARN 匹配的任何事件arn:aws:lambda:*:*:function:*import-status。這可能嗎?
的檔案Trail.add_event_selector將資料資源值稱為特定的 ARN,并且DataResource似乎表明我唯一的選擇是
- 記錄所有功能的事件(太多)或
- 記錄特定 ARN 的事件(在部署時未知)。
uj5u.com熱心網友回復:
CloudTrail 具有高級事件選擇器,例如EndsWith過濾 ARN。這適合您的用例,您希望為所有以import-status.
好的,但是如何使用 CDK 設定高級事件選擇器?不幸的是,CloudFormation AWS::CloudTrail::Trail資源(= CDK L1 CfnTrail構造,它是 L2 Trail的基礎)似乎在eventSelectors 屬性中不支持它們。幸運的是,CDK(和 CloudFormation)有自定義資源來填補這些空白。
在您的 newtrail_stack中,創建一個 Trail 和一個AWSCustomResource構造,它可以進行任意 SDK 呼叫。它將呼叫 Trail 上的PutEventsSelectors API,設定高級事件選擇器。它將在資源創建時被呼叫一次:
# trail_stack.py
aws_custom = cr.AwsCustomResource(self, "aws-custom-advanced-selectors",
on_create=cr.AwsSdkCall(
service="CloudTrail",
action="putEventSelectors",
parameters= parameters: {
TrailName: my_trail.trail_arn,
AdvancedEventSelectors: [
{
Name: 'Log import-status lambdas only',
FieldSelectors: [
{ Field: 'eventCategory', Equals: ['Data'] },
{ Field: 'resources.type', Equals: ['AWS::Lambda::Function'] },
{
Field: 'resources.ARN',
EndsWith: ['import-status'],
},
],
},
],
},
physical_resource_id=cr.PhysicalResourceId.of("aws-custom-advanced-selectors")
),
policy=cr.AwsCustomResourcePolicy.from_sdk_calls(
resources=my_trail.trail_arn
)
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/443936.html
