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