Amazon OpenSearch Serviceをさくっとデプロイする! パート1

まとめ

  • OpenSearchエンドポイントのデフォルトアクセスポリシーはブロック
    • エンドポイントへのアクセスには明示的な許可が必要
    • サポートされるのアクセスポリシーは以下の3つ
      • OpenSearchドメインのアクセスポリシー
      • AWS IAM
      • IP アドレス

デプロイ

Terraform

パブリックIPをエンドポイントとしほぼ最小構成でデプロイ。


data "aws_region" "current" {}

data "aws_caller_identity" "current" {}

resource "aws_opensearch_domain" "this" {
  domain_name    = var.domain
  engine_version = "Elasticsearch_7.10"

  cluster_config {
    instance_type  = "t3.small.search"
    instance_count = 1
    warm_enabled   = false

    zone_awareness_config {
      availability_zone_count = 2
    }

  }
  ebs_options {
    ebs_enabled = true
    volume_size = 10
  }

  tags = {
    env = "dev"
  }
}

ダッシュボードにアクセスできない

Message "User: anonymous is not authorized to perform: es:ESHttpGet because no resource-based policy allows the es:ESHttpGet action"

ドメインのアクセス制御

OpenSearchにおけるエンドポイントはデフォルトでブロックされる親切設計となっているらしい。
OpenSearchのドメインのアクセス制御パターンは以下の三種類。

  • リソースベースのポリシー
    • ドメイン側に設定する、IAMロールやユーザーからのアクセス許可
  • アイデンティティベースのポリシー
    • IAM ロールやユーザーへ設定するドメインへのアクセス許可
  • IP ベースのポリシー
    • 署名なしのアクセスを IP で制御
    • プロキシ経由で特定のIPからのアクセスを許可したいようなケースに適する

アクセスポリシーの追加

今回はIP ベースのポリシーを設定し挙動を試してみる。


data "aws_iam_policy_document" "this" {
  statement {
    effect = "Allow"

    principals {
      type        = "*"
      identifiers = ["*"]
    }

    actions   = ["es:*"]
    resources = ["arn:aws:es:${data.aws_region.current.name}:${data.aws_caller_identity.current.account_id}:domain/${var.domain}/*"]

    condition {
      test     = "IpAddress"
      variable = "aws:SourceIp"
      values   = ["###.###.###.###/32"]
    }
  }
}

resource "aws_opensearch_domain" "this" {
  domain_name    = var.domain
  ~

  access_policies = data.aws_iam_policy_document.example.json
  ~
}

再度ダッシュボードへアクセス

Kibanaのダッシュボードが表示されるようになった。
OpenSearch Dashboard

次回予定

  • OpenSearchについて深掘り
    • マネージド型クラスタ/サーバレスの比較
    • データの取り込み
タイトルとURLをコピーしました