search
LoginSignup
1

posted at

OpenSearch(ElasticSearch)のIAMを利用した権限制御のややこしかったところ

VPC内のOpenSearch(ElasticSearch)のIAMを利用した権限制御がややこしかったです

まとめ

ドメインアクセスポリシーは3パターンある(それぞれの設定のプリンシパルに対するアクションを理解すること)
ドメインでIAMを指定しなかった場合kibana側のロールマッピングで制御することでAPI操作が可能になる
ロールマッピングしていてもドメインアクセスポリシーで明示的に拒否してしまっていた場合(②)はAPI操作ができない
ロールマッピングしていなくてもドメインアクセスポリシーで明示的に許可されていれば(①にするか、③で指定)API操作ができる

前提知識

ドメインアクセスポリシー3パターン

①きめ細かなアクセスコントロールのみを使用(設定後の状態)
image.png

②ドメインレベルのアクセスポリシーを設定しない(設定後の状態)
image.png

③ドメインレベルのアクセスポリシーの設定
↑自身で設定した任意のIAMARNまたはIpv4アドレスを設定する

疎通

①セキュリティグループでポート443,9200のインバウンドルールを設定しておきましょう

実施

実行コマンド
es-curl.sh -XPUT -H "Content-Type: applicattion/json" 'https://YOURDOMAIN.com/twitter/user/kimchy' -d '{ "name" : ""Shay Ban" }'

上記コマンドを実施するに当たり以下の参考リンクをもとに準備してください
https://chariosan.com/2021/09/26/curl_aws-sigv4_iamrole_access_opensearch/

[ここが一番言いたいこと]
まとめでも書いてあった通りロールマッピングあるいはIAMロールのいずれかを明示的に許可していればAPI操作はできます(成功)。
一方でいずれも設定していない。もしくは一方で拒否されていた場合API操作はできません(失敗)。
以下に上記実行コマンドによるAPI操作の成功パターン失敗パターンを示しておきます

成功パターン→kibanaのダッシュボードを見ればindexが追加されていることが確認できます
{"_index":"twitterss","_type":"user","_id":"kimchy","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}
失敗パターン
{"Message":"User: arn:aws:sts::------- is not authorized to perform: es:ESHttpPut with an explicit deny in a resource-based policy"}

curlを利用したAPI操作のための準備
https://chariosan.com/2021/09/26/curl_aws-sigv4_iamrole_access_opensearch/

シェルスクリプト作り方参考:https://shellscript.sunone.me/tutorial.html

ドキュメント:https://docs.aws.amazon.com/ja_jp/opensearch-service/latest/developerguide/request-signing.html

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1