How to Map Resource Configurations to Compliance Criteria

How to Map Resource Configurations to Compliance Criteria

Status

COMPLETE

Stakeholders

@Trevor Vaughan @Chris Tessmer 

Outcome

The pupmod-compliance_mapper was created to address this issue and appears to be working quite well.

Due date

Jul 31, 2015

Owner

@Chris Tessmer 

Background

To support compliance reporting, SIMP modules should map which resources have been configured to support particular compliance requirements, with supporting annotations where needed.

The CCE is a unique and immutable reference used by compliance-checking solutions such as OpenSCAP.

The Proposed Approach: Embed CCE->Resource Mappings & Compliance Results in the Catalog

  • This is hastily written down after an after-hours TrevoRant

  • Embed CCE-to-resource mapping data in the module itself, including how to determine the expected value

  • During catalog compiles on the Puppet Server, use a function to build a data structure of the CCE-to-resource mappings, their compliant values, and the actual values.

  • After the data structure is complete, add it to the catalog.

  • Create tool to build using the data structure in the catalog

 

An Older Proposed Approach: Embed CCE->Resource Mappings in the Catalog

Our approach within modules will be to record the CCE->resource mapping in the Puppet catalog itself:

  • Use Puppet Resource tags to refer to CCE ids.  (Trevor doesn't like tags because they are mutable under some circumstances)

  • Provide an inert custom type to track CCE->resource mappings as metadata in the catalog.  

    • It will accept:

      • The CCE ID

      • A collection of mapped resources (as a list or individually)

      • Additional (optional) annotations for a given CCE(s)

    • Hypothetical example:

  • Use the catalog compiled for a given system to compil relevant security-compliance documentation.

The Benefits: Advanced Compliance Tooling

To take advantage of these features:

  • SIMP will provide a tool (TBD) that uses this information to generate compliance reports from Puppet catalogs 

  • PuppetDB (or local catalogs) can be queried to generate point-in-time compliance reports, with resources mapped to each CCE.

NOTE: Mapping is not Validation

It is important to note that the mapping of resources necessary to satisfy a CCE is not a validation that the CCE's requirements have been enforced.  

  • OpenSCAP already validates CCE compliance and this is not an attempt to re-implement it.

  • The presence of a CCE->resource mapping in the Puppet catalog is not proof that it has been implemented correctly.

Puppet-managed resources may differ from a CCE's requirements under many circumstances:

  • Class parameters may be tweaked (via Hiera, ENC, or due to internal logic such as ::params)

  • Different CCEs may prescribe mutually-exclusive requirements for the same resource.

  • SIMP must support multiple compliance profiles, which may recommend CCEs that are mutually-exclusive wrt a given resource.

Problems

  • Potential for catalog bloat

  • Additional complexity in module design (e.g., mapping.pp in the new standard layout)

  • Mapping CCEs to resources managed across multiple modules could get ugly

    • Following current PuppetLabs practices, the recommended solution would be to manage this from a Profile.  

      • However, Profiles aren't good Puppet Forge

    IDEA: would it be better to provide a module ("simp-ccemappings") that provides mappings (ala the selinux-policy-targeted RPM)

Action items