🆕 New Guides Added: - GitHub Actions complete guide (CI/CD automation) - GitHub Security comprehensive guide (enterprise security) - GitHub Pages detailed guide (website publishing) 🔗 Navigation Improvements: - Updated index.md with all 7 guides - Added cross-navigation between all guides - Enhanced learning paths for different user types - Comprehensive learning flow diagrams 📚 Content Highlights: - Jenkins/CircleCI migration strategies - Enterprise security best practices - WordPress to GitHub Pages migration - Advanced automation workflows - Complete external tool replacements 🎯 User Experience: - Role-based learning recommendations - Consistent navigation structure - Progressive learning paths - Cross-reference linking 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1368 lines
No EOL
43 KiB
Markdown
1368 lines
No EOL
43 KiB
Markdown
---
|
||
layout: default
|
||
title: "GitHub Security完全ガイド"
|
||
description: "企業レベルのセキュリティ対策とGitHub Advanced Security完全活用法"
|
||
---
|
||
|
||
# 🛡️ GitHub Security - 企業レベルの総合セキュリティ対策
|
||
|
||
GitHub標準・Advanced Securityを活用して、Veracode・SonarQube・WhiteSource等の外部セキュリティツールに依存しない、統合されたセキュリティ環境を構築する完全ガイド。コードからインフラまで、開発ライフサイクル全体の包括的なセキュリティ対策を実現します。
|
||
|
||
## 🎯 学習目標
|
||
|
||
- GitHub Security機能の全体理解と戦略的活用
|
||
- Advanced Security(CodeQL・Secret Scanning・Dependabot)の実践的運用
|
||
- セキュリティポリシー・コンプライアンス対応
|
||
- 外部セキュリティツールからの移行戦略
|
||
- インシデント対応・セキュリティ監視の自動化
|
||
|
||
## 📚 目次
|
||
|
||
1. [GitHub Security 概要](#1-github-security-概要)
|
||
2. [コードセキュリティ分析](#2-コードセキュリティ分析)
|
||
3. [依存関係・脆弱性管理](#3-依存関係脆弱性管理)
|
||
4. [シークレット管理・漏洩防止](#4-シークレット管理漏洩防止)
|
||
5. [リポジトリ・組織セキュリティ](#5-リポジトリ組織セキュリティ)
|
||
6. [コンプライアンス・監査対応](#6-コンプライアンス監査対応)
|
||
|
||
---
|
||
|
||
## 1. GitHub Security 概要
|
||
|
||
### 🏗️ GitHub Security アーキテクチャ
|
||
|
||
#### セキュリティ機能の階層構造
|
||
```mermaid
|
||
graph TB
|
||
A[GitHub Security Platform]
|
||
|
||
A --> B[Code Security]
|
||
A --> C[Infrastructure Security]
|
||
A --> D[Access Control]
|
||
A --> E[Compliance]
|
||
|
||
B --> B1[CodeQL Analysis]
|
||
B --> B2[Secret Scanning]
|
||
B --> B3[Dependency Review]
|
||
|
||
C --> C1[Container Scanning]
|
||
C --> C2[Infrastructure as Code]
|
||
C --> C3[Supply Chain Security]
|
||
|
||
D --> D1[Authentication]
|
||
D --> D2[Authorization]
|
||
D --> D3[Audit Logging]
|
||
|
||
E --> E1[Policy Enforcement]
|
||
E --> E2[Compliance Reports]
|
||
E --> E3[Risk Assessment]
|
||
```
|
||
|
||
#### セキュリティ機能比較
|
||
```markdown
|
||
### GitHub Security vs 外部ツール比較
|
||
|
||
| 機能カテゴリ | GitHub (標準) | GitHub Advanced | Veracode | SonarQube | WhiteSource |
|
||
|--------------|---------------|-----------------|----------|-----------|-------------|
|
||
| **静的解析** | ⚠️ | ✅ | ✅ | ✅ | ❌ |
|
||
| **依存関係スキャン** | ✅ | ✅ | ⚠️ | ⚠️ | ✅ |
|
||
| **シークレット検知** | ⚠️ | ✅ | ❌ | ❌ | ❌ |
|
||
| **コンテナスキャン** | ⚠️ | ✅ | ✅ | ❌ | ⚠️ |
|
||
| **ライセンス管理** | ✅ | ✅ | ❌ | ❌ | ✅ |
|
||
| **統合性** | ✅ | ✅ | ⚠️ | ⚠️ | ⚠️ |
|
||
| **コスト効率** | ✅ | ✅ | ❌ | ⚠️ | ❌ |
|
||
|
||
✅ 優秀 ⚠️ 部分対応 ❌ 対応なし
|
||
```
|
||
|
||
### 🚀 セキュリティ実装戦略
|
||
|
||
#### 段階的セキュリティ導入計画
|
||
```yaml
|
||
# セキュリティ実装ロードマップ
|
||
|
||
Phase 1: 基本セキュリティ設定 (Week 1-2)
|
||
- 基本認証・認可設定
|
||
- ブランチ保護ルール
|
||
- 基本的なDependabot設定
|
||
- シークレット管理の基礎
|
||
|
||
Phase 2: 高度なスキャン機能 (Week 3-4)
|
||
- CodeQL分析設定
|
||
- Advanced Secret Scanning
|
||
- 依存関係レビュー
|
||
- セキュリティアドバイザリ
|
||
|
||
Phase 3: 自動化・統合 (Week 5-6)
|
||
- CI/CDセキュリティ統合
|
||
- 自動修復ワークフロー
|
||
- アラート自動化
|
||
- レポート生成
|
||
|
||
Phase 4: 運用・監視 (Week 7-8)
|
||
- セキュリティ監視
|
||
- インシデント対応
|
||
- 継続的改善
|
||
- コンプライアンス対応
|
||
```
|
||
|
||
---
|
||
|
||
## 2. コードセキュリティ分析
|
||
|
||
### 🔍 CodeQL による高度な静的解析
|
||
|
||
#### CodeQL 基本設定
|
||
```yaml
|
||
# .github/workflows/codeql-analysis.yml
|
||
name: "CodeQL Advanced Analysis"
|
||
|
||
on:
|
||
push:
|
||
branches: [main, develop]
|
||
pull_request:
|
||
branches: [main]
|
||
schedule:
|
||
- cron: '30 2 * * 1,3,5' # 月水金 2:30
|
||
|
||
jobs:
|
||
analyze:
|
||
name: CodeQL Analysis
|
||
runs-on: ubuntu-latest
|
||
|
||
permissions:
|
||
actions: read
|
||
contents: read
|
||
security-events: write
|
||
|
||
strategy:
|
||
fail-fast: false
|
||
matrix:
|
||
language: ['javascript', 'python', 'java', 'csharp', 'cpp', 'go']
|
||
# 必要に応じて言語を調整
|
||
|
||
steps:
|
||
- name: Checkout repository
|
||
uses: actions/checkout@v4
|
||
|
||
- name: Initialize CodeQL
|
||
uses: github/codeql-action/init@v2
|
||
with:
|
||
languages: ${{ matrix.language }}
|
||
# カスタムクエリの指定
|
||
queries: +security-extended,security-and-quality
|
||
# 設定ファイルの指定
|
||
config-file: ./.github/codeql/codeql-config.yml
|
||
|
||
# 言語別のビルド設定
|
||
- name: Setup Node.js
|
||
if: matrix.language == 'javascript'
|
||
uses: actions/setup-node@v4
|
||
with:
|
||
node-version: '18'
|
||
cache: 'npm'
|
||
|
||
- name: Setup Python
|
||
if: matrix.language == 'python'
|
||
uses: actions/setup-python@v4
|
||
with:
|
||
python-version: '3.11'
|
||
cache: 'pip'
|
||
|
||
- name: Setup Java
|
||
if: matrix.language == 'java'
|
||
uses: actions/setup-java@v3
|
||
with:
|
||
java-version: '17'
|
||
distribution: 'temurin'
|
||
cache: 'maven'
|
||
|
||
# 自動ビルド
|
||
- name: Autobuild
|
||
uses: github/codeql-action/autobuild@v2
|
||
|
||
# カスタムビルド(必要に応じて)
|
||
- name: Custom build
|
||
if: matrix.language == 'cpp'
|
||
run: |
|
||
mkdir build
|
||
cd build
|
||
cmake ..
|
||
make -j$(nproc)
|
||
|
||
- name: Perform CodeQL Analysis
|
||
uses: github/codeql-action/analyze@v2
|
||
with:
|
||
category: "/language:${{matrix.language}}"
|
||
output: codeql-results
|
||
upload: true
|
||
|
||
- name: Upload SARIF results
|
||
if: always()
|
||
uses: github/codeql-action/upload-sarif@v2
|
||
with:
|
||
sarif_file: codeql-results/${{ matrix.language }}.sarif
|
||
category: ${{ matrix.language }}
|
||
```
|
||
|
||
#### CodeQL カスタム設定
|
||
```yaml
|
||
# .github/codeql/codeql-config.yml
|
||
name: "Custom CodeQL Config"
|
||
|
||
# 無効化するクエリ
|
||
disable-default-queries: false
|
||
|
||
# 追加するクエリパック
|
||
queries:
|
||
- name: security-extended
|
||
uses: security-extended
|
||
- name: security-and-quality
|
||
uses: security-and-quality
|
||
- name: custom-queries
|
||
uses: ./.github/codeql/custom-queries
|
||
|
||
# パス除外設定
|
||
paths-ignore:
|
||
- "**/*.test.js"
|
||
- "**/*.spec.ts"
|
||
- "**/node_modules/**"
|
||
- "**/vendor/**"
|
||
- "**/dist/**"
|
||
- "**/build/**"
|
||
- "**/__tests__/**"
|
||
- "**/test/**"
|
||
- "**/tests/**"
|
||
|
||
# パス包含設定(指定したパスのみスキャン)
|
||
paths:
|
||
- "src/**"
|
||
- "api/**"
|
||
- "services/**"
|
||
|
||
# カスタムビルドコマンド
|
||
build-mode: manual
|
||
```
|
||
|
||
#### カスタム CodeQL クエリ
|
||
```ql
|
||
/**
|
||
* @name Hardcoded credentials
|
||
* @description Finds potential hardcoded passwords or API keys
|
||
* @kind problem
|
||
* @problem.severity warning
|
||
* @security-severity 8.0
|
||
* @precision medium
|
||
* @id js/hardcoded-credentials
|
||
* @tags security
|
||
* external/cwe/cwe-798
|
||
*/
|
||
|
||
import javascript
|
||
|
||
from StringLiteral str, string value
|
||
where
|
||
value = str.getValue() and
|
||
(
|
||
// パスワードパターン
|
||
value.regexpMatch("(?i).*password.*=.*['\"]\\w{8,}['\"].*") or
|
||
// APIキーパターン
|
||
value.regexpMatch("(?i).*api[_-]?key.*=.*['\"][A-Za-z0-9]{20,}['\"].*") or
|
||
// 秘密鍵パターン
|
||
value.regexpMatch(".*-----BEGIN (RSA )?PRIVATE KEY-----.*") or
|
||
// AWS認証情報パターン
|
||
value.regexpMatch("(?i).*aws[_-]?(access[_-]?key|secret).*=.*['\"][A-Z0-9]{20,}['\"].*")
|
||
) and
|
||
// 除外パターン
|
||
not value.regexpMatch(".*\\$\\{.*\\}.*") and // 環境変数参照
|
||
not value.regexpMatch(".*placeholder.*|.*example.*|.*dummy.*|.*test.*")
|
||
select str, "Potential hardcoded credential found: " + value.prefix(50)
|
||
```
|
||
|
||
### 🛠️ セキュリティ修復自動化
|
||
|
||
#### 自動修復ワークフロー
|
||
```yaml
|
||
# .github/workflows/security-auto-fix.yml
|
||
name: Security Auto Fix
|
||
|
||
on:
|
||
schedule:
|
||
- cron: '0 3 * * 1' # 毎週月曜 3時
|
||
workflow_dispatch:
|
||
|
||
permissions:
|
||
contents: write
|
||
pull-requests: write
|
||
security-events: read
|
||
|
||
jobs:
|
||
auto-fix:
|
||
name: Automated Security Fixes
|
||
runs-on: ubuntu-latest
|
||
|
||
steps:
|
||
- name: Checkout
|
||
uses: actions/checkout@v4
|
||
with:
|
||
token: ${{ secrets.GITHUB_TOKEN }}
|
||
|
||
- name: Setup Node.js
|
||
uses: actions/setup-node@v4
|
||
with:
|
||
node-version: '18'
|
||
cache: 'npm'
|
||
|
||
- name: Get security alerts
|
||
id: alerts
|
||
uses: actions/github-script@v6
|
||
with:
|
||
script: |
|
||
const { data: alerts } = await github.rest.codeScanning.listAlertsForRepo({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
state: 'open',
|
||
severity: 'high'
|
||
});
|
||
|
||
return alerts.filter(alert =>
|
||
alert.rule.id.includes('hardcoded-credentials') ||
|
||
alert.rule.id.includes('sql-injection') ||
|
||
alert.rule.id.includes('xss')
|
||
);
|
||
|
||
- name: Apply automated fixes
|
||
if: steps.alerts.outputs.result != '[]'
|
||
run: |
|
||
# ESLint自動修復
|
||
npm install -g eslint eslint-plugin-security
|
||
npx eslint --fix --ext .js,.ts src/ || true
|
||
|
||
# Prettier適用
|
||
npm install -g prettier
|
||
npx prettier --write src/**/*.{js,ts,jsx,tsx}
|
||
|
||
# セキュリティ関連の自動修復
|
||
# 例:console.logの削除、eval()の置換等
|
||
find src/ -name "*.js" -exec sed -i 's/console\.log.*;//g' {} \;
|
||
|
||
- name: Update dependencies
|
||
run: |
|
||
# 脆弱性のある依存関係を更新
|
||
npm audit fix --audit-level high
|
||
|
||
# package-lock.jsonの更新
|
||
npm install
|
||
|
||
- name: Create Pull Request
|
||
if: steps.alerts.outputs.result != '[]'
|
||
uses: peter-evans/create-pull-request@v5
|
||
with:
|
||
token: ${{ secrets.GITHUB_TOKEN }}
|
||
commit-message: |
|
||
🔒 Security: Automated security fixes
|
||
|
||
- Fixed high-severity CodeQL alerts
|
||
- Updated vulnerable dependencies
|
||
- Applied ESLint security rules
|
||
title: "🔒 Automated Security Fixes"
|
||
body: |
|
||
## 🔒 Automated Security Fixes
|
||
|
||
This PR contains automated fixes for security issues:
|
||
|
||
### Changes Made
|
||
- ✅ Fixed CodeQL high-severity alerts
|
||
- ✅ Updated vulnerable dependencies via `npm audit fix`
|
||
- ✅ Applied ESLint security rules
|
||
- ✅ Code formatting with Prettier
|
||
|
||
### Review Required
|
||
Please review these automated changes before merging.
|
||
|
||
**Generated by GitHub Actions** 🤖
|
||
branch: security/automated-fixes
|
||
delete-branch: true
|
||
labels: |
|
||
security
|
||
automated
|
||
high-priority
|
||
```
|
||
|
||
---
|
||
|
||
## 3. 依存関係・脆弱性管理
|
||
|
||
### 📦 Dependabot 高度設定
|
||
|
||
#### 包括的なDependabot設定
|
||
```yaml
|
||
# .github/dependabot.yml
|
||
version: 2
|
||
|
||
updates:
|
||
# Node.js パッケージ
|
||
- package-ecosystem: "npm"
|
||
directory: "/"
|
||
schedule:
|
||
interval: "daily"
|
||
time: "02:00"
|
||
timezone: "Asia/Tokyo"
|
||
open-pull-requests-limit: 10
|
||
reviewers:
|
||
- "security-team"
|
||
- "senior-developers"
|
||
assignees:
|
||
- "team-lead"
|
||
labels:
|
||
- "dependencies"
|
||
- "security"
|
||
commit-message:
|
||
prefix: "deps"
|
||
include: "scope"
|
||
ignore:
|
||
# 特定パッケージの更新を無視
|
||
- dependency-name: "lodash"
|
||
versions: ["4.x"]
|
||
allow:
|
||
# セキュリティアップデートのみ許可
|
||
- dependency-type: "security"
|
||
groups:
|
||
# 関連パッケージをグループ化
|
||
development-dependencies:
|
||
dependency-type: "development"
|
||
update-types:
|
||
- "minor"
|
||
- "patch"
|
||
|
||
# Python パッケージ
|
||
- package-ecosystem: "pip"
|
||
directory: "/api"
|
||
schedule:
|
||
interval: "weekly"
|
||
day: "monday"
|
||
time: "02:00"
|
||
open-pull-requests-limit: 5
|
||
reviewers:
|
||
- "backend-team"
|
||
commit-message:
|
||
prefix: "deps(python)"
|
||
|
||
# Docker イメージ
|
||
- package-ecosystem: "docker"
|
||
directory: "/"
|
||
schedule:
|
||
interval: "weekly"
|
||
day: "sunday"
|
||
reviewers:
|
||
- "devops-team"
|
||
commit-message:
|
||
prefix: "deps(docker)"
|
||
|
||
# GitHub Actions
|
||
- package-ecosystem: "github-actions"
|
||
directory: "/"
|
||
schedule:
|
||
interval: "weekly"
|
||
day: "sunday"
|
||
open-pull-requests-limit: 3
|
||
reviewers:
|
||
- "devops-team"
|
||
commit-message:
|
||
prefix: "ci"
|
||
|
||
# Terraform
|
||
- package-ecosystem: "terraform"
|
||
directory: "/infrastructure"
|
||
schedule:
|
||
interval: "weekly"
|
||
reviewers:
|
||
- "infrastructure-team"
|
||
commit-message:
|
||
prefix: "infra"
|
||
```
|
||
|
||
### 🔐 依存関係レビュー自動化
|
||
|
||
#### 高度な依存関係チェック
|
||
```yaml
|
||
# .github/workflows/dependency-review.yml
|
||
name: Comprehensive Dependency Review
|
||
|
||
on:
|
||
pull_request:
|
||
branches: [main, develop]
|
||
|
||
permissions:
|
||
contents: read
|
||
pull-requests: write
|
||
|
||
jobs:
|
||
dependency-review:
|
||
name: Dependency Review
|
||
runs-on: ubuntu-latest
|
||
|
||
steps:
|
||
- name: Checkout
|
||
uses: actions/checkout@v4
|
||
|
||
- name: Dependency Review
|
||
uses: actions/dependency-review-action@v3
|
||
with:
|
||
# 脆弱性の重要度閾値
|
||
fail-on-severity: moderate
|
||
# ライセンスの許可・禁止設定
|
||
allow-licenses: MIT, Apache-2.0, BSD-3-Clause, ISC
|
||
deny-licenses: GPL-2.0, GPL-3.0, AGPL-1.0, AGPL-3.0
|
||
# 評価対象の変更タイプ
|
||
allow-dependencies-licenses: true
|
||
# コメント設定
|
||
comment-summary-in-pr: always
|
||
# 詳細なレポート出力
|
||
output-sarif: dependency-review.sarif
|
||
|
||
- name: Upload SARIF
|
||
if: always()
|
||
uses: github/codeql-action/upload-sarif@v2
|
||
with:
|
||
sarif_file: dependency-review.sarif
|
||
|
||
license-check:
|
||
name: License Compliance Check
|
||
runs-on: ubuntu-latest
|
||
|
||
steps:
|
||
- name: Checkout
|
||
uses: actions/checkout@v4
|
||
|
||
- name: Setup Node.js
|
||
uses: actions/setup-node@v4
|
||
with:
|
||
node-version: '18'
|
||
cache: 'npm'
|
||
|
||
- name: Install dependencies
|
||
run: npm ci
|
||
|
||
- name: License checker
|
||
run: |
|
||
npm install -g license-checker
|
||
license-checker --summary --excludePrivatePackages --failOn 'GPL-2.0; GPL-3.0; AGPL-1.0; AGPL-3.0'
|
||
|
||
- name: Generate license report
|
||
run: |
|
||
license-checker --csv --out licenses.csv
|
||
license-checker --json --out licenses.json
|
||
|
||
- name: Upload license report
|
||
uses: actions/upload-artifact@v3
|
||
with:
|
||
name: license-report
|
||
path: |
|
||
licenses.csv
|
||
licenses.json
|
||
|
||
vulnerability-scan:
|
||
name: Advanced Vulnerability Scan
|
||
runs-on: ubuntu-latest
|
||
|
||
steps:
|
||
- name: Checkout
|
||
uses: actions/checkout@v4
|
||
|
||
- name: Setup Node.js
|
||
uses: actions/setup-node@v4
|
||
with:
|
||
node-version: '18'
|
||
cache: 'npm'
|
||
|
||
- name: Install Snyk
|
||
run: npm install -g snyk
|
||
|
||
- name: Authenticate Snyk
|
||
run: snyk auth ${{ secrets.SNYK_TOKEN }}
|
||
if: env.SNYK_TOKEN != ''
|
||
|
||
- name: Snyk test
|
||
run: |
|
||
snyk test --severity-threshold=medium --json > snyk-results.json || true
|
||
snyk monitor --project-name="${{ github.repository }}" || true
|
||
env:
|
||
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
|
||
|
||
- name: Upload Snyk results
|
||
uses: actions/upload-artifact@v3
|
||
with:
|
||
name: snyk-results
|
||
path: snyk-results.json
|
||
|
||
- name: Process Snyk results
|
||
uses: actions/github-script@v6
|
||
with:
|
||
script: |
|
||
const fs = require('fs');
|
||
|
||
try {
|
||
const results = JSON.parse(fs.readFileSync('snyk-results.json', 'utf8'));
|
||
|
||
if (results.vulnerabilities && results.vulnerabilities.length > 0) {
|
||
const highVulns = results.vulnerabilities.filter(v => v.severity === 'high');
|
||
const criticalVulns = results.vulnerabilities.filter(v => v.severity === 'critical');
|
||
|
||
let comment = '## 🚨 Vulnerability Scan Results\n\n';
|
||
comment += `- **Critical**: ${criticalVulns.length}\n`;
|
||
comment += `- **High**: ${highVulns.length}\n`;
|
||
comment += `- **Total**: ${results.vulnerabilities.length}\n\n`;
|
||
|
||
if (criticalVulns.length > 0) {
|
||
comment += '### Critical Vulnerabilities\n';
|
||
criticalVulns.slice(0, 5).forEach(vuln => {
|
||
comment += `- **${vuln.packageName}**: ${vuln.title}\n`;
|
||
});
|
||
}
|
||
|
||
// PRにコメント
|
||
await github.rest.issues.createComment({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
issue_number: context.payload.pull_request.number,
|
||
body: comment
|
||
});
|
||
|
||
// Critical脆弱性がある場合は失敗
|
||
if (criticalVulns.length > 0) {
|
||
core.setFailed('Critical vulnerabilities found');
|
||
}
|
||
}
|
||
} catch (error) {
|
||
console.log('No vulnerabilities file found or parsing error');
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 4. シークレット管理・漏洩防止
|
||
|
||
### 🔐 Advanced Secret Scanning
|
||
|
||
#### シークレットスキャン設定
|
||
```yaml
|
||
# .github/workflows/secret-scanning.yml
|
||
name: Comprehensive Secret Scanning
|
||
|
||
on:
|
||
push:
|
||
branches: [main, develop]
|
||
pull_request:
|
||
branches: [main]
|
||
schedule:
|
||
- cron: '0 4 * * *' # 毎日 4時
|
||
|
||
permissions:
|
||
contents: read
|
||
security-events: write
|
||
|
||
jobs:
|
||
secret-scan:
|
||
name: Secret Scanning
|
||
runs-on: ubuntu-latest
|
||
|
||
steps:
|
||
- name: Checkout
|
||
uses: actions/checkout@v4
|
||
with:
|
||
fetch-depth: 0 # 全履歴を取得
|
||
|
||
- name: TruffleHog OSS
|
||
uses: trufflesecurity/trufflehog@main
|
||
with:
|
||
path: ./
|
||
base: ${{ github.event.repository.default_branch }}
|
||
head: HEAD
|
||
extra_args: --debug --only-verified --json
|
||
|
||
- name: GitLeaks scan
|
||
uses: gitleaks/gitleaks-action@v2
|
||
env:
|
||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||
GITLEAKS_LICENSE: ${{ secrets.GITLEAKS_LICENSE }}
|
||
|
||
- name: Semgrep secrets scan
|
||
uses: returntocorp/semgrep-action@v1
|
||
with:
|
||
config: >-
|
||
p/security-audit
|
||
p/secrets
|
||
p/owasp-top-ten
|
||
p/r2c-security-audit
|
||
env:
|
||
SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }}
|
||
|
||
custom-secret-patterns:
|
||
name: Custom Secret Pattern Detection
|
||
runs-on: ubuntu-latest
|
||
|
||
steps:
|
||
- name: Checkout
|
||
uses: actions/checkout@v4
|
||
|
||
- name: Custom secret detection
|
||
run: |
|
||
# カスタムシークレットパターンの検出
|
||
echo "🔍 Scanning for custom secret patterns..."
|
||
|
||
# 日本固有のパターン
|
||
grep -r -E "マイナンバー|個人番号" . --include="*.js" --include="*.py" --include="*.java" && echo "⚠️ 個人情報が見つかりました" || true
|
||
|
||
# 内部APIキーパターン
|
||
grep -r -E "internal[_-]?api[_-]?key" . --include="*.js" --include="*.py" --include="*.env*" && echo "⚠️ 内部APIキーが見つかりました" || true
|
||
|
||
# データベース接続文字列
|
||
grep -r -E "postgres://|mysql://|mongodb://" . --include="*.js" --include="*.py" --include="*.config*" && echo "⚠️ データベース接続文字列が見つかりました" || true
|
||
|
||
# AWS関連シークレット
|
||
grep -r -E "AKIA[0-9A-Z]{16}" . && echo "⚠️ AWS Access Keyが見つかりました" || true
|
||
|
||
# プライベートキー
|
||
grep -r -E "-----BEGIN (RSA )?PRIVATE KEY-----" . && echo "⚠️ プライベートキーが見つかりました" || true
|
||
|
||
- name: Check environment files
|
||
run: |
|
||
find . -name "*.env*" -type f | while read envfile; do
|
||
echo "🔍 Checking $envfile"
|
||
# .env ファイル内の危険なパターンをチェック
|
||
if grep -E "(password|secret|key|token).*=.*['\"]?[a-zA-Z0-9]{8,}['\"]?" "$envfile"; then
|
||
echo "⚠️ 潜在的なシークレットが $envfile で見つかりました"
|
||
fi
|
||
done
|
||
|
||
secret-remediation:
|
||
name: Secret Remediation Guide
|
||
runs-on: ubuntu-latest
|
||
if: failure()
|
||
|
||
steps:
|
||
- name: Create remediation issue
|
||
uses: actions/github-script@v6
|
||
with:
|
||
script: |
|
||
const title = '🚨 Secret Detected - Immediate Action Required';
|
||
const body = `
|
||
## 🚨 シークレット検出アラート
|
||
|
||
コードベースに潜在的なシークレットが検出されました。
|
||
|
||
### 即座に行うべき対応
|
||
1. **該当シークレットの無効化**
|
||
- API キーやトークンを即座に無効化
|
||
- 新しいシークレットを生成
|
||
|
||
2. **Git履歴からの削除**
|
||
\`\`\`bash
|
||
# BFG Repo-Cleaner を使用
|
||
java -jar bfg.jar --delete-files "secrets.txt" --delete-folders ".env"
|
||
git reflog expire --expire=now --all && git gc --prune=now --aggressive
|
||
\`\`\`
|
||
|
||
3. **セキュリティ設定の強化**
|
||
- GitHub Secret Scanning の有効化
|
||
- Pre-commit hooks の設定
|
||
- 開発者向けセキュリティ教育
|
||
|
||
### 長期的な対策
|
||
- [ ] シークレット管理ツールの導入
|
||
- [ ] 環境変数の適切な使用
|
||
- [ ] 定期的なセキュリティ監査
|
||
|
||
**このissueは最優先で対応してください。**
|
||
|
||
Created by: GitHub Actions Security Scan
|
||
Workflow: ${context.workflow}
|
||
Run: ${context.runNumber}
|
||
`;
|
||
|
||
await github.rest.issues.create({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
title: title,
|
||
body: body,
|
||
labels: ['security', 'critical', 'immediate-action-required']
|
||
});
|
||
```
|
||
|
||
### 🔒 セキュアなシークレット管理
|
||
|
||
#### 環境別シークレット管理戦略
|
||
```yaml
|
||
# セキュアなシークレット管理のベストプラクティス
|
||
|
||
## リポジトリレベル
|
||
Repository Secrets:
|
||
- データベース接続文字列
|
||
- 外部API認証キー
|
||
- 暗号化キー
|
||
|
||
## 環境レベル
|
||
Environment Secrets:
|
||
Development:
|
||
- DEV_DATABASE_URL
|
||
- DEV_API_KEY
|
||
- DEV_ENCRYPTION_KEY
|
||
|
||
Staging:
|
||
- STAGING_DATABASE_URL
|
||
- STAGING_API_KEY
|
||
- STAGING_ENCRYPTION_KEY
|
||
|
||
Production:
|
||
- PROD_DATABASE_URL
|
||
- PROD_API_KEY
|
||
- PROD_ENCRYPTION_KEY
|
||
|
||
## 組織レベル
|
||
Organization Secrets:
|
||
- 共通の外部サービス認証
|
||
- 監視・ログ収集システム
|
||
- セキュリティスキャンツール
|
||
```
|
||
|
||
---
|
||
|
||
## 5. リポジトリ・組織セキュリティ
|
||
|
||
### 🏛️ 組織レベルセキュリティポリシー
|
||
|
||
#### セキュリティポリシー設定
|
||
```yaml
|
||
# .github/SECURITY.md
|
||
# セキュリティポリシー
|
||
|
||
## 報告対象のセキュリティ脆弱性
|
||
|
||
以下の種類のセキュリティ問題を報告してください:
|
||
|
||
### 🔴 Critical(緊急)
|
||
- リモートコード実行
|
||
- 認証バイパス
|
||
- 権限昇格
|
||
- データ漏洩
|
||
|
||
### 🟡 High(高)
|
||
- クロスサイトスクリプティング(XSS)
|
||
- SQLインジェクション
|
||
- クロスサイトリクエストフォージェリ(CSRF)
|
||
- 暗号化の欠陥
|
||
|
||
### 🟢 Medium(中)
|
||
- 情報開示
|
||
- サービス拒否攻撃
|
||
- セッション管理の問題
|
||
|
||
## 報告方法
|
||
|
||
### 🔒 秘密の報告(推奨)
|
||
GitHub Private Vulnerability Reporting を使用:
|
||
1. リポジトリの Security タブを開く
|
||
2. "Report a vulnerability" をクリック
|
||
3. 詳細を記入して送信
|
||
|
||
### 📧 メール報告
|
||
security@example.com に以下の情報を含めて送信:
|
||
- 脆弱性の詳細な説明
|
||
- 再現手順
|
||
- 影響範囲
|
||
- 修正提案(あれば)
|
||
|
||
## 対応プロセス
|
||
|
||
### ⏰ 対応時間
|
||
- **Critical**: 24時間以内に初回対応
|
||
- **High**: 72時間以内に初回対応
|
||
- **Medium**: 1週間以内に初回対応
|
||
|
||
### 🔄 対応フロー
|
||
1. **受領確認** - 24時間以内
|
||
2. **影響評価** - 2-3日以内
|
||
3. **修正開発** - 重要度に応じて
|
||
4. **修正リリース** - 検証後速やかに
|
||
5. **公開通知** - 修正後適切なタイミング
|
||
|
||
## セキュリティアップデート
|
||
|
||
### 📢 通知方法
|
||
- GitHub Security Advisories
|
||
- リリースノート
|
||
- セキュリティメーリングリスト
|
||
|
||
### 🏷️ バージョニング
|
||
セキュリティ修正は以下の形式でリリース:
|
||
- メジャー脆弱性: パッチバージョン(例: 1.2.3 → 1.2.4)
|
||
- 緊急修正: ホットフィックス(例: 1.2.3-security.1)
|
||
|
||
## サポート対象バージョン
|
||
|
||
| バージョン | サポート状況 |
|
||
| --------- | ---------- |
|
||
| 2.x.x | ✅ 完全サポート |
|
||
| 1.x.x | ⚠️ セキュリティ修正のみ |
|
||
| < 1.0 | ❌ サポート終了 |
|
||
|
||
## 謝辞
|
||
|
||
セキュリティ研究者の皆様への感謝を表すため、以下を実施:
|
||
- 🏆 Hall of Fame での表彰
|
||
- 💰 Bug Bounty プログラム(対象脆弱性)
|
||
- 🎁 記念品の贈呈
|
||
```
|
||
|
||
#### 自動セキュリティポリシー施行
|
||
```yaml
|
||
# .github/workflows/security-policy-enforcement.yml
|
||
name: Security Policy Enforcement
|
||
|
||
on:
|
||
push:
|
||
branches: [main]
|
||
pull_request:
|
||
branches: [main]
|
||
schedule:
|
||
- cron: '0 6 * * 1' # 毎週月曜 6時
|
||
|
||
permissions:
|
||
contents: read
|
||
issues: write
|
||
pull-requests: write
|
||
security-events: write
|
||
|
||
jobs:
|
||
policy-check:
|
||
name: Security Policy Compliance
|
||
runs-on: ubuntu-latest
|
||
|
||
steps:
|
||
- name: Checkout
|
||
uses: actions/checkout@v4
|
||
|
||
- name: Check security files
|
||
run: |
|
||
# 必須セキュリティファイルの存在確認
|
||
required_files=(
|
||
".github/SECURITY.md"
|
||
".github/dependabot.yml"
|
||
".github/workflows/codeql-analysis.yml"
|
||
)
|
||
|
||
missing_files=()
|
||
for file in "${required_files[@]}"; do
|
||
if [[ ! -f "$file" ]]; then
|
||
missing_files+=("$file")
|
||
fi
|
||
done
|
||
|
||
if [[ ${#missing_files[@]} -gt 0 ]]; then
|
||
echo "❌ Missing required security files:"
|
||
printf '%s\n' "${missing_files[@]}"
|
||
exit 1
|
||
else
|
||
echo "✅ All required security files present"
|
||
fi
|
||
|
||
- name: Branch protection check
|
||
uses: actions/github-script@v6
|
||
with:
|
||
script: |
|
||
const { data: branch } = await github.rest.repos.getBranch({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
branch: 'main'
|
||
});
|
||
|
||
const protection = branch.protection;
|
||
|
||
const requirements = [
|
||
{ check: protection.enabled, name: 'Branch protection enabled' },
|
||
{ check: protection.required_status_checks?.strict, name: 'Strict status checks' },
|
||
{ check: protection.enforce_admins?.enabled, name: 'Admin enforcement' },
|
||
{ check: protection.required_pull_request_reviews?.required_approving_review_count >= 1, name: 'Required reviews' }
|
||
];
|
||
|
||
const failed = requirements.filter(req => !req.check);
|
||
|
||
if (failed.length > 0) {
|
||
console.log('❌ Branch protection policy violations:');
|
||
failed.forEach(f => console.log(` - ${f.name}`));
|
||
core.setFailed('Branch protection policy not compliant');
|
||
} else {
|
||
console.log('✅ Branch protection policy compliant');
|
||
}
|
||
|
||
- name: Security feature audit
|
||
uses: actions/github-script@v6
|
||
with:
|
||
script: |
|
||
// リポジトリのセキュリティ機能状態をチェック
|
||
const { data: repo } = await github.rest.repos.get({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo
|
||
});
|
||
|
||
const securityFeatures = [
|
||
{ feature: 'Vulnerability alerts', enabled: repo.has_vulnerability_alerts },
|
||
{ feature: 'Automated security fixes', enabled: repo.automated_security_fixes },
|
||
{ feature: 'Private vulnerability reporting', enabled: repo.private_vulnerability_reporting_enabled }
|
||
];
|
||
|
||
console.log('🔍 Security Features Status:');
|
||
securityFeatures.forEach(sf => {
|
||
const status = sf.enabled ? '✅' : '❌';
|
||
console.log(` ${status} ${sf.feature}`);
|
||
});
|
||
|
||
const disabled = securityFeatures.filter(sf => !sf.enabled);
|
||
if (disabled.length > 0) {
|
||
core.setOutput('security_recommendations',
|
||
disabled.map(sf => sf.feature).join(', '));
|
||
}
|
||
|
||
create-security-issue:
|
||
name: Create Security Improvement Issue
|
||
runs-on: ubuntu-latest
|
||
needs: policy-check
|
||
if: failure()
|
||
|
||
steps:
|
||
- name: Create improvement issue
|
||
uses: actions/github-script@v6
|
||
with:
|
||
script: |
|
||
const title = '🔧 Security Policy Compliance Improvements Required';
|
||
const body = `
|
||
## 🔧 セキュリティポリシー改善が必要です
|
||
|
||
自動セキュリティチェックで以下の問題が検出されました:
|
||
|
||
### 🚨 必要な対応
|
||
- [ ] セキュリティファイルの追加・更新
|
||
- [ ] ブランチ保護ルールの設定
|
||
- [ ] セキュリティ機能の有効化
|
||
|
||
### 📋 推奨事項
|
||
- [ ] Dependabot セキュリティアップデート有効化
|
||
- [ ] Code scanning alerts 有効化
|
||
- [ ] Secret scanning 有効化
|
||
- [ ] Private vulnerability reporting 有効化
|
||
|
||
### 🔗 参考資料
|
||
- [GitHub Security Documentation](https://docs.github.com/en/code-security)
|
||
- [Security Policy Template](https://github.com/github/docs/blob/main/SECURITY.md)
|
||
|
||
**このIssueは優先的に対応してください。**
|
||
|
||
Auto-generated by: Security Policy Enforcement Workflow
|
||
`;
|
||
|
||
await github.rest.issues.create({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
title: title,
|
||
body: body,
|
||
labels: ['security', 'enhancement', 'policy-compliance']
|
||
});
|
||
```
|
||
|
||
---
|
||
|
||
## 6. コンプライアンス・監査対応
|
||
|
||
### 📋 コンプライアンス自動レポート
|
||
|
||
#### 包括的なコンプライアンスレポート生成
|
||
```yaml
|
||
# .github/workflows/compliance-report.yml
|
||
name: Compliance and Audit Report
|
||
|
||
on:
|
||
schedule:
|
||
- cron: '0 1 1 * *' # 毎月1日 1時
|
||
workflow_dispatch:
|
||
inputs:
|
||
report_type:
|
||
description: 'Report type'
|
||
required: true
|
||
default: 'monthly'
|
||
type: choice
|
||
options:
|
||
- daily
|
||
- weekly
|
||
- monthly
|
||
- quarterly
|
||
- annual
|
||
|
||
permissions:
|
||
contents: read
|
||
security-events: read
|
||
issues: write
|
||
|
||
jobs:
|
||
generate-report:
|
||
name: Generate Compliance Report
|
||
runs-on: ubuntu-latest
|
||
|
||
steps:
|
||
- name: Checkout
|
||
uses: actions/checkout@v4
|
||
|
||
- name: Collect security metrics
|
||
id: security-metrics
|
||
uses: actions/github-script@v6
|
||
with:
|
||
script: |
|
||
const now = new Date();
|
||
const reportPeriod = '${{ github.event.inputs.report_type || 'monthly' }}';
|
||
|
||
// 期間の計算
|
||
let startDate;
|
||
switch(reportPeriod) {
|
||
case 'daily':
|
||
startDate = new Date(now - 24 * 60 * 60 * 1000);
|
||
break;
|
||
case 'weekly':
|
||
startDate = new Date(now - 7 * 24 * 60 * 60 * 1000);
|
||
break;
|
||
case 'monthly':
|
||
startDate = new Date(now.getFullYear(), now.getMonth() - 1, now.getDate());
|
||
break;
|
||
case 'quarterly':
|
||
startDate = new Date(now.getFullYear(), now.getMonth() - 3, now.getDate());
|
||
break;
|
||
case 'annual':
|
||
startDate = new Date(now.getFullYear() - 1, now.getMonth(), now.getDate());
|
||
break;
|
||
}
|
||
|
||
// セキュリティアラートの取得
|
||
const { data: codeScanning } = await github.rest.codeScanning.listAlertsForRepo({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
state: 'open'
|
||
});
|
||
|
||
const { data: secretScanning } = await github.rest.secretScanning.listAlertsForRepo({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
state: 'open'
|
||
});
|
||
|
||
const { data: dependabot } = await github.rest.dependabot.listAlertsForRepo({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
state: 'open'
|
||
});
|
||
|
||
// メトリクス集計
|
||
const metrics = {
|
||
period: reportPeriod,
|
||
startDate: startDate.toISOString(),
|
||
endDate: now.toISOString(),
|
||
security: {
|
||
codeScanning: {
|
||
total: codeScanning.length,
|
||
critical: codeScanning.filter(a => a.rule.severity === 'error').length,
|
||
high: codeScanning.filter(a => a.rule.severity === 'warning').length,
|
||
medium: codeScanning.filter(a => a.rule.severity === 'note').length
|
||
},
|
||
secretScanning: {
|
||
total: secretScanning.length,
|
||
resolved: secretScanning.filter(a => a.state === 'resolved').length
|
||
},
|
||
dependabot: {
|
||
total: dependabot.length,
|
||
critical: dependabot.filter(a => a.security_vulnerability?.severity === 'critical').length,
|
||
high: dependabot.filter(a => a.security_vulnerability?.severity === 'high').length,
|
||
medium: dependabot.filter(a => a.security_vulnerability?.severity === 'medium').length
|
||
}
|
||
}
|
||
};
|
||
|
||
return metrics;
|
||
|
||
- name: Generate compliance report
|
||
uses: actions/github-script@v6
|
||
with:
|
||
script: |
|
||
const metrics = ${{ steps.security-metrics.outputs.result }};
|
||
|
||
const report = `
|
||
# 🛡️ セキュリティ・コンプライアンスレポート
|
||
|
||
**報告期間**: ${metrics.startDate.split('T')[0]} ~ ${metrics.endDate.split('T')[0]}
|
||
**レポートタイプ**: ${metrics.period}
|
||
**生成日時**: ${new Date().toISOString()}
|
||
|
||
## 📊 セキュリティメトリクス概要
|
||
|
||
### 🔍 コードスキャニング
|
||
- **総アラート数**: ${metrics.security.codeScanning.total}
|
||
- **Critical**: ${metrics.security.codeScanning.critical}
|
||
- **High**: ${metrics.security.codeScanning.high}
|
||
- **Medium**: ${metrics.security.codeScanning.medium}
|
||
|
||
### 🔐 シークレットスキャニング
|
||
- **総アラート数**: ${metrics.security.secretScanning.total}
|
||
- **解決済み**: ${metrics.security.secretScanning.resolved}
|
||
- **未解決**: ${metrics.security.secretScanning.total - metrics.security.secretScanning.resolved}
|
||
|
||
### 📦 依存関係アラート
|
||
- **総アラート数**: ${metrics.security.dependabot.total}
|
||
- **Critical**: ${metrics.security.dependabot.critical}
|
||
- **High**: ${metrics.security.dependabot.high}
|
||
- **Medium**: ${metrics.security.dependabot.medium}
|
||
|
||
## 🎯 コンプライアンス状況
|
||
|
||
### ✅ 準拠項目
|
||
- [ ] セキュリティポリシー文書化
|
||
- [ ] 脆弱性対応プロセス確立
|
||
- [ ] 定期的なセキュリティスキャン実施
|
||
- [ ] 依存関係管理自動化
|
||
- [ ] シークレット漏洩防止対策
|
||
- [ ] コードレビュープロセス
|
||
- [ ] ブランチ保護設定
|
||
- [ ] 監査ログ記録
|
||
|
||
### 📈 改善推奨事項
|
||
|
||
${metrics.security.codeScanning.critical > 0 ? '🚨 **緊急**: Critical レベルのコードスキャニングアラートの対応' : ''}
|
||
${metrics.security.secretScanning.total > metrics.security.secretScanning.resolved ? '⚠️ **重要**: 未解決のシークレットアラートの対応' : ''}
|
||
${metrics.security.dependabot.critical > 0 ? '🔴 **Critical**: 依存関係の脆弱性への緊急対応' : ''}
|
||
|
||
## 📋 次回までのアクションアイテム
|
||
|
||
- [ ] Critical/High アラートの優先対応
|
||
- [ ] セキュリティトレーニングの実施
|
||
- [ ] ポリシー文書の更新
|
||
- [ ] 自動化スクリプトの改善
|
||
|
||
## 📞 連絡先
|
||
|
||
**セキュリティチーム**: security@example.com
|
||
**責任者**: @security-lead
|
||
|
||
---
|
||
|
||
📌 このレポートは自動生成されています。質問や懸念がある場合は、セキュリティチームまでお問い合わせください。
|
||
`;
|
||
|
||
// Issueとしてレポートを作成
|
||
await github.rest.issues.create({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
title: `🛡️ ${metrics.period.charAt(0).toUpperCase() + metrics.period.slice(1)} Security Compliance Report - ${new Date().toISOString().split('T')[0]}`,
|
||
body: report,
|
||
labels: ['security', 'compliance', 'report', metrics.period]
|
||
});
|
||
|
||
- name: Generate CSV export
|
||
run: |
|
||
# CSV形式でのデータエクスポート(監査用)
|
||
cat > compliance-data.csv << 'EOF'
|
||
Date,Type,Severity,Description,Status,Resolution_Time
|
||
EOF
|
||
|
||
echo "$(date -I),code-scanning,critical,Critical vulnerabilities found,open," >> compliance-data.csv
|
||
echo "$(date -I),secret-scanning,high,Secrets detected,resolved,24h" >> compliance-data.csv
|
||
echo "$(date -I),dependabot,medium,Dependency vulnerabilities,patched,72h" >> compliance-data.csv
|
||
|
||
- name: Upload compliance artifacts
|
||
uses: actions/upload-artifact@v3
|
||
with:
|
||
name: compliance-report-${{ github.run_number }}
|
||
path: |
|
||
compliance-data.csv
|
||
retention-days: 365 # 1年間保持(監査要件)
|
||
```
|
||
|
||
---
|
||
|
||
## 🎓 実践演習
|
||
|
||
### 演習1: 包括的セキュリティパイプライン構築
|
||
1. **多層防御** - CodeQL・Secret Scanning・Dependabot統合
|
||
2. **自動修復** - 脆弱性の自動検知・修復ワークフロー
|
||
3. **継続監視** - リアルタイムアラート・レポート生成
|
||
4. **インシデント対応** - 自動エスカレーション・対応手順
|
||
|
||
### 演習2: コンプライアンス対応システム
|
||
1. **政策設定** - セキュリティポリシー・ガバナンス
|
||
2. **監査準備** - ログ収集・証跡管理
|
||
3. **レポート自動化** - 定期レポート・ダッシュボード
|
||
4. **改善サイクル** - 継続的セキュリティ向上
|
||
|
||
### 演習3: セキュリティツール移行
|
||
1. **現状分析** - 既存セキュリティツールの評価
|
||
2. **移行戦略** - 段階的移行・リスク評価
|
||
3. **統合テスト** - 機能比較・性能検証
|
||
4. **運用移管** - チーム教育・プロセス最適化
|
||
|
||
---
|
||
|
||
## 🔗 関連リソース
|
||
|
||
### 公式ドキュメント
|
||
- [GitHub Security Documentation](https://docs.github.com/en/code-security)
|
||
- [GitHub Advanced Security](https://docs.github.com/en/enterprise-cloud@latest/get-started/learning-about-github/about-github-advanced-security)
|
||
- [CodeQL Documentation](https://codeql.github.com/docs/)
|
||
|
||
### セキュリティツール・拡張機能
|
||
- [Dependabot](https://docs.github.com/en/code-security/dependabot)
|
||
- [Secret Scanning](https://docs.github.com/en/code-security/secret-scanning)
|
||
- [Security Advisories](https://docs.github.com/en/code-security/security-advisories)
|
||
|
||
### コンプライアンス・標準
|
||
- [NIST Cybersecurity Framework](https://www.nist.gov/cyberframework)
|
||
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
|
||
- [ISO 27001](https://www.iso.org/isoiec-27001-information-security.html)
|
||
|
||
---
|
||
|
||
## 📝 まとめ
|
||
|
||
GitHub Security を効果的に活用することで:
|
||
|
||
✅ **統合セキュリティ** - 開発ライフサイクル全体の一元的セキュリティ管理
|
||
✅ **自動化による効率化** - 手動作業削減・継続的監視
|
||
✅ **コスト最適化** - 外部セキュリティツールからの移行によるコスト削減
|
||
✅ **コンプライアンス対応** - 企業レベルの監査・報告要件対応
|
||
✅ **開発生産性向上** - セキュリティと開発速度の両立
|
||
|
||
次は[GitHub Pages編](07-github-pages.md)で、セキュアなWebサイト・ドキュメント公開を学習しましょう。
|
||
|
||
## 🔗 関連ガイド
|
||
|
||
- **前のステップ**: [GitHub Actions編](05-github-actions.md) - CI/CDセキュリティ統合
|
||
- **次のステップ**: [GitHub Pages編](07-github-pages.md) - セキュアなWebサイト公開
|
||
- **基礎知識**: [Pull Request編](03-pull-requests.md) - セキュアな開発プロセス
|
||
- **プロジェクト管理**: [GitHub Projects編](04-github-projects.md) - セキュアなプロジェクト運営
|
||
- **総合ガイド**: [GitHub完全活用ガイド](../GITHUB_COMPLETE_GUIDE.md) - 全機能の詳細解説
|
||
|
||
## 📖 学習フロー
|
||
|
||
```mermaid
|
||
graph LR
|
||
A[リポジトリ基礎] --> B[Issues管理]
|
||
B --> C[Pull Request]
|
||
C --> D[GitHub Projects]
|
||
D --> E[GitHub Actions]
|
||
E --> F[Security]
|
||
F --> G[Pages]
|
||
G --> H[完全活用]
|
||
|
||
style A fill:#f3e5f5
|
||
style B fill:#f3e5f5
|
||
style C fill:#f3e5f5
|
||
style D fill:#f3e5f5
|
||
style E fill:#f3e5f5
|
||
style F fill:#e1f5fe
|
||
style G fill:#e8f5e8
|
||
style H fill:#fce4ec
|
||
``` |