Wie überwache ich IAM-Ereignisse und richte Ereignisbenachrichtigungen mit AWS CloudFormation ein?
Ich möchte die Aktivitäten von AWS Identity and Access Management (IAM) mit AWS CloudFormation überwachen. Ich möchte beispielsweise eine E-Mail-Benachrichtigung erhalten, wenn ein bestimmtes IAM-Ereignis eintritt.
Kurzbeschreibung
Sie können die AWS CloudFormation-Vorlage in der folgenden Auflösung verwenden, um IAM-Ereignisse zu überwachen und Benachrichtigungen mit Amazon EventBridge einzurichten.
Beachten Sie Folgendes:
- Sie müssen die Vorlage in der AWS-Region USA Ost (Nord-Virginia) — us-east-1 bereitstellen.
- Sie können die Ressource AWS::SNS::Topic so ändern, dass sie zusätzliche E-Mail-Adressen enthält.
- Sie können die Ressource AWS::Events::Rule bearbeiten, um zusätzliche API-Aufrufe hinzuzufügen oder zu entfernen.
Behebung
Die folgende Vorlage enthält die Ressource AWS::Events::Rule, die die Eigenschaft EventPattern enthält. Sie können die EventPattern-Eigenschaft verwenden, um verschiedenen Ereignisquellen und API-Aufrufen die Möglichkeit zu geben, bestimmte Ereignisse für Ihren Anwendungsfall hinzuzufügen oder einzuschränken. Jeder API-Aufruf hat unterschiedliche Parameter und Informationen in den Ereignissen. Es ist nicht möglich, eine einheitliche Regel für Ereignisse zu erstellen. Die folgende Beispielvorlage enthält nur zwei Regeln, die viele verschiedene API-Aufrufe zusammenfassen. Sie können jedoch so viele Regeln verwenden, wie Sie benötigen, um E-Mails oder Benachrichtigungen für verschiedene API-Aufrufe zu erstellen. Sie können anpassen und definieren, welche API-Aufrufe überwacht und benutzerdefinierte E-Mails und Informationen für jeden Anruf definiert werden.
- Kopieren Sie die folgende JSON- oder YAML-Version der Vorlage und aktualisieren Sie sie dann mit den Werten für Ihre Umgebung.
JSON:
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Monitor IAM events with EventBridge rules with AWS CloudFormation. This Stack must be deployed in 'us-east-1' (IAM).", "Parameters": { "EmailList": { "Type": "String", "Description": "Email to notify!", "AllowedPattern": "[a-zA-Z0-9]+@[a-zA-Z0-9]+\\.[a-zA-Z]+", "Default": "mail@example.com" }, "SNSTopicName": { "Type": "String", "Description": "Name for the notification topic.", "AllowedPattern": "[a-zA-Z0-9_-]+", "Default": "iam-monitoring-topic" }, "MonitorStatus": { "Type": "String", "Description": "Enable / Disable monitor.", "AllowedValues": [ "ENABLED", "DISABLED" ], "Default": "ENABLED" } }, "Resources": { "SNSMonitoringTopic": { "Type": "AWS::SNS::Topic", "Properties": { "Subscription": [ { "Endpoint": { "Ref": "EmailList" }, "Protocol": "email" } ], "TopicName": { "Fn::Sub": "${AWS::StackName}-${SNSTopicName}" } } }, "SNSMonitoringTopicTopicPolicy": { "Type": "AWS::SNS::TopicPolicy", "Properties": { "Topics": [ { "Ref": "SNSMonitoringTopic" } ], "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Sid": "SnsIAMTopicPolicy", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": [ "sns:Publish" ], "Resource": { "Ref": "SNSMonitoringTopic" } }, { "Sid": "AllowAccessToTopicOwner", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "sns:GetTopicAttributes", "sns:SetTopicAttributes", "sns:AddPermission", "sns:RemovePermission", "sns:DeleteTopic", "sns:Subscribe", "sns:ListSubscriptionsByTopic", "sns:Publish", "sns:Receive" ], "Resource": { "Ref": "SNSMonitoringTopic" }, "Condition": { "StringEquals": { "AWS:SourceOwner": { "Ref": "AWS::AccountId" } } } } ] } } }, "EventRulePolicyMonitor": { "Type": "AWS::Events::Rule", "Properties": { "Name": { "Fn::Sub": "${AWS::StackName}-policy-monitor" }, "Description": "This EventBridge rule will capture IAM API Calls and events related to creation and deletion of policies.\n", "State": { "Ref": "MonitorStatus" }, "EventPattern": { "source": [ "aws.iam" ], "detail-type": [ "AWS API Call via CloudTrail" ], "detail": { "eventSource": [ "iam.amazonaws.com" ], "eventName": [ "CreatePolicy", "DeletePolicy", "PutGroupPolicy", "DeleteGroupPolicy", "PutRolePolicy", "DeleteRolePolicy", "PutUserPolicy", "DeleteUserPolicy", "CreatePolicyVersion", "DeletePolicyVersion", "AttachRolePolicy", "DetachRolePolicy", "AttachUserPolicy", "DetachUserPolicy", "AttachGroupPolicy", "DetachGroupPolicy" ] } }, "Targets": [ { "Arn": { "Ref": "SNSMonitoringTopic" }, "Id": "iam-policy-monitor", "InputTransformer": { "InputPathsMap": { "eventName": "$.detail.eventName", "policyName": "$.detail.requestParameters.policyName", "policyArn": "$.detail.requestParameters.policyArn", "eventTime": "$.detail.eventTime", "userIdentity": "$.detail.userIdentity.arn", "sourceIPAddress": "$.detail.sourceIPAddress" }, "InputTemplate": "\"API Call '<eventName>' was issued on policy '<policyName><policyArn>'. This occurred at '<eventTime>' and was initiated by '<userIdentity>' from IP '<sourceIPAddress>'. Please review the details here: https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/<policyArn>$jsonEditor?section=attached_entities .\"\n" } } ] } }, "EventRulePrincipalsMonitor": { "Type": "AWS::Events::Rule", "Properties": { "Name": { "Fn::Sub": "${AWS::StackName}-principals-monitor" }, "Description": "This EventBridge rule will capture IAM API Calls and events related to creation and deletion of users, groups and roles.", "State": { "Ref": "MonitorStatus" }, "EventPattern": { "source": [ "aws.iam" ], "detail-type": [ "AWS API Call via CloudTrail" ], "detail": { "eventSource": [ "iam.amazonaws.com" ], "eventName": [ "CreateUser", "CreateGroup", "CreateRole", "UpdateUser", "UpdateGroup", "UpdateRole", "DeleteUser", "DeleteGroup", "DeleteRole" ] } }, "Targets": [ { "Arn": { "Ref": "SNSMonitoringTopic" }, "Id": "iam-user-monitor", "InputTransformer": { "InputPathsMap": { "eventName": "$.detail.eventName", "userName": "$.detail.requestParameters.userName", "roleName": "$.detail.requestParameters.roleName", "groupName": "$.detail.requestParameters.groupName", "eventTime": "$.detail.eventTime", "userIdentity": "$.detail.userIdentity.arn", "sourceIPAddress": "$.detail.sourceIPAddress" }, "InputTemplate": "\"API Call '<eventName>' was issued on '<userName><roleName><groupName>'. This occurred at '<eventTime>' and was initiated by '<userIdentity>' from IP '<sourceIPAddress>'. \"\n" } } ] } } } }
YAML:
AWSTemplateFormatVersion: 2010-09-09 Description: > - Monitor IAM events with EventBridge rules with AWS CloudFormation. - This Stack must be deployed in 'us-east-1' (IAM). Parameters: EmailList: Type: String Description: "Email to notify!" AllowedPattern: '[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z]+' Default: "mail@example.com" SNSTopicName: Type: String Description: "Name for the notification topic." AllowedPattern: '[a-zA-Z0-9_-]+' Default: "iam-monitoring-topic" MonitorStatus: Type: String Description: "Enable / Disable monitor." AllowedValues: - ENABLED - DISABLED Default: ENABLED Resources: SNSMonitoringTopic: Type: AWS::SNS::Topic Properties: Subscription: - Endpoint: !Ref EmailList Protocol: email TopicName: !Sub ${AWS::StackName}-${SNSTopicName} SNSMonitoringTopicTopicPolicy: Type: AWS::SNS::TopicPolicy Properties: Topics: - !Ref SNSMonitoringTopic PolicyDocument: Version: '2012-10-17' Statement: - Sid: SnsIAMTopicPolicy Effect: Allow Principal: Service: events.amazonaws.com Action: [ 'sns:Publish' ] Resource: !Ref SNSMonitoringTopic - Sid: AllowAccessToTopicOwner Effect: Allow Principal: AWS: '*' Action: [ 'sns:GetTopicAttributes', 'sns:SetTopicAttributes', 'sns:AddPermission', 'sns:RemovePermission', 'sns:DeleteTopic', 'sns:Subscribe', 'sns:ListSubscriptionsByTopic', 'sns:Publish', 'sns:Receive' ] Resource: !Ref SNSMonitoringTopic Condition: StringEquals: 'AWS:SourceOwner': !Ref 'AWS::AccountId' EventRulePolicyMonitor: Type: AWS::Events::Rule Properties: Name: !Sub ${AWS::StackName}-policy-monitor Description: > This EventBridge rule will capture IAM API Calls and events related to creation and deletion of policies. State: !Ref MonitorStatus EventPattern: source: - aws.iam detail-type: - AWS API Call via CloudTrail detail: eventSource: - iam.amazonaws.com eventName: - CreatePolicy - DeletePolicy - PutGroupPolicy - DeleteGroupPolicy - PutRolePolicy - DeleteRolePolicy - PutUserPolicy - DeleteUserPolicy - CreatePolicyVersion - DeletePolicyVersion - AttachRolePolicy - DetachRolePolicy - AttachUserPolicy - DetachUserPolicy - AttachGroupPolicy - DetachGroupPolicy Targets: - Arn: Ref: SNSMonitoringTopic Id: iam-policy-monitor InputTransformer: InputPathsMap: eventName: $.detail.eventName policyName: $.detail.requestParameters.policyName policyArn: $.detail.requestParameters.policyArn eventTime: $.detail.eventTime userIdentity: $.detail.userIdentity.arn sourceIPAddress: $.detail.sourceIPAddress InputTemplate: > "API Call '<eventName>' was issued on policy '<policyName><policyArn>'. This occurred at '<eventTime>' and was initiated by '<userIdentity>' from IP '<sourceIPAddress>'. Please review the details here: https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/<policyArn>$jsonEditor?section=attached_entities ." EventRulePrincipalsMonitor: Type: AWS::Events::Rule Properties: Name: !Sub ${AWS::StackName}-principals-monitor Description: > This EventBridge rule will capture IAM API Calls and events related to creation and deletion of users, groups and roles. State: !Ref MonitorStatus EventPattern: source: - aws.iam detail-type: - AWS API Call via CloudTrail detail: eventSource: - iam.amazonaws.com eventName: - CreateUser - CreateGroup - CreateRole - UpdateUser - UpdateGroup - UpdateRole - DeleteUser - DeleteGroup - DeleteRole Targets: - Arn: Ref: SNSMonitoringTopic Id: iam-user-monitor InputTransformer: InputPathsMap: eventName: $.detail.eventName userName: $.detail.requestParameters.userName roleName: $.detail.requestParameters.roleName groupName: $.detail.requestParameters.groupName eventTime: $.detail.eventTime userIdentity: $.detail.userIdentity.arn sourceIPAddress: $.detail.sourceIPAddress InputTemplate: > "API Call '<eventName>' was issued on '<userName><roleName><groupName>'. This occurred at '<eventTime>' and was initiated by '<userIdentity>' from IP '<sourceIPAddress>'. "
- Stellen Sie Ihre Vorlage entweder über die AWS CloudFormation-Konsole oder die AWS-Befehlszeilenschnittstelle (AWS CLI) bereit:
AWS CloudFormation-Konsole
- Laden Sie die Vorlage herunter.
2.Öffnen Sie die AWS CloudFormation-Konsole.
-
Wählen Sie in der Navigationsleiste in der AWS-Regionenauswahl die Option us-east-1 aus.
-
Wählen Sie Stapel erstellen und dann Mit neuen Ressourcen (Standard) aus.
-
Wählen Sie im Abschnitt Vorlage angeben die Option Eine Vorlagendatei hochladen aus.
-
Wählen Sie Datei auswählen, wählen Sie die Vorlage aus, die Sie in Schritt 1 heruntergeladen haben, und wählen Sie dann Weiter.
-
Geben Sie im Abschnitt Stackname für Stackname einen Namen für Ihren Stack ein.
-
Geben Sie im Abschnitt Parameter für eMailList die E-Mail-Adresse ein, an die Sie Benachrichtigungen erhalten möchten.
-
Wählen Sie für MonitorStatus die Option ENABLED.
-
Belassen Sie für snStopicName den Standardnamen oder wählen Sie Ihren eigenen Namen für ein Amazon Simple Notification Service (Amazon SNS) -Thema.
-
Führen Sie die restlichen Schritte im Einrichtungsassistenten aus und wählen Sie dann Stapel erstellen aus.
-
Suchen Sie in Ihrem Posteingang (mit der E-Mail-Adresse, die Sie in Schritt 8 eingegeben haben) nach einer Bestätigungs-E-Mail, und folgen Sie dann den E-Mail-Anweisungen, um Ihr Abonnement zu bestätigen.
AWS-CLI
**Hinweis:**Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste AWS-CLI-Version verwenden.
-
Laden Sie die Vorlage herunter und geben Sie der Vorlage den Namen sample-event-rule-iam-sns.yaml.
-
Richten Sie die AWS-CLI ein.
-
Öffnen Sie eine Befehlszeile in Ihrem Betriebssystem und wechseln Sie zu dem Ordner, in dem sich Ihre Vorlage befindet.
4. Führen Sie den folgenden Befehl aus:
aws cloudformation --region=us-east-1 \ create-stack \ --stack-name iam-sample-monitor \ --template-body file://sample-event-rule-iam-sns.yaml \ --parameters \ ParameterKey=EmailList,ParameterValue="mail@example.com"
**Hinweis:**Ersetzen Sie mail@example.com durch die E-Mail, mit der Sie Benachrichtigungen erhalten möchten.
- Suchen Sie in Ihrem Posteingang (mit der E-Mail-Adresse, die Sie in Schritt 4 eingegeben haben) nach einer Bestätigungs-E-Mail, und folgen Sie dann den E-Mail-Anweisungen, um Ihr Abonnement zu bestätigen.
Testen Sie die Überwachungsbenachrichtigung
1. Öffnen Sie die IAM-Konsole.
-
In Ihrer E-Mail finden Sie eine Benachrichtigung über die Veranstaltung. Sie erhalten eine E-Mail, die der folgenden ähnelt:
API Call 'CreatePolicy' was issued on policy 'test-policy'. This occurred at '2020-11-13T00:00:00Z' and was initiated by 'arn:aws:sts::123456789012:assumed-role/your-role' from IP 'X.Y.Z.T'. Please review the details here: https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/$jsonEditor?section=attached_entities.
Ähnliche Informationen
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 4 Jahren
- AWS OFFICIALAktualisiert vor 4 Jahren