こんにちは、AICU代表のしらいはかせです。
今回のYouTubeでは、Googleがリリースした強力なコマンドラインツール「Gemini CLI」を使って、AWS CloudFormation/CDKプロジェクトを一発でデプロイするという、夢のような体験をお届けします。
前回はGoogle公式のGoogle Cloudでの爆速[AI DevOps]動画を紹介しました。
https://corp.aicu.ai/ja/gemini-cli-20250627
関連:開発にも運用にも使える「Gemini CLI」が便利すぎてやばい
「窓の杜生成AIストリーム」(しらいはかせ 2025年7月3日 16:41)
https://forest.watch.impress.co.jp/docs/serial/aistream/2028156.html
Google Gemini CLIとは、AIアシスタントと自然言語で対話しながら、コード検索・分析・実行ができる革新的なCLIツールです。しかも日本語対応。
https://cloud.google.com/blog/ja/topics/developers-practitioners/introducing-gemini-cli/
Nodeがインストールされている環境なら、このコマンドだけでインストール完了です。
npm install -g @google/gemini-cli
今回の主役は「AWS Samples」が公開しているジェネレーティブAIユースケース集。このOSSプロジェクトは、実は日本のAWS Japanチームも積極参加している注目のオープンソースプロジェクトです。
https://aws.amazon.com/jp/builders-flash/202504/genu-development-guide/
https://corp.aicu.ai/ja/awsaiday20240912
デプロイ手順「このプロジェクトをデプロイして」で…たったの5分!
動画では、以下の流れでCloudFormation/CDKスタックを展開:
GitHubからユースケースプロジェクトをクローン
Visual Studio CodeでREADME確認
ターミナルで gemini コマンドを起動
「日本語でお願いします」と入力 → Geminiが自然言語で対応開始
deploy.sh を解析 → 実行許可→デプロイ実行
CDKでスタック起動、URL発行
Cognitoログインからの動作確認
驚くべきことに、たった1行「このプロジェクトをデプロイして」という指示だけで約5分で完了しました。いや、本当にやばい。Gemini、すごすぎ。
本編では、AIを使う際のセキュリティ視点も徹底カバーしました。
デプロイ作業で5分待っている間のその並列作業で、もうひとつシェルを開いて別のGemini CLIに「セキュリティホール探して」と聞いています。
deploy.sh の中身をGeminiにハッカー目線でレビューさせる
.envやパスワードの埋め込み確認
XSS・インジェクション・ルートキット対策の検証
CDKの過剰権限チェック(例:AmazonPollyFullAccess問題)
AIがインフラを張る時代だからこそ、人間が責任を持つ=「Allow Once」精神が重要です。指差し確認していきましょう!
デプロイ後は、すかさず可愛い猫画像生成タイム…と言いたいところだったのですが、実はAWS Bedrockで使えるStability AIなどのモデルの多くはSDXLをはじめエンドオブライフが宣言されています。
モデルのライフサイクル、各リージョンで若干異なりますがこちらで確認できます。
https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/model-lifecycle.html
この手の設定もGemini CLIから選択・実行できます。
Claude4なども利用できます。ライセンスは商用可能なEULA(エンドユーザーライセンス)「Anthropic on Bedrock - Commercial Terms
of Service」という形でPDFでAWSダッシュボード→Amazon Bedrock
→モデルアクセスで入手できます。ライセンスチェックは忘れずに!
これまでの作業を「devops.ja.mdにまとめて」とお願いしてみるといい感じのセキュリティ監査ファイルが生成されました。文末に引用しておきますね。ちなみに実用的なところでは、修正したコードを本家のオープンソースプロジェクトにプルリクエストする作業なんかも進められます。ぜひ責任あるAIを使って、オープンソースに貢献していきましょう!
cdk destroy の実行と確認
残ったDynamoDBやS3の削除タイミングを可視化
CDKスタックの依存関係解消
最後は「Delete in Progress」を眺めながらエンディング
デプロイ編までの動画をYouTubeで公開しておきます。
「いいね」&「購読」よろしくお願いいたします!
AIは便利。でも、「全部やってくれるAI」ではなく「自分と一緒に考えてくれるAI」の方が、はるかにクリエイティブです。
Gemini CLIはその仲間として、クリエイターにも、オープンソースプロジェクトを活用するインフラエンジニアにも優しく寄り添ってくれる[AI DevOps] の存在。明らかに早く終われる、さらにセキュリティも高まります。
こういうAI DevOpsの仕事に興味がある方、ぜひAICUでにご相談いただけませんか?受注も発注もご相談に乗るのがAIクリエイターユニオンです!
https://corp.aicu.ai/ja/aicu-media-20250616
Gemini CLI 公式: https://ai.google.dev/gemini/cli
AWS Generative AI Samples: https://github.com/aws-samples/generative-ai-use-cases-jp
https://aws.amazon.com/jp/builders-flash/202504/genu-development-guide/
https://amzn.to/4lvxvHu
このドキュメントでは、本プロジェクト「generative-ai-use-cases」のセキュリティ監査結果の概要と、主要なインストールおよびデプロイオプションについて説明します。
これまでのセキュリティ監査で特定された主な脆弱性と対策、および継続的な懸念事項は以下の通りです。
発見: `package.json` にて、`typescript`、`@aws-sdk/*`、`vite` など、一部のライブラリが最新バージョンではないことが確認されました。
対策: 直接的なセキュリティホールではありませんが、最新の状態に保つことがセキュリティのベストプラクティスです。定期的な依存関係の更新を推奨します。
発見: `.env` ファイルを確認した結果、ハードコードされた認証情報や機密情報は発見されませんでした。環境変数としてプレースホルダーが設定されており、これは適切なプラクティスです。
対策: 環境変数の実際の値は、CI/CDパイプラインやデプロイプロセスで安全に管理されていることを確認してください。
利用技術: AWS Amplify と Cognito User Pool/Identity Pool を利用しており、一般的なクラウドネイティブな認証方法が採用されています。
懸念事項:
Amplify のバージョン: 使用されている Amplify のバージョンに既知の脆弱性がないか、定期的に確認し、必要に応じて更新してください。
Cognito の設定: Cognito User Pool および Identity Pool の詳細設定(パスワードポリシーの強度、多要素認証の強制、不適切な IAM ロールの割り当てなど)は、AWS コンソールで確認し、セキュリティベストプラクティスに従っていることを確認してください。
Lambda (`checkEmailDomain.ts`): サインアップ時のメールアドレスのドメイン検証を行う Lambda 関数です。基本的なメール形式の検証は行われていますが、より厳密な検証が必要な場合は、Cognito の設定と合わせて検討してください。また、`ALLOWED_SIGN_UP_EMAIL_DOMAINS` が空の場合、すべてのドメインからのサインアップが許可されるため、デプロイ時の設定ミスに注意してください。
IAM ポリシー: `PollyPolicy` など、一部の IAM ポリシーで `resources: ['*']` が使用されている箇所があります。必要最小限の権限の原則に従い、可能な限りリソースを限定することを推奨します。
XSS (Cross-Site Scripting):
利用技術: `react-markdown` ライブラリを使用しており、デフォルトでXSS対策のためのサニタイズ機能が提供されています。カスタムレンダラーも確認しましたが、直接的なXSS脆弱性は低いと考えられます。
対策: `react-markdown` のバージョンを最新に保ち、常にセキュリティアップデートを適用してください。
ファイルアップロード/ダウンロード関連のインジェクション:
`POST /file/url` (ファイルアップロード用署名付きURL発行):
発見された脆弱性: クライアントから提供されるファイル名をS3のキーに直接使用することによるファイル名インジェクションの可能性、およびファイルタイプ/サイズの検証不足。
適用された対策: S3のキーをUUIDと拡張子のみで構成するように変更し、元のファイル名をS3メタデータとして保存するように修正しました。また、許可されたファイル拡張子のリストに基づいてファイルタイプを検証するロジックを追加しました。
`GET /file/url` (ファイルダウンロード用署名付きURL発行):
発見された脆弱性: クライアントから提供される `bucketName` と `filePrefix` を直接使用することによる不正なファイルアクセス(任意のS3バケットやファイルへのアクセス)の可能性、および認可の欠如。
提案された対策: `bucketName` を環境変数から取得した既知のバケット名に限定する修正を提案しましたが、これはユーザーによってキャンセルされました。この脆弱性は未修正です。 ユーザーがアクセスを許可されているファイルのみをダウンロードできるように、サーバーサイドでの厳格なバケット名とファイルパスの検証、および認可ロジックの実装が強く推奨されます。
`DELETE /file/{fileName}`: このエンドポイントの詳細はまだ監査されていません。削除対象のファイルが、リクエスト元のユーザーが所有するファイルであることを厳密に検証するロジックが必須です。
サーバーサイドでの検証の重要性: クライアントサイドでの検証は容易にバイパスされるため、ファイルアップロード/ダウンロードを含むすべてのユーザー入力に対して、サーバーサイドでの厳格な検証とサニタイズが必須です。
本プロジェクトの主要なインストールおよびデプロイオプションは以下の通りです。
環境変数: `setup-env.sh` スクリプトを使用して、アプリケーションに必要な環境変数を設定します。
Webアプリケーション (Frontend):
ブラウザ拡張機能:
CDK (Backend):
`deploy.sh`: 全体的なデプロイプロセスを自動化するためのスクリプトです。
`.husky/pre-commit`: Gitのpre-commitフックが設定されており、コミット前にリンティングなどのチェックが実行されます。
注意: 上記の情報は、これまでの監査とファイル分析に基づいています。デプロイや運用を行う前に、必ず最新のドキュメントとコードベースを確認してください。
Originally published at note.com/aicu on July 4, 2025.