利益:
- 最小限の権限と安全なデフォルトを備えた人工知能を使用して IaC (Terraform、Ansible) コードを生成し、宣言的アプローチを理解する能力
- 計画/チェック出力を適用する前に削除行と強制置換行を読み取ってキャプチャすることで、データ損失を防ぐ機能
- 状態ファイルをリモート バックエンドで暗号化およびロックした状態に保ち、変更を小さな元に戻せるステップに分割することで、機密漏洩を防ぐ機能
Infrastructure as Code (IaC) の管理: Terraform、Ansible、AI による計画制御
以前は、サーバーのセットアップは手動でクリック、コマンド、個人的なメモを使用して行われていました。その結果、誰もセットアップ方法を正確に知らなかった、再現不可能な「スノーフレーク」サーバーが作成されました。 Infrastructure as Code (IaC) は、この混乱を終わらせるアプローチです。サーバー、ネットワーク、セキュリティ ルールは手作業ではなく、バージョン管理可能なテキスト ファイル (コード) によって定義されます。このコードを実行すると、インフラストラクチャは作成したとおりにセットアップされ、同じ内容で文書化され、毎回再現可能になります。最も一般的なツールは、クラウド インフラストラクチャ用の Terraform と CloudFormation、サーバー構成用の Ansible です。ここでの AI は、この IaC コードを作成、説明、レビューすることに非常に熟練しています。しかし、IaC の威力は危険でもあります。1 つの間違った行がインフラストラクチャ全体を破壊する可能性があります。 AIがコードを書くので、あなたは「計画」を読み、承認して実行します。
この単元では、宣言的アプローチ、計画と適用の区別、状態のセキュリティと冪等性について説明します。 AIによるIaC生成と最も重要なスキル「計画管理」を学びます。
宣言的に考える: 「どうするか」ではなく、「もしどうなるか」
ほとんどの IaC ツールは宣言型です。システムの最終状態 (「Web サーバー 3 台、ロード バランサー 1 台」としましょう) を記述すると、ツール自体がその状態に到達する方法を計算します。これは、スクリプトを書くこと (「これを実行して、次にあれを実行」を段階的に実行する) とは異なります。宣言型アプローチの大きな利点は冪等性です。コードを 10 回実行したとしても、結果は同じです。これは、ツールが目的の状態がすでに存在するかどうかを確認し、存在する場合にはそれに触れないためです。 AI に IaC を記述するときは、この違いに注意してください。AI に「これらのコマンドを実行する」ではなく、「このインフラストラクチャを状態にさせる」ように指示することになります。
計画/適用: 最も重要な安全手すり
IaC の命を救う機能は計画ステップです。 Terraform、Terraform plan、Ansible の --check モードでは、コードを実行する前に「適用すると何が変わるか」というプレビューが生成されます: 「2 つのリソースが追加され、1 つは変更され、0 つは削除されます」。これが、実装前に意図と現実を比較する唯一の方法です。重要なルール: 計画を読まずに適用しないでください。特に「destroy」行を探してください。タイプミスにより「1 が変更されます」ではなく「12 が削除されます」と表示された場合は、計画によって惨事は回避されました。 AI にコードを出力した後、「私と一緒に計画出力を 1 行ずつ調べて、削除/再作成を含むすべての行にマークを付けてください」と言わせます。
注意: Terraform への一部の変更は、「その場で更新」するのではなく、リソースを「破棄して再作成」します。これはデータベースのデータ損失を意味します。計画出力で -/+ または「強制置換」を無視することは、最も高価な間違いの 1 つです。
ステートファイル: 秘密と真実の記録
Terraform などのツールは、管理するインフラストラクチャの現在の状態を状態ファイルに保持します。このファイルは 2 つの理由から重要です。まず、秘密が含まれている可能性があります (データベースのパスワード、キーは平文の状態になる可能性があります)。したがって、状態をパブリック リポジトリや AI に決して貼り付けず、暗号化されアクセスが制限されたリモート バックエンドに保存してください。第 2 に、状態が破損したり失われた場合、車両は実際のインフラストラクチャと想像上のインフラストラクチャの間のリンクを失います。そのため、状態のバックアップとロック機構(二人同時に壊されないロック)が必須となります。
ステップバイステップ: AI を使用して IaC を保護する
- 意図とプロバイダーの状態を示します。 「AWS 上に 2 台のサーバー、Terraform、このリージョン、このサイズ、セキュリティ グループ。」クラウド、ツール、バージョンが明確であれば、AI は正しい構文を生成します。
- セキュリティのデフォルトをリクエストします。 「セキュリティ グループを開き、暗号化を有効にし、変数にシークレットを抽出し、パブリック アクセスを許可します。」 AI はデフォルトでルース サンプルを生成できます。
- コードを読んで理解します。すべてのリソース、すべての権限を 1 行ずつ理解します。理解できない権限を適用しないでください。
- 計画を立てて監査します。 plan/--check を実行し、AI で出力を検査し、削除行と再構築行をマークします。
- 小さくてリバーシブルで使えます。大きな変化は一度にすべてではなく、少しずつ実装してください。あらゆる段階で戻る方法を知ってください。
- 国家を守る。リモートの暗号化されたバックエンドとロックを使用します。決して漏れない状態。
ミニケース3個
ケース 1 — 計画によりデータベースが回復されました。あるエンジニアは、AI で作成した Terraform コードを使用してデータベースのサイズを拡大したいと考えていました。彼は、Terraform プランの出力で「1 が変更される」と予想していましたが、「1 が破壊され、1 が追加される」ことがわかりました。彼が選択したパラメータは、インプレース更新ではなく再構築をトリガーしており、すべてのデータが削除されることを意味します。計画制御により、実装前に不可逆的なデータ損失が阻止されました。
ケース 2 — 緩いデフォルトからの復帰。チームはAIにファイアウォールコードを尋ねました。この例を実行するために、AI は「インターネット上で公開」を意味する 0.0.0.0/0 という単純なルールを生成しました。エンジニアはコードを読んでいるときにこれに気づき、アクセスをエンタープライズ IP 範囲のみに絞りました。監査を受けずに実装された場合、データベースはインターネット全体に公開されることになります。
ケース 3 — 状態リークが防止されました。ジュニア メンバーは、Terraform の問題を解決するために、terraform.tfstate ファイルをそのまま公開ツールに貼り付けようとしていました。上級エンジニアが停止しました: 状態には平文のデータベース パスワードが含まれていました。代わりに、問題を説明する復号化された概要が共有され、状態がリモートの暗号化されたバックエンドに移動されました。
コピー可能な 4 つのテンプレート
1) IaC リソースの生成 (安全なデフォルト):
あなたの役割: シニア クラウド インフラストラクチャ エンジニア。 [クラウド、例: AWS] for[ツール、例: Terraform] コードを生成します。目的: [目的]。セキュリティ ルール: パブリック (0.0.0.0/0) アクセス OPEN、最も狭い権限から開始。暗号化をオンにする。シークレットを変数に抽出し、コードに埋め込まないでください。削除/再作成につながる可能性のある設定を確認してください。それぞれの情報源を簡単なコメントとともに説明します。
2) 出力監査を計画する:
以下は[Terraform plan / Ansible check]の出力です。教えてください: (1) 追加/変更/削除されるリソースの数、(2) データ損失のリスクを引き起こす「破棄」行または「強制置換」行にもマークを付けます、(3) 予期しないまたは危険と思われる変更をリストします。出力: [計画]
3) IaC コードのセキュリティ レビュー:
セキュリティのために次の IaC コードを調べてください: (1) アクセス/権限が広すぎるかどうか、(2) 暗号化がオフになっているか、(3) コードに秘密が埋め込まれていないか、(4) 公開されているリソースはないか。それぞれの結果に対して修正を提案します。コード: [マスクされたコード]
4) 変更を安全な部分に分割します。
この大きなインフラストラクチャの変更 [説明] を一度に実装したくありません。簡単に戻れる、小さな独立したステップに分割します。各ステップごとに、何が変更されるのか、計画の何に注意する必要があるのか、問題があった場合はどうやって元に戻すのか?
弱いプロンプト / 強いプロンプト
弱いプロンプト:
AWS 上にサーバーを作成する Terraform コードを作成します。
地域、サイズ、セキュリティ、ネットワーク、暗号化は不明です。 AI は、動作するために最も緩い、最も明示的なデフォルトを生成します。運用環境に導入すると、脆弱性が発生します。
強力なプロンプト:
あなたの役割: シニア クラウド インフラストラクチャ エンジニア。 AWS eu-central-1 で Terraform を使用して Web サーバーを定義します: t3.small、企業 IP 範囲のみ (変数で指定します)、ポート 443 がオープン、ディスクは暗号化され、パブリック アクセスなし、ラベルは必須です。秘密は変数に公開されます。コード後: 実装する前に、計画で注意すべき 3 つの線種とリターン パスを説明します。
ステージ
リスク
安全手すり
コードを書く
緩やかなデフォルト (パブリック)
最も狭い権限 + 読み取り
計画/確認
気づかずに削除してしまう
検査計画、マーキング破壊
申し込む
一度限りの大きな変更
小さくて可逆的なステップ
国家行政
釉薬漏れ、歪み
リモート暗号化バックエンド + ロック
よくある間違い
- プランを読まずに申し込む。この計画は削除と再構築を予告しています。これをスキップすると、データの損失が避けられません。
- 緩いデフォルトに気づいていない。 AI インスタンスは頻繁に 0.0.0.0/0 を生成します。それが本番環境に移行すると、インターネット全体に対してオープンソースになることを意味します。
- 漏れている状態。状態ファイルを AI またはオープン リポジトリにエクスポートすると、平文の秘密が公開されます。
- コードにシークレットを埋め込む。 IaC コードにパスワードを書き込むと、コードのバージョン履歴が永続的に漏洩します。
- リビルドをアップデートと間違える。強制置換行を無視すると、データベース内のデータが失われます。
ヒント: 計画の出力を AI に渡してレビューしてもらう場合でも、計画のテキストではなく、自分自身の知識に基づいて最終決定を下してください。 AI が計画を要約し、危険なラインにフラグを立てます。ただし、「この削除は許容されるか」という質問に対する答えは、ビジネスの状況によって異なります。
要約すると
IaC は、手動でクリックするのではなく、バージョン管理可能なコードを使用してインフラストラクチャを管理することにより、再現性とドキュメント化を実現します。 AI は、このコードを作成し、説明し、セキュリティをレビューする強力なパートナーです。しかし、IaC の威力は危険でもあり、1 行でインフラストラクチャ全体を破壊してしまう可能性があります。宣言的に考え、最も狭い権限から開始し、緩いデフォルトを修正し、コードや状態に秘密を漏らさないようにします。最も重要なガードレールは計画/チェックのステップです。削除行と再構築行を読み取らずに実行しないでください。状態を暗号化、ロック、リモートに保ちます。コードは AI であり、決定はあなたにあります。
アプリケーションタスク
小規模なインフラストラクチャ ターゲット (たとえば、単一の仮想マシンとセキュリティ ルール) を選択します。上記の「IaC リソース生成」テンプレートを使用して、安全なデフォルトのコードを AI に要求します。 「IaC コード セキュリティ レビュー」テンプレートを使用してコードを再確認し、少なくとも 1 つの緩い設定を見つけてみてください。可能であれば、テスト アカウントで plan/--check を実行し、「計画出力チェック」テンプレートを使用して出力を確認します。削除行または再作成行があるかどうかを確認します。調査結果とその状態をどのように確保するかを 6 つのポイントにまとめてください。
チェックリスト
- [ ] AI にクラウド、ツール、バージョンを指定し、最も狭い権限でコードをリクエストしましたか?
- [ ] コードに緩いデフォルト (0.0.0.0/0、クローズド暗号化) がないかチェックしましたか?
- [ ] シークレットをコードに埋め込むのではなく、変数に抽出しましたか?
- [ ] 適用する前に計画/チェック出力を読み、削除行をマークしましたか?
- [ ] 「強制交換」/行の再構築によるデータ損失の影響を評価しましたか?
- [ ] 状態ファイルを暗号化、ロックしてリモート バックエンドに保持し、漏洩したのではありませんか?