メインコンテンツまでスキップ

シフトレフトセキュリティ

シフトレフトとは

**シフトレフト(Shift Left)とは、ソフトウェア開発ライフサイクル(SDLC)の早期段階(左側)**にテストやセキュリティ対策を移動させるアプローチです。

従来のウォーターフォール型開発では、開発工程の最後(リリース直前)にセキュリティ診断やテストを行っていました。しかし、この段階で重大な脆弱性が見つかると、手戻りが大きく、修正コストが跳ね上がります。

シフトレフトでは、設計やコーディングの段階からセキュリティを考慮し、継続的にチェックを行うことで、「安く」「早く」「安全な」ソフトウェア開発を実現します。

各技術スタックでの実践方法

以下に、.NET, Azure, Terraform, GitHub Workflow, Angularを使用した開発環境における具体的なシフトレフトの実践例を示します。

1. GitHub Workflow (CI/CD)

GitHub Actionsを活用して、プルリクエストやコミットのたびに自動的にセキュリティチェックを実行します。

  • シークレットスキャン: リポジトリへの秘密鍵やトークンの混入を防ぎます。
  • 依存関係レビュー: 脆弱性のあるライブラリの混入を防ぎます。
.github/workflows/security-scan.yml
name: Security Scan

on: [push, pull_request]

jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

# 依存関係の脆弱性チェック (GitHub Advanced Securityが必要な場合あり)
# 公開リポジトリなら無料で使用可能
- name: Dependency Review
if: github.event_name == 'pull_request'
uses: actions/dependency-review-action@v4

# Trivyによる総合スキャン(ファイルシステム、コンテナ、設定ミス)
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
ignore-unfixed: true
format: 'table'
severity: 'CRITICAL,HIGH'

2. .NET (バックエンド)

.NET開発においては、NuGetパッケージの脆弱性管理とコード解析が中心となります。

  • NuGet Audit: .NET 8以降、dotnet restore 時に既知の脆弱性があるパッケージを警告します。
  • Roslyn Analyzers: コード品質とセキュリティの問題をリアルタイムで検出します。

プロジェクトファイル (.csproj) の設定:

YourProject.csproj
<PropertyGroup>
<!-- NuGet監査を有効化 (デフォルトで有効だが明示的に設定可能) -->
<NuGetAudit>true</NuGetAudit>
<NuGetAuditLevel>moderate</NuGetAuditLevel>

<!-- セキュリティに関するコード分析をビルド時に強制 -->
<AnalysisMode>All</AnalysisMode>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>

3. Angular (フロントエンド)

フロントエンドでは、NPMパッケージの管理と、XSS(クロスサイトスクリプティング)などの脆弱性対策が重要です。

  • npm audit: 依存パッケージの脆弱性をチェックします。
  • ESLint: セキュリティルールを追加して危険なコーディングを防ぎます。

CIパイプラインでの実行例:

# 重大な脆弱性がある場合はビルドを失敗させる
npm audit --audit-level=high

# セキュリティプラグインを含むLintの実行
npm run lint

ESLint設定 (.eslintrc.json) の例: eslint-plugin-security などを導入します。

{
"plugins": ["security"],
"extends": ["plugin:security/recommended"],
"rules": {
"security/detect-object-injection": "warn"
}
}

4. Terraform (IaC)

インフラコード(IaC)にも脆弱性や設定ミス(Misconfiguration)が存在します。デプロイ前に静的解析を行います。

  • Trivy / tfsec / Checkov: Terraformコードのベストプラクティス違反(例:S3バケットが公開されている、暗号化が無効など)を検出します。特にCheckovは、CISベンチマークなど多くのコンプライアンス基準に対応しています。

ローカルまたはCIでの実行:

# Trivyを使ってTerraformの設定ミスをスキャン
trivy config ./terraform

# Checkovを使ってスキャン
checkov -d ./terraform

Terraformコードの修正例:

# ❌ 悪い例: ストレージアカウントへのパブリックアクセス許可
resource "azurerm_storage_account" "example" {
public_network_access_enabled = true # セキュリティリスク
}

# ✅ 修正後
resource "azurerm_storage_account" "example" {
public_network_access_enabled = false
}

5. Azure (クラウド環境)

デプロイ後の環境だけでなく、デプロイポリシーによって「安全でないリソースを作らせない」制御を行います。

  • Azure Policy: リソースの作成ルールを強制します(例:HTTPSのみ許可、特定のリージョンのみ許可)。
  • Microsoft Defender for Cloud: 開発段階(DevOps)と連携し、IaCテンプレートのセキュリティ問題をダッシュボードで可視化します。

Azure Policyの適用イメージ (Bicep/ARM):

// 特定のSKUのみを許可するポリシー定義などの適用
targetScope = 'subscription'

resource policyAssignment 'Microsoft.Authorization/policyAssignments@2020-09-01' = {
name: 'audit-vm-manageddisks'
properties: {
policyDefinitionId: '/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d'
displayName: 'Audit VMs that do not use managed disks'
}
}

まとめ

シフトレフトセキュリティを実践するには、ツールを導入するだけでなく、開発フローに組み込むことが重要です。

  1. IDE (VS Code): リンターやプラグインでコーディング中に気づく。
  2. Pre-commit: コミット前に自動チェックする。
  3. CI (GitHub Actions): プルリクエストでブロックする。
  4. CD: デプロイ前にIaCスキャンを行う。

これらを組み合わせることで、開発スピードを落とさずに高いセキュリティレベルを維持することができます。