Slide 1

Slide 1 text

みんなのAWS CDK事情⼤公開スペシャル#3 製造ビジネステクノロジー部 コネクティッドカーチーム ⼩林 翔⾺ AWS CDKでリソースを作成する際の 判断フロー

Slide 2

Slide 2 text

⾃⼰紹介 2 ● ⾼校卒業 ● トラックの運ちゃん ● ⾼知県で漁師 ● SES ○ ビッグデータ分析基盤開発 ● ⾃社開発 ○ 労務管理WEBアプリケーション開発 ● 2025.03~ クラスメソッド⼊社  ○ ⾃動⾞のコネクティッドサービス開発 ■ サーバーサイドエンジニア ● 最近の出来事 ○ 茨城県の⿓神バンジーで100mバンジー ○ クラスメソッドベトナムオフィスに突撃 ● 部署 ○ 製造ビジネステクノロジー部 コネクティッドカーチーム ● 名前 ○ ⼩林 翔⾺ ● 住まい ○ 東京 ● 2025 Japan All AWS Certifications Engineers

Slide 3

Slide 3 text

今⽇お話しすること 3 1. 背景(きっかけ) 2. 結論 3. CDK化の判断フロー 4. 実践例:Security Hub の新コントロールをCDKで実装 5. まとめ

Slide 4

Slide 4 text

前提 4 ● AWS のリソースを CDK (TypeScript) で実装したい⽅

Slide 5

Slide 5 text

背景 Security Hub の新コントロール [SSM.7] への対応

Slide 6

Slide 6 text

きっかけ 6 ● AWS Security Hub に新しいコントロール [SSM.7] がリリースされた ● これにより、Security Hub から MEDIUM のアラートが発⽣ ● アラートを抑制するためにリソースを修正する⽅針となった https://docs.aws.amazon.com/ja_jp/securityhub/latest/userguide/doc-history.html

Slide 7

Slide 7 text

いつも通り L2 コンストラクトで実装しよう😎

Slide 8

Slide 8 text

きっかけ 8 ● 壁にぶつかる ○ 第⼀の困惑 ■ ドキュメントを確認 ● 「あれ?L2に該当するプロパティがない...」 ○ 第⼆の困惑 ■ 「さらに調べると...L1でも⾒つからない。どうしよう...?」

Slide 9

Slide 9 text

きっかけ 9 ● 壁にぶつかる ○ 第⼀の困惑 ■ ドキュメントを確認 ● 「あれ?L2に該当するプロパティがない...」 ○ 第⼆の困惑 ■ 「さらに調べると...L1でも⾒つからない。どうしよう...?」 困った....😔

Slide 10

Slide 10 text

先輩からのアドバイス 「AWS の実装をCDK化する際の考え⽅があるんやで😎」

Slide 11

Slide 11 text

結論 1 1 ● AWS の実装をCDK化したい場合は、以下の順で実装可能性を検 討していくと良い ○ L2 コンストラクト ○ L1 コンストラクト ○ カスタムリソース ○ CLI‧マネコン L2 コンストラクト L1 コンストラクト カスタムリソース CLI ‧マネコン 上から順に 検討してい くと良い

Slide 12

Slide 12 text

なぜこの順番なのか?🧐 深掘りしてみる

Slide 13

Slide 13 text

CDK のレイヤーについておさらい 1 3 https://cloud.nri-net.com/reports/aws-cdk-report-2404/ 細かい制御が可能だが、抽象 化はされない。名前の接頭辞 に「Cfn」が利⽤される L1 Constructにデフォルト 値や関数を加えて抽象化し たもの 複数のAWSリソースを組み 合わせてたもの((API Gateway-Lambda-Dynamo DB等))

Slide 14

Slide 14 text

L2 コンストラクトが良い理由 1 4 ● 適切なデフォルトプロパティ設定、ベストプラクティスが設定 されている ● ⾼度な抽象化が提供されており、少ないコードで実装可能

Slide 15

Slide 15 text

ベストプラクティスの設定がされている 1 5 S3 バケットを L2 コンストラクトで作成 S3バケットをL2コンストラクトでインスタ ンス化して作成したら、⾃動でパブリック アクセスブロックが付与される!😎 S3 バケットを L1 コンストラクトで作成 パブリックアクセス のブロックは明⽰的 に記載する必要があ る🥺

Slide 16

Slide 16 text

⾼度な抽象化が提供されており、少ないコードで実装可能 1 6 S3 バケット‧Lambda を L1 コンストラクトで作成 S3 バケット‧Lambda を L2 コンストラクトで作成 600⽂字 1688⽂字🥺 書ききれない! grantRead で必要なIAMポリシーを⾃動作成

Slide 17

Slide 17 text

L2 コンストラクトが良い理由 1 7 ● 開発効率とセキュリティの両⾯で⼤きなメリットがあるため、 CDK化をする際には、最初に検討すべき選択肢となる

Slide 18

Slide 18 text

L1 コンストラクト 1 8 ● 抽象化はおこなわず、AWS CloudFormation リソースに直接 マッピングされる ● CloudFormationリソースと1対1で対応しており、細かい制御 が可能 ● こんな時に使う ○ 細かいカスタマイズが必要な場合 ○ L2で未対応の新しいプロパティを使いたい場合 ⚠ コード量が多くなりがち ⚠ AWSベストプラクティスは⾃分で実装する必要

Slide 19

Slide 19 text

カスタムリソース 1 9 ● ⾃分でLambda関数を実装せずに、AWS APIを宣⾔的に呼び出 し、⼿動設定をコード化して⼀元管理できる ● こんなときに使う ○ CDKでサポートされていないAWSサービスや複雑なロジッ クが必要な場合 ⚠ 実⾏タイミング:onCreate/onUpdate/onDelete を適切に選択 ⚠ Lambda実⾏時間制限:最⼤15分でタイムアウト

Slide 20

Slide 20 text

カスタムリソースについての詳細はこちらを 2 0 https://www.youtube.com/watch?v=KgA41_aZ9o0 morimorikochanさん https://dev.classmethod.jp/articles/shoma-security -hub-control-ssm7-block-public-sharing-settings-en abled-with-custom-resource/

Slide 21

Slide 21 text

CLI‧マネジメントコンソール 2 1 ● CDKでの⾃動化が困難、または⼀時的な作業の場合の最終⼿段 として⼿動操作を検討する ⚠ 『再現性の低下』や『設定ミスのリスク』があるためCDKでの実 装を⽬指す上では最終⼿段となる

Slide 22

Slide 22 text

実際にCDK化を⾏った際のフロー

Slide 23

Slide 23 text

SecurityHubコントロール [SSM.7] の対応 ● 要件 ○ Security Hubの新コントロール [SSM.7] のアラート対応 ○ SSMドキュメントのパブリック共有ブロックを有効化する ことで、 [SSM.7] のアラートを 解消する

Slide 24

Slide 24 text

SecurityHubコントロール [SSM.7] の対応 ● 実際におこなったCDK化のフロー L2 コンストラクトの調査 方法 APIリファレンス等でSSM関連の L2コンストラクトを確認 結果 パブリック共有ブロック設定のプ ロパティが見つからない ❌ Step 1 Step 2 Step 3 L1 コンストラクトの調査 方法 APIリファレンス等でSSM関連の L1コンストラクトを確認 結果 パブリック共有ブロック設定のプ ロパティが見つからない ❌ カスタムリソース の調査 方法 AWS CLIドキュメントでSSM関連の APIコマンドを調査 結果 aws ssm update-service-settingコ マンドで設定変更が可能! ✅󰢏

Slide 25

Slide 25 text

SecurityHubコントロール [SSM.7] の対応 ● L2、L1から実装可能性を検討し、最後にカスタムリソースで実装 ● このフローに則ることで、CDKのメリットを最⼤限に活かしつつ、 AWSリソースをコードで管理していくことが可能になるのかなと思い ます

Slide 26

Slide 26 text

まとめ 2 6 ● AWS の実装をCDK化したい場合は、以下の順で実装可能性 を検討していくと良い! ○ L2 コンストラクト ○ L1 コンストラクト ○ カスタムリソース ○ CLI‧マネコン

Slide 27

Slide 27 text

ご清聴ありがとうございました