From a46b18f58bb4329d345becbdd496c78fe149750b Mon Sep 17 00:00:00 2001
From: Ryosuke Tomita <>
Date: Sun, 14 Jan 2024 00:23:50 +0900
Subject: [PATCH] feature/add-markdownlint
---
.pre-commit-config.yaml | 12 ++-
Dockerfile | 5 +-
README.md | 194 ++++++++++++++++++++---------------
doc/pull_request_template.md | 6 +-
doc/tools_doc/git-secret.md | 11 +-
doc/tools_doc/hadolint.md | 15 +--
doc/tools_doc/pre-commit.md | 86 ++++++++++------
doc/tools_doc/semgrep.md | 16 +--
doc/tools_doc/trivy.md | 48 +++++----
pre-commit-test-local.sh | 3 +
public/favicon.ico | Bin 3870 -> 0 bytes
11 files changed, 243 insertions(+), 153 deletions(-)
create mode 100644 pre-commit-test-local.sh
delete mode 100644 public/favicon.ico
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 3203980..d38bf50 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -14,7 +14,7 @@ repos:
rev: v2.12.0
hooks:
- id: hadolint
- #args: [--trusted-registry, grc.io, ./react-app/Dockerfile]
+ # args: [--trusted-registry, grc.io, ./react-app/Dockerfile]
args: [./Dockerfile]
files: Dockerfile$
# ESLint
@@ -30,3 +30,13 @@ repos:
hooks:
- id: prettier
files: \.[jt]sx?$ # *.js, *.jsx, *.ts and *.tsx
+
+ # Markdown linter
+ # けっこう厳しいのでVSCodeのExtensionsで見てクリティカルな部分だけ直すでもいいかも
+- repo: https://github.com/igorshubovych/markdownlint-cli
+ rev: v0.38.0
+ hooks:
+ - id: markdownlint
+ files: '.*\.md$'
+ types: [file]
+ args: [--disable, MD010, --disable, MD013]
diff --git a/Dockerfile b/Dockerfile
index 13e7e08..cdbc2d2 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -7,8 +7,6 @@ RUN npm install && npm run build
# Product Image
FROM public.ecr.aws/eks-distro-build-tooling/eks-distro-minimal-base-nginx:latest-al23
-COPY --from=build /app/build /usr/share/nginx/html
-COPY nginx.conf /etc/nginx/nginx.conf
# Change owner to allow non-root users to start the service
USER root
@@ -17,6 +15,9 @@ RUN mkdir -p /var/log/nginx \
&& touch /run/nginx.pid \
&& chown -R nginx:nginx /run/nginx.pid
+COPY --from=build /app/build /usr/share/nginx/html
+COPY nginx.conf /etc/nginx/nginx.conf
+
# Use 8080 instead of 80 to avoid the `nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)` when using ECS.
EXPOSE 8080
USER nginx
diff --git a/README.md b/README.md
index 242a40b..2251f98 100644
--- a/README.md
+++ b/README.md
@@ -1,81 +1,99 @@
-# INDEX
-- [ABOUT](#ABOUT)
-- [ENVIRONMENT](#ENVIRONMENT)
-- [PREPARING](#PREPARING)
-- [HOW TO USE](#HOW-TO-USE)
-- [MEMO](#MEMO)
-******
+# DevSecOps demo React application for AWS ECS on Fargate
+## INDEX
-# ENVIRONMENT
-- AWS
-- Github Actions
-- node:20
-******
+- [ABOUT](#about)
+- [ENVIRONMENT](#environment)
+- [PREPARING](#preparing)
+- [HOW TO USE](#how-to-use)
+- [Error Log](#error-log)
+
+---
+## ABOUT
-# ABOUT
Sample for DevSecOps environment.
If you need help or questions, please contact [twitter](https://twitter.com/sigma5736394841), issues.
-## AWS
+
+## ENVIRONMENT
+
+- AWS
+- GitHub Actions
+- node:20
+
+---
+
+### AWS
+
- app-infrastructure-roles
-![app-infrastructure-roles](./doc/fig/cfn/app-infrastructure-roles.png)
+ ![app-infrastructure-roles](./doc/fig/cfn/app-infrastructure-roles.png)
- app-infrastructure
-![app-infrastructure](./doc/fig/cfn/app-infrastructure.png)
+ ![app-infrastructure](./doc/fig/cfn/app-infrastructure.png)
- environment
-![env](./doc/fig/cfn/env.png)
+ ![env](./doc/fig/cfn/env.png)
- service
-![svc](./doc/fig/cfn/svc.png)
+ ![svc](./doc/fig/cfn/svc.png)
- pipeline
-![pipeline](./doc/fig/cfn/pipeline.png)
-******
+ ![pipeline](./doc/fig/cfn/pipeline.png)
+
+---
+### Automation Tools
-## Automation Tools
See [./doc/tools_doc](./doc/tools_doc)
-### local
+
+#### local tools
+
- pre-commit,git-secret
-### GitHub Actions
+
+#### Using on GitHub Actions
+
- semgrep
- jest
- trivy(dependency check)
-### AWS CodePipeline
+#### AWS CodePipeline
+
- trivy(image scan)
-******
+---
+
+## PREPARING
-# PREPARING
-## AWSの設定
-copilot cliを使って環境構築を行う。
-### appの作成
-- 名前は任意だが,自分はreact-appとした
-- ここで必用なIAMロールの一部やKMSのキーやCodePipelineに使うS3やそのポリシーが作成されている。
+### AWS Settings
+
+copilot cli を使って環境構築を行う。
+
+#### Create app
+
+- 名前は任意だが,自分は react-app とした
+- ここで必用な IAM ロールの一部や KMS のキーや CodePipeline に使う S3 やそのポリシーが作成されている。
```shell
copilot app init
cat ./copilot/.workspace
application: react-app
```
-### development用のenvironmentとserviceをまとめて作成する。
-- amd64を指定しないとなぜかビルドエラーになる。
-- 名前は任意だが,dev-envとdev-svcとした。
-- TypeはLoad Balancerを選択した。
+
+#### development 用のと production 用の 2 つの environment と service を作成する
+
+- amd64 を指定しないとビルドエラーになる。
+- 名前は任意だが,dev-env,dev-svc と prod-env,prod-svc とした。
+- Type は Load Balancer を選択した。
```shell
DOCKER_DEFAULT_PLATFORM=linux/amd64 copilot init
```
+
- copilot/以下のファイルを編集することで設定を変更できる。
-- 新しいVPCや,ECSのCluster,Load Balancerや権限周りが作成される。
-### production用のenvironmentとserviceをまとめて作成する。
-- vpcをいくつも作りたくない場合はenvironment単体で作成すると既存リソースの使用が選択できる(VPC含めて完全新規にしたいなら上の手順を繰り返す)。
+> [!NOTE]
+> production と development で共通の VPC を使う場合には以下のようにして`copilot env init`単体で作成する。
-```shell
-copilot env init # prod-envと命名してcopilot-react-app-dev-vpcを選択する。
-```
+
see detail
+- 新しい VPC や,ECS の Cluster,Load Balancer や権限周りが作成される。
```shell
copilot env init
@@ -105,39 +123,45 @@ Default environment configuration? No, I'd like to import existing resources
Which VPC would you like to use? [Use arrows to move, type to filter]
> vpc-xxxxxxxxxxxxxxxxx (copilot-react-app-dev-env)
```
+
-- environmentをデプロイ
+
+- environment をデプロイ
```shell
copilot env deploy
```
-- prod用のserviceを作成してデプロイする。
-この際に間違えてdev-svcやdev-envを選ばないように注意する。
+- service をデプロイする。
+ > [!WARNING]
+ > この際に間違えて dev-svc や dev-env を選ばないように注意する。
```shell
-DOCKER_DEFAULT_PLATFORM=linux/amd64 copilot svc init
+DOCKER_DEFAULT_PLATFORM=linux/amd64 copilot svc init # サービス作成済みなら実行しない。
copilot svc deploy
```
+
- ブラウザからアクセスできるか試してみる。
```shell
-copilot svc show # urlが出てくるので
+copilot svc show # urlが出てくるのでそこにアクセスする
```
+### CodePipeline の作成
-### CodePipelineの作成
-- 名前は任意だが,自分はreact-app-pipelineとした。
+- 名前は任意だが,自分は react-app-pipeline とした。
```shell
copilot pipeline init
```
-- [manifest.yml](./copilot/pipelines/react-app-pipeline/manifest.yml)を編集してdevelopmentでサービス開始後にユーザが承認した後にproductionにデプロイされるようにする。
+- [manifest.yml](./copilot/pipelines/react-app-pipeline/manifest.yml)を編集して development でサービス開始後にユーザが承認した後に production にデプロイされるようにする。
+
+```yaml
+requires_approval: true
```
- requires_approval: true
-```
-- 先にgithubに設定ファイルをアップロードしてからpipelineをデプロイする
+
+- 先に github に設定ファイルをアップロードしてから pipeline をデプロイする
```shell
git add .
@@ -145,22 +169,25 @@ git commit -m "add pipeline"
git push
copilot pipeline deploy
```
-- ACTION REQUIREDが出るのでURLにアクセスし,pendingになっているpipelineとGitHubを接続する設定を追加する。
-- 一度pipelineをデプロイすると以後,指定したGitHubのブランチにマージされるたびにCode Pipelineを通してデプロイが進むようになる。
-#### CodePipelineにimage scanを追加する
-- [./copilot/pipelines/react-app-pipeline/buildspec.yml](./copilot/pipelines/react-app-pipeline/buildspec.yml)を編集してtrivyによるimage scanを追加する。
-```
+- ACTION REQUIRED が出るので URL にアクセスし,pending になっている pipeline と GitHub を接続する設定を追加する。
+- 一度 pipeline をデプロイすると以後,指定した GitHub のブランチにマージされるたびに Code Pipeline を通してデプロイが進むようになる。
+
+#### CodePipeline に image scan を追加する
+
+- [./copilot/pipelines/react-app-pipeline/buildspec.yml](./copilot/pipelines/react-app-pipeline/buildspec.yml)を編集して trivy による image scan を追加する。
+
+```yaml
install:
commands:
- - echo "install trivy"
- - rpm -ivh https://github.com/aquasecurity/trivy/releases/download/v0.48.0/trivy_0.48.0_Linux-64bit.rpm
+ - echo "install trivy"
+ - rpm -ivh https://github.com/aquasecurity/trivy/releases/download/v0.48.0/trivy_0.48.0_Linux-64bit.rpm
```
-```
- # Run trivy scan on the docker images.
- - trivy image --vuln-type os --no-progress --format table -o container-scanning-report.txt --severity CRITICAL,HIGH $(jq -r '.Parameters.ContainerImage' ./infrastructure/dev-svc-dev-env.params.json)
- - cat container-scanning-report.txt
+```yaml
+# Run trivy scan on the docker images.
+- trivy image --vuln-type os --no-progress --format table -o container-scanning-report.txt --severity CRITICAL,HIGH $(jq -r '.Parameters.ContainerImage' ./infrastructure/dev-svc-dev-env.params.json)
+- cat container-scanning-report.txt
```
@@ -168,7 +195,7 @@ install:
- ./infrastructureをビルドによって作成しており,この中にECRのイメージが書いてあるのでこれをjqコマンドで抜き出している。
- trivyに関する詳細は[./doc/tools_doc/trivy.md]を確認。
-```
+```shell
cat ./infrastructure/dev-svc-dev-env.params.json
{
"Parameters": {
@@ -182,13 +209,14 @@ xxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/react-app/dev-svc:xxxxxx-xxxxx-xxxx-
```
-******
+---
## その他の設定
-- ローカルでのセットアップが必用なのはgit-secretsとpre-commitくらい
-- [pre-commitのドキュメント](./doc/tools_doc/pre-commit.md)
-- [git-secretsのドキュメント](./doc/tools_doc/git-secret.md)
+
+- ローカルでのセットアップが必用なのは git-secrets と pre-commit くらい
+- [pre-commit のドキュメント](./doc/tools_doc/pre-commit.md)
+- [git-secrets のドキュメント](./doc/tools_doc/git-secret.md)
```shell
cd devsecops-demo-aws-ecs
@@ -197,21 +225,25 @@ pre-commit install
git secrets --install
git secrets --register-aws # awsのクレデンシャル検知ルールを登録
```
-- VSCodeのExtensionsもお好みで。Dockerのhadolintはおすすめ。
-- GitHub Actionsがスキャン結果のファイルをアップロードできるように権限をつける。詳細は[semgrepのyaml](./.github/workflows/react-semgrep.yaml)を参照。
-******
+- VSCode の Extensions もお好みで。Docker の hadolint はおすすめ。
+
+- GitHub Actions がスキャン結果のファイルをアップロードできるように権限をつける。詳細は[semgrep の yaml](./.github/workflows/react-semgrep.yaml)を参照。
+
+---
+
+## HOW TO USE
+
+1. [PREPARING](#preparing)の設定を先にやる。
+2. commit 時には pre-commit と git-secret が作動
+3. push 時には GitHub Actions により SAST(semgrep),UnitTest(jest),Dependency Check(trivy)が実行される。
+4. master ブランチにマージしたり master に push した時に CodePipeline によって AWS へリポジトリがクローンされ,ビルド(image scan を含む),development へのデプロイが始まる。
+5. development で問題がなければ CodePipeline 上で承認し,production へデプロイ
+---
-# HOW TO USE
-1. [PREPARING](#PREPARING)の設定を先にやる。
-2. commit時にはpre-commitとgit-secretが作動
-3. push時にはGitHub ActionsによりSAST(semgrep),UnitTest(jest),Dependency Check(trivy)が実行される。
-4. masterブランチにマージしたりmasterにpushした時にCodePipelineによってAWSへリポジトリがクローンされ,ビルド(image scanを含む),developmentへのデプロイが始まる。
-5. developmentで問題がなければCodePipeline上で承認し,productionへデプロイ
-******
+## Error Log
+### nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
-# MEMO
-## nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
-- [ECSの仕様で非特権ユーザを使用したコンテナでは80番ポートが使えないっぽい](https://repost.aws/questions/QU1bCV9wT4T5iBrrP1c2ISfg/container-cannot-bind-to-port-80-running-as-non-root-user-on-ecs-fargate) --> つまり,localのdockerで80でサービスが起動できてもECSだと権限エラーになる。このため,コンテナで開放するportは8080としている(ALBに対して8080がマッピングされているためブラウザからは80でアクセスできる)。
+- [ECS の仕様で非特権ユーザを使用したコンテナでは 80 番ポートが使えないっぽい](https://repost.aws/questions/QU1bCV9wT4T5iBrrP1c2ISfg/container-cannot-bind-to-port-80-running-as-non-root-user-on-ecs-fargate) --> つまり,local の docker で 80 でサービスが起動できても ECS だと権限エラーになる。このため,コンテナで開放する port は 8080 としている(ALB に対して 8080 がマッピングされているためブラウザからは 80 でアクセスできる)。
diff --git a/doc/pull_request_template.md b/doc/pull_request_template.md
index c078f95..7546f82 100644
--- a/doc/pull_request_template.md
+++ b/doc/pull_request_template.md
@@ -1,5 +1,5 @@
-### Change Description
+# Change Description
+## Reference
-### Reference
-- [Issue link]()
+- [Issue link](example.com)
diff --git a/doc/tools_doc/git-secret.md b/doc/tools_doc/git-secret.md
index 774a891..412e193 100644
--- a/doc/tools_doc/git-secret.md
+++ b/doc/tools_doc/git-secret.md
@@ -1,6 +1,8 @@
# git secrets
+
- パスワードのシークレットと思われる文字列を検知する。
-- pre-commitを使って実装されているらしい。
+- pre-commit を使って実装されているらしい。
+
## 環境構築
```shell
@@ -12,7 +14,11 @@ ls
sudo make install
git secrets # 動作確認
```
+
+---
+
## 使用方法
+
- プロジェクトに移動して以下を実行
```shell
@@ -21,4 +27,5 @@ git secrets --register-aws # awsのクレデンシャル検知ルールを登録
git secrets --list # 設定を確認
git secrets --scan # スキャン
```
-- また,コミットしようとした際にもscanが実行されており,特定の文字列が検知されるとコミットできなくなる。
+
+- また,コミットしようとした際にも scan が実行されており,特定の文字列が検知されるとコミットできなくなる。
diff --git a/doc/tools_doc/hadolint.md b/doc/tools_doc/hadolint.md
index bf74972..1695fa5 100644
--- a/doc/tools_doc/hadolint.md
+++ b/doc/tools_doc/hadolint.md
@@ -1,9 +1,11 @@
-# hadolintの使い方
+# hadolint の使い方
+
## 概要
+
> [hadolint github](https://github.com/hadolint/hadolint)
-Dockerfileを綺麗にするツール。
-******
+> Dockerfile を綺麗にするツール。
+---
## install
@@ -11,8 +13,8 @@ Dockerfileを綺麗にするツール。
sudo wget -O /bin/hadolint https://github.com/hadolint/hadolint/releases/download/v2.10.0/hadolint-Linux-x86_64
sudo chmod 755 /usr/bin/hadolint
```
-******
+---
## 実行
@@ -23,8 +25,9 @@ hadolint --trusted-registry grc.io ./myapp/Dockerfile # --trusted-registryに登
./myapp/Dockerfile:1 DL3026 error: Use only an allowed registry in the FROM image
./myapp/Dockerfile:7 DL3059 info: Multiple consecutive `RUN` instructions. Consider consolidation.
```
-******
+---
## エラー例
-- /Dockerfile:7 DL3059 info: Multiple consecutive `RUN` instructions. Consider consolidation. --> RUNを一つにまとめたほうがイメージのレイヤーを最小化できる。
+
+- /Dockerfile:7 DL3059 info: Multiple consecutive `RUN` instructions. Consider consolidation. --> RUN を一つにまとめたほうがイメージのレイヤーを最小化できる。
diff --git a/doc/tools_doc/pre-commit.md b/doc/tools_doc/pre-commit.md
index e6e8ec9..e61065d 100644
--- a/doc/tools_doc/pre-commit.md
+++ b/doc/tools_doc/pre-commit.md
@@ -1,8 +1,10 @@
# pre-commit
+
## 概要
-- gitのコミット時にlinter等を実行させるのに使う。
-******
+- git のコミット時に linter 等を実行させるのに使う。
+
+---
## インストール
@@ -11,66 +13,80 @@ pip install pre-commit
pre-commit sample-config > .pre-commit-config.yaml
pre-commit install
```
+
### インストール時のエラー
-- `AttributeError: module 'virtualenv.create.via_global_ref.builtin.cpython.mac_os' has no attribute 'CPython2macOsFramework'`がでている。これはvirtualenvに関連するエラーなのでupgradeしたりしてみる。
-- [pipenvの初期化時に発生するエラー](https://qiita.com/akis1215/items/11c9ca506cac8bcde5d9)を参考に入れ直したら直った。
+
+- `AttributeError: module 'virtualenv.create.via_global_ref.builtin.cpython.mac_os' has no attribute 'CPython2macOsFramework'`がでている。これは virtualenv に関連するエラーなので upgrade したりしてみる。
+- [pipenv の初期化時に発生するエラー](https://qiita.com/akis1215/items/11c9ca506cac8bcde5d9)を参考に入れ直したら直った。
```shell
sudo pip3 uninstall virtualenv
sudo pip3 install virtualenv
```
-******
+---
## 使い方
-- [pre-commitを使うサンプル](https://zenn.dev/yiskw713/articles/3c3b4022f3e3f22d276d)を見ながら設定する。
-- **linterからエラーがでるとコミットできないので注意**
-- .pre-commit-config.yamlをいじって`pre-commit install`してgit commitすると動作が確認できる。
+
+- [pre-commit を使うサンプル](https://zenn.dev/yiskw713/articles/3c3b4022f3e3f22d276d)を見ながら設定する。
+- **linter からエラーがでるとコミットできないので注意**
+- .pre-commit-config.yaml をいじって`pre-commit install`して git commit すると動作が確認できる。
- **デフォルトでは変更されたファイルに対してのみしか実行**されないので注意が必用。全体のチェックをしたいなら手動で行える。
```shell
pre-commit run --all-files
```
-- 以下はhadolint(Dockerfileのスキャン)を実行する例
-```
+- 以下は hadolint(Dockerfile のスキャン)を実行する.pre-commit-config.yaml の例
+
+```yaml
default_stages: [commit]
repos:
-- repo: https://github.com/pre-commit/pre-commit-hooks
+ - repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
- - id: trailing-whitespace
- - id: end-of-file-fixer
- - id: check-yaml
- - id: check-added-large-files
-- repo: https://github.com/hadolint/hadolint
+ - id: trailing-whitespace
+ - id: end-of-file-fixer
+ - id: check-yaml
+ - id: check-added-large-files
+ - repo: https://github.com/hadolint/hadolint
rev: v2.12.0
hooks:
- - id: hadolint
+ - id: hadolint
args: [--trusted-registry, grc.io, ./myapp/Dockerfile]
```
### よく使うオプション
-> 詳細は[pre-commit公式ドキュメントを見る](https://pre-commit.com/)
-- id: [対応しているhook一覧](https://pre-commit.com/hooks.html)を見るとわかる?コマンド名をいれておけばよさそう?
-- rev: latestは指定できないのでメンテが必用そう
-- files: スキャン対象を正規表現で絞れる。**スキャン対象のファイルが見つからない時につけても意味ない。**パスはidのargsとかで指定する。
+
+> 詳細は[pre-commit 公式ドキュメントを見る](https://pre-commit.com/)
+
+- id: [対応している hook 一覧](https://pre-commit.com/hooks.html)を見るとわかる?コマンド名をいれておけばよさそう?
+- rev: latest は指定できないのでメンテが必用そう
+- files: スキャン対象を正規表現で絞れる。**スキャン対象のファイルが見つからない時につけても意味ない。**パスは id の args とかで指定する。
- exclude: スキャン対象から除外するものを指定できる。
-### eslintを使う
+### eslint を使う
-```
+- .pre-commit-config.yaml
+
+```yaml
default_stages: [commit]
repos:
-- repo: https://github.com/pre-commit/mirrors-eslint
+ - repo: https://github.com/pre-commit/mirrors-eslint
rev: v8.54.0 # 一番新しいやつにした
hooks:
- - id: eslint
- files: \.[jt]sx?$ # *.js, *.jsx, *.ts and *.tsx
+ - id: eslint
+ files: \.[jt]sx?$ # *.js, *.jsx, *.ts and *.tsx
+```
+
+> [!NOTE]
+> node が古すぎると動かないみたいなので新しい node に変更して対応した。
+
+```shell
+pre-commit run --all-files
+ERROR: npm v9.7.1 is known not to run on Node.js v10.19.0. This version of npm supports the following node versions: `^14.17.0 || ^16.13.0 || >=18.0.0`. You can find the latest version at https://nodejs.org/.
+ERROR:/usr/local/lib/node_modules/npm/lib/utils/exit-handler.js:19 const hasLoadedNpm = npm?.config.loaded
```
-- nodeが古すぎると動かないみたいなので新しいnodeに変更して対応した。
-> ERROR: npm v9.7.1 is known not to run on Node.js v10.19.0. This version of npm supports the following node versions: `^14.17.0 || ^16.13.0 || >=18.0.0`. You can find the latest version at https://nodejs.org/.
-> ERROR:/usr/local/lib/node_modules/npm/lib/utils/exit-handler.js:19 const hasLoadedNpm = npm?.config.loaded
```shell
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash # nvmインストール
@@ -85,13 +101,14 @@ node --version
pre-commit install
pre-commit run -a
```
-******
+---
## エラー
-- mdの最後が## testのような形で終わっており,内容がないとエラーになる
-```
+- md の最後が## test のような形で終わっており,内容がないとエラーになる
+
+```shell
Fix End of Files.........................................................Failed
- hook id: end-of-file-fixer
- exit code: 1
@@ -99,8 +116,9 @@ Fix End of Files.........................................................Failed
Fixing todo.md
```
-******
+---
## Reference
-- [対応しているhook一覧](https://pre-commit.com/hooks.html)
+
+- [対応している hook 一覧](https://pre-commit.com/hooks.html)
diff --git a/doc/tools_doc/semgrep.md b/doc/tools_doc/semgrep.md
index 2f7c522..912593d 100644
--- a/doc/tools_doc/semgrep.md
+++ b/doc/tools_doc/semgrep.md
@@ -1,4 +1,5 @@
# semgrep
+
## semgrep install
```shell
@@ -11,13 +12,15 @@ semgrep ./frontend-app
```
### VSCode Extensions
-- 最初にSign inする必用がある。
-- Ctrl shift pで実行する。
-### Github Actionsでsemgrepを使う。
-- 事前にリポジトリの設定から --> Code and automation --> Actions --> GeneralのWorkflow permissionsをRead and write permissionsに変更しておく必用がある。
+- 最初に Sign in する必用がある。
+- Ctrl shift p で実行する。
-```
+### Github Actions で semgrep を使う
+
+- 事前にリポジトリの設定から --> Code and automation --> Actions --> General の Workflow permissions を Read and write permissions に変更しておく必用がある。
+
+```json
name: Semgrep Full Scan
on:
@@ -56,8 +59,9 @@ jobs:
sarif_file: report.sarif
category: semgrep
```
-******
+---
## 参考
+
- [semgrep github actions](https://0xdbe.github.io/GitHub-HowToEnableCodeScanningWithSemgrep/)
diff --git a/doc/tools_doc/trivy.md b/doc/tools_doc/trivy.md
index 0391d2b..57deda4 100644
--- a/doc/tools_doc/trivy.md
+++ b/doc/tools_doc/trivy.md
@@ -1,5 +1,7 @@
# Tryvy
+
## インストール
+
> [インストール方法](https://aquasecurity.github.io/trivy/v0.18.3/installation/)
```shell
@@ -9,35 +11,42 @@ echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main |
sudo apt-get update
sudo apt-get install trivy
```
-******
+---
## オプション
-- --vuln-typeはosとlibraryが選べる。指定しないと両方になる。これは絞らなくても良さそう。
-- --no-progress: 進捗バーを表示しない。CI/CDで出力をシンプルにする。
-- --exit-code 1: スキャンで脆弱性が出た時にステータスコード1を返すためCI/CDツールなどで結果を評価しやすくなる。
+
+- --vuln-type は os と library が選べる。指定しないと両方になる。これは絞らなくても良さそう。
+- --no-progress: 進捗バーを表示しない。CI/CD で出力をシンプルにする。
+- --exit-code 1: スキャンで脆弱性が出た時にステータスコード 1 を返すため CI/CD ツールなどで結果を評価しやすくなる。
- --format table: 結果をテーブル形式で表示
- fs: ファイルスキャンモード
-- --scanners vuln: 脆弱性スキャンモードを指定。Secrets(デフォルトon)やmisconfig(デフォルトoff),license(デフォルトoff)なども指定できる
+- --scanners vuln: 脆弱性スキャンモードを指定。Secrets(デフォルト on)や misconfig(デフォルト off),license(デフォルト off)なども指定できる
- --vuln-type library: スキャン対象をライブラリに限定する。
-******
+---
## 使用したコマンド
-> [trivyドキュメント](https://aquasecurity.github.io/trivy/v0.22.0/)
-> .trivyignoreファイルにCVE番号などを記述することで抑止できる。
+
+> [trivy ドキュメント](https://aquasecurity.github.io/trivy/v0.22.0/)
+> .trivyignore ファイルに CVE 番号などを記述することで抑止できる。
+
### イメージスキャン
```shell
trivy image --exit-code 1 --vuln-type os --ignorefile .trivyignore --no-progress --format table -o container-scanning-report.txt --severity CRITICAL,HIGH react-app:latest
```
-### package.jsonのスキャン
+
+### package.json のスキャン
```shell
trivy fs --exit-code 1 --scanners vuln --vuln-type library --ignorefile .trivyignore --no-progress --format table -o sca-report.txt --severity CRITICAL,HIGH package.json
```
+
> [他のサブコマンドが知りたくなったらここ](https://aquasecurity.github.io/trivy/v0.22.0/getting-started/cli/)
-### sbom形式で出力する
+
+### sbom 形式で出力する
+
#### ライブラリの脆弱性を調べる(package.json)
```shell
@@ -47,12 +56,13 @@ vim package-lock.json # 任意のバージョンに書き換え
trivy fs . --format cyclonedx --output test.json # sbom形式で出力
trivy sbom test.json # sbomを解釈
```
-#### docker imageのスキャン
-- Docker imageで使っているライブラリの脆弱性を探す。
-- Dockerfileを用意する
+#### docker image のスキャン
-```
+- Docker image で使っているライブラリの脆弱性を探す。
+- Dockerfile を用意する
+
+```shell
FROM registry.access.redhad.com/ubi8/ubi:8.2
RUN dnf update -y
@@ -70,11 +80,12 @@ sudo docker buildt -t testimage .
sudo trivy image testimage --format cyclonedx --output test.json
trivy sbom test.json
```
-******
+---
## エラー
-- imageスキャンでコンテナを実行していない(docker container psがない)
+
+- image スキャンでコンテナを実行していない(docker container ps がない)
```shell
2023-12-05T22:31:00.272+0900 FATAL image scan error: scan error: unable to initialize a scanner: unable to initialize a docker scanner: 4 errors occurred:
@@ -83,8 +94,9 @@ trivy sbom test.json
* unable to initialize Podman client: no podman socket found: stat podman/podman.sock: no such file or directory
* GET https://index.docker.io/v2/library/react/manifests/latest: UNAUTHORIZED: authentication required; [map[Action:pull Class: Name:library/react Type:repository]]
```
-******
+---
## Reference
-- [CodeBuildでTrivyを実行](https://tukunen13.hatenablog.jp/entry/2021/12/20/000000)
+
+- [CodeBuild で Trivy を実行](https://tukunen13.hatenablog.jp/entry/2021/12/20/000000)
diff --git a/pre-commit-test-local.sh b/pre-commit-test-local.sh
new file mode 100644
index 0000000..331311d
--- /dev/null
+++ b/pre-commit-test-local.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+pre-commit install
+pre-commit run -a
diff --git a/public/favicon.ico b/public/favicon.ico
deleted file mode 100644
index a11777cc471a4344702741ab1c8a588998b1311a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 3870
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
baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@