使用 aws cli 建立 CloudWatch Event Rule 與 Target - 使用現有的 Rule 為範本
上一篇文章是使用 Console 的方式定義 Input Transformer 輸出到 CloudTrail Event
這一篇文章要來寫如何使用 aws cli 來建立 CloudWatch Event Rule 與 Target - 在已經有現有的 Rule 下.
環境假設
已經建立 CloudWatch Event Rule, 名稱為 Notify_Create_Delete_IAM_User
已經建立 SNS 通知方式 - 使用 Email 通知, 且已經完成訂閱
使用 Input Transformer 設定 Notify_Create_Delete_IAM_User 這個 Rule 的 Target 為 SNS 然後設定 Input Path 與 Input Template
首先觀察先前建立的 CloudWatch Rule "Notify_Create_Delete_IAM_User" 的內容
Event pattern 為
{
"source": [
"aws.iam"
],
"detail-type": [
"AWS API Call via CloudTrail"
],
"detail": {
"eventSource": [
"iam.amazonaws.com"
],
"eventName": [
"CreateUser",
"DeleteUser"
]
}
}
這邊是 JSON 格式
將內容儲存為 Notify_Create_Delete_IAM_User.json
因為等等要使用到的 aws 指令輸入只接受 string 格式
所以使用 jq 指令轉為 string
# cat Notify_Create_Delete_IAM_User.json | jq tostring
"{\"source\":[\"aws.iam\"],\"detail-type\":[\"AWS API Call via CloudTrail\"],\"detail\":{\"eventSource\":[\"iam.amazonaws.com\"],\"eventName\":[\"CreateUser\",\"DeleteUser\"]}}"
這個之前真的沒有注意到這個功能, jq 真是太好用了
當然也可以反向使用 ( string to JSON)
# echo "{\"source\":[\"aws.iam\"],\"detail-type\":[\"AWS API Call via CloudTrail\"],\"detail\":{\"eventSource\":[\"iam.amazonaws.com\"],\"eventName\":[\"CreateUser\",\"DeleteUser\"]}}" | jq
{
"source": [
"aws.iam"
],
"detail-type": [
"AWS API Call via CloudTrail"
],
"detail": {
"eventSource": [
"iam.amazonaws.com"
],
"eventName": [
"CreateUser",
"DeleteUser"
]
}
}
使用 aws 指令建立 AWS CloudWatch Event Rule
# aws events put-rule --name "test-2021-08-02" --region us-east-1 --event-pattern
"{\"source\":[\"aws.iam\"],\"detail-type\":[\"AWS API Call via CloudTrail\"],\"detail\":{\"eventSource\":[\"iam.amazonaws.com\"],\"eventName\":[\"CreateUser\",\"DeleteUser\"]}}"
可以到 Console 觀察有建立一個 CloudWatch Event Rule, 名稱為 test-2021-08-02
使用剛剛既有的 Rule 的 Event Pattern
接下來要觀察先前建立的 CloudWatch Event Rule Target 內容
# aws events list-targets-by-rule --rule "Notify_Create_Delete_IAMuser" --region us-east-1
{
"Targets": [
{
"Id": "1",
"Arn": "arn:aws:sns:us-east-1:783147821205:Notify_CreateIAMUser_20210714",
"InputTransformer": {
"InputPathsMap": {
"AccountID": "$.detail.userIdentity.accountId",
"Create-userName": "$.detail.responseElements.user.userName",
"Region": "$.detail.awsRegion",
"Staff-userName": "$.detail.userIdentity.userName",
"eventName": "$.detail.eventName",
"eventTime": "$.detail.eventTime",
"sourceIPAddress": "$.detail.sourceIPAddress"
},
"InputTemplate": "\"這是來自雲端課的通知,偵測到Assume Role行為\"\n\"AccountID: <AccountID>\"\n\"Region:<Region>\"\n\"建立者: <Staff-userName>\"\n\"EventTime: <eventTime>\"\n\"SourceIP: <sourceIPAddress>\"\n\"EventName: <eventName>\"\n\"建立帳號名稱: <Create-userName>\""
}
}
]
}
Id 的部份可以換成自訂的 ID, 使用 Console 建立的會很長
我是透過 SNS 通知, 所以 SNS ARN 請換成自己的 SNS ARN
使用輸出導向的方式將內容存成 notify_create_delete_iam_user_target.json
# aws events list-targets-by-rule --rule "Notify_Create_Delete_IAMuser" --region us-east-1 > notify_create_delete_iam_user_target.json
因為之後要套用 Rule, 所以要編輯檔案
{
"Rule":"test-2021-08-02",
"Targets": [
{
"Id": "1",
"Arn": "arn:aws:sns:us-east-1:783147821205:Notify_CreateIAMUser_20210714",
"InputTransformer": {
"InputPathsMap": {
"AccountID": "$.detail.userIdentity.accountId",
"Create-userName": "$.detail.responseElements.user.userName",
"Region": "$.detail.awsRegion",
"Staff-userName": "$.detail.userIdentity.userName",
"eventName": "$.detail.eventName",
"eventTime": "$.detail.eventTime",
"sourceIPAddress": "$.detail.sourceIPAddress"
},
"InputTemplate": "\"這是來自雲端課的通知,偵測到Assume Role行為\"\n\"AccountID: <AccountID>\"\n\"Region:<Region>\"\n\"建立者: <Staff-userName>\"\n\"EventTime: <eventTime>\"\n\"SourceIP: <sourceIPAddress>\"\n\"EventName: <eventName>\"\n\"建立帳號名稱: <Create-userName>\""
}
}
]
}
加上 Rule 設定, 後面請接上剛剛新建立的 Rule, 然後記得加上 逗號 ,
Id 的部份可以換成自訂的 ID, 使用 Console 建立的會很長
我是透過 SNS 通知, 所以 SNS ARN 請換成自己的 SNS ARN
完成準備檔案
使用 aws 指定套用 Rule 的 Target
我的 notify_create_delete_iam_user_target.json 在目前的目錄下
# aws events put-targets --region us-east-1 --cli-input-json file://./notify_create_delete_iam_user_target.json
{
"FailedEntryCount": 0,
"FailedEntries": []
}
回 Console 驗證是否完成 :)
又向 AWS 前進一步
~ enjoy it
Reference:
厲害的 AWS Cloud Support Engineer
http://sakananote2.blogspot.com/2021/07/aws-input-transformer-cloudtrail-event.html
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/events/list-targets-by-rule.html
沒有留言:
張貼留言