IaC 検証を GitHub Actions と統合する

コードのセキュリティ分析アクションを使用すると、GitHub Actions ワークフローの一部である Infrastructure as Code(IaC)を検証できます。IaC を検証すると、Terraform リソースの定義が、Google Cloud リソースに適用されている既存の組織のポリシーと Security Health Analytics 検出機能に違反しているかどうかを判断できます。

IaC を検証する詳細については、Google Cloud 組織のポリシーに対して IaC を検証するをご覧ください。

始める前に

GitHub Actions で IaC の検証を開始するには、次のタスクを実行します。

Security Command Center のプレミアム ティアまたはエンタープライズ ティアを有効にする

Security Command Center のプレミアム ティアまたはエンタープライズ ティアが組織レベルで有効になっていることを確認します。

Security Command Center を有効にすると、securityposture.googleapis.com API と securitycentermanagement.googleapis.com API が有効になります。

サービス アカウントを作成する

コード セキュリティの分析アクションに使用できるサービス アカウントを作成します。

  1. In the Google Cloud console, go to the Create service account page.

    Go to Create service account
  2. Select your project.
  3. In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.

    In the Service account description field, enter a description. For example, Service account for quickstart.

  4. Click Create and continue.
  5. Grant the Security Posture Shift-Left Validator role to the service account.

    To grant the role, find the Select a role list, then select Security Posture Shift-Left Validator.

  6. Click Continue.
  7. Click Done to finish creating the service account.

IaC 検証の権限の詳細については、組織レベルでの有効化のための IAM をご覧ください。

認証の設定

  1. GitHub ID プロバイダとの Workload Identity 連携を構成します。手順については、Workload Identity 連携をご覧ください。

  2. Workload Identity 連携 ID トークンの URL を取得します。例: https://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID

    次の点を考慮してください。

    • PROJECT_NUMBER は、Workload Identity 連携を設定した Google Cloud プロジェクトのプロジェクト番号です。
    • POOL_ID はプール名です。
    • PROVIDER_ID は、ID プロバイダの名前です。
  3. IaC 検証アクションを認証するために、ワークフローに Google Cloud への認証アクションを追加します。

ポリシーを定義する

組織のポリシーSecurity Health Analytics の検出機能を定義します。セキュリティ ポスチャーを使用してこれらのポリシーを定義するには、ポスチャーを作成してデプロイするのタスクを実行します。

Terraform 計画の JSON ファイルを作成する

  1. Terraform のコードを作成する手順については、Terraform コードを作成するをご覧ください。

  2. GitHub Actions で Terraform を初期化します。たとえば、HashiCorp - Terraform の設定アクション を使用している場合は、次のコマンドを実行します。

    - name: Terraform Init
      id: init
      run: terraform init
    
  3. Terraform 計画ファイルを作成します。

    - name: Create Terraform Plan
      id: plan
      run: terraform plan -out=TF_PLAN_FILE
    

    TF_PLAN_FILE は、Terraform プランファイルの名前に置き換えます。例: myplan.tfplan

  4. 計画ファイルを JSON 形式に変換します。

    - name: Convert Terraform Plan to JSON
      id: convert
      run: terraform show -no-color -json TF_PLAN_FILE > TF_PLAN_JSON_FILE
    

    TF_PLAN_JSON_FILE は、Terraform 計画ファイルの名前(JSON 形式)に置き換えます。例: mytfplan.json

GitHub Actions ワークフローにアクションを追加する

  1. GitHub リポジトリで、ワークフローを参照します。
  2. ワークフロー エディタを開きます。
  3. GitHub Marketplace のサイドバーで、[Analyze Code Security] を検索します。
  4. [インストール] セクションで、構文をコピーします。
  5. 構文を新しいステップとしてワークフローに貼り付けます。
  6. 次の値を置き換えます。

    • workload_identity_provider は、Workload Identity 連携の ID トークンの URL へのリンクに置き換えます。
    • service_account は、アクション用に作成したサービス アカウントのメールアドレスに置き換えます。
    • organization_id は、Google Cloud 組織 ID に置き換えます。
    • scan_file_ref は、Terraform プランファイルのパス(JSON 形式)に置き換えます。
    • failure_criteria は、アクションが失敗したタイミングを決定する障害しきい値基準に置き換えます。しきい値の基準は、IaC 検証スキャンで検出される重大度が重大、高、中、低の問題の数に基づいています。failure_criteria では、許可される各重大度の問題の数と、問題の集計方法(AND または OR)を指定します。たとえば、重大度が重大の 1 つの問題、または重大度が高の 1 つの問題が発生した場合にビルドを失敗させるには、failure_criteriaCritical:1,High:1,Operator:OR に設定します。デフォルトは Critical:1,High:1,Medium:1,Low:1,Operator:OR です。つまり、IaC 検証スキャンで問題が見つかると、アクションが失敗します。

これで、ワークフローを実行して Terraform プランファイルを検証できるようになりました。ワークフローを手動で実行するには、ワークフローの手動実行をご覧ください。

IaC 違反レポートを表示する

  1. GitHub リポジトリで [Actions] をクリックし、ワークフローを選択します。

  2. ワークフローの最新の実行をクリックします。

    [アーティファクト] セクションで、違反レポート(ias-scan-sarif.json)が zip ファイルで入手できます。このレポートには、次のフィールドがあります。

    • Terraform プランで違反したポリシーを示す rules フィールド。各ルールには、レポートに含まれる結果と照合できる ruleID が含まれます。
    • results フィールド。特定のルールに違反するアセットの変更案。
  3. 適用する前に、Terraform コード内の違反を解決します。

次のステップ