Elasticsearch 도메인 정책의 접근 권한 점검

검색 도메인의 데이터 접근 권한을 실제 사용자와 작업에 맞게 제한하세요.

설명

Elasticsearch/OpenSearch 도메인 접근 정책이 지나치게 넓으면 로그·문서·색인 데이터를 불필요한 주체가 조회하거나 변경할 수 있습니다. 도메인 정책은 색인과 데이터 API 같은 하위 리소스를 제어하며, 도메인 구성 API의 관리 권한과는 구분됩니다.

와일드카드 주체는 VPC나 세분화된 접근 제어와 함께 사용될 수 있습니다. 실제 노출은 이 통제들과 정책 권한을 함께 확인해야 판단할 수 있습니다.

잠재적 영향

  • 불필요한 조회 권한은 로그나 문서 내용의 유출로 이어질 수 있습니다.
  • 쓰기·삭제 권한의 오용은 색인 손상과 검색 서비스 중단을 일으킬 수 있습니다.

해결 방법

  • 필요한 주체, es:ESHttpGet 같은 HTTP 작업과 실제 색인·API 경로로 권한을 제한하세요.
  • VPC 도메인은 보안 그룹을 확인하고, 세분화된 접근 제어를 사용하는 경우 실제 사용자와 역할 매핑을 검토하세요.
  • 기존 인증 방식을 유지하면서 정상 검색은 성공하고 불필요한 조회·변경은 거부되는지 시험하세요.

예시

같은 도메인의 정책 발췌입니다. 참조 도메인과 색인을 별도로 준비하고 사용자 ARN을 실제 값으로 바꾸세요.

변경 전

hcl
resource "aws_elasticsearch_domain_policy" "example" {
  domain_name = aws_elasticsearch_domain.example2.domain_name

  access_policies = <<POLICIES
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "es:*",
      "Resource": "${aws_elasticsearch_domain.example2.arn}/*",
      "Principal": "*",
      "Effect": "Allow"
    }
  ]
}
POLICIES
}

모든 주체에 도메인 하위 리소스의 HTTP 작업을 허용합니다. es:*가 이 도메인의 구성 API 관리 권한까지 부여하는 것은 아닙니다.

변경 후

hcl
resource "aws_elasticsearch_domain_policy" "example" {
  domain_name = aws_elasticsearch_domain.example2.domain_name

  access_policies = <<POLICIES
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:user/test-user"
        ]
      },
      "Action": [
        "es:ESHttpGet"
      ],
      "Resource": "${aws_elasticsearch_domain.example2.arn}/test-index/_search"
    }
  ]
}
POLICIES
}

이 허용문은 지정한 사용자의 test-index 검색 GET 요청으로 범위를 좁힙니다. 다른 정책과 세분화된 접근 제어도 함께 적용됩니다.

참조