コンプライアンス担当者は、環境の OS コンプライアンスを継続的に維持するために、Cloud Guardrails を SaltStack Idem プラグインと統合します。

SaltStack Idem プラグインを使用すると、合意に基づく CIS のベスト プラクティスおよび標準に環境を合わせることができます。

SaltStack Idem プラグインは、アプリケーションの状態を適用するなどのタスクを簡素化するステートフル プログラミング構造を公開します。Cloud Guardrails と SaltStack Idem プラグインを統合することにより、SaltStack 環境で以下を作成、削除、および記述することができます。

  • ターゲット
  • ポリシー

SaltStack Idem プラグインは、ポリシー情報の収集、インフラストラクチャでの継続的な適用のサポート、および修正を適用する SLS ファイルの実行を行うことができます。

表 1. SaltStack Idem プラグインの機能
OS コンプライアンス アクション SaltStack Idem プラグインの機能
SaltStack ターゲットおよび SaltStack ポリシーから情報を収集する。

次の情報を収集します。

  • SaltStack 環境のターゲット。
  • SaltStack 環境のポリシー。
SaltStack Config ユーザー インターフェイスでの違反の継続的な監視をサポートします。

Cloud Guardrails で、以下を実行します。

  • 組織またはテナント、およびクラウド アカウントでポリシー違反と関連する詳細を監視するスケジュール設定されたジョブを使用します。
  • クラウド アカウント、リソース、およびリソースの種類に対するポリシー違反をオンデマンドで監視します。
SaltStack SecOps からの修正を適用する SLS ファイルを実行する。
  • 一連のさまざまなオペレーティングシステム (OS) に対して修正を自動的に適用します。
  • ポリシーをオンデマンドで適用します。

SaltStack Idem プラグインは、SaltStack で使用可能なすべてのベンチマークとチェック作業で機能します。

この手順では、SaltStack Config と Salt ミニオンがすでに構成されていて、パブリック クラウド グレインを含む Salt ミニオンを展開して登録するための自動化が完了していることが前提となります。

前提条件

  • SaltStack アーキテクチャについて理解していることを確認します。vRealize Automation SaltStack Config のドキュメントのトップページ、およびそのページにある「SaltStack Config のインストールと構成」ガイドを参照してください。
  • オンプレミス バージョンの SaltStack Config を使用している場合は、ミニオンを含む SaltStack Config 環境が vRealize Automation Cloud インスタンスと統合されていて、Cloud Guardrails から使用できることを確認します。オンプレミスバージョンの SaltStack インストール ドキュメントのSaltStack Config のインストールと構成を参照してください。
  • クラウド バージョンの SaltStack Config を使用している場合は、ミニオンを含む SaltStack Config 環境が vRealize Automation Cloud インスタンスと統合されていて、Cloud Guardrails から使用できることを確認します。クラウドバージョンの SaltStack Config インストール ドキュメントのvRealize Automation Cloud での SaltStack Config 統合の作成を参照してください。

手順

  1. vRealize Automation Cloud インスタンスから Cloud Guardrails にアクセスします。
  2. SaltStack 適用のためのセキュリティ テンプレートを作成します。
    1. [Guardrails] タブで、[+新規] をクリックします。
    2. [ゼロから] をクリックします。
    3. テンプレートの名前と説明を入力します。
    4. [セキュリティ] という名前のカテゴリを選択します。
      ゼロから Cloud Guardrails テンプレートを作成する場合は、カテゴリとプロジェクトを選択する必要があります。
    5. プロジェクトを選択し、[続行] をクリックします。
  3. SaltStack セキュリティ適用コードをテンプレート エディタにコピーします。
    1. このトピックの適用ポリシー コードを使用して、コードをテンプレート エディタにコピーします。
    2. [検証] をクリックします。
      Cloud Guardrails に、テンプレートが有効であることを示すメッセージが表示されます。
    3. [作成] をクリックします。
      テンプレートを作成したら、SaltStack ポリシー適用の目的の状態を実行できます。
      Cloud Guardrails に、テンプレートが作成されたことを示すメッセージが表示され、割り当てられた ID が表示されます。
  4. SaltStack 適用の目的の状態を作成します。
    1. [目的の状態の作成] をクリックします。
    2. 目的の状態の名前と説明を入力します。
    3. 作成したテンプレートを選択します。たとえば、[SaltStack 適用を作成] を選択します。
    4. クラウド アカウントとクラウド アカウント リージョンを選択して、[作成] をクリックします。
  5. SaltStack セキュリティ適用の目的の状態がニーズに正確に対応しているか確認し、必要に応じて更新します。
    1. [ターゲットの作成] をクリックします。
    2. [ターゲット][ターゲット名]、および [ターゲット タイプ] の入力パラメータ値を確認します。
    3. 変更が必要な場合は、入力パラメータ値を更新します。
      たとえば、 [ターゲット タイプ] は、 [Grain][List][Glob][Compound] をサポートします。
    4. コードを更新して、[ターゲットの作成] の目的の状態に加えた変更を反映します。
    5. [ターゲットでのポリシーの作成] をクリックします。
    6. [ターゲット名][修正]、および [ポリシー名] の入力パラメータ値を確認します。
    7. 変更が必要な場合は、入力パラメータ値を更新します。
      たとえば、 [修正][はい] または [いいえ] に設定できます。
    8. コードを更新して、[ターゲットでのポリシーの作成] の目的の状態に加えた変更を反映します。
  6. テンプレートを検証して変更を保存するには、[検証] をクリックし、[保存] をクリックします。
    Cloud Guardrails に、入力パラメータが有効で、テンプレートが正常に保存されたことを示すメッセージが表示されます。
  7. 目的の状態を実行し、適用結果を確認します。
    1. [目的の状態の実行] をクリックします。
    2. [適用] タブをクリックし、目的の状態が正常に実行されたことを確認します。
      適用に失敗した場合は、エラーを修正し、目的の状態を再実行します。

結果

SaltStack Idem プラグインを使用して、環境の OS コンプライアンスを継続するようにしました。

例: 次の SLS テンプレートを使用して SaltStack 適用を作成します

適用ポリシーのコード:

META:
  name: Create Saltstack Enforcement
  provider: SALTSTACK
  category: SECURITY
  description: Create target in saltstack, create policy over this target, add CIS benchmark checks on the policy and run remediation

{% set tgt_name = params.get('tgt_name', 'CentOS_Target') %}
{% set policy_name = params.get('policy_name', 'CIS_Benchmark_policy') %}
{% set tgt_type = params.get('tgt_type', 'grain') %}
{% set tgt_value = params.get('tgt_value', 'os:CentOS') %}
{% set remediate = params.get('remediate', true) %}

{{ tgt_name }}-target:
  META:
    name: Create Target
    parameters:
      tgt_name:
        description: Name of the target
        name: Target Name
        uiElement: text
      tgt_type:
        description: Type of the target
        name: Target Type
        uiElement: select
        options:
        - name: Grain
          value: grain
        - name: List
          value: list
        - name: Glob
          value: glob
        - name: Compound
          value: compound
      tgt_value:
        description: Value of target type
        name: Target Value
        uiElement: text
  saltstack.target.present:
  - name: {{ tgt_name }}
  - desc: idem sls
  - tgt_type: {{ tgt_type }}
  - tgt: {{tgt_value}}

{{ policy_name }}-policy:
  META:
   name: Create Policy on target
   parameters:
     policy_name:
       description: Name of the policy
       name: Policy Name
       uiElement: text
     tgt_name:
       description: Name of the target
       name: Target Name
       uiElement: text
     remediate:
       description: Whether remediation has to run on policy
       name: Remediate
       uiElement: select
       options:
         - name: "Yes"
           value: true
         - name: "No"
           value: false
  saltstack.policy.present:
  - require:
    - saltstack.target: {{ tgt_name }}-target
  - name: {{ policy_name }}
  - tgt_name: {{ tgt_name }}
  - remediate: {{ remediate }}
  - benchmark_names:
    - "CIS_CentOS_Linux_7_Benchmark_v2.2.0_server_level1-1"
  - check_names:
    - "Ensure cron daemon is enabled"
    - "Ensure access to the su command is restricted"
    - "Ensure mounting of cramfs filesystems is not enabled"

削除ポリシーのコード:

META:
  name: Delete Saltstack policy 
  provider: SALTSTACK
  category: SECURITY
  description: Delete Saltstack policy 

{% set policy_name = params.get('policy_name', 'CIS_Benchmark_policy') %}

{{ policy_name }}-policy:
  saltstack.policy.absent:
    - name: {{ policy_name }}

ターゲットの削除ポリシーのコード:

META:
  name: Delete Saltstack target
  provider: SALTSTACK
  category: SECURITY
  description: Delete Saltstack target

{% set tgt_name = params.get('tgt_name', 'all_minion_target') %}

{{ tgt_name }}-target:
  saltstack.target.absent:
    - name: {{ tgt_name }}

次のタスク

Cloud Guardrails のテンプレートを実行し、目的の状態を監視することで、SaltStack 環境の OS コンプライアンスを継続的に維持します。