HCP Packer 감사 로그 관리

HCP Packer 감사 로그 관리

이 주제는 감사 로그를 Amazon CloudWatch와 Datadog으로 스트리밍하도록 활성화하는 방법을 설명해요.

HCP Standard 등급 필요: 감사 로그는 HCP Standard 에디션 레지스트리에서만 사용할 수 있어요. HCP Standard에 대해 자세히 알아보기.

출처: 문서

본문

소개

HCP Packer는 감사 이벤트의 근실시간 스트리밍을 지원해요. 감사 로그를 통해 관리자는 사용자 활동을 추적하고 보안 팀은 규제 요구사항에 따른 규정 준수를 보장할 수 있어요. HCP Packer는 Datadog과 Amazon CloudWatch로 감사 로그 스트리밍을 지원해요.

HCP Packer 플랫폼은 감사 로그를 최소 1년 동안 저장하며, 활성 및 삭제된 레지스트리 모두의 로그에 접근할 수 있어요.

요구사항

한 번에 하나의 외부 계정으로만 스트리밍할 수 있어요.

Amazon CloudWatch

Amazon CloudWatch를 설정하려면 HCP 포털 내 HCP Packer 감사 로그 페이지의 AWS ID와 External ID가 있어야 해요.

Datadog

  • Datadog 계정이 있는 리전을 알고 있어야 해요.
  • Datadog API 키가 있어야 해요. API 키를 얻는 방법은 Datadog 문서를 참고해 주세요.

Amazon CloudWatch

  1. HCP Packer Overview 페이지에서 Audit Logs 보기를 선택해요.
  2. Enable Log Streaming을 클릭해요.
  3. Enable audit logs streaming 보기에서 프로바이더로 Amazon CloudWatch를 선택해요.
  4. Amazon CloudWatch 프로바이더 페이지에서 AWS ID와 External ID를 보관해 두세요. 다음 단계에서 필요해요.
  5. IAM 정책과 역할을 만들어요. 자세한 방법은 AWS 설정을 참고해 주세요.
  6. 프로바이더 아래에서 Destination name, Role ARN(이전 단계에서 복사)을 입력하고 데이터를 저장할 AWS region을 선택해요.
  7. Test connection을 클릭해 테스트 이벤트를 받아 연결이 설정되었는지 확인해요.
  8. Save를 클릭해요.

Packer를 사용한 지 몇 분 안에 로그가 Amazon CloudWatch에 도착해야 해요.

HCP Packer는 로그 그룹과 로그 스트림을 동적으로 생성해요. 구성을 설정한 후 Amazon CloudWatch 콘솔에서 /hashicorp 접두사로 로그 그룹을 찾을 수 있어요. 이렇게 하면 HashiCorp에서 오는 로그를 쉽게 구분할 수 있어요. 테스트 이벤트의 로그 그룹은 실제 이벤트의 로그 그룹과 다르다는 점에 유의해 주세요.

로그 탐색에 대한 자세한 내용은 AWS 문서를 참고해 주세요.

Datadog

  1. HCP Packer Overview 페이지에서 Audit Logs 보기를 선택해요.
  2. Enable Log Streaming을 클릭해요.
  3. Enable audit logs streaming 보기에서 프로바이더로 Datadog를 선택해요.
  4. 프로바이더 아래에서 Destination name, API Key를 입력하고 기존 Datadog 환경과 일치하는 Datadog site region을 선택해요.
  5. Test connection을 클릭해 테스트 이벤트를 받아 연결이 설정되었는지 확인해요.
  6. Save를 클릭해요.

Packer를 사용한 지 몇 분 안에 Datadog 환경으로 로그가 도착해야 해요.

로그 탐색에 대한 자세한 내용은 Datadog 문서를 참고해 주세요.

스트리밍 구성 테스트하기

스트리밍 구성 설정 중에 구성이 HCP 내에서 작동하는지 테스트할 수 있어요. 테스트는 자격 증명이 올바른지와 구성 계획의 다른 파라미터가 작동하는지 검증해요. 테스트하려면 테스트할 로깅 프로바이더의 필요한 파라미터를 입력한 다음 Test connection 버튼을 클릭해요.

HCP는 로깅 프로바이더에 테스트 메시지를 보내고 Enable log streaming 페이지에 성공 또는 실패 상태를 공유해요.

업데이트된 스트리밍 구성도 테스트하여 의도한 대로 작동하는지 확인할 수 있어요.

스트리밍 구성 업데이트하기

스트리밍을 구성한 후 다양한 이유로 구성을 업데이트할 수 있어요. 로깅 프로바이더에 사용하는 시크릿을 교체하거나, 로깅 프로바이더를 완전히 바꿀 수도 있어요.

  1. Audit logs 페이지의 Manage 메뉴에서 Edit streaming configuration을 선택해요.
  2. 새 프로바이더를 선택하려면 지금 선택해요.
  3. 프로바이더의 새 파라미터를 입력해요.
  4. (선택 사항) Test connection을 클릭해 연결을 테스트해요.
  5. Save를 클릭해요.

AWS 설정

Amazon CloudWatch 설정의 일부로 IAM 정책과 역할을 만들어야 해요. 선호하는 방법에 따라 다음 섹션을 참고해 주세요.

AWS Management Console

  1. AWS Management Console을 사용해 새 IAM 정책을 만들어요.
  2. JSON 옵션을 선택하고 아래 정책을 복사해 붙여 넣어요.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "HCPLogStreaming",
            "Effect": "Allow",
            "Action": [
                "logs:PutLogEvents",
                "logs:DescribeLogStreams",
                "logs:DescribeLogGroups",
                "logs:CreateLogStream",
                "logs:CreateLogGroup",
                "logs:TagLogGroup"
            ],
            "Resource": "*"
        }
    ]
}
  1. 나머지 설정을 완료해 정책을 만들고 저장해요.
  2. AWS Management Console로 새 IAM 역할을 만들어요.
  3. 신뢰할 수 있는 엔티티 유형으로 AWS account를 선택해요.
  4. AWS account 필드에서 Another AWS account를 선택해요.
  5. 계정 ID로 HCP Packer 감사 로그 페이지의 AWS ID 값을 사용해요.
  6. 옵션에서 Require external ID를 선택해요.
  7. External ID로 HCP Packer 감사 로그 페이지의 External ID 값을 사용해요.
  8. 사용자 지정 역할을 저장하고 만드는 과정을 마쳐요.
  9. 이전 단계에서 만든 정책을 이 역할에 연결해요.
  10. 역할 생성 설정을 마쳐요.
  11. 역할의 ARN을 복사하고 Amazon CloudWatch 섹션으로 돌아가 나머지 단계를 완료해요.

Terraform

data "aws_iam_policy_document" "allow_hcp_to_stream_logs" {
 statement {
   effect = "Allow"
   actions = [
     "logs:PutLogEvents",       # To write logs to cloudwatch
     "logs:DescribeLogStreams", # To get the latest sequence token of a log stream
     "logs:DescribeLogGroups",  # To check if a log group already exists
     "logs:CreateLogGroup",     # To create a new log group
     "logs:CreateLogStream"     # To create a new log stream
   ]
   resources = [
     "*"
   ]
 }
}

data "aws_iam_policy_document" "trust_policy" {
 statement {
   sid     = "HCPLogStreaming"
   effect  = "Allow"
   actions = ["sts:AssumeRole"]
   principals {
     identifiers = ["<AWS ID-generated-by-Hashicorp>"]
     type        = "AWS"
   }
   condition {
     test     = "StringEquals"
     variable = "sts:ExternalId"
     values = [
       "<External ID-generated-by-Hashicorp>"
     ]
   }
 }
}

resource "aws_iam_role" "role" {
 name               = "hcp-log-streaming"
 description        = "iam role that allows hcp to send logs to cloudwatch logs"
 assume_role_policy = data.aws_iam_policy_document.trust_policy.json
 inline_policy {
   name   = "inline-policy"
   policy = data.aws_iam_policy_document.allow_hcp_to_stream_logs.json
 }
}

더 알아보기