AWS Secrets Manager 보안 암호 사용 모니터링 - AWS Secrets Manager

AWS Secrets Manager 보안 암호 사용 모니터링

보안 암호를 모니터링하여 보안 암호의 사용 및 보안 암호에 대한 모든 변경 사항이 기록되고 있는지 확인하는 것이 가장 좋습니다. 그러면 예기치 않은 사용 또는 변경 사항을 검토하고 원치 않는 모든 변경 사항을 롤백할 수 있습니다. AWS Secrets Manager는 현재 2개의 AWS 서비스를 지원하며 이러한 서비스를 통해 조직 및 작업을 모니터링할 수 있습니다.

AWS CloudTrail을 사용하여 AWS Secrets Manager API 호출 로깅

AWS Secrets Manager는 Secrets Manager의 사용자, 역할 또는 AWS 서비스가 수행한 작업에 대한 레코드를 제공하는 서비스인 AWS CloudTrail과 통합됩니다. CloudTrail은 Secrets Manager 콘솔의 호출 및 Secrets Manager API 코드 호출 등 Secrets Manager에 대한 모든 API 호출을 이벤트로 캡처합니다. 추적을 생성하면 Secrets Manager에 대핮ㄴ 이벤트를 비롯하여 CloudTrail 이벤트를 Amazon S3 버킷으로 지속적으로 배포할 수 있습니다. 추적을 구성하지 않은 경우 이벤트 기록에서 CloudTrail 콘솔의 최신 이벤트를 볼 수도 있습니다. CloudTrail에서 수집하는 정보를 사용하여 Secrets Manager에 수행된 요청, 요청이 수행된 IP 주소, 요청을 수행한 사람, 요청이 수행된 시간 및 추가 세부 정보를 확인할 수 있습니다.

CloudTrail에 대한 자세한 정보는 AWS CloudTrail User Guide를 참조하십시오.

AWS Secrets Manager 비 API 이벤트 로깅

AWS API 호출의 로깅 이외에도 CloudTrail은 귀하의 AWS 계정에 보안 또는 규정 준수에 대한 영향을 주거나 사용자가 운영 문제를 해결하는 데 유용한 다른 관련된 이벤트를 캡처합니다. CloudTrail은 이러한 이벤트를 비 API 서비스 이벤트로 기록합니다.

Secrets Manager에는 3가지 비 API 서비스 이벤트가 있습니다.

  • RotationAbandoned 이벤트 - Secrets Manager 서비스가 기존 버전 보안 암호에서 AWSPENDING 레이블을 제거했음을 알리는 메커니즘입니다. 보안 암호의 새 버전을 수동으로 생성하면 새 보안 암호 버전으로 인해 현재 진행 중인 교체를 중단할 것을 알리는 메시지가 전송됩니다. 그 결과 Secrets Manager은 AWSPENDING 레이블을 제거하여 향후 교체가 성공하도록 하고 CloudTrail 이벤트를 게시하여 변경 사항을 인식합니다.

  • RotationStarted 이벤트 - 보안 암호 교체의 시작을 알리는 메커니즘입니다.

  • RotationSucceeded 이벤트 - 교체 이벤트 성공을 알리는 메커니즘입니다.

  • RotationFailed 이벤트 - 애플리케이션의 보안 암호 교체가 실패했음을 알리는 메커니즘입니다.

Secrets Manager CloudTrail의 정보

AWS 계정을 생성하면 AWS가 CloudTrail를 활성화합니다. Secrets Manager에서 활동이 수행되면 CloudTrail가 Event history(이벤트 기록)에서 다른 AWS 서비스 이벤트와 함께 CloudTrail 이벤트에 해당 활동을 기록합니다. AWS 계정에서 최신 이벤트를 확인, 검색 및 다운로드할 수 있습니다. 자세한 내용은 CloudTrail 이벤트 기록에서 이벤트 보기를 참조하십시오.

Secrets Manager에 대한 이벤트를 포함하여 AWS 계정에 이벤트를 지속적으로 기록하려는 경우 추적을 생성합니다. 추적은 CloudTrail이 Amazon S3 버킷으로 로그 파일을 전송할 수 있도록 합니다. 콘솔에서 추적을 생성하면 기본적으로 모든 리전에 추적이 적용됩니다. 추적은 AWS 파티션에 있는 모든 리전의 이벤트를 로깅하고 지정한 Amazon S3 버킷으로 로그 파일을 전송합니다. 또는 CloudTrail 로그에서 수집된 이벤트 데이터를 추가 분석 및 처리하도록 다른 AWS 서비스를 구성할 수 있습니다. 자세한 내용은 다음을 참조하십시오.

CloudTrail는 모든 Secrets Manager 작업을 기록하고 AWS Secrets Manager API 참조에 작업을 문서화합니다. 예를 들어, CreateSecret, GetSecretValueRotateSecret 섹션을 호출하면 CloudTrail 로그 파일에 항목이 생성됩니다.

모든 이벤트 및 로그 항목에는 요청을 생성한 사용자에 대한 정보가 들어 있습니다. 자격 증명 정보를 이용하면 다음을 쉽게 판단할 수 있습니다.

  • 루트 또는 IAM 사용자 자격 증명을 통해 요청이 이루어졌는지

  • 역할 또는 연합된 사용자에 대한 임시 보안 자격 증명을 사용하여 요청이 이루어졌는지

  • 다른 AWS 서비스를 통해 요청이 이루어졌는지

로그 파일 전달 알림의 경우 Amazon SNS 알림을 게시하도록 CloudTrail를 구성할 수 있습니다. 자세한 정보는 CloudTrail에 대한 Amazon SNS 알림 구성을 참조하십시오.

또한 여러 AWS 리전 및 여러 AWS 계정의 AWS Secrets Manager 로그 파일을 하나의 Amazon S3 버킷으로 통합할 수도 있습니다.

자세한 정보는 여러 리전에서 CloudTrail 로그 파일 받기여러 계정에서 CloudTrail 로그 파일 받기를 참조하십시오.

Secrets Manager 로그 파일 항목 검색

다음과 같은 기술을 사용하여 CloudTrail에서 개별 이벤트를 검색할 수 있습니다.

CloudTrail 로그에서 Secrets Manager 이벤트를 검색하려면

AWS Management Console 사용

CloudTrail 콘솔을 사용하여 지난 90일 이내에 발생한 이벤트를 확인할 수 있습니다.

  1. https://console.aws.amazon.com/cloudtrail/에서 CloudTrail 콘솔을 엽니다.

  2. 콘솔에서 이벤트가 발생한 리전을 가리키고 있는지 확인합니다. 콘솔에는 선택한 리전에서 발생한 이벤트만 표시됩니다. 오른쪽 상단 모서리에 있는 드롭다운 목록에서 리전을 선택합니다.

  3. 왼쪽 탐색 창에서 Event history(이벤트 기록)을 선택합니다.

  4. 필터 기준 및/또는 시간 범위를 선택하면 원하는 이벤트를 찾는 데 도움이 됩니다. 예를 들어, 모든 Secrets Manager 이벤트를 보려면 속성 선택에서 이벤트 소스를 선택합니다. 그런 다음 이벤트 소스 입력에서 secretsmanager.amazonaws.com을 선택합니다.

  5. 자세한 정보를 보려면 이벤트 옆에 있는 확장 화살표를 선택합니다. 사용 가능한 모든 정보를 보려면 이벤트 보기를 선택합니다.

AWS CLI 또는 SDK 작업 사용
  1. AWS CLI 명령을 실행할 수 있는 명령 창을 엽니다.

  2. 다음 예와 유사한 명령을 실행합니다. 여기서 가독성을 위해 출력은 단어 래핑으로 표시되지만 실제 출력은 표시되지 않습니다.

    $ aws cloudtrail lookup-events --region us-east-1 --lookup-attributes AttributeKey=EventSource,AttributeValue=secretsmanager.amazonaws.com { "Events": [ { "EventId": "EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE", "EventName": "CreateSecret", "EventTime": 1525106994.0, "Username": "Administrator", "Resources": [], "CloudTrailEvent": "{\"eventVersion\":\"1.05\",\"userIdentity\":{\"type\":\"IAMUser\",\"principalId\":\"AKIAIOSFODNN7EXAMPLE\", \"arn\":\"arn:aws:iam::123456789012:user/Administrator\",\"accountId\":\"123456789012\",\"accessKeyId\":\"AKIAIOSFODNN7EXAMPLE\", \"userName\":\"Administrator\"},\"eventTime\":\"2018-04-30T16:49:54Z\",\"eventSource\":\"secretsmanager.amazonaws.com\", \"eventName\":\"CreateSecret\",\"awsRegion\":\"us-east-1\",\"sourceIPAddress\":\"192.168.100.101\", \"userAgent\":\"<useragent string>\",\"requestParameters\":{\"name\":\"MyTestSecret\", \"clientRequestToken\":\"EXAMPLE2-90ab-cdef-fedc-ba987EXAMPLE\"},\"responseElements\":null, \"requestID\":\"EXAMPLE3-90ab-cdef-fedc-ba987EXAMPLE\",\"eventID\":\"EXAMPLE4-90ab-cdef-fedc-ba987EXAMPLE\", \"eventType\":\"AwsApiCall\",\"recipientAccountId\":\"123456789012\"}" } ] }

Secrets Manager 로그 파일 항목 이해

추적을 사용하면 지정한 Amazon S3 버킷에 이벤트를 로그 파일로 제공할 수 있습니다. CloudTrail 로그 파일에는 로그 항목이 하나 이상 포함됩니다. 이벤트는 어떤 소스로부터의 단일 요청을 나타내며 요청된 작업, 작업 날짜와 시간, 요청 파라미터 등에 대한 정보가 들어 있습니다. CloudTrail 로그 파일은 퍼블릭 API 호출의 순서가 지정된 스택 추적을 수집하지 않기 때문에 특정 순서로 표시되지 않습니다.

다음 예제에서는 샘플 CreateSecret 호출의 CloudTrail 로그 항목을 보여 줍니다.

{ "eventVersion": "1.05", "userIdentity": { "type": "Root", "principalId": "123456789012", "arn": "arn:aws:iam::123456789012:root", "accountId": "123456789012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "myusername", "sessionContext": {"attributes": { "mfaAuthenticated": "false", "creationDate": "2018-04-03T17:43:50Z" }} }, "eventTime": "2018-04-03T17:50:55Z", "eventSource": "secretsmanager.amazonaws.com", "eventName": "CreateSecret", "awsRegion": "us-west-2", "requestParameters": { "name": "MyDatabaseSecret", "clientRequestToken": "EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE" }, "responseElements": null, "requestID": "EXAMPLE2-90ab-cdef-fedc-ba987EXAMPLE", "eventID": "EXAMPLE3-90ab-cdef-fedc-ba987EXAMPLE", "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }

다음 예제에서는 샘플 DeleteSecret 호출의 CloudTrail 로그 항목을 보여 줍니다.

{ "eventVersion": "1.05", "userIdentity": { "type": "Root", "principalId": "123456789012", "arn": "arn:aws:iam::123456789012:root", "accountId": "123456789012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "myusername", "sessionContext": {"attributes": { "mfaAuthenticated": "false", "creationDate": "2018-04-03T17:43:50Z" }} }, "eventTime": "2018-04-03T17:51:02Z", "eventSource": "secretsmanager.amazonaws.com", "eventName": "DeleteSecret", "awsRegion": "us-west-2", "requestParameters": { "recoveryWindowInDays": 30, "secretId": "MyDatabaseSecret" }, "responseElements": { "name": "MyDatabaseSecret", "deletionDate": "May 3, 2018 5:51:02 PM", "aRN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyDatabaseSecret-a1b2c3" }, "requestID": "EXAMPLE2-90ab-cdef-fedc-ba987EXAMPLE", "eventID": "EXAMPLE3-90ab-cdef-fedc-ba987EXAMPLE", "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }

Amazon CloudWatch Events

Secrets Manager는 CloudWatch 이벤트와 연동하여 조직에서 관리자 지정 작업이 발생하면 알림을 트리거합니다. 예를 들어, 이러한 작업의 민감도 때문에 관리자는 보안 암호가 삭제되거나 보안 암호가 교체될 때 알림을 받으려고 할 수 있습니다. 보안 암호 버전이 삭제되도록 대기 중인 기간에 누군가 이 보안 암호 버전을 사용하려고 시도한 경우 역시 알림이 필요한 경우입니다. 이 경우, 이러한 작업을 찾는 CloudWatch 이벤트 규칙을 구성한 다음, 생성된 이벤트를 관리자 정의 "대상"에 보내면 됩니다. 대상은 해당 구독자에게 이메일 또는 문자 메시지를 보내는 Amazon SNS 주제가 될 수 있습니다. 또한 나중에 검토할 수 있도록 이벤트를 통해 트리거되며 작업의 세부 정보를 기록하는 간단한 AWS Lambda 함수를 만들 수도 있습니다.

그 구성 및 활성화 방법을 포함하여 CloudWatch 이벤트에 대한 자세한 정보는 Amazon CloudWatch Events 사용 설명서를 참조하십시오.

삭제하도록 예약된 보안 암호 버전 모니터링

AWS CloudTrail, Amazon CloudWatch Logs, Amazon Simple Notification Service(Amazon SNS) 조합을 이용하여 삭제 보류 중인 보안 암호 버전에 액세스하려는 모든 시도에 대해 알려주는 경보를 생성할 수 있습니다. 이러한 경보로부터 알림을 받으면 보안 암호 삭제를 취소하여, 정말로 삭제할지 판단할 시간을 확보하고 싶을 수 있습니다. 조사를 통해 필요하다고 판단되면 보안 암호를 복원할 수 있습니다. 또는 사용자가 사용할 새 암호 정보로 사용자를 업데이트해야 할 수 있습니다.

다음 절차에서는 특정 오류 메시지를 생성하는 GetSecretValue 작업에 대한 요청이 CloudTrail 로그 파일에 기록될 때 알림을 받는 방법에 대해 설명합니다. 경보를 트리거하지 않고 보안 암호의 버전에 대해 다른 API 작업을 수행할 수 있습니다. 이 CloudWatch 경보는 오래된 자격 증명을 사용하는 사용자나 애플리케이션을 나타낼 수 있는 사용을 감지합니다.

이러한 절차를 시작하기 전, AWS Secrets Manager API 요청을 모니터링하려는 AWS 리전 및 계정에서 CloudTrail을 설정해 놓아야 합니다. 지침은 AWS CloudTrail 사용 설명서Creating a Trail for the First Time 단원을 참조하십시오.

1부: CloudWatch 로그로 CloudTrail 로그 파일이 전송되도록 구성

CloudTrail 로그 파일을 CloudWatch Logs에 전달하도록 구성해야 합니다. 이렇게 하면 CloudWatch Logs에서 삭제 보류 중인 보안 암호의 버전을 검색하려는 Secrets Manager API 요청을 모니터링할 수 있습니다.

CloudWatch Logs로 CloudTrail 로그 파일이 전송되도록 구성하려면

  1. https://console.aws.amazon.com/cloudtrail/에서 CloudTrail 콘솔을 엽니다.

  2. 상단 탐색 모음에서 보안 암호를 모니터링할 AWS 리전을 선택합니다.

  3. 왼쪽 탐색 창에서 Trails(추적)를 선택한 다음 CloudWatch에 대해 구성할 추적 이름을 선택합니다.

  4. 추적 구성 페이지에서 CloudWatch Logs 섹션까지 아래로 스크롤한 다음 편집 아이콘( )을 선택합니다.

  5. New or existing log group(새 또는 기존 로그 그룹)에 로그 그룹 이름을 입력합니다(예: CloudTrail/MyCloudWatchLogGroup).

  6. IAM 역할CloudTrail_CloudWatchLogs_Role이라는 기본 역할을 사용할 수 있습니다. 이 역할에는 CloudTrail 이벤트를 로그 그룹으로 전달하는 필수 권한과 함께 기본 역할 정책이 있습니다.

  7. 계속을 선택하여 구성을 저장합니다.

  8. AWS CloudTrail will deliver CloudTrail events associated with API activity in your account to your CloudWatch Logs log group(AWS CloudTrail이 계정의 API 활동과 관련된 CloudTrail 이벤트를 CloudWatch Logs 로그 그룹에 전달) 페이지에서 허용을 선택합니다.

2부: CloudWatch 경보 생성

삭제 보류 중인 보안 암호 버전에 액세스하려고 하는 Secrets Manager GetSecretValue API 작업 요청 발생 시 알림을 받으려면 CloudWatch 경보를 생성하고 알림을 구성해야 합니다.

삭제 보류 중인 보안 암호 버전의 사용 시도를 모니터링하는 CloudWatch 경보 생성

  1. https://console.aws.amazon.com/cloudwatch/에서 CloudWatch 콘솔에 로그인합니다.

  2. 상단 탐색 모음에서 보안 암호를 모니터링하려는 AWS 리전을 선택합니다.

  3. 왼쪽 탐색 창에서 Logs를 선택합니다.

  4. 로그 그룹 목록에서 CloudTrail/MyCloudWatchLogGroup처럼 이전 절차에서 생성한 로그 그룹 옆의 확인란을 선택합니다. 그런 다음 [Create Metric Filter]를 선택합니다.

  5. [Filter Pattern]에 다음을 입력하거나 붙여 넣습니다.

    { $.eventName = "GetSecretValue" && $.errorMessage = "*secret because it was marked for deletion*" }

    [Assign Metric]을 선택합니다.

  6. [Create Metric Filter and Assign a Metric] 페이지에서 다음을 수행합니다.

    1. 지표 네임스페이스CloudTrailLogMetrics를 입력합니다.

    2. 지표 이름AttemptsToAccessDeletedSecrets를 입력합니다.

    3. 고급 지표 설정 표시를 선택한 후 필요에 따라 지표 값1을 입력합니다.

    4. [Create Filter]를 선택합니다.

  7. 필터 상자에서 [Create Alarm]을 선택합니다.

  8. [Create Alarm] 창에서 다음과 같이 실행합니다.

    1. NameAttemptsToAccessDeletedSecretsAlarm를 입력합니다.

    2. 다음 경우 항상:결과 값:에서 >=을 선택하고 1을 입력합니다.

    3. [Send notification to:] 옆에서 다음 중 하나를 실시합니다.

      • 새로운 Amazon SNS 주제를 생성해 사용하려면 새 목록을 선택한 후 새 주제 이름을 입력합니다. [Email list:]에 이메일 주소를 하나 이상 입력합니다. 쉼표로 구분하여 두 개 이상의 이메일 주소를 입력할 수 있습니다.

      • 기존 Amazon SNS 주제를 사용하려면 사용할 주제의 이름을 선택합니다. 목록이 없으면 목록 선택을 선택합니다.

    4. [Create Alarm]을 선택합니다.

3부: 삭제된 보안 암호에 대한 CloudWatch 모니터링

경보 생성이 완료되었습니다. 경보를 테스트하려면 보안 암호 버전을 생성한 다음 경보의 삭제를 예약합니다. 그런 다음 보안 암호 값을 검색해 봅니다. 잠시 후 경보에 구성한 주소로 이메일이 수신됩니다. 삭제하도록 예정된 보안 암호 버전 사용에 대해 알려줍니다.