2024.12.10
“放置系”なのにサイバー攻撃を監視・検知、「統合ログ管理ツール」とは 最先端のログ管理体制を実現する方法
リンクをコピー
記事をブックマーク
黒曜氏:続いて、ネットワークセキュリティの話にいきましょう。ネットワークのセキュリティは、VPCを作って、サブネットを作って、SecurityGroupを作って、アタッチして……とやっていると大変です。私はそれらを手でやると穴を作るタイプなので、Copilot CLIというツールを使い、そちらに一任しています。そうすれば安全かつ楽にできると思います。
Copilot CLIを知らない方もいるかもしれないので紹介すると、主にECS(Elastic Container Service)でのコンテナ運用に使える、AWSのツールセットです。ECSだけではなく、最近でいうとApp Runnerやデプロイパイプライン、CodePipelineで組むところまで、全部コマンドラインからワンストップでできます。manifest.ymlというファイルに設定を書いておくと、そこから作ってくれるというIDaaS的なこともできるので、これは個人的に推しているいいツールです。
Copilot CLIで構築した環境はスライドのようなかたちになります。ALB(Application Load Balancer)がHTTPリクエストを受けて、パブリックサブネットを作ったものの中でECS Serviceが2つ立ち上がり、それぞれでコンテナが立ち上がっている。コンテナはECR Registryにあるものを引っ張ってくる。Copilot CLIだとこういった構成を簡単に作れるので、いいと思っています。
このように構築した環境のいい点は、VPCとサブネットだけではなくALBやECSそのもの、あるいはそれに紐づけるセキュリティグループみたいなものも自動で作ってくれることです。
ECSの受けられるリクエストとは、ALBからのアクセスしか受け付けないようなセキュリティグループの設定です。ここに任せておけば最低限のガードレールはできるので、すごく楽ができます。
また、先ほど言ったとおり、ECS on Fargateで組むことによってEC2を直接持たなくていい。OSやミドルウェア更新は気にせず、イメージさえちゃんとしていればいいので、かなり楽です。昔はECSにした時に本番作業がつらいことがありましたが、最近ではECSにdocker execできるようになりました。
Copilotもそれをサポートしていて、copilot svc execというコマンドを使うとSSH(Secure Shell)ライクな作業もコンテナに入って可能になるので、このあたりの不便さはほとんどないと思います。
今はApp RunnerもCopilot CLIに対応していて、そちらを使うとALBもAWSマネージドになるので、もっと持ち物を減らして楽ができると思います。ただし、App RunnerはWAFには未対応という課題があるので、弊社ではまだECSのままにしています。ネットワークの話は以上です。
続いて、Webアプリのセキュリティの話をします。一般的な対策がいくつかあるとは思いますが、AWSレイヤーでもいくつかやることがあります。まず、AWSのWAF(Web Application Firewall)を挟んで典型的な攻撃を到達前にブロックしています。
基本的なマネージドルールだけ適用して、標準リクエストで引っかかるようなポイントは個別に許可ルールを設定し、最低限の運用にしています。これだけでも相当な数のリクエストを弾いているので、入れておくといいと思います。
また、ECRのコンテナイメージスキャンは数クリックで有効にでき、これを有効にしておくだけで脆弱性の分類などを見られるようになるので、その定期的なチェックだけはしています。AWSと関係ないところでは、GitHubのDependabotでセキュリティアラートを出したり、「VAddy」という脆弱性検査ツールで定期的に脆弱性の検査を行ったりして運用しています。
(スライドを指して)今回はAWSに関係のある上の2つについてもう少し細かく話します。AWSのWAFです。WAFにはいろいろなルールセットがあってどうすればいい迷いましたが、WafCharmが出しているブログ記事に、「AWSのWAFはこれを有効にするといい」というおすすめめセットがあったので、これらを有効にしています。
今なら、一番左のRequiredに、Core Rule Set、Known Bad Inputs、SQL Database。Amazon IP Reputationは昔なかったので入っていません。その4つを有効にするといいと書いてあります。
(スライドを指して)実際の設定画面はこのようになっていて、CommonRuleSet、KnownBadInputs、SQLRuleSetの3つ。それと、IP Reputationを足していないので足さないといけません。
WAFは誤検知で引っかかるケースがあるので、それをホワイトリストで許可するためのルールが一番上にいるかたちで運用しています。
(スライドを指して)実際にどういうリクエストが来てブロックされているかがこちらです。ここにあるものは全部「NoUserAgent_HEADER」ですが、「/robots.txt」や「/api/v1/time」といった、いかにもなURI(Uniform Resource Identifier)が並んでいます。
このようなゴミリクエストが来て、単純に脆弱性につながらないまでも微妙な負荷がかかったり、アクセスログを汚したりするかもしれないので、アクセス数がよほど多くない限りはWAFを挟んでおいたほうがいいと思います。
ちなみに、WAFを普通にアプリケーションで使っていると、たまにうっかりブロックされます。特にリダイレクトURLが入っていると、それがトラバーサルのパスに見えて引っかかったりするので、そういう場合は個別にホワイトリスト化する必要があります。
そもそも気づかないとホワイトリストに載せられないので、現在はAWSのWAFがブロックしたタイミングでSlackに通知して、False Positiveなブロックがないかをチェックして、False Positiveなものがあればホワイトリストに入れる運用をしています。
逆にブラックリストというか、明らかにダメなパターンのルールについては、Lambdaのレイヤーで弾いて、以降ムダな通知が来ないようにしています。以上がWAFの話です。
続いて、ECR(Elastic Container Registry)のコンテナスキャンの話です。ECRでコンテナスキャンを有効にしてプッシュ時にスキャンするよう設定すると、「Clair」(オープンソースの脆弱性検査ツール)でスキャンした結果をスライドのように見られます。
「Critical 1」や「High 4」と出てきて、こちらもまたCriticalがあるじゃないかと。「CVE(Common Vulnerabilities and Exposures)はFalse Positiveにもわりと出る」と、DockerのFAQにも書いてあります。
例えばカーネルの脆弱性の場合、Dockerのカーネルはホストと共有でイメージの中のものは使われず、False Positiveで引っかかるものもたくさん出てくるので、これについては全部クリアにするものではないとFAQに書いてあります。
CVEでは「なにが出ているか」よりも推移が重要で、新しいものが出たタイミングでチェックできるかが大事だと思います。今は定期的に見ていますが、レイヤーの脆弱性検査を重視するのであれば、AWSが提供している拡張スキャンにするとよさそうです。
こちらを有効にすると推移が見られて、新しいものが発生すると通知してもらえます。ただ、スキャン前のコストがそこそこかかるので、そこはトレードオフというところです。Webアプリのセキュリティの話は以上です。
最後はデータストアの話です。とはいっても、ここまでのことができていればそんなに重要なポイントはありません。データストアのセキュリティは、基本的なことをちゃんとやることが大事です。例えば、RDSはパブリックアクセスを無効にする、RDSの接続元はセキュリティグループで絞る、S3はパブリックアクセスはすべてブロックする、データの暗号化を有効にする。このあたりは、Security Hubに従っていればだいたい設定されると思うので、重要度が低いわけではないですが、ほかより比較的やることが少ないと思います。というわけで、スライド1枚で終わります。
ひととおり話し終えたので、まとめに行きます。最初に見せた、「どうやって安全に楽をするか」というスライドを再掲します。AWSのベストプラクティスに従うのが一番大事ということで、DevelopersIOの記事を紹介しました。Security Hubでセキュリティチェックを入れると、従っているかを継続的に見ることができて安心です。
また、なるべく管理するリソースを減らし、ツールの既定に合わせることによって楽ができると思います。例えば、Fargateを使ってEC2を持たないようにすることで、ミドルウェアやOSレイヤーのものを気にしないで済むようにしたり、ネットワークの環境構築をCopilotなどのツールに任せたりするということです。
ほかに、アプリケーションレベルでもAWSサービスで活用できるものがあるので、典型的な攻撃はWAFで防いだり、ECRのコンテナスキャンで脆弱性をチェックしたりすると便利です。
以上、弊社の事例を紹介しました。まだまだやることはあると思いますが、私はセキュリティ専門ではないので、突っ込みどころがあったかもしれません。そこはお目こぼしください。以上で私の発表を終わります。ご清聴ありがとうございました。
関連タグ:
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
2024.12.09
10点満点中7点の部下に言うべきこと 部下を育成できない上司の特徴トップ5
2024.12.09
国内の有名ホテルでは、マグロ丼がなんと1杯「24,000円」 「良いものをより安く」を追いすぎた日本にとって値上げが重要な理由
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.12.10
職場であえて「不機嫌」を出したほうがいいタイプ NOと言えない人のための人間関係をラクにするヒント
2024.12.12
今までとこれからで、エンジニアに求められる「スキル」の違い AI時代のエンジニアの未来と生存戦略のカギとは
PR | 2024.11.26
なぜ電話営業はなくならない?その要因は「属人化」 通話内容をデータ化するZoomのクラウドサービス活用術
PR | 2024.11.22
「闇雲なAI導入」から脱却せよ Zoom・パーソル・THE GUILD幹部が語る、従業員と顧客体験を高めるAI戦略の要諦
2024.12.11
大企業への転職前に感じた、「なんか違うかも」の違和感の正体 「親が喜ぶ」「モテそう」ではない、自分の判断基準を持つカギ