$30 off During Our Annual Pro Sale. View Details »

Infrastructure as Code でセキュリティを楽にしよう!

Kenji Kono
September 24, 2024

Infrastructure as Code でセキュリティを楽にしよう!

エンジニアのみなさん、セキュリティは好きですか ?
クラウドを上手に活用していくうえで、セキュリティを考慮したインフラの構成や設定がより重要になります。Infrastructure as Code (IaC) は、クラウドリソースの設定をデプロイ前にチェックしたり、データの機密性に応じて環境を分離したりを容易にすることで、セキュリティの運用を楽にできます。

一方、IaC そのもののセキュリティも気になるところではないでしょうか。たとえば、「IaC における最小権限の原則って実際どうなの ?」など、気になるトピックについてセキュリティと DevSecOps のスペシャリストとディスカッションしながら、IaC を使って「楽してセキュアに」する方法を一緒に考えてみましょう !

AWS Developer Live Show 2024のセッション資料です。

Kenji Kono

September 24, 2024
Tweet

More Decks by Kenji Kono

Other Decks in Programming

Transcript

  1. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Infrastructure as Code で セキュリティを楽にしよう︕ A W S D E V E L O P E R L I V E S H O W 2 0 2 4 • ⾼野 賢司 松本 雅博 シニア ソリューション アーキテクト アマゾンウェブサービスジャパン合同会社 中島 智広 シニア セキュリティ ソリューション アーキテクト アマゾンウェブサービスジャパン合同会社 シニア ソリューション アーキテクト アマゾンウェブサービスジャパン合同会社
  2. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow 2 ⾼野 賢司 松本 雅博 中島 智広 シニア ソリューション アーキテクト シニア ソリューション アーキテクト シニア セキュリティ ソリューション アーキテクト Infrastructure as Code DevOps / 開発全般 セキュリティ スペシャリストに聞いてみたいことや感想は #AWSDevLiveShow にどんどんポストしてください︕ "Tom"
  3. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow 楽に運⽤できるセキュリティ テーマ
  4. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow 今⽇のトピック ⼈とデータを分離することで セキュリティと俊敏性を両⽴ 環境分離 ... って実際どうなの︖ 最⼩権限の原則 ⼿続きではなく 宣⾔的なコードによって ⾃動化やレビューを楽にする ⾃動化とレビュー ※ Infrastructure as Code (IaC) ツールやクラウドサービス固有のトピックは扱いません
  5. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow 3 分でわかる Infrastructure as Code
  6. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow ⼿動構築による環境のブラックボックス化 設計書 構築⼿順書 v2 変更 B * " もし B の設定が XX だったら... " 構築⼿順書 v1 追加 B + 追加 A + 構築⼿順書 v3 追加 C + 削除 A - 検証環境 B * C + A - 本番環境 B * C + A - 設定ミス B * C + A - 開発環境 ⼿動構築 • 変更が積み重なると現在の状態がわからなくなる • 条件分岐やロールバック操作の網羅は困難 • 操作ミスの可能性が排除できず 環境の⼀貫性を担保できない ?
  7. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow Infrastructure as Code (IaC) とは︖ ⼿動ではなく、コードによって インフラストラクチャの管理やプロビジョニングを⾏うプロセス ソースコード IaC ツール クラウドリソース リソースは この状態であるべき (宣⾔的) ⽬的の状態に 収束 IaC は、開発と運⽤の両⽅に共通⾔語を提供します。 変更は透明性のある⽅法でレビューできるため、 DevOps 環境でのコラボレーションが促進されます。 https://aws.amazon.com/jp/what-is/iac/
  8. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow あるとき • 環境の状態をすぐに調査できる • 複数の環境で⼀貫性がある • チェックやレビューが⾃動化できる • 修正をすばやく適⽤できる ないとき • 環境の状態が不透明 • 設定ミスや差異が発⽣しうる • ⼈が⼿続きをレビューする • 修正の適⽤に時間がかかる セキュリティの観点で IaC が…
  9. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow 環境分離
  10. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow IaC で環境分離を簡単にする サンドボックス環境 アカウント分離 リスク評価に応じた データ分離 + 開発環境 本番環境 アラートと⾃動修復 • AWS Security Hub • AWS Config • Amazon Inspector 予防的統制 パイプラインにのみ 変更を許可 • CloudFormation Hooks + 発⾒的統制 + • 本番環境にあらかじめセキュリティ統制を設定(ランディングゾーンの構築) • サンドボックス環境に本番と同じ構成をデプロイし、開発者が⾃由に実験できる CI/CD パイプライン
  11. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow 事故(障害)は起こる
  12. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow 事故(障害)は起こる だから、障害志向のパターンやメンタルモデルを取り⼊れる 障害を起こしてはいけない 障害が起きることを 前提に備える 障害が起きても ⾃信をもって対応できる これまで これから? Robust Resilient Continuous Resilience
  13. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow 影響を分離できていることは⼤事 AWS アカウント 影響分離(環境分離)はセキュリティやレジリエンシーの基本戦略 • 独⽴した権限管理 • リソースグループの明⽰的な境界 たとえば、AWSでは、
  14. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow … 本当に分離できていますか︖ 本番環境 開発環境 Amazon S3 バケット AWS リソース !! コンセプトを守り抜くことは⼤切
  15. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow ⾃動化とレビュー 17
  16. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow IaC で⾃動化とレビューを簡単にする CI/CD パイプライン IaC セキュリティ • Amazon CodeGuru Security • Trivy • Snyk IaC ポリシー検査 • CloudFormation Guard • cdk-nag + + ピアレビュー コードで変更を確認 • セキュリティ • ロールバック可能性 • Observability + Git リポジトリ 開発環境 • IaC でコード化されることにより、ツールによる⾃動検査や⽣成 AI が利⽤可能に • CI/CD パイプラインから⾃動デプロイすることで⼈をデータから遠ざける Amazon Q Developer ⽣成 AI による コーディング⽀援と セキュリティスキャン + サンドボックス環境 本番環境
  17. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow "コードレビュー" の検索サジェスト コードレビュー 怖い コードレビュー イライラ コードレビュー やり⽅ コードレビュー 細かすぎる コードレビュー 観点 コードレビュー 新⼈ レビュイー (受ける⼈) レビュアー (提供する⼈)
  18. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow レビュー実施⽅法を明確にし ⼼理的負担を減らす 何についてレビューされ 指摘を受けているか明確 何をレビューするか どう指摘するか明確 完了の定義 レビューガイドライン レビュアー レビュイー
  19. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow AWS Well-Architected DevOps Guidance Amazon および AWS がサービスを提供する中で得た知識 最新テクノロジーと DevOps ベストプラクティスを活⽤し、 ⼤きなビジネス価値を提供できる、俊敏でセキュリティに重点を置いた 企業⽂化を育むための構造化されたアプローチ AWS Well-Architected DevOps Guidance https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/devops-guidance/devops-guidance.html
  20. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow ツールによる⾃動化や AI で負担を減らす レビュイー レビュアー • Formatter でコードを⾃動整形(Prettier など) • Linter で構⽂エラーや潜在バグを検出(ESLint など) • SAST で脆弱性を検出(Amazon CodeGuru Security など) • Policy as Code で逸脱を検出(CloudFormation Guard など) ①ツールで事前にチェック、対応 ②ビジネスロジックなどに集中 AI エージェントへの 相談やレビュー依頼
  21. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow 宣⾔的なコード: あるべき状態と意図を伝える Resources: MyBucket: Type: AWS::S3::Bucket MyUser: Type: AWS::IAM::User MyUserPolicy: Type: AWS::IAM::Policy Properties: PolicyDocument: Statement: - Action: - s3:GetObject* - s3:GetBucket* - s3:List* Effect: Allow Resource: - Fn::GetAtt: [ MyBucket, Arn ] - Fn::Sub: "${MyBucket.Arn}/*" Version: "2012-10-17" PolicyName: MyUserPolicy Users: - Ref: MyUser const bucket = new s3.Bucket(this, 'MyBucket'); const user = new iam.User(this, 'MyUser'); bucket.grantRead(user); AWS CDK (TypeScript) AWS CloudFormation (YAML) IAM User Bucket 読み取り • AWS CDK は grantRead などの 抽象化されたメソッドで意図が伝わりやすい • 複雑な IAM ポリシーを書かずに最⼩権限化 • AWS Well-Architected Framework DevOps Guidance でも推奨されている
  22. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow IaC によるセキュリティ強化の全体像 • IaC でコード化されることにより 追加のセキュリティレイヤー と透明性のある変更管理が利⽤可能になる • CI/CD パイプラインから⾃動デプロイすることで⼈をデータから遠ざける サンドボックス環境 アカウント分離 リスク評価に応じた データ分離 + CI/CD パイプライン IaC セキュリティ • Amazon CodeGuru Security • Trivy • Snyk IaC ポリシー検査 • CloudFormation Guard • cdk-nag + + 本番環境 発⾒的統制 アラートと⾃動修復 • AWS Security Hub • AWS Config • Amazon Inspector 予防的統制 パイプラインにのみ 変更を許可 • CloudFormation Hooks + + ピアレビュー コードで変更を確認 • セキュリティ • ロールバック可能性 • Observability + Git リポジトリ 開発環境 Amazon Q Developer ⽣成 AI による コーディング⽀援と セキュリティスキャン +
  23. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow 最⼩権限の原則って実際どうなの︖
  24. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow 「最⼩権限の原則」 という⾔葉のイメージ先⾏で考えていませんか︖
  25. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow 最⼩権限の原則はなんのため︖ 最⼩権限の原則とは、情報セキュリティや計算機科学などの分野において、 コンピューティング環境の特定の抽象化レイヤー内で全てのモジュール (主題によっては、プロセス、ユーザー、プログラム)がその正当な⽬的に 必要とされる情報と計算資源のみにアクセスできるように制限する 設計原則である https://ja.wikipedia.org/wiki/最⼩権限の原則 システム安定性 の向上 システムセキュリティ の向上 ソフトウェア デプロイメント の容易化 ⽬的 / ベネフィット
  26. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow 最⼩権限の原則はなんのため︖(つづき) 実際には、真の最⼩権限の原則を適⽤することは ほとんど不可能に近い。今のところ、あるプロセスの実⾏ に必要とされる最⼩権限を求める⽅法が確⽴されていない。 https://ja.wikipedia.org/wiki/最⼩権限の原則
  27. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow もう⼀段階踏み込んでみると 最⼩権限は実現できる ⼈に与える権限 リソースに与える権限 たとえば、⼈とモノ(リソース)は前提が異なる 最⼩権限の実現には考慮が必要
  28. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow IaC における IAM 権限では AWS CloudFormation Permissions Role Stack Stack Lambda function ? assumeRole 操作 IaC サービスの実⾏ロールの最⼩権限 IaC で作られる IAM Principal の最⼩権限 Permissions Role assumeRole 実⾏ ? 最⼩権限は実現できる 最⼩権限の実現には考慮が必要
  29. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow リソースの権限を最⼩化するには IaC が有効 Lambda function Permissions Role IAM Role の作成が⾯倒だったり 開発者が作成権限を持っていなかったりすると 最⼤公約数的な Role が共有されやすい Lambda function Permissions Role リソースごとに固有の IAM Role を たくさん作成するには IaC が有効 AWS IAM Access Analyzer も活⽤できる
  30. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow アプローチは権限の最⼩化だけではない たとえば、操作の主体や⾏使できる条件をコントロールする 誰が︖ どんな権限を︖ どんな条件で︖ Principal Condition
  31. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow 最⼩権限は原則として⼤切にしよう どうすれば楽をできるか︖ ⼀般に、楽であること=シンプル • ⾔葉から受けるイメージ先⾏で考えてしまうとよりよい選択肢を⾒失う可能性 • 「ほとんど不可能に近い」といわれていることを知るところからスタート • たとえば、影響分離やその他の⼿法を組み合わせて、権限管理に依存する割合を減らしていくこと
  32. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow まとめ ⼈とデータを分離することで セキュリティと俊敏性を両⽴ セキュリティの基本設定 (ランディングゾーン)も IaC で構築 環境分離 原則は⼤事にしながらも 環境分離や⾃動化など 他の⼿法を併⽤してシンプルに リソースの最⼩権限化には IaC が有効 最⼩権限の原則 ⼿続きではなく 宣⾔的なコードによって ⾃動化やレビューを楽にする ⾃動化とレビュー
  33. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. < #AWSDevLiveShow Thank you! ⾼野 賢司 @konokenj 松本 雅博 中島 智広