From ac14adab01389dac055833e81a3ea6ebeabe68e8 Mon Sep 17 00:00:00 2001 From: Nik Afiq Date: Thu, 31 Oct 2024 11:59:51 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=80=E3=82=A4=E3=82=B8=E3=82=A7=E3=82=B9?= =?UTF-8?q?=E3=83=88=E7=A2=BA=E8=AA=8D=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vulnerability-scan/README.md | 31 +++++++---- .../validate-prd-lambda-digest.sh | 47 ++++++++++++++++ .../validate-stg-latest-scanpoint-digest.sh | 51 ++++++++++++++++++ .../validate-stg-prd-ecr-digest.sh | 54 +++++++++++++++++++ 4 files changed, 172 insertions(+), 11 deletions(-) create mode 100644 vulnerability-scan/validate-image-digest/validate-prd-lambda-digest.sh create mode 100644 vulnerability-scan/validate-image-digest/validate-stg-latest-scanpoint-digest.sh create mode 100644 vulnerability-scan/validate-image-digest/validate-stg-prd-ecr-digest.sh diff --git a/vulnerability-scan/README.md b/vulnerability-scan/README.md index 9eb3fd2e..daaf817b 100644 --- a/vulnerability-scan/README.md +++ b/vulnerability-scan/README.md @@ -35,6 +35,11 @@ bash retag-push-latest.sh - 例:`bash retag-dataimport.sh` - スクリプトを強制停止したい場合、`Ctrl + C`で停止できる +### チェックスクリプト実行方法 + +- `cd validate-image-digest`コマンドでディレクトリ変更する +‐ `bash <スクリプト名>`で実行する + ## フォルダ構成 ├── build-push-scanpoint.sh -- 全ECRモジュールをアップデート、Dockerイメージにビルドし、プッシュするスクリプト @@ -51,17 +56,21 @@ bash retag-push-latest.sh │ ├── build-jskult-webapp.sh -- 実消化&アルトマークWebアプリケーション脆弱性スキャンスクリプト | ├── build-export-dbdump.sh -- DBダンプ取得機能脆弱性スキャンスクリプト | └── build-transfer-medpass-data.sh -- medパス社データ転送機能脆弱性スキャンスクリプト -└── retag-push-latest - ├── retag-dataimport.sh -- データ登録機能の再タグ本番環境にプッシュスクリプト - ├── retag-sap-data-decrypt.sh -- SAPデータ登録 SAPデータ復号化機能再タグ本番環境にプッシュスクリプト - ├── retag-check-view-security-option.sh -- Viewセキュリティオプションチェック機能再タグ本番環境にプッシュスクリプト - ├── retag-crm-datafetch.sh -- CRMデータ連携 CRMデータ取得機能再タグ本番環境にプッシュスクリプト - ├── retag-jskult-dbdump.sh -- 実消化&アルトマーク日次バッチ実行前dump取得機能再タグ本番環境にプッシュスクリプト - ├── retag-jskult-batch-daily.sh -- 実消化&アルトマーク日次バッチ機能再タグ本番環境にプッシュスクリプト - ├── retag-jskult-batch-laundering.sh -- 実消化&アルトマーク週次バッチ機能再タグ本番環境にプッシュスクリプト - ├── retag-jskult-webapp.sh -- 実消化&アルトマークWebアプリケーション再タグ本番環境にプッシュスクリプト - ├── retag-export-dbdump.sh -- DBダンプ取得機能再タグ本番環境にプッシュスクリプト - └── retag-transfer-medpass-data.sh -- medパス社データ転送機能再タグ本番環境にプッシュスクリプト +├── retag-push-latest +| ├── retag-dataimport.sh -- データ登録機能の再タグ本番環境にプッシュスクリプト +| ├── retag-sap-data-decrypt.sh -- SAPデータ登録 SAPデータ復号化機能再タグ本番環境にプッシュスクリプト +| ├── retag-check-view-security-option.sh -- Viewセキュリティオプションチェック機能再タグ本番環境にプッシュスクリプト +| ├── retag-crm-datafetch.sh -- CRMデータ連携 CRMデータ取得機能再タグ本番環境にプッシュスクリプト +| ├── retag-jskult-dbdump.sh -- 実消化&アルトマーク日次バッチ実行前dump取得機能再タグ本番環境にプッシュスクリプト +| ├── retag-jskult-batch-daily.sh -- 実消化&アルトマーク日次バッチ機能再タグ本番環境にプッシュスクリプト +| ├── retag-jskult-batch-laundering.sh -- 実消化&アルトマーク週次バッチ機能再タグ本番環境にプッシュスクリプト +| ├── retag-jskult-webapp.sh -- 実消化&アルトマークWebアプリケーション再タグ本番環境にプッシュスクリプト +| ├── retag-export-dbdump.sh -- DBダンプ取得機能再タグ本番環境にプッシュスクリプト +| └── retag-transfer-medpass-data.sh -- medパス社データ転送機能再タグ本番環境にプッシュスクリプト +└── validate-image-digest + ├── validate-prd-lambda-digest.sh -- LambdaとECRのダイジェストチェックスクリプト + ├── validate-stg-latest-scanpoint-digest.sh -- ステージングlatestとscan-pointのダイジェストチェックスクリプト + └── validate-stg-prd-ecr-digest.sh -- 本番とステージングのダイジェストチェックスクリプト ## 作成タイミングと作成方法 diff --git a/vulnerability-scan/validate-image-digest/validate-prd-lambda-digest.sh b/vulnerability-scan/validate-image-digest/validate-prd-lambda-digest.sh new file mode 100644 index 00000000..4959887d --- /dev/null +++ b/vulnerability-scan/validate-image-digest/validate-prd-lambda-digest.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +# AWSがログインしているかどうかをチェックする関数 +function check_aws_login() { + if ! aws sts get-caller-identity &>/dev/null; then + echo "❌ AWS credentials are not configured or are incorrect. Exiting." + exit 1 + fi +} + +# ログインチェックを実行 +check_aws_login + +# プロダクションECRとLambda名のペアの配列 +resources=( + "mbj-newdwh2021-product-sap-data-decrypt mbj-newdwh2021-product-lambda-sap-data-decrypt" + "mbj-newdwh2021-product-check-view-security-option-ecr mbj-newdwh2021-product-lambda-check-view-security-option" + "mbj-newdwh2021-product-transfer-medpass-data-ecr mbj-newdwh2021-product-lambda-transfer-medpass-data" +) + +# 各リソースをループ +for resource_set in "${resources[@]}"; do + # 本番環境のECRとLambda関数名を分割 + product_repo=$(echo $resource_set | awk '{print $1}') + lambda_function=$(echo $resource_set | awk '{print $2}') + + # 本番環境のlatestタグのダイジェストを取得 + product_digest=$(aws ecr describe-images --repository-name "$product_repo" --image-ids imageTag=latest --query 'imageDetails[0].imageDigest' --output text 2>/dev/null) + + # Lambda関数のダイジェストを取得 + lambda_digest=$(aws lambda get-function --function-name "$lambda_function" --query 'Code.ImageUri' --output text 2>/dev/null | sed 's/.*@//') + + # 両方のダイジェストが正常に取得されたかチェック + if [[ -z "$product_digest" || -z "$lambda_digest" ]]; then + echo "Failed to retrieve digest for $product_repo or $lambda_function." + continue + fi + + # ダイジェストを比較 + if [[ "$product_digest" == "$lambda_digest" ]]; then + echo "✅ Digests match for product ECR and Lambda in $product_repo." + else + echo "❌ Digests do not match for $product_repo and $lambda_function." + echo "Product Digest: $product_digest" + echo "Lambda Digest: $lambda_digest" + fi +done diff --git a/vulnerability-scan/validate-image-digest/validate-stg-latest-scanpoint-digest.sh b/vulnerability-scan/validate-image-digest/validate-stg-latest-scanpoint-digest.sh new file mode 100644 index 00000000..66915824 --- /dev/null +++ b/vulnerability-scan/validate-image-digest/validate-stg-latest-scanpoint-digest.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +# AWSがログインしているかどうかをチェックする関数 +function check_aws_login() { + if ! aws sts get-caller-identity &>/dev/null; then + echo "❌ AWS credentials are not configured or are incorrect. Exiting." + exit 1 + fi +} + +# ログインチェックを実行 +check_aws_login + +# ステージングリポジトリ名の配列 +staging_repositories=( + "mbj-newdwh2021-staging-ecr" + "mbj-newdwh2021-staging-sap-data-decrypt" + "mbj-newdwh2021-staging-check-view-security-option-ecr" + "mbj-newdwh2021-staging-crm-datafetch-ecr" + "mbj-newdwh2021-staging-jskult-dbdump-ecr" + "mbj-newdwh2021-staging-jskult-batch-daily-ecr" + "mbj-newdwh2021-staging-jskult-batch-laundering-ecr" + "mbj-newdwh2021-staging-jskult-webapp-ecr" + "mbj-newdwh2021-staging-export-dbdump-ecr" + "mbj-newdwh2021-staging-transfer-medpass-data-ecr" +) + +# 各ステージングリポジトリをループ +for staging_repo in "${staging_repositories[@]}"; do + + # ステージングのlatestタグのダイジェストを取得 + latest_digest=$(aws ecr describe-images --repository-name "$staging_repo" --image-ids imageTag=latest --query 'imageDetails[0].imageDigest' --output text 2>/dev/null) + + # ステージングのscan-pointのダイジェストを取得 + scan_point_digest=$(aws ecr describe-images --repository-name "$staging_repo" --image-ids imageTag=scan-point --query 'imageDetails[0].imageDigest' --output text 2>/dev/null) + + # 両方のダイジェストが正常に取得されたかチェック + if [[ -z "$latest_digest" || -z "$scan_point_digest" ]]; then + echo "Failed to retrieve digest for 'latest' or 'scan-point' tag in $staging_repo." + continue + fi + + # ダイジェストを比較 + if [[ "$latest_digest" == "$scan_point_digest" ]]; then + echo "✅ Digests match for 'latest' and 'scan-point' tags in $staging_repo." + else + echo "❌ Digests do not match for 'latest' and 'scan-point' tags in $staging_repo." + echo "Latest Tag Digest: $latest_digest" + echo "Scan-Point Tag Digest: $scan_point_digest" + fi +done diff --git a/vulnerability-scan/validate-image-digest/validate-stg-prd-ecr-digest.sh b/vulnerability-scan/validate-image-digest/validate-stg-prd-ecr-digest.sh new file mode 100644 index 00000000..740b46f5 --- /dev/null +++ b/vulnerability-scan/validate-image-digest/validate-stg-prd-ecr-digest.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +# AWSがログインしているかどうかをチェックする関数 +function check_aws_login() { + if ! aws sts get-caller-identity &>/dev/null; then + echo "❌ AWS credentials are not configured or are incorrect. Exiting." + exit 1 + fi +} + +# ログインチェックを実行 +check_aws_login + +# リポジトリ名のペアの配列(ステージングと本番) +repositories=( + "mbj-newdwh2021-staging-ecr mbj-newdwh2021-product-ecr" + "mbj-newdwh2021-staging-sap-data-decrypt mbj-newdwh2021-product-sap-data-decrypt" + "mbj-newdwh2021-staging-check-view-security-option-ecr mbj-newdwh2021-product-check-view-security-option-ecr" + "mbj-newdwh2021-staging-crm-datafetch-ecr mbj-newdwh2021-product-crm-datafetch-ecr" + "mbj-newdwh2021-staging-jskult-dbdump-ecr mbj-newdwh2021-product-jskult-dbdump-ecr" + "mbj-newdwh2021-staging-jskult-batch-daily-ecr mbj-newdwh2021-product-jskult-batch-daily-ecr" + "mbj-newdwh2021-staging-jskult-batch-laundering-ecr mbj-newdwh2021-product-jskult-batch-laundering-ecr" + "mbj-newdwh2021-staging-jskult-webapp-ecr mbj-newdwh2021-product-jskult-webapp-ecr" + "mbj-newdwh2021-staging-export-dbdump-ecr mbj-newdwh2021-product-export-dbdump-ecr" + "mbj-newdwh2021-staging-transfer-medpass-data-ecr mbj-newdwh2021-product-transfer-medpass-data-ecr" +) + +# 各ペアのリポジトリをループ +for repo_pair in "${repositories[@]}"; do + # ステージングと本番のリポジトリ名を分割 + staging_repo=$(echo $repo_pair | awk '{print $1}') + product_repo=$(echo $repo_pair | awk '{print $2}') + + # ステージングのダイジェストを取得 + staging_digest=$(aws ecr describe-images --repository-name "$staging_repo" --image-ids imageTag=latest --query 'imageDetails[0].imageDigest' --output text 2>/dev/null) + + # 本番環境のダイジェストを取得 + product_digest=$(aws ecr describe-images --repository-name "$product_repo" --image-ids imageTag=latest --query 'imageDetails[0].imageDigest' --output text 2>/dev/null) + + # 両方のダイジェストが正常に取得されたかチェック + if [[ -z "$staging_digest" || -z "$product_digest" ]]; then + echo "Failed to retrieve digest for either $staging_repo or $product_repo." + continue + fi + + # ダイジェストを比較 + if [[ "$staging_digest" == "$product_digest" ]]; then + echo "✅ Digests match for $staging_repo and $product_repo." + else + echo "❌ Digests do not match for $staging_repo and $product_repo." + echo "Staging Digest: $staging_digest" + echo "Product Digest: $product_digest" + fi +done