VPC内のOpenSearch(ElasticSearch)のIAMを利用した権限制御がややこしかったです
まとめ
ドメインアクセスポリシーは3パターンある(それぞれの設定のプリンシパルに対するアクションを理解すること)
ドメインでIAMを指定しなかった場合kibana側のロールマッピングで制御することでAPI操作が可能になる
ロールマッピングしていてもドメインアクセスポリシーで明示的に拒否してしまっていた場合(②)はAPI操作ができない
ロールマッピングしていなくてもドメインアクセスポリシーで明示的に許可されていれば(①にするか、③で指定)API操作ができる
前提知識
ドメインアクセスポリシー3パターン
②ドメインレベルのアクセスポリシーを設定しない(設定後の状態)
③ドメインレベルのアクセスポリシーの設定
↑自身で設定した任意の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操作の成功パターン失敗パターンを示しておきます
{"_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