はじめに
カミナシでID管理・認証基盤を開発しているmanaty(@manaty0226)です。ラスベガスで開催されているAWS re:Invent 2024に初めて参加しています。今回はブレイクアウトセッションで開催された「Generative AI for security in the real world」を聴講したレポートをお届けします。
生成AIをどのようにセキュリティに利用するのか
彼らの主張の軸となっているのは、生成AIはセキュリティエンジニアを置き換えるものではなく、セキュリティエンジニアや開発者、テスターを面倒な仕事から解放し、生産性を向上してより能動的にセキュリティ対策をしていくことです。その上で、いくつかの具体的なユースケースに対して生成AIを使ったデモを見せながら、どのように生産性向上に寄与するのか説明されています。以下に記憶に残った2つのユースケースについて記載します。
ひとつ目のユースケースでは、AWS Security Hubの検出結果を要約して、かつ必要なアクションをサジェストしたり、必要なアクションを実行するための具体的なコードまで生成していました。カミナシでもAWS Security Hubは使っており、セキュリティエンジニアリングチームが検出ルールの設定や解決策のアドバイスをしながら開発者が自分たちで対処しています。そうした経験から、Security Hubの検出結果の読みづらさや、結果からどういったアクションを取ればいいのかわかりづらいといった難しさは日々感じていました。
ふたつ目に印象に残ったのは生成AIを使ったセキュリティチャットボットです。セッションの例では、情報セキュリティに関する社内規則をもとに開発者がどのような仕様設計をすればよいのかドキュメントを参照しつつ回答するチャットボットにより、情報セキュリティチームのスケールを助けるという趣旨で紹介されていました。私のチームもID管理や認証という共通の基盤を扱っているため、日々さまざまな開発チームから仕様や実装方法に関する問い合わせを受けます。OpenID ConnectやOAuthはRFCとして仕様公開されていても全てを正しく読み解くのは難しく、またリフレッシュトークンローテーションのように実装依存になっているものもあります。そうしたナレッジをチームメンバーに変わって捌いてくれるのであれば非常に嬉しいと感じました。
セッションは最後に、「機械学習に関する幅広い教育や経験はいらないから、とりあえず始めてみろ!」というメッセージで終わります。私はこれまでにLLM(Large Language Model)やRAG(Retrieval-Augmanted Generation)を実際に触ってみたことはほとんどなく、今回のre:InventのAI JamでBedrockを初めて使いました。登壇者の熱いメッセージもあり、せっかくなのでやってみました。
生成AIによるインシデントレスポンスをやってみた
今回のセッションで紹介されたいくつかのユースケースはGitHubにコードが公開されています。そこで、生成AIに関するインシデントレスポンスのコードを実際に動かしてみました。
https://github.com/aws-samples/generative-ai-security-runbooks/blob/main/notebooks/Module1.ipynb
まず、このノートブックを実行するためにリージョンは us-east-1
を選択してください。私は最初 ap-northeast-1
で実行しましたが、モデルIDがそのままでは動かないようです(それに加えて社内の検証環境だったのでクロスリージョン推論が動かず、 us-east-1
では動くことを確認しました)。
また、このノートブックはSecurity Hubで検知させるためにわざとセキュリティグループの設定を脆弱にします。統制下にある社内環境ではGuardDutyなどで脅威検知される可能性があるので、事前にセキュリティチームに連絡しておきましょう。
ノートブックの実行は以下の手順で行いました。
- Security Hubを利用開始して、セキュリティグループ設定に問題がある場合に検出するようポリシーを設定しておきます。
- VPCを作成した上で、インバウンドのSSHの送信元を
0.0.0.0/0
で設定してください。また、タグとしてキーをWorkshop
、値をSampleSecurityGroup
に設定してください。
- Amazon Bedrockのコンソールにて
Bedrock Configuration
>モデルアクセス
からClaude 3 Sonnetのモデルのアクセス申請します。
- Amazon SageMaker AIのコンソールにて左のメニューから
Notebooks
を選択し、Gitリポジトリを登録します。
- 同じく
Notebooks
のページからノートブックインスタンスを作成し、先ほど登録したGitリポジトリを関連づけます。
- ノートブックインスタンスのIAMロールにはデフォルトのノートブックインスタンスロールの権限に加えてSecurity Hubの読み取り権限と、BedrockのInvokeModel権限を追加で付与してください。
- ノートブックインスタンスが
In Service
状態になったら、Jupyter Labを開始してノートブックのModule1.ipynbのセルを順番に実行してください。
Security Hubで検出された内容は以下のようになります。これは比較的わかりやすいですが、実際にはもっと難しい検出内容がたくさん出てきます。また、この内容でも沢山の検出結果を一つ一つ読んで確認していくのも骨が折れます。
これを、Bedrockを使って要約すると以下のようになります(元のノートブックからプロンプトをほんの少しだけ修正して日本語で要約するようにしています)。検出された意味と次にするべきアクションがわかりやすくなっていると感じました。
ノートブックではこの後、実際にセキュリティグループの設定が何らかのENI(Elastic Network Interface)に紐づけられているか確認したり、セキュリティグループの設定を修正するためのPythonコードを生成するプロンプトが続いていきます。
おわりに
今回は今流行りの生成AIが実際のセキュリティ関連業務にどのように活かすことができるのか可能性を見せてくれたセッションと、実際に少しやってみた内容をお届けしました。今まで自分はAIと呼ばれるものを頑なに機械学習と言っていた側の人間ですが、最近のLLMの発展には目を見張るものがありますし、実際にこうして動いているものを見て触ってみると可能性が広がるのを少し感じました。
カミナシでは生成AIをID管理や認証認可にも活かせないかと妄想を膨らませて手を動かせるソフトウェアエンジニアも募集しています。興味がある方はぜひ応募してください。