Amazon EventBridge로 AWS Identity and Access Management Access Analyzer 모니터링 - AWS Identity and Access Management

Amazon EventBridge로 AWS Identity and Access Management Access Analyzer 모니터링

이 주제의 정보를 이용해 Amazon EventBridge로 IAM Access Analyzer 결과와 액세스 미리 보기를 모니터링하는 방법을 알아봅니다. EventBridge는 Amazon CloudWatch Events의 새 버전입니다.

결과 이벤트

IAM Access Analyzer는 기존 결과의 상태 변경 시, 그리고 검색 결과가 삭제될 때 생성된 각 결과에 대해 Eventbridge에 이벤트를 전송합니다. 결과와 결과에 대한 알림을 받으려면 Amazon EventBridge에서 이벤트 규칙을 생성해야 합니다. 이벤트 규칙을 생성할 때 규칙에 따라 트리거할 대상 동작을 지정할 수도 있습니다. 예를 들어 IAM Access Analyzer에서 새 결과에 대한 이벤트를 수신할 때 Amazon SNS 주제를 트리거하는 이벤트 규칙을 생성할 수 있습니다.

액세스 미리 보기 이벤트

IAM Access Analyzer는 각 액세스 미리 보기 및 해당 상태 변경에 대해 EventBridge에 이벤트를 전송합니다. 여기에는 액세스 미리 보기가 처음 생성될 때(Creating 상태), 액세스 미리 보기가 완료될 때(Completed 상태) 또는 액세스 미리 보기 생성이 실패한 때(Failed 상태)의 이벤트가 포함됩니다. 액세스 미리 보기에 대한 알림을 받으려면 Amazon EventBridge에서 이벤트 규칙을 생성해야 합니다. 이벤트 규칙을 생성할 때 규칙에 따라 트리거할 대상 동작을 지정할 수 있습니다. 예를 들어 IAM Access Analyzer에서 완료된 액세스 미리 보기에 대한 이벤트를 수신할 때 Amazon SNS 주제를 트리거하는 이벤트 규칙을 생성할 수 있습니다.

이벤트 알림 빈도

IAM Access Analyzer는 계정에서 이벤트가 발생한 시점부터 약 1시간 내에 새 결과와 상태가 업데이트된 결과에 대한 이벤트를 EventBridge에 전송합니다. IAM Access Analyzer는 또한 보존 기간이 만료되어 해결된 결과가 삭제되는 경우에도 EventBridge에 이벤트를 전송합니다. 결과를 생성한 분석기가 삭제되었기 때문에 삭제가 된 결과의 경우, 분석기가 삭제된 후 약 24시간 내에 EventBridge로 이벤트가 전송됩니다. 결과가 삭제될 때 검색 상태는 변경되지 않습니다. 대신 isDeleted 속성이 true로 설정됩니다. 또한 IAM Access Analyzer는 새로 생성된 액세스 미리 보기 및 액세스 미리 보기 상태 변경에 대한 이벤트를 EventBridge로 보냅니다.

외부 액세스 조사 결과 이벤트 사례

다음은 EventBridge로 전송되는 IAM Access Analyzer 외부 액세스 분석 이벤트의 예시입니다. 나열된 id는 Eventbridge의 이벤트 ID입니다. 자세한 내용은 EventBridge의 이벤트 및 이벤트 패턴을 참조하세요.

detail 객체에서 accountIdregion 속성의 값은 결과에 보고된 계정 및 리전을 나타냅니다. isDeleted 속성은 이벤트가 삭제 중인 결과에서 발생했는지 여부를 나타냅니다. id은 결과 ID입니다. resources 배열은 결과를 생성한 분석기의 ARN이 있는 singleton입니다.

{ "account": "111122223333", "detail": { "accountId": "111122223333", "action": [ "s3:GetObject" ], "analyzedAt": "2019-11-21T01:22:22Z", "condition": {}, "createdAt": "2019-11-20T04:58:50Z", "id": "22222222-dcba-4444-dcba-333333333333", "isDeleted": false, "isPublic": false, "principal": { "AWS": "999988887777" }, "region": "us-west-2", "resource": "arn:aws:s3:::my-bucket", "resourceType": "AWS::S3::Bucket", "status": "ACTIVE", "updatedAt": "2019-11-21T01:14:07Z", "version": "1.0" }, "detail-type": "Access Analyzer Finding", "id": "11111111-2222-4444-aaaa-333333333333", "region": "us-west-2", "resources": [ "arn:aws:access-analyzer:us-west-2:111122223333:analyzer/MyAnalyzer" ], "source": "aws.access-analyzer", "time": "2019-11-21T01:22:33Z", "version": "0" }

IAM Access Analyzer는 오류 결과에 대한 이벤트도 EventBridge에 전송합니다. 오류 결과는 IAM Access Analyzer에서 리소스를 분석할 수 없을 때 생성되는 결과입니다. 오류 결과를 위한 이벤트에는 다음 예제에서와 같이 error 속성이 포함됩니다.

{ "account": "111122223333", "detail": { "accountId": "111122223333", "analyzedAt": "2019-11-21T01:22:22Z", "createdAt": "2019-11-20T04:58:50Z", "error": "ACCESS_DENIED", "id": "22222222-dcba-4444-dcba-333333333333", "isDeleted": false, "region": "us-west-2", "resource": "arn:aws:s3:::my-bucket", "resourceType": "AWS::S3::Bucket", "status": "ACTIVE", "updatedAt": "2019-11-21T01:14:07Z", "version": "1.0" }, "detail-type": "Access Analyzer Finding", "id": "11111111-2222-4444-aaaa-333333333333", "region": "us-west-2", "resources": [ "arn:aws:access-analyzer:us-west-2:111122223333:analyzer/MyAnalyzer" ], "source": "aws.access-analyzer", "time": "2019-11-21T01:22:33Z", "version": "0" }

다음은 EventBridge로 전송되는 IAM Access Analyzer 미사용 액세스 분석 이벤트의 예시입니다. 나열된 id는 Eventbridge의 이벤트 ID입니다. 자세한 내용은 EventBridge의 이벤트 및 이벤트 패턴을 참조하세요.

detail 객체에서 accountIdregion 속성의 값은 결과에 보고된 계정 및 리전을 나타냅니다. isDeleted 속성은 이벤트가 삭제 중인 결과에서 발생했는지 여부를 나타냅니다. id은 결과 ID입니다.

{ "version": "0", "id": "dc7ce3ee-114b-3243-e249-7f10f9054b21", "detail-type": "Unused Access Finding for IAM entities", "source": "aws.access-analyzer", "account": "123456789012", "time": "2023-09-29T17:31:40Z", "region": "us-west-2", "resources": [ "arn:aws:access-analyzer:us-west-2:123456789012:analyzer/integTestLongLivingAnalyzer-DO-NOT-DELETE" ], "detail": { "findingId": "b8ae0460-5d29-4922-b92a-ba956c986277", "resource": "arn:aws:iam::111122223333:role/FindingIntegTestFakeRole", "resourceType": "AWS::IAM::Role", "accountId": "111122223333", "createdAt": "2023-09-29T17:29:18.758Z", "updatedAt": "2023-09-29T17:29:18.758Z", "analyzedAt": "2023-09-29T17:29:18.758Z", "previousStatus": "", "status": "ACTIVE", "version": "62160bda-8e94-46d6-ac97-9670930d8ffb", "isDeleted": false, "findingType": "UnusedPermission", "numberOfUnusedServices": 0, "numberOfUnusedActions": 1 } }

IAM Access Analyzer는 오류 결과에 대한 이벤트도 EventBridge에 전송합니다. 오류 결과는 IAM Access Analyzer에서 리소스를 분석할 수 없을 때 생성되는 결과입니다. 오류 결과를 위한 이벤트에는 다음 예제에서와 같이 error 속성이 포함됩니다.

{ "version": "0", "id": "c2e7aa1a-4df7-7652-f33e-64113b8997d4", "detail-type": "Unused Access Finding for IAM entities", "source": "aws.access-analyzer", "account": "111122223333", "time": "2023-10-31T20:26:12Z", "region": "us-west-2", "resources": [ "arn:aws:access-analyzer:us-west-2:111122223333:analyzer/ba811f91-de99-41a4-97c0-7481898b53f2" ], "detail": { "findingId": "b01a34f2-e118-46c9-aef8-0d8526b495c7", "resource": "arn:aws:iam::123456789012:role/TestRole", "resourceType": "AWS::IAM::Role", "accountId": "444455556666", "createdAt": "2023-10-31T20:26:08.647Z", "updatedAt": "2023-10-31T20:26:09.245Z", "analyzedAt": "2023-10-31T20:26:08.525Z", "previousStatus": "", "status": "ACTIVE", "version": "7c7a72a2-7963-4c59-ac71-f0be597010f7", "isDeleted": false, "findingType": "UnusedIAMRole", "error": "INTERNAL_ERROR" } }

액세스 미리 보기 이벤트 예

다음 예제에서는 액세스 미리 보기를 생성할 때 EventBridge로 전송되는 첫 번째 이벤트의 데이터를 보여줍니다. resources 배열은 액세스 미리 보기가 연결된 분석기의 ARN이 있는 singleton입니다. detail 객체에서 id는 액세스 미리 보기 ID를 나타내고 configuredResources는 액세스 미리 보기가 생성된 리소스를 나타냅니다. statusCreating이며 액세스 미리 보기 상태를 나타냅니다. 액세스 미리 보기가 방금 생성되었으므로 previousStatus는 지정되어 있지 않습니다.

{ "account": "111122223333", "detail": { "accessPreviewId": "aaaabbbb-cccc-dddd-eeee-ffffaaaabbbb", "configuredResources": [ "arn:aws:s3:::example-bucket" ], "createdAt": "2020-02-20T00:00:00.00Z", "region": "us-west-2", "status": "CREATING", "version": "1.0" }, "detail-type": "Access Preview State Change", "id": "aaaabbbb-2222-3333-4444-555566667777", "region": "us-west-2", "resources": [ "arn:aws:access-analyzer:us-west-2:111122223333:analyzer/MyAnalyzer" ], "source": "aws.access-analyzer", "time": "2020-02-20T00:00:00.00Z", "version": "0" }

다음 예제에서는 상태가 Creating에서 Completed로 변경된 액세스 미리 보기에 대해 EventBridge로 전송된 이벤트 데이터를 보여줍니다. 세부 정보 객체에서 id는 액세스 미리 보기 ID를 나타냅니다. statuspreviousStatus는 액세스 미리 보기 상태를 나타내며, 여기서는 이전 상태가 Creating, 현재 상태가 Completed입니다.

{ "account": "111122223333", "detail": { "accessPreviewId": "aaaabbbb-cccc-dddd-eeee-ffffaaaabbbb", "configuredResources": [ "arn:aws:s3:::example-bucket" ], "createdAt": "2020-02-20T00:00:00.000Z", "previousStatus": "CREATING", "region": "us-west-2", "status": "COMPLETED", "version": "1.0" }, "detail-type": "Access Preview State Change", "id": "11112222-3333-4444-5555-666677778888", "region": "us-west-2", "resources": [ "arn:aws:access-analyzer:us-west-2:111122223333:analyzer/MyAnalyzer" ], "source": "aws.access-analyzer", "time": "2020-02-20T00:00:00.00Z", "version": "0" }

다음 예제에서는 상태가 Creating에서 Failed로 변경된 액세스 미리 보기에 대해 EventBridge로 전송된 이벤트 데이터를 보여줍니다. detail 객체에서 id는 액세스 미리 보기 ID를 나타냅니다. statuspreviousStatus는 액세스 미리 보기 상태를 나타내며, 여기서는 이전 상태가 Creating, 현재 상태가 Failed입니다. statusReason 필드에는 액세스 미리 보기가 잘못된 리소스 구성으로 인해 실패했음을 나타내는 사유 코드가 제공됩니다.

{ "account": "111122223333", "detail": { "accessPreviewId": "aaaabbbb-cccc-dddd-eeee-ffffaaaabbbb", "configuredResources": [ "arn:aws:s3:::example-bucket" ], "createdAt": "2020-02-20T00:00:00.00Z", "previousStatus": "CREATING", "region": "us-west-2", "status": "FAILED", "statusReason": { "code": "INVALID_CONFIGURATION" }, "version": "1.0" }, "detail-type": "Access Preview State Change", "id": "99998888-7777-6666-5555-444433332222", "region": "us-west-2", "resources": [ "arn:aws:access-analyzer:us-west-2:111122223333:analyzer/MyAnalyzer" ], "source": "aws.access-analyzer", "time": "2020-02-20T00:00:00.00Z", "version": "0" }

콘솔을 사용하여 이벤트 규칙 생성

다음 절차에서는 콘솔을 사용하여 이벤트를 생성하는 방법을 설명합니다.

  1. Amazon EventBridge 콘솔(https://console.aws.amazon.com/events/)을 엽니다.

  2. 다음 값을 사용하여 찾기 이벤트 또는 액세스 미리 보기 이벤트를 모니터링하는 EventBridge 규칙을 생성합니다.

    • 규칙 유형에서 이벤트 패턴이 있는 규칙을 선택합니다.

    • 이벤트 소스(Event source)에서 기타(Other)를 선택합니다.

    • 이벤트 패턴(Event pattern)에서 사용자 지정 패턴(JSON 편집기)(Custom patterns (JSON editor))을 선택하고 다음 이벤트 패턴 예제 중 하나를 텍스트 영역에 붙여 넣습니다.

      • 외부 액세스 또는 미사용 액세스 조사 결과 이벤트를 기반으로 규칙을 생성하려면 다음 패턴 예제를 사용합니다.

        { "source": [ "aws.access-analyzer" ], "detail-type": [ "Access Analyzer Finding" ] }
      • 미사용 액세스 조사 결과 이벤트만을 기반으로 규칙을 생성하려면 다음 패턴 예제를 사용합니다.

        { "source": [ "aws.access-analyzer" ], "detail-type": [ "Unused Access Finding for IAM entities" ] }
        참고

        외부 액세스 조사 결과 이벤트만을 기반으로 규칙을 생성할 수는 없습니다.

      • 액세스 미리 보기 이벤트를 기반으로 규칙을 생성하려면 다음 패턴 예제를 사용합니다.

        { "source": [ "aws.access-analyzer" ], "detail-type": [ "Access Preview State Change" ] }
    • 대상 유형(Target types)에서 AWS 서비스를 선택하고 대상 선택(Select a target)에서 Amazon SNS 주제 또는 AWS Lambda 함수와 같은 대상을 선택합니다. 규칙에 정의된 이벤트 패턴과 일치하는 이벤트를 수신할 때 대상이 트리거됩니다.

    규칙 생성에 대한 자세한 내용을 알아보려면 Amazon EventBridge User Guide(Amazon EventBridge 사용 설명서)의 Creating Amazon EventBridge rules that react to events(이벤트에 대응하는 Amazon EventBridge 규칙 생성)를 참조하세요.

CLI를 사용하여 이벤트 규칙 생성

  1. 다음에 따라 AWS CLI을 사용하여 Amazon EventBridge에 대한 규칙을 생성합니다. 규칙 이름 TestRule을 자신의 규칙 이름으로 바꿉니다.

    aws events put-rule --name TestRule --event-pattern "{\"source\":[\"aws.access-analyzer\"]}"
  2. 특정 속성을 가진 결과와 같이 생성된 결과의 하위 집합에 대해서만 대상 작업을 트리거하도록 규칙을 사용자 정의할 수 있습니다. 다음 예제에서는 활성 상태인 결과에 대해서만 대상 작업을 트리거하는 규칙을 생성하는 방법을 보여 줍니다.

    aws events put-rule --name TestRule --event-pattern "{\"source\":[\"aws.access-analyzer\"],\"detail-type\":[\"Access Analyzer Finding\"],\"detail\":{\"status\":[\"ACTIVE\"]}}"

    다음 예제에서는 상태가 Creating에서 Completed로 변경된 액세스 미리 보기에 대해서만 대상 작업을 트리거하는 규칙을 생성하는 방법을 보여줍니다.

    aws events put-rule --name TestRule --event-pattern "{\"source\":[\"aws.access-analyzer\"],\"detail-type\":[\"Access Preview State Change\"],\"detail\":{\"status\":[\"COMPLETED\"]}}"
  3. Lambda 함수를 생성한 규칙의 대상으로 정의하려면 다음 예제 명령을 사용합니다. ARN의 리전 및 함수 이름을 사용자 환경에 맞게 바꿉니다.

    aws events put-targets --rule TestRule --targets Id=1,Arn=arn:aws:lambda:us-east-1:111122223333:function:MyFunction
  4. 규칙 대상을 호출하는 데 필요한 권한을 추가합니다. 다음 예제에서는 앞의 예에 따라 Lambda 함수에 권한을 부여하는 방법을 보여줍니다.

    aws lambda add-permission --function-name MyFunction --statement-id 1 --action 'lambda:InvokeFunction' --principal events.amazonaws.com