はじめに
下記リンク「IAMロールでアクセス制限したOpenSearch(旧: ElasticSearch)にリクエストする」の発展としてECSからリクエストを送るバージョンを紹介します
https://chariosan.com/2021/09/26/curl_aws-sigv4_iamrole_access_opensearch/
また、(【OpenSearch】IMDSv2のEC2でIAMロールを利用してOpenSearchにアクセスする際に注意すること)もぜひ参考までにご覧ください!
ポイント
・メタデータのIPがEC2とECSでは下記の通り異なる
EC2:169.254.169.254
ECS:169.254.170.2
EC2:https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/instancedata-data-retrieval.html
ECS:https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/task-metadata-endpoint-v2.html
・AWS_CONTAINER_CREDENTIALS_RELATIVE_URIという環境変数を利用しよう
前提
タスクロール→対象サービスへの必要アクセスを許可
パスワード認証を利用してロールマッピング
jqコマンド必要
curlコマンドは7.~以上が必要
実施内容
#環境変数設定
CRED=`curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`
AWS_ACCESS_KEY_ID=`echo $CRED | jq -r ".AccessKeyId"`
AWS_SECRET_ACCESS_KEY=`echo $CRED | jq -r ".SecretAccessKey"`
AWS_SESSION_TOKEN=`echo $CRED | jq -r ".Token"`
REGION="ap-northeast-1"
SERVICE="es"
#動作確認例
curl -k -XGET -H "Content-Type: application/json" 'https://<OpenSearchドメイン>/_cat/indices' -H "X-Amz-Security-Token: ${AWS_SESSION_TOKEN}" \
--aws-sigv4 "aws:amz:${REGION}:${SERVICE}" \
--user "${AWS_ACCESS_KEY_ID}:${AWS_SECRET_ACCESS_KEY}"