とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど

開催予定の勉強会

読者登録と各種SNSのフォローもよろしくお願いいたします。

今さらながら、curlがAWSのSigV4に対応していることを知った話

AWSのLambda使ってますか? 便利ですよね。

ちょっとした機能をサーバーレスで実装できるLambdaですが、AWSの外部からWebhook的に関数をコールしようとすると、従来はAPI Gatewayを用意してあげる必要がありました。ところが最近では、Lambdaに関数URLという機能が実装され、Lambda単体でHTTPSのエンドポイントを生やすことができます。

とはいえ、関数を第三者に対し、無制限に公開するのも嫌ですよね。API GatewayはAPIキーによるアクセス制限をかけることができたのですが、Lambdaの関数URLは、パブリック公開 or IAM認証となっています。そしてIAMでアクセスを制御する場合、HTTPリクエストに対してSigV4で署名する必要があります。

サンプルを見るとわかるのですが、手動で署名するのは結構面倒ですよね。さてどうしたものかな……と思ったら、なんとcurlコマンドには--aws-sigv4オプションが存在した……という話です。どうやらcurlのバージョン7.75.0リリースに含まれていたみたいですね。Oh……2021年からあったのか。

というわけで、シェルスクリプトからLambdaをコールする場合は、↓のような感じでできそうですね。

curl "関数URL" \
 --aws-sigv4 "aws:amz:ap-northeast-1:lambda" \
 --user "$(aws configure get aws_access_key_id):$(aws configure get aws_secret_access_key)"