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 検索に範囲を絞ります。他のポリシーやきめ細かなアクセス制御も適用されます。

参考資料