Skip to content

Commit

Permalink
add git secret
Browse files Browse the repository at this point in the history
  • Loading branch information
Ryosuke Tomita committed Dec 16, 2023
1 parent 3329358 commit 2ca047a
Show file tree
Hide file tree
Showing 8 changed files with 97 additions and 12 deletions.
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ repos:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
# - id: check-added-large-files
exclude: '.*\.md$' # mdでend-of-file-fixerが謎の挙動をするので除外
# hadolint
- repo: https://github.com/hadolint/hadolint
Expand Down
83 changes: 72 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,43 @@
- [ENVIRONMENT](#ENVIRONMENT)
- [PREPARING](#PREPARING)
- [HOW TO USE](#HOW-TO-USE)
- [REFERENCE](#REFERENCE)
- [MEMO](#MEMO)
******


# ENVIRONMENT
- AWS
- Github Actions
- node:20
******

# ABOUT
Sample for DevSecOps environment.
See [./doc/tools_doc](./doc/tools_doc)
## AWS
- app-infrastructure-roles
![app-infrastructure-roles](./doc/fig/cfn/app-infrastructure-roles.png)
- app-infrastructure
![app-infrastructure](./doc/fig/cfn/app-infrastructure.png)
- environment
![env](./doc/fig/cfn/env.png)
- service
![svc](./doc/fig/cfn/svc.png)
- pipeline
![pipeline](./doc/fig/cfn/pipeline.png)
******


# ENVIRONMENT
- AWS
- Github Actions
- node:20
## Automation Tools
See [./doc/tools_doc](./doc/tools_doc)
### local
- pre-commit,git-secret
### GitHub Actions
- semgrep
- jest
- trivy(dependency check)

### AWS CodePipeline
- trivy(image scan)
******


Expand All @@ -34,16 +57,17 @@ application: react-app
```
### development用のenvironmentとserviceをまとめて作成する。
- amd64を指定しないとなぜかビルドエラーになる。
- 名前は任意だが,dev-envとdev-svcとした。
- TypeはLoad Balancerを選択した。

```shell
DOCKER_DEFAULT_PLATFORM=linux/amd64 copilot init
```
- 名前は任意だが,dev-envとdev-svcとした。
- copilot/以下のファイルを編集することで設定を変更できる。
- 新しいVPCや,ECSのCluster,Load Balancerや権限周りが作成される。

### production用のenvironmentとserviceをまとめて作成する。
- vpcをいくつも作りたくない場合はenvironment単体で作成すると既存リソースの使用が選択できる。
- vpcをいくつも作りたくない場合はenvironment単体で作成すると既存リソースの使用が選択できる(VPC含めて完全新規にしたいなら上の手順を繰り返す)

```shell
copilot env init # prod-envと命名してcopilot-react-app-dev-vpcを選択する。
Expand Down Expand Up @@ -93,21 +117,58 @@ copilot env deploy
DOCKER_DEFAULT_PLATFORM=linux/amd64 copilot svc init
copilot svc deploy
```
- ブラウザからアクセスできるか試してみる。
```shell
copilot svc show # urlが出てくるので
```
### CodePipelineの作成
- 名前は任意だが,自分はreact-app-pipelineとした。
```shell
copilot pipeline init
```
- [manifest.yml](./copilot/pipelines/react-app-pipeline/manifest.yml)を編集してdevelopmentでサービス開始後にユーザが承認した後にproductionにデプロイされるようにする。
```
requires_approval: true
```
- 先にgithubに設定ファイルをアップロードしてからpipelineをデプロイする
```shell
git add .
git commit -m "add pipeline"
git push
copilot pipeline deploy
```
- ACTION REQUIREDが出るのでURLにアクセスし,pendingになっているpipelineとGitHubを接続する設定を追加する。
- 一度pipelineをデプロイすると以後,指定したGitHubのブランチにマージされるたびにCode Pipelineを通してデプロイが進むようになる。
******
## その他の設定
- ローカルでのインストールが必須なのはpre-commitくらい
- ローカルでのセットアップが必用なのはgit-secretsとpre-commitくらい
```shell
cd devsecops-demo-aws-ecs
pre-commit install
git secrets --install
git secrets --register-aws # awsのクレデンシャル検知ルールを登録
```
- VSCodeのExtensionsもお好みで。Dockerのhadolintはおすすめ。
- GitHub Actionsがスキャン結果のファイルをアップロードできるように権限をつける。詳細は[semgrepのyaml](./.github/workflows/react-semgrep.yaml)を参照。
******
# HOW TO USE
# REFERENCE
- [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だと権限エラーになる。
[PREPARING](#PREPARING)の設定後にはGitHubにコードをコミットしたり,pushするだけ。
******
# MEMO
- [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でアクセスできる)。
> nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
Binary file added doc/fig/cfn/app-infrastructure-roles.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/fig/cfn/app-infrastructure.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/fig/cfn/env.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/fig/cfn/pipeline.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/fig/cfn/svc.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
24 changes: 24 additions & 0 deletions doc/tools_doc/git-secret.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# git secrets
- パスワードのシークレットと思われる文字列を検知する。
- pre-commitを使って実装されているらしい。
## 環境構築

```shell
cd ~/Downloads
wget https://github.com/awslabs/git-secrets/archive/refs/tags/1.3.0.tar.gz
tar zxvf 1.3.0.tar.gz
cd git-secrets-1.3.0/
ls
sudo make install
git secrets # 動作確認
```
## 使用方法
- プロジェクトに移動して以下を実行

```shell
git secrets --install
git secrets --register-aws # awsのクレデンシャル検知ルールを登録
git secrets --list # 設定を確認
git secrets --scan # スキャン
```
- また,コミットしようとした際にもscanが実行されており,特定の文字列が検知されるとコミットできなくなる。

0 comments on commit 2ca047a

Please sign in to comment.