Upgrade to Pro — share decks privately, control downloads, hide ads and more …

IaCでセキュリティを強化しよう!~IAMが苦手な開発者でも簡単に権限を絞れる。そう、AWS CDKならね!~/secjaws32

IaCでセキュリティを強化しよう!~IAMが苦手な開発者でも簡単に権限を絞れる。そう、AWS CDKならね!~/secjaws32

「Security-JAWS【第32回】」での登壇資料です。
イベントURL:https://s-jaws.doorkeeper.jp/events/167836

More Decks by みずほリサーチ&テクノロジーズ株式会社 先端技術研究部

Other Decks in Technology

Transcript

  1. © 2024 Mizuho Research & Technologies, Ltd.
    Security-JAWS 第32回
    0
    技術開発本部
    先端技術研究部
    IaC でセキュリティを強化しよう!
    ~ IAMが苦手な開発者でも簡単に権限を絞れる。
    そう、AWS CDKならね! ~
    2024年2月14日

    View full-size slide

  2. © 2024 Mizuho Research & Technologies, Ltd.
    1
    自己紹介
    氏名:松尾 優成(Matsuo Yusei)
    所属:先端技術研究部 兼 プロジェクト推進部
    役割:社内向けAWS共通プラットフォームの
    構築・運用
    一言:#secjaws 3回目の登壇機会に感謝!

    View full-size slide

  3. © 2024 Mizuho Research & Technologies, Ltd.
    2
    社内向けAWS共通プラットフォームの概要
    • 社員が安心してAWS環境を利用できるように
    セキュアなAWSアカウントを迅速に提供するプラットフォーム
    • マルチアカウント管理にAWS Control Towerを導入し、開発にAWS CDKを活用
    Control Tower
    テナント AWSアカウント1
    提供サービス
    AWSアカウント管理
    クラウドセキュリティ
    開発システム
    テナントAWSアカウント2
    テナントAWSアカウント3
    マスターアカウント
    Auditアカウント
    Log Archiveアカウント



    詳細は#secjaws31を
    Check!

    View full-size slide

  4. © 2024 Mizuho Research & Technologies, Ltd.
    3
    話すこと
    • セキュリティ観点でAWS CDKの良いところ
    (タイトルはIAMのみですが、IAM以外にも触れます)
    • 当社プラットフォームの設定例をコード付きで紹介
    話さないこと
    • IaC の概念
    • AWS CDKを利用するための権限設定
    (プラットフォーム側でどのように制御するかという話はしません)
    吹き出しなどで補足するため
    コードの詳細を理解する必要はありません

    View full-size slide

  5. © 2024 Mizuho Research & Technologies, Ltd.
    4
    こんな悩みありませんか?
    • IAMポリシーやS3バケットポリシーを書くのが大変
    • CloudFormationでセキュリティ設定を定義しているが
    • 読みづらい ・・・
    • 変更時に抵抗がある・・・

    View full-size slide

  6. © 2024 Mizuho Research & Technologies, Ltd.
    5
    こんな悩みありませんか?
    • IAMポリシーやS3バケットポリシーを書くのが大変
    • CloudFormationでセキュリティ設定を定義しているが
    • 読みづらい ・・・
    • 変更時に抵抗がある・・・
    → AWS CDKで解決できます!

    View full-size slide

  7. © 2024 Mizuho Research & Technologies, Ltd.
    6
    でもAWS CDKの要員は中々いない・・・なぜ?
    • ハードルが高いと思われている?
    • メリットが十分に伝わっていないかも?
    → セキュリティ観点でのCDKメリットをお伝えします!

    View full-size slide

  8. © 2024 Mizuho Research & Technologies, Ltd.
    7
    AWS CDK とは…「開発者体験に優れたOSS のIaCツール」
    • アプリもインフラも使い慣れたプログラミング言語で構築可
    • ベストプラクティスに沿った抽象化されたライブラリ
    (High-levels Constructs)により少ないコード量で記述可
    https://aws.amazon.com/jp/builder
    s-flash/202309/awsgeek-aws-cdk/

    View full-size slide

  9. © 2024 Mizuho Research & Technologies, Ltd.
    8
    AWS CDK は学習コンテンツが豊富!
    初心者にはワークショップ・ BlackBelt シリーズが特にオススメ!
    https://aws.amazon.com/jp/events
    /aws-event-resource/archive/
    https://aws.amazon.com/jp/builders-
    flash/202309/awsgeek-aws-cdk/
    https://catalog.workshops.aws/typescript-and-cdk-
    for-beginner/ja-JP
    https://catalog.us-east-
    1.prod.workshops.aws/workshops/101414
    11-0192-4021-afa8-2436f3c66bd8/ja-JP

    View full-size slide

  10. © 2024 Mizuho Research & Technologies, Ltd.
    9
    IaC 関連の直近アップデートが熱い!
    更に IaC の世界へ飛び込みやすくなっています!
    https://speakerdeck.com/ohmura/managing-existing-environment-with-aws-cfn-
    iac-generator
    https://aws.amazon.com/jp/blogs/news/announcing-cdk-
    migrate-a-single-command-to-migrate-to-the-aws-cdk/
    https://aws.amazon.com/jp/blogs/news/import-entire-
    applications-into-aws-cloudformation/

    View full-size slide

  11. © 2024 Mizuho Research & Technologies, Ltd.
    10
    ここからセキュリティ観点での
    AWS CDKメリットを4つ紹介!
    (サンプルコードはTypeScript)
    ・cdk:v2.103.0
    ・jest:v29.7.0

    View full-size slide

  12. © 2024 Mizuho Research & Technologies, Ltd.
    11
    セキュリティ観点でのAWS CDKメリット①
    「ポリシー関連の設定が抽象化されて簡単!」

    View full-size slide

  13. © 2024 Mizuho Research & Technologies, Ltd.
    12
    S3のRead権限についてCFn例(BlackBeltから引用)
    ⇒ セキュアだが、参照を上下に追っていくのは認知負荷が高い?
    セキュリティ観点でのAWS CDKメリット①「ポリシーの抽象化」
    https://pages.awscloud.com/rs/112-TZM-
    766/images/AWS-Black-Belt_2023_AWS-
    CDK-Basic-1-Overview_0731_v1.pdf
    特定のバケットのみに制限
    特定のユーザーのみにアタッチ
    特定のActionに制限

    View full-size slide

  14. © 2024 Mizuho Research & Technologies, Ltd.
    13
    CDKなら同じ内容をたった3行でかける!
    セキュリティ観点でのAWS CDKメリット①「ポリシーの抽象化」
    https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_AWS-CDK-Basic-1-Overview_0731_v1.pdf
    Read以外に
    WriteやReadWriteなど
    豊富な権限セットを提供

    View full-size slide

  15. © 2024 Mizuho Research & Technologies, Ltd.
    14
    リソースベースポリシーも簡単にかける!
    セキュリティ観点でのAWS CDKメリット①「ポリシーの抽象化」
    当社事例のCDKコード(アセットを組織内に展開するS3バケット)
    ポリシー生成
    S3バケットポリシー抜粋
    grantReadの1行で組織IDに属する全AWSアカウントへ
    読み取り権限を付与(約40行のポリシーを生成)

    View full-size slide

  16. © 2024 Mizuho Research & Technologies, Ltd.
    15
    SSLを強制するポリシーも1行で!
    セキュリティ観点でのAWS CDKメリット①「ポリシーの抽象化」
    当社事例のCDKコード(アセットを組織内に展開するS3バケット)
    ポリシー生成
    S3バケットポリシー抜粋
    enforeSSLを有効化するだけでSSL以外の
    リクエストを拒否(約35行のポリシーを生成)

    View full-size slide

  17. © 2024 Mizuho Research & Technologies, Ltd.
    16
    S3以外にKMSなどでも簡単に権限付与!
    • サンプルでは組織IDに権限付与しているが
    IAM RoleやLambda関数にも付与可能
    (IGrantableに対応するリソースが対象)
    • 誰がどのリソースに触れるのか分かり易い!
    「アクセス先リソース.grantXX(アクセス者)」の形式
    セキュリティ観点でのAWS CDKメリット①「ポリシーの抽象化」
    当社事例のCDKコード(組織内で使用するCMK) KMSキーポリシー抜粋
    ポリシー生成

    View full-size slide

  18. © 2024 Mizuho Research & Technologies, Ltd.
    17
    ベストプラクティスに沿って grant を積極的に使おう!
    • セキュリティグループやNACLの設定も簡単
    • その他に通知やメトリクスなども抽象化されていて、とにかく便利
    セキュリティ観点でのAWS CDKメリット①「抽象化」
    個別に用意した
    IAMロール・
    ポリシーも適用可!

    View full-size slide

  19. © 2024 Mizuho Research & Technologies, Ltd.
    18
    セキュリティ観点でのAWS CDKメリット②
    「モジュール化と単体テストで設定ミス抑制」

    View full-size slide

  20. © 2024 Mizuho Research & Technologies, Ltd.
    19
    CFnテンプレートで同様なセキュリティ設定が羅列しやすい
    セキュリティ観点でのAWS CDKメリット②「モジュール化と単体テスト」
    CloudWatchでルートユーザーの使用を検知してSNSへ通知するCFn例
    この塊が沢山
    あるイメージ
    ※Fn::ForEach
    未使用の前提

    View full-size slide

  21. © 2024 Mizuho Research & Technologies, Ltd.
    20
    アラーム毎に対応するメトリクスフィルタとの連携設定が必要
    セキュリティ観点でのAWS CDKメリット②「モジュール化と単体テスト」
    正常に通知を機能させるためには
    MetricName/NameSpaceを揃える
    CloudWatchでルートユーザーの使用を検知してSNSへ通知するCFn例
    アラーム側定義と一致する必要あり

    View full-size slide

  22. © 2024 Mizuho Research & Technologies, Ltd.
    21
    アラーム毎に対応するメトリクスフィルタとの連携設定が必要
    セキュリティ観点でのAWS CDKメリット②「モジュール化と単体テスト」
    丸々コピペして定義すると、
    うっかり修正漏れで通知が
    うまくいかないことも・・・
    CloudWatchでルートユーザーの使用を検知してSNSへ通知するCFn例

    View full-size slide

  23. © 2024 Mizuho Research & Technologies, Ltd.
    22
    同様の処理をモジュール化することで保守性向上!
    AWS CDKではモジュールとして独自のコンストラクトを作成できる
    ※本発表では、以後「独自のコンストラクト」を「カスタムConstruct」と呼びます
    セキュリティ観点でのAWS CDKメリット②「モジュール化と単体テスト」
    https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/constructs.html#constructs_author

    View full-size slide

  24. © 2024 Mizuho Research & Technologies, Ltd.
    23
    アラーム/メトリクスフィルタをカスタムConstruct化する
    セキュリティ観点でのAWS CDKメリット②「モジュール化と単体テスト」
    カスタムConstructのリソース定義抜粋
    当社事例のCDKコード(カスタムConstruct概要)
    MetricName/NameSpaceが
    一致するようにモジュール化
    呼び出し元から渡された値を
    リソース定義に使用

    View full-size slide

  25. © 2024 Mizuho Research & Technologies, Ltd.
    24
    単体テストでカスタムConstructのロジックを確認!
    セキュリティ観点でのAWS CDKメリット②「モジュール化と単体テスト」
    当社事例のCDKコード(カスタムConstructの単体テスト抜粋)
    メトリクスフィルタとアラームで
    MetricName/NameSpaceが
    一致していることを確認

    View full-size slide

  26. © 2024 Mizuho Research & Technologies, Ltd.
    25
    単体テストでカスタムConstructのロジックを確認!
    セキュリティ観点でのAWS CDKメリット②「モジュール化と単体テスト」
    単体テストにより変更容易性も高まる!
    テスト実行結果(npm test)
    当社事例のCDKコード(カスタムConstructの単体テスト抜粋)

    View full-size slide

  27. © 2024 Mizuho Research & Technologies, Ltd.
    26
    テスト済のカスタムConstructなら、繰り返し処理が安全!
    セキュリティ観点でのAWS CDKメリット②「モジュール化と単体テスト」
    当社事例のCDKコード(スタック定義)
    カスタムConstructを呼び出し
    (アラーム・メトリクスフィルタを作成)
    メトリクスパターンの定義数に
    応じてループ処理
    メトリクスパターンの定義

    View full-size slide

  28. © 2024 Mizuho Research & Technologies, Ltd.
    27
    セキュリティ観点でのAWS CDKメリット③
    「CloudFormationサポート外リソースを
    カスタムリソースで簡単かつセキュアに設定」

    View full-size slide

  29. © 2024 Mizuho Research & Technologies, Ltd.
    28
    実務ではCFnサポート外のリソース操作に度々遭遇
    【CFnサポート外の操作例】
    1. GuardDutyのS3エクスポート設定
    2. Configルールのタグづけ
    3. Securiry Hub 標準コントロールの無効化(※2023年6月に対応済)
    4. Service Catalog ポートフォリオの IAM Principal 関連付け
    これらは手動設定になりがちだが何度も設定するものはIaCにしたい
    一方、CFn カスタムリソースはLambdaが必要でハードルが高そう…
    セキュリティ観点でのAWS CDKメリット③「カスタムリソース」

    View full-size slide

  30. © 2024 Mizuho Research & Technologies, Ltd.
    29
    AWS CDKでは、カスタムリソースを簡単に記述可能!
    セキュリティ観点でのAWS CDKメリット③「カスタムリソース」
    https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_AWS-CDK-Basic-3-AppDev_0831_v1.pdf

    View full-size slide

  31. © 2024 Mizuho Research & Technologies, Ltd.
    30
    カスタムリソース上のAPIに応じたポリシーを簡単に作成!
    セキュリティ観点でのAWS CDKメリット③「カスタムリソース」
    当社事例のCDKコード
    (Service Catalog ポートフォリオの IAM Principal 関連付け) カスタムリソース(Lambda関数)のポリシー抜粋
    ポリシー
    生成

    View full-size slide

  32. © 2024 Mizuho Research & Technologies, Ltd.
    31
    リソースの細かい指定もでき、最小権限にしやすい!
    ※個別に用意したIAMロール・ポリシーも使用可能
    セキュリティ観点でのAWS CDKメリット③「カスタムリソース」
    当社事例のCDKコード
    (Service Catalog ポートフォリオの IAM Principal 関連付け)
    https://docs.aws.amazon.com/cdk/api/v2/docs/aws-
    cdk-lib.custom_resources.SdkCallsPolicyOptions.html

    View full-size slide

  33. © 2024 Mizuho Research & Technologies, Ltd.
    32
    セキュリティ観点でのAWS CDKメリット④
    「 cdk-nag でセキュリティのシフトレフト」

    View full-size slide

  34. © 2024 Mizuho Research & Technologies, Ltd.
    33
    Policy Validation:「cdk-nag」とは
    • セキュリティ・コンプライアンスチェックツール
    • デプロイ前に違反リソースがあれば、デプロイを強制停止
    • 簡単に導入でき、独自ルールの作成などカスタマイズも可能
    セキュリティ観点でのAWS CDKメリット④「cdk-nag」
    設計 実装
    ビルド
    (cdk synth)
    デプロイ
    (cdk deploy)
    システム
    テスト
    cdk-nag
    UTやビルドで
    検査できる

    View full-size slide

  35. © 2024 Mizuho Research & Technologies, Ltd.
    34
    様々なルールやそれらをまとめたマネージドのパックあり
    セキュリティ観点でのAWS CDKメリット④「cdk-nag」
    当社では自社ポリシーに合わせて
    独自のルールパックを使用
    https://github.com/cdklabs/cdk-nag
    マネージドのルールパック
    S3のルール例

    View full-size slide

  36. © 2024 Mizuho Research & Technologies, Ltd.
    35
    単体テストで cdk-nag を使うと早期に違反を検知できる!
    セキュリティ観点でのAWS CDKメリット④「cdk-nag」
    cdk-nag 単体テスト実行例
    サーバーアクセスログが無効化、SSLが強制されていない旨を指摘
    (近年、S3のサービスアップデートによりデフォルトでの指摘が減少している)
    デフォルト設定のS3バケット

    View full-size slide

  37. © 2024 Mizuho Research & Technologies, Ltd.
    36
    cdk-nag の単体テスト Tips は以下記事をご参照!
    セキュリティ観点でのAWS CDKメリット④「cdk-nag」
    https://qiita.com/y_matsuo_/items/6ef17964ff3c557f6d1e

    View full-size slide

  38. © 2024 Mizuho Research & Technologies, Ltd.
    37
    セキュリティ観点でのAWS CDKメリットになり得るかも?
    「integ-tests でアクセステストの自動化」

    View full-size slide

  39. © 2024 Mizuho Research & Technologies, Ltd.
    38
    AWS CDK integ-tests とは
    • 実環境に一時的なリソースをデプロイして統合テストを行う
    • HTTPやAWS API、Lambda実行などで期待通りの挙動か確認
    セキュリティ観点でのAWS CDKメリットになり得るかも?「integ-tests」
    https://aws.amazon.com/jp/blogs/news/how-to-write-and-
    execute-integration-tests-for-aws-cdk-applications/
    CDKからAWS APIで
    テスト用の値を投入
    CDKからAWS APIで
    DBの期待値チェック
    ※α版なので、破壊的変更が入る可能性あり

    View full-size slide

  40. © 2024 Mizuho Research & Technologies, Ltd.
    39
    integ-testsを使えば、データ境界のような複雑な環境で
    正常系/異常系のアクセステストを自動化できる?
    セキュリティ観点でのAWS CDKメリットになり得るかも?「integ-tests」
    データ境界の当社例(#secjaws23 を参照)
    VPC
    S3 bucket
    VPCe
    Lambda
    Identity
    Policy
    Resource
    Policy
    Network
    Policy
    CDK integ-tests
    SDK
    ① VPC内Lambdaを実行
    ② AWS API Callを実行
    PUT GET
    AWS account
    (正常系)
    VPC内からは
    アクセス可
    (異常系)
    VPC外からは
    アクセス不可
    複数のポリシーが
    正しく機能しているか
    実環境で知りたい…!

    View full-size slide

  41. © 2024 Mizuho Research & Technologies, Ltd.
    AWS account
    40
    データ境界における integ-tests の検証結果
    • テスト実行時間が約25分(早い時は7~9分程度だが、バラつきあり)
    • コードレスなAWS APIのメソッドでは正常アクセスのみ確認可
    (Access Deniedを確認したい場合は、Lambda関数が必要)
    セキュリティ観点でのAWS CDKメリットになり得るかも?「integ-tests」
    VPC
    S3 bucket
    VPCe
    Lambda
    SDK
    ① VPC内Lambdaを実行
    ② AWS API Call
    Lambdaを実行
    PUT GET アクセス不可を確認するには
    Lambda関数のコードで
    エラーハンドリングが必要
    Lambda
    CDK integ-tests

    View full-size slide

  42. © 2024 Mizuho Research & Technologies, Ltd.
    41
    データ境界のアクセステストにおける integ-tests の所感
    • integ-tests ではアクセステストに限定せず、データ入出力に
    着目した正常処理の一環で権限確認するのがよさそう
    →パイプラインがあるなら無理して integ-tests を導入しなくてもよいかも?
    (パイプライン上でもテストできる)
    • 各種ポリシーが固まっていない状況なら
    通常通りスタックをデプロイして手動テストする方が早そう
    セキュリティ観点でのAWS CDKメリットになり得るかも?「integ-tests」

    View full-size slide

  43. © 2024 Mizuho Research & Technologies, Ltd.
    42
    まとめ
    • セキュリティ観点でのAWS CDKメリットは以下
    1. ポリシー関連の設定が抽象化されて簡単
    2. モジュール化と単体テストで設定ミス抑制
    3. CFnサポート外操作をカスタムリソースで簡単かつセキュアに設定
    4. cdk-nag でセキュリティのシフトレフト
    • 制限の厳しい環境で integ-tests を使用する場合、
    正常処理の一環で権限確認する方がよさそう
    • AWS CDKは便利!ぜひ使ってみよう!

    View full-size slide