From fd27a91ae38097bb336fa44a79c971f9d6c34c0d Mon Sep 17 00:00:00 2001 From: kenshin-morioka Date: Wed, 12 Aug 2026 08:30:06 +0900 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20GitHub=20Actions=20=E3=81=A7?= =?UTF-8?q?=E9=9D=99=E7=9A=84=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E3=82=92?= =?UTF-8?q?=E5=AE=9F=E8=A1=8C=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - push (main) / PR 時に make check を実行 (validate / lint / 図生成の検証) - AWS credentials は使用しない (permissions: contents: read のみ) - ツールは mise.toml (バージョン固定に変更) + setup-sam + brew/apt で導入 Co-Authored-By: Claude Fable 5 --- .github/workflows/validate.yml | 39 ++++++++++++++++++++++++++++++++++ mise.toml | 12 ++++++----- 2 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/validate.yml diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml new file mode 100644 index 0000000..66d57ab --- /dev/null +++ b/.github/workflows/validate.yml @@ -0,0 +1,39 @@ +# push / PR のたびに IaC の静的チェックと構成図生成を検証するワークフロー。 +# +# 安全対策: +# - AWS credentials は一切使わない (GitHub Secrets にも設定しない) +# - 実行するのは validate / lint / 図生成のみで、AWS へは接続しない +name: validate + +on: + push: + branches: [main] + pull_request: + +# リポジトリの読み取りだけできれば十分 +permissions: + contents: read + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + # mise.toml に固定したツール (terraform / tflint / checkov / cfn-lint / cfn-dia) を導入 + - uses: jdx/mise-action@v2 + + # SAM CLI (mise 管理外なので公式 action で導入) + - uses: aws-actions/setup-sam@v2 + with: + use-installer: true + + # 構成図生成用: Graphviz は apt、InfraMap は Homebrew (ランナーに標準搭載) で導入 + - name: Install diagram tools + run: | + sudo apt-get update -qq && sudo apt-get install -y -qq graphviz + brew install inframap + + # ローカルの学習サイクルと同じ一括チェックを実行する + - name: Run make check + run: make check diff --git a/mise.toml b/mise.toml index e89befd..bb2b1d2 100644 --- a/mise.toml +++ b/mise.toml @@ -1,6 +1,8 @@ +# プロジェクトで使うツールとバージョンの固定 (mise install で一括導入)。 +# CI (GitHub Actions) でも同じ定義を使うため、"latest" ではなく明示的に固定する [tools] -"pipx:checkov" = "latest" -terraform = "latest" -tflint = "latest" -"pipx:cfn-lint" = "latest" -"npm:@mhlabs/cfn-diagram" = "latest" +terraform = "1.15.8" +tflint = "0.64.0" +"pipx:checkov" = "3.3.9" +"pipx:cfn-lint" = "1.54.0" +"npm:@mhlabs/cfn-diagram" = "1.1.40" From 158c6d29dc87c784fcaa8e8321178798eec10ab5 Mon Sep 17 00:00:00 2001 From: kenshin-morioka Date: Wed, 12 Aug 2026 08:33:21 +0900 Subject: [PATCH 2/5] =?UTF-8?q?fix:=20fast-xml-parser@4.5.7=20=E3=82=92?= =?UTF-8?q?=E6=A4=9C=E8=A8=BC=E3=81=AE=E4=B8=8A=20trust=20policy=20?= =?UTF-8?q?=E3=81=8B=E3=82=89=E9=99=A4=E5=A4=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit mise の npm backend が provenance 無しを理由に cfn-diagram の依存 fast-xml-parser@4.5.7 を拒否して CI が失敗するため、以下を検証して この 1 バージョンのみ除外: - npm tarball と GitHub v4.5.7 タグのソースが完全一致 - 公開者は 4.x 系全リリースと同一のメンテナ本人アカウント - 5.x 系のみ GitHub Actions の trusted publishing を使う運用によるもの Co-Authored-By: Claude Fable 5 --- mise.toml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mise.toml b/mise.toml index bb2b1d2..c4c578f 100644 --- a/mise.toml +++ b/mise.toml @@ -5,4 +5,8 @@ terraform = "1.15.8" tflint = "0.64.0" "pipx:checkov" = "3.3.9" "pipx:cfn-lint" = "1.54.0" -"npm:@mhlabs/cfn-diagram" = "1.1.40" +# fast-xml-parser@4.5.7 は provenance 無しのため mise の trust policy に検出されるが、 +# npm tarball と GitHub の v4.5.7 タグのソース一致・公開者が 4.x 系従来のメンテナ本人 +# であることを確認済み (5.x のみ trusted publishing を使う運用のため)。この 1 バージョン +# だけを検証済みとして除外する +"npm:@mhlabs/cfn-diagram" = { version = "1.1.40", trust_policy_excludes = ["fast-xml-parser@4.5.7"] } From 4a965678fa722525fb83157143172672f4bcb155 Mon Sep 17 00:00:00 2001 From: kenshin-morioka Date: Wed, 12 Aug 2026 08:35:18 +0900 Subject: [PATCH 3/5] =?UTF-8?q?fix:=20CI=20=E3=81=AE=20InfraMap=20?= =?UTF-8?q?=E5=B0=8E=E5=85=A5=E3=82=92=20go=20install=20=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ubuntu-24.04 ランナーには Homebrew が搭載されていないため、 バイナリ配布の無い InfraMap は Go でソースからインストールする Co-Authored-By: Claude Fable 5 --- .github/workflows/validate.yml | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 66d57ab..13869cc 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -28,11 +28,20 @@ jobs: with: use-installer: true - # 構成図生成用: Graphviz は apt、InfraMap は Homebrew (ランナーに標準搭載) で導入 - - name: Install diagram tools + # 構成図生成用の Graphviz + - name: Install Graphviz + run: sudo apt-get update -qq && sudo apt-get install -y -qq graphviz + + # InfraMap はバイナリ配布が無いため Go でソースからインストールする + # (macOS ローカルでは brew install inframap でよい) + - uses: actions/setup-go@v5 + with: + go-version: stable + cache: false + - name: Install InfraMap run: | - sudo apt-get update -qq && sudo apt-get install -y -qq graphviz - brew install inframap + go install github.com/cycloidio/inframap@v0.8.1 + echo "$HOME/go/bin" >> "$GITHUB_PATH" # ローカルの学習サイクルと同じ一括チェックを実行する - name: Run make check From de58b9ad2f2eae22f95a57f96eeb29fca5c2fd3f Mon Sep 17 00:00:00 2001 From: kenshin-morioka Date: Wed, 12 Aug 2026 08:38:31 +0900 Subject: [PATCH 4/5] =?UTF-8?q?fix:=20checkov=20=E3=82=92=E7=A2=BA?= =?UTF-8?q?=E5=AE=9F=E3=81=AB=E5=AE=9F=E8=A1=8C=E3=81=97=E3=80=81=E3=83=97?= =?UTF-8?q?=E3=83=AC=E3=83=BC=E3=82=B9=E3=83=9B=E3=83=AB=E3=83=80=E3=81=AE?= =?UTF-8?q?=E8=AD=A6=E5=91=8A=E3=81=AF=E7=90=86=E7=94=B1=E4=BB=98=E3=81=8D?= =?UTF-8?q?=E3=81=A7=E3=82=B9=E3=82=AD=E3=83=83=E3=83=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - --directory を複数同時に渡すと SAM 側が CloudFormation として スキャンされない挙動があるため、ディレクトリごとに checkov を実行 - プレースホルダ関数への CKV_AWS_115/116/117 は、各設定の意味を コメントで説明した上で Metadata の checkov.skip で明示的に抑制 Co-Authored-By: Claude Fable 5 --- Makefile | 5 ++++- sam/template.yaml | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 3e2dad2..bf18961 100644 --- a/Makefile +++ b/Makefile @@ -54,7 +54,10 @@ lint-cfn: ## CloudFormation / SAM の lint $(RUN) cfn-lint $(SAM_DIR)/template.yaml lint-checkov: ## IaC のセキュリティ静的解析 (Terraform + SAM) - $(RUN) checkov --directory $(TERRAFORM_DIR) --directory $(SAM_DIR) --quiet --compact + @# --directory を複数同時に渡すと SAM 側が CloudFormation として + @# スキャンされないことがあるため、ディレクトリごとに実行する + $(RUN) checkov --directory $(TERRAFORM_DIR) --quiet --compact + $(RUN) checkov --directory $(SAM_DIR) --quiet --compact diagram: diagram-terraform diagram-sam ## Terraform と SAM の構成図を生成する diff --git a/sam/template.yaml b/sam/template.yaml index b53a16c..e93a9c9 100644 --- a/sam/template.yaml +++ b/sam/template.yaml @@ -27,6 +27,17 @@ Resources: # AWS がランタイムを管理してくれる標準的な形。まずはこちらが基本 HelloFunction: Type: AWS::Serverless::Function + Metadata: + # checkov が指摘する下記 3 点は本来設計すべき項目だが、学習用プレースホルダの + # ため理由を明記した上でスキップする。本実装では各項目を設計判断すること + checkov: + skip: + - id: CKV_AWS_115 # 同時実行数制限: 暴走や下流サービス保護のための上限設定 + comment: "learning placeholder" + - id: CKV_AWS_116 # DLQ: 失敗イベントを退避して調査・再処理できるようにする + comment: "learning placeholder" + - id: CKV_AWS_117 # VPC 配置: プライベートリソースへ安全にアクセスするため + comment: "learning placeholder" Properties: CodeUri: src/hello/ # コードの場所 (ディレクトリ) Handler: app.lambda_handler # <ファイル名>.<関数名> @@ -40,6 +51,15 @@ Resources: Metadata: # sam build に「cargo-lambda でビルドする」ことを伝える設定 BuildMethod: rust-cargolambda + # HelloFunction と同じ理由で学習用プレースホルダとしてスキップ + checkov: + skip: + - id: CKV_AWS_115 + comment: "learning placeholder" + - id: CKV_AWS_116 + comment: "learning placeholder" + - id: CKV_AWS_117 + comment: "learning placeholder" Properties: CodeUri: src/hello-rust/ # Cargo.toml があるディレクトリ Handler: bootstrap # カスタムランタイムでは固定値 (バイナリ名) From 0432ca97368a9f3afa0cb9d6b8fe97a34b7b2685 Mon Sep 17 00:00:00 2001 From: kenshin-morioka Date: Wed, 12 Aug 2026 08:40:53 +0900 Subject: [PATCH 5/5] =?UTF-8?q?fix:=20checkout=20=E3=81=A7=20GITHUB=5FTOKE?= =?UTF-8?q?N=20=E3=82=92=E4=BF=9D=E6=8C=81=E3=81=97=E3=81=AA=E3=81=84=20(p?= =?UTF-8?q?ersist-credentials:=20false)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- .github/workflows/validate.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 13869cc..71d6598 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -19,6 +19,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + with: + # このジョブは認証済み Git 操作をしないため GITHUB_TOKEN を保持しない + persist-credentials: false # mise.toml に固定したツール (terraform / tflint / checkov / cfn-lint / cfn-dia) を導入 - uses: jdx/mise-action@v2