
新年明けましておめでとうございます、セキュリティエンジニアリングの西川です。年末から胃を壊しており、健康の大切さを改めて感じています。何事も当たり前ではないということですね。
さてさて、そんな話も関係しつつ AWS App Runner 使っていますか?カミナシでも使っています。お手軽にデプロイできるし、スケールも自動でしてくれるのでとても使い勝手が良いですよね。
という App Runner 全人類使うべきだよ!という話ではなく、App Runner を使う上での注意点をお伝えしたいと思います。
App Runner の特徴
本題に入る前に App Runner のことを知らない方のために App Runner の特徴をお伝えしたいと思います。App Runner は ECS 同様にコンテナをデプロイすることができます。さらに ECS はインフラの設定などを自分でする必要がありますが、App Runner はそこも自動でしてくれます。デプロイしたら即使えるというのが App Runner の特徴で、開発者が意識しなくてはいけないことは大幅に減るのが強みです。
App Runner を利用する上での注意点
ここで一つ問わせてください。
App Runner をお使いのみなさんは、もし、今ここで App Runner のアプリケーションに脆弱性があったとして攻撃を受けた場合、ログを見て追うことができますか?
ぜひこの機会に今出力しているログでセキュリティインシデントを調査することが可能なのか確認してみてください。
現時点では App Runner はインフラを気にしなくて良いという強みが故に注意しなければならないことがあります。それは Amazon CloudFront や ALB のアクセスログ相当のものは自動では取得できないということです。アプリケーションで出力したログ以外は何も出力されません。もちろんエラーケースなどの場合、アプリケーションにてログを出力する実装は一般的にするでしょうが、正常系で必要なログを出力するようにしていますか?もしそうなっていないなら考えるチャンスです。
セキュリティインシデントの発生時にはアプリケーションのログとして通常 Web アクセスログとして出力されうるものを出力する必要があります。そのことは重要な事実でありますが、残念ながらマニュアルには記載されていません。
https://docs.aws.amazon.com/ja_jp/apprunner/latest/dg/security-monitoring.html
ここに大きな落とし穴があります。ログが取られていなければもしアプリケーションに脆弱性があった場合、どこからどんな攻撃を受けたのかわからなくなってしまう可能性があります。
それでは、CloudFront を前段に挟めば AWS WAF も入れられるし、セキュリティも向上してログも CloudFront のログを見れば何かあった時に十分でしょ?と考えたあなた、半分正解です。
半分というのは何もしなければ App Runner 自体へのオリジンアクセスは可能な状態であり、CloudFront を経由しないリクエストを防ぐことができません。CloudFront や WAF に頼ってしまうと、オリジンに直接リクエストが送られた場合に攻撃を追うことができないという状況が発生します。では、どうしたら良いのかというと二つ方法があります。
- アプリケーションのログとして出力する
- CloudFront のカスタムヘッダにシークレットな値を入れてそれをアプリケーション内で検証する
という2点です。セキュリティグループで CloudFront の IPアドレス(マネージドプレフィックスリスト)を許可するという設定もありますが、それは攻撃者が用意した CloudFront でバイパスされてしまうということは過去の別の記事でも言及しています。
https://kaminashi-developer.hatenablog.jp/entry/2024/12/24/160000
アクセスログは CloudFront や ALB はたまた Apache や Nginx などを利用していた世代からすると当たり前に取得できていると思っていましたが、App Runner のようなサービスでは今までの当たり前は当たり前ではないということです。というところで健康の話の伏線を回収したいと思います。
セキュリティ担当者として
App Runner を使っているかどうかに関わらずログ出力方針などを作成して、その通りに必要なログが出力されているかを監査する仕組みは必要なことです。もしそういった方針やそもそも監査できる状態にないということであれば、この機会に整備計画を立ててみてください。
何かあった時に「追えませんでした」、「おそらくこうでした」ではセキュリティ担当者として説明責任が果たせているとは言えません。これは私自身に言っている言葉でもあります。
開発者の方々には App Runner に限らず便利なサービスを使用して気持ちよく開発および運用を行なっていただき、我々セキュリティ担当者が説明責任を果たせる状態を目指したいですね。
というところで、このブログをしたためさせていただきました。
そのためにも使用しているサービスの特性もきちんと把握して利用しなければならないと感じます。難しいんですけどね。
最後に
このブログが誰かの気づきや誰かの行動のきっかけになっていたら幸いです。
決して App Runner を咎めるために書いた記事ではないことをご承知おきください。App Runner は非常に優れたものです。きっとそこのあなたの役に立っていることでしょう。カミナシでも役に立っています。