こんにちは、ちゃりおです。
curlでAWSの署名を含んだリクエストができるようになったことを最近知りました。
curl 7.75.0 から “–aws-sigv4” フラグが使えるようになってるっぽい!
テストとかで AWS の API を呼び出すのがやりやすくなりそうだ〜これは嬉しい〜🎉💝🎁🎂🎈🥳🎊
/ “curl 7.75.0 is smaller | https://t.co/uTssjSA20z” https://t.co/N3EgXIH2T7 pic.twitter.com/ClokV45rz6
— Tori Hara (@toricls) September 7, 2021
以前は、アクセスポリシーで特定のIAMロールからアクセス許可を行っているOpenSearchドメインでは、curlだけではリクエストできませんでした。
SDKを使ったり、awscurlなどのツールを使う必要がありました。
IAMロールでアクセス制限したAmazon ElasticSearchにcurlする方法(aws curl)
しかし、このアップデートでcurlだけで、OpenSearchへのリクエストを行うことができます。
curlの–aws-sigv4を使ってOpenSearchへリクエスト
OpenSearchへリクエストできるIAMロールが付与されたEC2上から実行してみます。
EC2からIAMロールの認証情報を使ってOpenSearchへリクエストする
こちらのGistの通りで、Searviceとリクエスト先を変えるだけです。
mryhryki/requst-aws-api-by-curl.sh
以下のやり方では、curl 7.75以上とjqも必要です。
$ ROLE_NAME=`curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/`
$ CRED=`curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/${ROLE_NAME}`
$ 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 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}"
green open .kibana_1 hogehogehoge 1 0 0 0 283b 283b
ラッパースクリプトを作ってみる
毎回全部打つのは面倒なので、ラッパースクリプト作って置くと便利です。
#!/bin/env bash
ROLE_NAME=`curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/`
CRED=`curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/${ROLE_NAME}`
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 "$@" -H "X-Amz-Security-Token: ${AWS_SESSION_TOKEN}" \
--aws-sigv4 "aws:amz:${REGION}:${SERVICE}" \
--user "${AWS_ACCESS_KEY_ID}:${AWS_SECRET_ACCESS_KEY}"
例えば、上記を「es-curl」のような名前でパスの通っているディレクトリに置いておけば、簡単にOpesSearchリクエストできます。
$ es-curl OpenSearchエンドポイント_cat/indices
green open .kibana_1 hogehogehoge 1 0 0 0 283b 283b