diff --git a/.github/actions/notify-lula/action.yaml b/.github/actions/notify-lula/action.yaml new file mode 100644 index 000000000..c3e978a0d --- /dev/null +++ b/.github/actions/notify-lula/action.yaml @@ -0,0 +1,51 @@ +name: Notify Lula +description: "Comment on PR to notify Lula Team" + + +inputs: + state: + description: 'state of the comment update' + required: true + default: '' + flavor: + description: 'flavor of the comment update' + required: true + default: '' + ghToken: + description: 'GITHUB_TOKEN' + required: true + +runs: + using: composite + steps: + - name: Find Comment + uses: peter-evans/find-comment@3eae4d37986fb5a8592848f6a574fdf654e61f9e # v3.1.0 + id: fc + with: + issue-number: ${{ github.event.pull_request.number }} + comment-author: 'github-actions[bot]' + body-includes: Compliance ${{ inputs.flavor }} Evaluation + token: ${{ inputs.ghToken }} + + - name: Create comment + if: ${{ steps.fc.outputs.comment-id == '' && inputs.state == 'failure'}} + uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0 + with: + issue-number: ${{ github.event.pull_request.number }} + token: ${{ inputs.ghToken }} + body: | + Compliance ${{ inputs.flavor }} Evaluation: ${{ inputs.state }} + + CC: @defenseunicorns/lula-dev + + - name: Update comment + if: ${{ steps.fc.outputs.comment-id != '' }} + uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0 + with: + comment-id: ${{ steps.fc.outputs.comment-id }} + token: ${{ inputs.ghToken }} + edit-mode: replace + body: | + Compliance ${{ inputs.flavor }} Evaluation: ${{ inputs.state }} + + CC: @defenseunicorns/lula-dev diff --git a/.github/actions/setup/action.yaml b/.github/actions/setup/action.yaml index b7ba25e55..b62e4c1ee 100644 --- a/.github/actions/setup/action.yaml +++ b/.github/actions/setup/action.yaml @@ -35,6 +35,12 @@ runs: # renovate: datasource=github-tags depName=defenseunicorns/uds-cli versioning=semver run: brew install defenseunicorns/tap/uds@0.12.0 + - name: Install Lula + uses: defenseunicorns/lula-action/setup@095636b7880051e11b05f10a582fdd911526161c + with: + # renovate: datasource=github-tags depName=defenseunicorns/lula versioning=semver-coerced + version: v0.4.1 + - name: Iron Bank Login if: ${{ inputs.registry1Username != '' }} env: diff --git a/.github/workflows/compliance.yaml b/.github/workflows/compliance.yaml new file mode 100644 index 000000000..bde42c35e --- /dev/null +++ b/.github/workflows/compliance.yaml @@ -0,0 +1,75 @@ +name: Compliance Evaluation + +on: + # Manual trigger + workflow_dispatch: + inputs: + flavor: + type: string + description: "Flavor of the source package to test" + required: true + # Triggered by pull-request-conditionals.yaml + workflow_call: + inputs: + flavor: + type: string + description: "Flavor of the source package to test" + required: true + +permissions: + contents: read + pull-requests: write + +jobs: + evaluate: + runs-on: ubuntu-latest + name: Evaluate + continue-on-error: true + # env: + # UDS_PKG: ${{ inputs.package }} + steps: + # Used to execute the uds run command + - name: Checkout repository + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + + - name: Environment setup + uses: ./.github/actions/setup + + - name: review compliance directory + run: ls -al ./compliance/ + shell: bash + + - name: remove overlapping file + run: rm ./compliance/oscal-assessment-results.yaml + shell: bash + + - name: Download assessment + uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + with: + name: ${{ inputs.flavor }}-assessment-results + path: ./compliance + + - name: review compliance directory again + run: ls -al ./compliance/ + shell: bash + + - name: Evaluate compliance + id: compliance-evaluation + run: uds run test-compliance-evaluate --no-progress + + # steps in this action only run when there has been a previous failure - will indicate success thereafter + # need to think about how much noise this could create - noise currently = good + - name: Notify Lula Team of Compliance Assessment Results + if: ${{ always() }} + uses: ./.github/actions/notify-lula + with: + state: ${{ steps.compliance-evaluation.outcome }} + flavor: ${{ inputs.flavor }} + ghToken: ${{ secrets.GITHUB_TOKEN }} + + - name: Upload Evaluated Assessment + uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4 + with: + name: ${{ inputs.flavor }}-assessment-results + path: ./compliance/oscal-assessment-results.yaml + overwrite: true diff --git a/.github/workflows/lint-oscal.yaml b/.github/workflows/lint-oscal.yaml new file mode 100644 index 000000000..4f1501e1b --- /dev/null +++ b/.github/workflows/lint-oscal.yaml @@ -0,0 +1,56 @@ +name: Lint OSCAL Files + +on: + pull_request: + # milestoned is added here as a workaround for release-please not triggering PR workflows (PRs should be added to a milestone to trigger the workflow). + types: [milestoned, opened, reopened, synchronize] + paths: + - '**/*oscal*.yaml' + +permissions: + contents: read + +jobs: + + check-oscal-paths: + runs-on: ubuntu-latest + name: OSCAL Change Detection + outputs: + oscal: ${{ steps.path-filter.outputs.oscal }} + oscal_files: ${{ steps.path-filter.outputs.oscal_files }} + steps: + - name: Checkout the code + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + + # Uses a custom action to filter paths for source packages. + - name: Check src paths + id: path-filter + uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3 + with: + filters: | + oscal: + - added|modified: "**/*oscal*.yaml" + list-files: shell + + lint-oscal: + needs: check-oscal-paths + if: ${{ needs.check-oscal-paths.outputs.oscal == 'true' }} + runs-on: ubuntu-latest + steps: + # filter the files to remove not oscal files (such as those titles oscal-* under ./.github) + - name: Identify changed OSCAL files + id: find_changed_files + run: | + CHANGED_FILES=$(echo "${{ needs.check-oscal-paths.outputs.oscal_files }}" | tr ' ' '\n' | grep -v ".github*" | tr '\n' ',' | sed 's/.$//' || true) + echo "Changed OSCAL files: $CHANGED_FILES" + echo "oscal_files=$CHANGED_FILES" >> "$GITHUB_OUTPUT" + shell: bash + # checkout for access to the oscal files targeted for linting + - name: Checkout the code + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - name: Environment setup + uses: ./.github/actions/setup + # lint the oscal files + - name: lint-oscal + run: uds run lint-oscal --set OSCALFILES=${{ steps.find_changed_files.outputs.oscal_files }} --no-progress + shell: bash diff --git a/.github/workflows/pull-request-conditionals.yaml b/.github/workflows/pull-request-conditionals.yaml index 849749e65..4377b52a9 100644 --- a/.github/workflows/pull-request-conditionals.yaml +++ b/.github/workflows/pull-request-conditionals.yaml @@ -10,7 +10,7 @@ on: permissions: id-token: write # Needed for OIDC-related operations. contents: read # Allows reading the content of the repository. - pull-requests: read # Allows reading pull request metadata. + pull-requests: write # Allows writing pull request metadata. packages: read # Allows reading the published GHCR packages # Default settings for all run commands in the workflow jobs. @@ -86,3 +86,15 @@ jobs: flavor: ${{ matrix.flavor }} test_type: ${{ matrix.test_type }} secrets: inherit # Inherits all secrets from the parent workflow. + + evaluate-package-compliance: + needs: run-package-test + name: Compliance Evaluation + strategy: + matrix: + flavor: [upstream, registry1, unicorn] + fail-fast: false + uses: ./.github/workflows/compliance.yaml + with: + flavor: ${{ matrix.flavor }} + secrets: inherit # Inherits all secrets from the parent workflow. diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index ebfb38396..2cf5e7282 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -65,6 +65,17 @@ jobs: if: ${{ inputs.package == 'all' && inputs.test_type == 'install' }} run: uds run test-uds-core --set FLAVOR=${{ inputs.flavor }} --no-progress + - name: Validate UDS Core Compliance + if: ${{ inputs.package == 'all' && inputs.test_type == 'install' }} + run: uds run test-compliance-validate --no-progress + + - name: Upload Assessment + if: ${{ inputs.package == 'all' && inputs.test_type == 'install' }} + uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4 + with: + name: ${{ inputs.flavor }}-assessment-results + path: ./compliance/oscal-assessment-results.yaml + - name: Test UDS Core Upgrade if: ${{ inputs.package == 'all' && inputs.test_type == 'upgrade' }} run: uds run test-uds-core-upgrade --set FLAVOR=${{ inputs.flavor }} --no-progress diff --git a/compliance/oscal-assessment-results.yaml b/compliance/oscal-assessment-results.yaml new file mode 100644 index 000000000..6c1a34f63 --- /dev/null +++ b/compliance/oscal-assessment-results.yaml @@ -0,0 +1,1287 @@ +assessment-results: + import-ap: + href: "" + metadata: + last-modified: 2024-07-09T03:24:38.947997194Z + oscal-version: 1.1.2 + published: 2024-06-30T22:27:28.032093229Z + remarks: Assessment Results generated from Lula + title: '[System Name] Security Assessment Results (SAR)' + version: 0.0.1 + results: + - description: Assessment results for performing Validations with Lula version v0.4.1 + findings: + - description: |- + # Control Description Prevent non-privileged users from executing privileged functions. + # Control Implementation Loki layers an additional RBAC layer that prohibits non-privileged users from executing privileged functions. + target: + status: + state: not-satisfied + target-id: ac-6.10 + type: objective-id + title: 'Validation Result - Component:a735b5a4-aabd-482d-b335-60ddcd4b1c00 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: ac-6.10' + uuid: 1fdec6d5-12a6-4400-bb86-65811be00806 + - description: |- + # Control Implementation + Istio is configured to protect the confidentiality and integrity of transmitted information across both internal and external networks. This is achieved through Istio's mutual TLS, which encrypts service-to-service communication, ensuring that data in transit is not exposed to the possibility of interception and modification. + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: f6a130b1-bdb8-41de-8921-c1c373023f59 + - observation-uuid: 3d86e5f1-bf50-43c1-a3d8-4f9d26311481 + target: + status: + state: satisfied + target-id: sc-8.1 + type: objective-id + title: 'Validation Result - Component:81f6ec5d-9b8d-408f-8477-f8a04f493690 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: sc-8.1' + uuid: f10e5f70-81c4-4b00-a8c3-29e3cd97527c + - description: Velero can restore application configuration/data from an approved cloud provider or on-premise location to an alternative deployment environment on-demand. + target: + status: + state: not-satisfied + target-id: cp-7 + type: objective-id + title: 'Validation Result - Component:3127D34A-517B-473B-83B0-6536179ABE38 / Control Implementation: 5108E5FC-C45F-477B-8542-9C5611A92485 / Control: cp-7' + uuid: 30788898-87df-4185-ab1c-9becdee50f6c + - description: |- + # Control Description "a. Identify and document [Assignment: organization-defined duties of individuals requiring separation]; and b. Define system access authorizations to support separation of duties." + # Control Implementation Loki implements RBAC to define system authorization and separation of duties. + target: + status: + state: not-satisfied + target-id: ac-5 + type: objective-id + title: 'Validation Result - Component:a735b5a4-aabd-482d-b335-60ddcd4b1c00 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: ac-5' + uuid: 98b4b967-b087-4514-af76-47fbdd301940 + - description: Velero can be configured to restore only certain components of a back-up when necessary. + target: + status: + state: not-satisfied + target-id: cp-9.2 + type: objective-id + title: 'Validation Result - Component:3127D34A-517B-473B-83B0-6536179ABE38 / Control Implementation: 5108E5FC-C45F-477B-8542-9C5611A92485 / Control: cp-9.2' + uuid: 2134ba61-df24-4258-80fc-a406ee86e4df + - description: |- + # Control Implementation + Istio is configured to maintain separate execution domains for each executing process. This is achieved through Istio's sidecar proxy design, where each service in the mesh has its own dedicated sidecar proxy to handle its inbound and outbound traffic. This ensures that communication between processes is controlled and one process cannot modify the executing code of another process. + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: 3d86e5f1-bf50-43c1-a3d8-4f9d26311481 + target: + status: + state: satisfied + target-id: sc-39 + type: objective-id + title: 'Validation Result - Component:81f6ec5d-9b8d-408f-8477-f8a04f493690 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: sc-39' + uuid: c0a6d960-0976-4e3c-b539-00c36bf8565a + - description: Velero supports encryption of backups via its supported providers' encryption support/mechanisms. + target: + status: + state: not-satisfied + target-id: cp-9.8 + type: objective-id + title: 'Validation Result - Component:3127D34A-517B-473B-83B0-6536179ABE38 / Control Implementation: 5108E5FC-C45F-477B-8542-9C5611A92485 / Control: cp-9.8' + uuid: cc050937-d5e7-4696-8f25-9b86b62c0d07 + - description: |- + # Control Description "Provide and implement an audit record reduction and report generation capability that: a. Supports on-demand audit record review, analysis, and reporting requirements and after-the-fact investigations of incidents; and b. Does not alter the original content or time ordering of audit records." + # Control Implementation Grafana is configured with a pre-built dashboard for policy violations that displays data collected by Cluster Auditor. + target: + status: + state: not-satisfied + target-id: au-7 + type: objective-id + title: 'Validation Result - Component:108c78a9-5494-4abc-a1e7-f046da419687 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: au-7' + uuid: 958794eb-a1a5-4c29-b42c-ddfbabd544d9 + - description: |- + # Control Implementation + Istio is configured to dynamically isolate certain internal system components when necessary. This is achieved through Istio's network policies, which allow us to partition or separate system components + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: f6a130b1-bdb8-41de-8921-c1c373023f59 + - observation-uuid: 3d86e5f1-bf50-43c1-a3d8-4f9d26311481 + target: + status: + state: satisfied + target-id: sc-7.20 + type: objective-id + title: 'Validation Result - Component:81f6ec5d-9b8d-408f-8477-f8a04f493690 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: sc-7.20' + uuid: 782db436-d52a-461f-acd0-25b215fc3c3e + - description: Velero supports back-ups to and restores from multiple cloud environments (including geo-separated locations for high availibility) and on-premise environments in the event of an accessibility disruptions. + target: + status: + state: not-satisfied + target-id: cp-7.1 + type: objective-id + title: 'Validation Result - Component:3127D34A-517B-473B-83B0-6536179ABE38 / Control Implementation: 5108E5FC-C45F-477B-8542-9C5611A92485 / Control: cp-7.1' + uuid: a718a683-1df0-4cac-9b9e-f61792134683 + - description: |- + # Control Implementation + Istio is configured to protect the confidentiality and integrity of transmitted information across both internal and external networks. This is achieved through Istio's mutual TLS, which encrypts service-to-service communication, ensuring that data in transit is not exposed to the possibility of interception and modification. + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: f6a130b1-bdb8-41de-8921-c1c373023f59 + - observation-uuid: 3d86e5f1-bf50-43c1-a3d8-4f9d26311481 + target: + status: + state: not-satisfied + target-id: sc-8 + type: objective-id + title: 'Validation Result - Component:81f6ec5d-9b8d-408f-8477-f8a04f493690 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: sc-8' + uuid: 13dfdcfd-d77b-4649-ae0f-b9ebaeaa0549 + - description: Velero supports back-ups to and restores from multiple cloud environments (including geo-separated locations for high availibility) and on-premise environments in the event of an accessibility disruptions. + target: + status: + state: not-satisfied + target-id: cp-7.2 + type: objective-id + title: 'Validation Result - Component:3127D34A-517B-473B-83B0-6536179ABE38 / Control Implementation: 5108E5FC-C45F-477B-8542-9C5611A92485 / Control: cp-7.2' + uuid: 90a09f38-2e0f-496a-94a0-4fcbbd79b308 + - description: |- + # Control Description "a. Monitor the system to detect: 1. Attacks and indicators of potential attacks in accordance with the following monitoring objectives: [Assignment: organization-defined monitoring objectives]; and 2. Unauthorized local, network, and remote connections; b. Identify unauthorized use of the system through the following techniques and methods: [Assignment: organization-defined techniques and methods]; c. Invoke internal monitoring capabilities or deploy monitoring devices: 1. Strategically within the system to collect organization-determined essential information; and 2. At ad hoc locations within the system to track specific types of transactions of interest to the organization; d. Analyze detected events and anomalies; e. Adjust the level of system monitoring activity when there is a change in risk to organizational operations and assets, individuals, other organizations, or the Nation; f. Obtain legal opinion regarding system monitoring activities; and g. Provide [Assignment: organization-defined system monitoring information] to [Assignment: organization-defined personnel or roles] [Selection (one or more): as needed; [Assignment: organization-defined frequency]]." + # Control Implementation NeuVector continually monitors your Kubernetes environments to detect misconfigurations, advanced network threats, and vulnerable hosts with all attempts to exploit a vulnerability is documented. + target: + status: + state: not-satisfied + target-id: si-4 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: si-4' + uuid: 6452a578-b1b8-4a1c-9ff8-6f05821ca37d + - description: |- + # Control Description Store audit records [Assignment: at least weekly] in a repository that is part of a physically different system or system component than the system or component being audited. + # Control Implementation Prometheus can scrape external components outside of the system, but this configuration is not easily supported as part of the current big bang configuration of ClusterAuditor since external access to ClusterAuditor metrics is not exposed via Istio. Metrics data can be displayed through a Grafana dashboard for visualization. + target: + status: + state: not-satisfied + target-id: au-9.2 + type: objective-id + title: 'Validation Result - Component:375f8171-3eb9-48d6-be3c-c8f1c0fe05fa / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: au-9.2' + uuid: f970ff94-5aef-4521-bd62-2e71ed0e5c70 + - description: |- + # Control Description a. Identify the types of events that the system is capable of logging in support of the audit function: [Assignment: successful and unsuccessful account logon events, account management events, object access, policy change, privilege functions, process tracking, and system events. For Web applications: all administrator activity, authentication checks, authorization checks, data deletions, data access, data changes, and permission changes]; b. Coordinate the event logging function with other organizational entities requiring audit-related information to guide and inform the selection criteria for events to be logged; c. Specify the following event types for logging within the system: [Assignment: organization-defined event types (subset of the event types defined in AU-2a.) along with the frequency of (or situation requiring) logging for each identified event type]; d. Provide a rationale for why the event types selected for logging are deemed to be adequate to support after-the-fact investigations of incidents; and e. Review and update the event types selected for logging [Assignment: annually or whenever there is a change in the threat environment]. + # Control Implementation API endpoints suitable for capturing application level metrics are present on each of the supported applications running as containers. In addition, system and cluster level metrics are emitted by containers with read only access to host level information. Metrics are captured and stored by Prometheus, an web server capable of scraping endpoints formatted in the appropriate dimensional data format. Metrics information is stored on disk in a time series data base, and later queried through a separate component providing a web interface for the query language: PromQL. Metrics data can be displayed through a Grafana dashboard for visualization. + related-observations: + - observation-uuid: 053bdc9e-654d-4287-adf1-02c14e77ece1 + - observation-uuid: 65c62b95-df70-4723-bf3b-46799d0536ad + target: + status: + state: not-satisfied + target-id: au-2 + type: objective-id + title: 'Validation Result - Component:375f8171-3eb9-48d6-be3c-c8f1c0fe05fa / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: au-2' + uuid: ae5e79ac-3535-48f0-b306-fe9cd1f34736 + - description: |- + # Control Implementation + Istio enforces logical access restrictions associated with changes to the system. Istio's Role-Based Access Control (RBAC) features are used to define and enforce access controls, ensuring that only approved personnel can make changes to the system. + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: f3ff3fbb-16d9-4a92-90e1-d8b7a020bccc + - observation-uuid: 41637e36-95ee-4c89-b332-80ca2d006620 + target: + status: + state: not-satisfied + target-id: cm-5 + type: objective-id + title: 'Validation Result - Component:81f6ec5d-9b8d-408f-8477-f8a04f493690 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: cm-5' + uuid: 7741992f-299d-4e30-ac94-f7797f95a661 + - description: |- + # Control Description "a. Establish and document configuration settings for components employed within the system that reflect the most restrictive mode consistent with operational requirements using [Assignment: oUnited States Government Configuration Baseline (USGCB)]; b. Implement the configuration settings; c. Identify, document, and approve any deviations from established configuration settings for [Assignment: organization-defined system components] based on [Assignment: organization-defined operational requirements]; and d. Monitor and control changes to the configuration settings in accordance with organizational policies and procedures." + # Control Implementation NeuVector is configured using Helm Charts. Default settings can be found. + target: + status: + state: not-satisfied + target-id: cm-6 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: cm-6' + uuid: 279d19b1-4297-43a9-a631-168431b3c0cd + - description: |- + # Control Description + Audit record content that may be necessary to satisfy the requirement of this control, includes, for example, time stamps, source and destination addresses, user/process identifiers, event descriptions, success/fail indications, filenames involved, and access control or flow control rules invoked. + Event outcomes can include indicators of event success or failure and event-specific results (e.g., the security state of the information system after the event occurred). + + # Control Implementation + Logs are captured by promtail from the node. The node logs will contain the necessary log data from all pods/applications inside the selected nodes. + Validating `logfmt` as the config.logFormat would be the goal. This is currently a secret mounted to /etc/promtail/promtail.yaml in the promtail container. We will ensure the promtail.yaml file is at a minimum the target config. + https://grafana.com/docs/loki/latest/send-data/promtail/stages/logfmt/ + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: b8c97e5c-a953-44f1-9868-42abdb5f36d3 + target: + status: + state: not-satisfied + target-id: au-3 + type: objective-id + title: 'Validation Result - Component:3ca1e9a3-a566-48d1-93af-200abd1245e3 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: au-3' + uuid: 661fde7a-25f7-4d8f-8673-d95a570001ff + - description: |- + # Control Description Provide an alert within [Assignment: real-time] to [Assignment: service provider personnel with authority to address failed audit events] when the following audit failure events occur: [Assignment: audit failure events requiring real-time alerts, as defined by organization audit policy]. + # Control Implementation Alertmanager has pre-built alerts for failed pods that would show when ClusterAuditor is not processing events, or prometheus is unable to scrape events. Prometheus also has a deadman's alert to ensure end users are seeing events from prometheus as part of its configuration. Data can be displayed through a Grafana dashboard for visualization. + target: + status: + state: not-satisfied + target-id: au-5.2 + type: objective-id + title: 'Validation Result - Component:375f8171-3eb9-48d6-be3c-c8f1c0fe05fa / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: au-5.2' + uuid: 4c6f58e6-d210-45a3-bede-b0b758c685de + - description: |- + # Control Description Provide and implement the capability to process, sort, and search audit records for events of interest based on the following content: [Assignment: organization-defined fields within audit records]. + # Control Implementation Loki provides an API for retrieving and filtering logs. + target: + status: + state: not-satisfied + target-id: au7.1 + type: objective-id + title: 'Validation Result - Component:a735b5a4-aabd-482d-b335-60ddcd4b1c00 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: au7.1' + uuid: 3c9b6412-0808-48b6-889b-54fefa4dcdb1 + - description: |- + # Control Description Analyze and correlate audit records across different repositories to gain organization-wide situational awareness. + # Control Implementation Aggregating cluster auditor events across multiple sources (clusters) is possible with a multi-cluster deployment of prometheus/grafana. + target: + status: + state: not-satisfied + target-id: au-6.3 + type: objective-id + title: 'Validation Result - Component:375f8171-3eb9-48d6-be3c-c8f1c0fe05fa / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: au-6.3' + uuid: 5a9912e9-c2e1-4fad-a651-9f84d351bea1 + - description: |- + # Control Implementation + Istio is configured to provide managed interfaces for external telecommunication services, establish traffic flow policies, and protect the confidentiality and integrity of transmitted information. It also prevents unauthorized exchange of control plane traffic and filters unauthorized control plane traffic. + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: a7867fed-93d7-457c-8886-6dae4459c5b2 + - observation-uuid: b2b0c4c3-8b3d-42a6-9ba4-ce36f198e15c + - observation-uuid: 2639ccbf-1a94-440e-b820-90e957f6987c + target: + status: + state: satisfied + target-id: sc-7.4 + type: objective-id + title: 'Validation Result - Component:81f6ec5d-9b8d-408f-8477-f8a04f493690 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: sc-7.4' + uuid: 87d6ff85-4067-442b-b2d3-c82cbddda0c3 + - description: |- + "Velero gives you tools to back up and restore your Kubernetes cluster resources and persistent volumes. You can run Velero with a cloud provider or on-premises. This includes: + - System components/data. + - User-level information/application metadata. + - User-level storage/data. + - Scheduled back-ups with configurable scopes. + - Multi-cloud and on-premise support for availability of backup." + target: + status: + state: not-satisfied + target-id: cp-9 + type: objective-id + title: 'Validation Result - Component:3127D34A-517B-473B-83B0-6536179ABE38 / Control Implementation: 5108E5FC-C45F-477B-8542-9C5611A92485 / Control: cp-9' + uuid: 67397dd3-5693-4223-8015-5755325d5bf8 + - description: |- + # Control Implementation + Istio enforces outbound traffic goes through an Egress Gateway with a Network Policy. + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: 35470a10-7ec9-4663-980b-c31ad61e08eb + - observation-uuid: f9e01aee-c30f-4df5-a4c7-0af351cef153 + target: + status: + state: not-satisfied + target-id: sc-4 + type: objective-id + title: 'Validation Result - Component:81f6ec5d-9b8d-408f-8477-f8a04f493690 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: sc-4' + uuid: 29bf18cb-9d9a-4b5a-9708-38fb4cb63563 + - description: |- + # Control Description "(a) Measure the time between flaw identification and flaw remediation; and (b) Establish the following benchmarks for taking corrective actions: [Assignment: organization-defined benchmarks]." + # Control Implementation NeuVector continually monitors your Kubernetes environments to detect misconfigurations, advanced network threats, and vulnerable hosts with all attempts to exploit a vulnerability is documented. + target: + status: + state: not-satisfied + target-id: si-2.3 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: si-2.3' + uuid: 5da35a6e-9526-4864-b153-dcd851e98a51 + - description: Velero supports back-ups to multiple cloud environments (including geo-separated locations for high availibility) and on-premise environments in the event of an accessibility disruptions. + target: + status: + state: not-satisfied + target-id: cp-6.3 + type: objective-id + title: 'Validation Result - Component:3127D34A-517B-473B-83B0-6536179ABE38 / Control Implementation: 5108E5FC-C45F-477B-8542-9C5611A92485 / Control: cp-6.3' + uuid: c0659b8c-36b9-4d6d-8e94-48343ff6d57b + - description: |- + # Control Implementation + Istio encrypts all in-mesh communication at runtime using FIPS verified mTLS in addition to ingress and egress gateways for controlling communication. + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: f6a130b1-bdb8-41de-8921-c1c373023f59 + - observation-uuid: 3d86e5f1-bf50-43c1-a3d8-4f9d26311481 + - observation-uuid: 60ff69f7-6d6f-4b92-a0a4-4ecd2df24b52 + target: + status: + state: satisfied + target-id: ac-4 + type: objective-id + title: 'Validation Result - Component:81f6ec5d-9b8d-408f-8477-f8a04f493690 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: ac-4' + uuid: 86b4aa9e-cdb4-499d-b93a-8f0a76ac4c6b + - description: Velero provides feedback/logging of back-up status for configuration/data via kubectl or the Velero CLI tool. Velero can restore your production configuration/data to validation environment to ensure reliability/integrity. + target: + status: + state: not-satisfied + target-id: cp-9.1 + type: objective-id + title: 'Validation Result - Component:3127D34A-517B-473B-83B0-6536179ABE38 / Control Implementation: 5108E5FC-C45F-477B-8542-9C5611A92485 / Control: cp-9.1' + uuid: 751a260d-f6c8-4ace-ad71-7aef30c0b9f0 + - description: |- + # Control Description Define the breadth and depth of vulnerability scanning coverage. + # Control Implementation NeuVector container scanning configurations depth can be modified. + target: + status: + state: not-satisfied + target-id: ra-5.3 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: ra-5.3' + uuid: 10f8b813-c6f3-4265-9eb6-475cc7cbc636 + - description: |- + # Control Description Compile audit records from [Assignment: all network, data storage, and computing devices] into a system-wide (logical or physical) audit trail that is time-correlated to within [Assignment: organization-defined level of tolerance for the relationship between time stamps of individual records in the audit trail]. + # Control Implementation Compatible metrics endpoints emitted from each application is compiled by Prometheus and displayed through Grafana with associated timestamps of when the data was collected. + target: + status: + state: not-satisfied + target-id: au-12.1 + type: objective-id + title: 'Validation Result - Component:375f8171-3eb9-48d6-be3c-c8f1c0fe05fa / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: au-12.1' + uuid: 832e1041-64e8-4455-8331-48025d4cdfbc + - description: |- + # Control Description Implement privileged access authorization to [Assignment: all components that support authentication] for [Assignment: all scans]. + # Control Implementation NeuVector supports mapping internal user accounts and roles in addition to LDAP and SSO roles or groups for providing RBAC access. + target: + status: + state: not-satisfied + target-id: ra-5.5 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: ra-5.5' + uuid: b2e08e6b-16b3-4a00-ac9f-c8c9bdee64ce + - description: |- + # Control Description Update the system vulnerabilities to be scanned [prior to a new scan]; prior to a new scan; when new vulnerabilities are identified and reported]. + # Control Implementation NeuVector container scanning vulnerability database is updated frequently. + target: + status: + state: not-satisfied + target-id: ra-5.2 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: ra-5.2' + uuid: 2b6daa85-9fdf-408c-9176-75a45ef22ea4 + - description: |- + # Control Implementation + Istio implements with service to service and provides authorization policies that require authentication to access any non-public features. + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: 31654aca-4189-447d-b5e6-4928c5acc603 + target: + status: + state: satisfied + target-id: ac-14 + type: objective-id + title: 'Validation Result - Component:81f6ec5d-9b8d-408f-8477-f8a04f493690 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: ac-14' + uuid: d61c76bb-7552-492f-a39e-e7da0748e84c + - description: |- + # Control Description + Time stamps generated by the information system include date and time. + Time is commonly expressed in Coordinated Universal Time (UTC), a modern continuation of Greenwich Mean Time (GMT), or local time with an offset from UTC. + Granularity of time measurements refers to the degree of synchronization between information system clocks and reference clocks, for example, clocks synchronizing within hundreds of milliseconds or within tens of milliseconds. + Organizations may define different time granularities for different system components. + Time service can also be critical to other security capabilities such as access control and identification and authentication, depending on the nature of the mechanisms used to support those capabilities. + + # Control Implementation + Records captured by the logging daemon are enriched to ensure the following are always present: + * time of the event (UTC). + * source of event (pod, namespace, container id). + Applications are responsible for providing all other information. + Validating `logfmt` as the config.logFormat would be the goal. This is currently a secret mounted to /etc/promtail/promtail.yaml in the promtail container. We will ensure the promtail.yaml file is at a minimum the target config. + https://grafana.com/docs/loki/latest/send-data/promtail/stages/logfmt/ + related-observations: + - observation-uuid: 053bdc9e-654d-4287-adf1-02c14e77ece1 + - observation-uuid: fa62278d-a485-40ec-a660-51845c227040 + target: + status: + state: not-satisfied + target-id: au-8 + type: objective-id + title: 'Validation Result - Component:3ca1e9a3-a566-48d1-93af-200abd1245e3 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: au-8' + uuid: 0c87ccd3-8a4f-48a9-9be0-69034e18885f + - description: |- + # Control Description "a. Review and analyze system audit records [Assignment: at least weekly] for indications of [Assignment: organization-defined inappropriate or unusual activity] and the potential impact of the inappropriate or unusual activity; b. Report findings to [Assignment: organization-defined personnel or roles]; and c. Adjust the level of audit record review, analysis, and reporting within the system when there is a change in risk based on law enforcement information, intelligence information, or other credible sources of information." + # Control Implementation Provides audit record query and analysis capabilities. Organization will implement record review and analysis. + target: + status: + state: not-satisfied + target-id: au-6 + type: objective-id + title: 'Validation Result - Component:a735b5a4-aabd-482d-b335-60ddcd4b1c00 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: au-6' + uuid: 086b37df-eae0-46d5-a525-ead6453af43f + - description: |- + # Control Implementation + Istio is configured to protect session authenticity, establishing confidence in the ongoing identities of other parties and the validity of transmitted information. This is achieved through Istio's mutual TLS, which ensures secure communication. + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: f6a130b1-bdb8-41de-8921-c1c373023f59 + target: + status: + state: satisfied + target-id: sc-23 + type: objective-id + title: 'Validation Result - Component:81f6ec5d-9b8d-408f-8477-f8a04f493690 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: sc-23' + uuid: c39917b0-8de0-4497-808a-a186ee2d9583 + - description: |- + # Control Implementation + Namespaces, Istio gateways, and network policies collectively by providing resource isolation, secure traffic routing, and network segmentation to prevent unauthorized and unintended information transfer. + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: 4e69dd7e-0ba5-489c-82fd-bdfdd3d80afd + - observation-uuid: 2639ccbf-1a94-440e-b820-90e957f6987c + target: + status: + state: satisfied + target-id: sc-3 + type: objective-id + title: 'Validation Result - Component:81f6ec5d-9b8d-408f-8477-f8a04f493690 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: sc-3' + uuid: 693835f8-466c-4437-9e95-1968070df3a9 + - description: |- + # Control Description Support the management of system accounts using [Assignment: organization-defined automated mechanisms]. + # Control Implementation NeuVector supports internal user accounts and roles in addition to LDAP and SSO for providing RBAC access. + target: + status: + state: not-satisfied + target-id: ac-2.1 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: ac-2.1' + uuid: 0a50cb43-5018-4190-a89a-f8aca2005186 + - description: Velero can take backups of your application configuration/data and store them off-site in either an approved cloud environment or on-premise location. + target: + status: + state: not-satisfied + target-id: cp-6 + type: objective-id + title: 'Validation Result - Component:3127D34A-517B-473B-83B0-6536179ABE38 / Control Implementation: 5108E5FC-C45F-477B-8542-9C5611A92485 / Control: cp-6' + uuid: fa78499f-12e1-4ded-86a1-1ce785cd7cbd + - description: |- + # Control Implementation + Istio is configured to manage network connections associated with specific communication sessions. It can be set up to automatically terminate these connections after periods of inactivity, providing an additional layer of security. + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: 6a1961d3-8819-4db9-b052-e3998d29f94c + target: + status: + state: not-satisfied + target-id: sc-10 + type: objective-id + title: 'Validation Result - Component:81f6ec5d-9b8d-408f-8477-f8a04f493690 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: sc-10' + uuid: 5f4f6691-affd-4acc-89f6-d3055b2f2481 + - description: |- + # Control Implementation + is configured to route internal communications traffic to external networks through authenticated proxy servers at managed interfaces, using its Egress Gateway. + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: f9e01aee-c30f-4df5-a4c7-0af351cef153 + - observation-uuid: 76674b13-a05d-40ba-b6ac-99aafe1c916e + target: + status: + state: not-satisfied + target-id: sc-7.8 + type: objective-id + title: 'Validation Result - Component:81f6ec5d-9b8d-408f-8477-f8a04f493690 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: sc-7.8' + uuid: ac90c141-2e83-4bfa-8833-dde2808592f1 + - description: |- + # Control Description Employ the principle of least privilege, allowing only authorized accesses for users (or processes acting on behalf of users) that are necessary to accomplish assigned organizational tasks. + # Control Implementation NeuVector supports mapping internal user accounts and roles in addition to LDAP and SSO roles or groups for providing RBAC access. + target: + status: + state: not-satisfied + target-id: ac-6 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: ac-6' + uuid: 425a62e9-d211-4b56-9ed3-ae145e4bda7a + - description: |- + # Control Description "Develop a system-level continuous monitoring strategy and implement continuous monitoring in accordance with the organization-level continuous monitoring strategy that includes: a. Establishing the following system-level metrics to be monitored: [Assignment: organization-defined system-level metrics]; b. Establishing [Assignment: organization-defined frequencies] for monitoring and [Assignment: organization-defined frequencies] for assessment of control effectiveness; c. Ongoing control assessments in accordance with the continuous monitoring strategy; d. Ongoing monitoring of system and organization-defined metrics in accordance with the continuous monitoring strategy; e. Correlation and analysis of information generated by control assessments and monitoring; f. Response actions to address results of the analysis of control assessment and monitoring information; and g. Reporting the security and privacy status of the system to [Assignment: to include JAB/AO] [Assignment: organization-defined frequency]." + # Control Implementation NeuVector continually monitors kubernetes environments and container images to detect misconfigurations, advanced network threats, and vulnerable hosts with all attempts to exploit a vulnerability is documented. + target: + status: + state: not-satisfied + target-id: ca-7 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: ca-7' + uuid: f90d9d08-6cd9-463a-a606-c1359e00e1fe + - description: |- + # Control Description Log the execution of privileged functions. + # Control Implementation Privileged events, including updating the deployment of an application, or use of privileged containers are collected as metrics by prometheus and displayed by Grafana. + related-observations: + - observation-uuid: 053bdc9e-654d-4287-adf1-02c14e77ece1 + - observation-uuid: c18cb484-a3d7-4f1b-9de2-bc40675ebef6 + target: + status: + state: not-satisfied + target-id: ac-6.9 + type: objective-id + title: 'Validation Result - Component:375f8171-3eb9-48d6-be3c-c8f1c0fe05fa / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: ac-6.9' + uuid: b5e568c2-539e-45f2-9aa6-b31dd4ddf30b + - description: |- + # Control Description a. Protect audit information and audit logging tools from unauthorized access, modification, and deletion; and b. Alert [Assignment: organization-defined personnel or roles] upon detection of unauthorized access, modification, or deletion of audit information. + # Control Implementation Grafana has the ability to provide Role Based Access Control to limit the data sources that end users can view by leveraging an identity provider. Grafana can also limit users to subsets of metrics within a datasource by the use of Label Based Access Control when using Grafana Enterprise. + target: + status: + state: not-satisfied + target-id: au-9 + type: objective-id + title: 'Validation Result - Component:375f8171-3eb9-48d6-be3c-c8f1c0fe05fa / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: au-9' + uuid: 826cb8c0-8297-4f90-b2b2-d0bc95531db1 + - description: |- + # Control Description Require the developer of the system, system component, or system service to employ static code analysis tools to identify common flaws and document the results of the analysis. Static code analysis provides a technology and methodology for security reviews and includes checking for weaknesses in the code as well as for the incorporation of libraries or other included code with known vulnerabilities or that are out-of-date and not supported. Static code analysis can be used to identify vulnerabilities and enforce secure coding practices. It is most effective when used early in the development process, when each code change can automatically be scanned for potential weaknesses. Static code analysis can provide clear remediation guidance and identify defects for developers to fix. Evidence of the correct implementation of static analysis can include aggregate defect density for critical defect types, evidence that defects were inspected by developers or security professionals, and evidence that defects were remediated. A high density of ignored findings, commonly referred to as false positives, indicates a potential problem with the analysis process or the analysis tool. In such cases, organizations weigh the validity of the evidence against evidence from other sources. + # Control Implementation NeuVector continually monitors kubernetes environments and container images to detect misconfigurations, advanced network threats, and vulnerable hosts with all attempts to exploit a vulnerability is documented. + target: + status: + state: not-satisfied + target-id: sa-11.1 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: sa-11.1' + uuid: 0af42784-0963-4f76-90ef-c6d98ca5fee6 + - description: 'Velero gives you tools to back up and restore your Kubernetes cluster resources and persistent volumes. You can run Velero with a cloud provider or on-premises. This includes: - System components/data. - User-level information/application metadata. - User-level storage/data. - Scheduled back-ups with configurable scopes. - Multi-cloud and on-premise support for availability of backup.' + target: + status: + state: not-satisfied + target-id: cp-10.4 + type: objective-id + title: 'Validation Result - Component:3127D34A-517B-473B-83B0-6536179ABE38 / Control Implementation: 5108E5FC-C45F-477B-8542-9C5611A92485 / Control: cp-10.4' + uuid: 4866acda-188f-40b1-8af4-ad3812060ef2 + - description: |- + # Control Implementation + Istio is configured to use ingress and egress gateways to provide logical flow separation. + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: 4df2137a-de64-4d02-8121-1911fc9dedab + - observation-uuid: 4e69dd7e-0ba5-489c-82fd-bdfdd3d80afd + - observation-uuid: 2639ccbf-1a94-440e-b820-90e957f6987c + target: + status: + state: not-satisfied + target-id: ac-4.21 + type: objective-id + title: 'Validation Result - Component:81f6ec5d-9b8d-408f-8477-f8a04f493690 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: ac-4.21' + uuid: 5b7406b7-334a-4a50-8013-bd63b566c391 + - description: |- + # Control Implementation + Istio has been configured to implement event logging within our environment. This includes capturing metrics related to the duration of sessions, connections, transactions, or activities. Specifically, Istio's telemetry features are utilized to capture these metrics, which provide valuable data that can be used to infer the duration of sessions or connections. + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: d6de0a77-9d2c-4332-9ab0-3c97c8b5234c + - observation-uuid: 3d86e5f1-bf50-43c1-a3d8-4f9d26311481 + - observation-uuid: 6fb0ef76-86ad-4629-9e9d-a725ddbf3373 + target: + status: + state: not-satisfied + target-id: au-3.1 + type: objective-id + title: 'Validation Result - Component:81f6ec5d-9b8d-408f-8477-f8a04f493690 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: au-3.1' + uuid: 612c395f-5036-444a-bfe4-2f9ab941622a + - description: Velero can take backups of your application configuration/data and store them off-site in either an approved cloud environment or on-premise location. + target: + status: + state: not-satisfied + target-id: cp-6.1 + type: objective-id + title: 'Validation Result - Component:3127D34A-517B-473B-83B0-6536179ABE38 / Control Implementation: 5108E5FC-C45F-477B-8542-9C5611A92485 / Control: cp-6.1' + uuid: 38c5c57c-e4fa-40c0-a371-519f922ce751 + - description: |- + # Control Implementation + Configured with an "admin" gateway to restrict access to applications that only need administrative access. + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: 4e69dd7e-0ba5-489c-82fd-bdfdd3d80afd + target: + status: + state: not-satisfied + target-id: ac-6.3 + type: objective-id + title: 'Validation Result - Component:81f6ec5d-9b8d-408f-8477-f8a04f493690 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: ac-6.3' + uuid: 02a7b8e8-c6cf-4263-ad16-65d64957169f + - description: 'Velero gives you tools to back up and restore your Kubernetes cluster resources and persistent volumes. You can run Velero with a cloud provider or on-premises. This includes: - System components/data. - User-level information/application metadata. - User-level storage/data. - Scheduled back-ups with configurable scopes. - Multi-cloud and on-premise support for availability of backup.' + target: + status: + state: not-satisfied + target-id: cp-9.5 + type: objective-id + title: 'Validation Result - Component:3127D34A-517B-473B-83B0-6536179ABE38 / Control Implementation: 5108E5FC-C45F-477B-8542-9C5611A92485 / Control: cp-9.5' + uuid: de04bf59-4529-4906-a829-a078dbcf74bf + - description: |- + # Control Description "a. Verify the correct operation of [Assignment: organization-defined security and privacy functions]; b. Perform the verification of the functions specified in SI-6a [Selection (one or more): [Assignment: to include upon system startup and/or restart]; upon command by user with appropriate privilege; [Assignment: at least monthly]]; c. Alert [Assignment: to include system administrators and security personnel] to failed security and privacy verification tests; and d. [Selection (one or more): Shut the system down; Restart the system; [Assignment: organization-defined alternative action (s)]] when anomalies are discovered." + # Control Implementation NeuVector correlates configuration data and network traffic to provide context around verification in the form of actionable alerts. + target: + status: + state: not-satisfied + target-id: si-6 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: si-6' + uuid: 6628f225-60a5-47a1-90f8-b4ea78dc72ef + - description: |- + # Control Description Integrate audit record review, analysis, and reporting processes using [Assignment: organization-defined automated mechanisms]. + # Control Implementation Provides audit record query and analysis capabilities. Organization will implement record review and analysis. + target: + status: + state: not-satisfied + target-id: au-6.1 + type: objective-id + title: 'Validation Result - Component:a735b5a4-aabd-482d-b335-60ddcd4b1c00 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: au-6.1' + uuid: ec6c6e31-e5df-4836-b5e6-f114d61d1081 + - description: |- + # Control Description "a. Define and document the types of accounts allowed and specifically prohibited for use within the system; b. Assign account managers; c. Require [Assignment: organization-defined prerequisites and criteria] for group and role membership; d. Specify: 1. Authorized users of the system; 2. Group and role membership; and 3. Access authorizations (i.e., privileges) and [Assignment: organization-defined attributes (as required)] for each account; e. Require approvals by [Assignment: organization-defined personnel or roles] for requests to create accounts; f. Create, enable, modify, disable, and remove accounts in accordance with [Assignment: organization-defined policy, procedures, prerequisites, and criteria]; g. Monitor the use of accounts; h. Notify account managers and [Assignment: organization-defined personnel or roles] within: 1. [Assignment: twenty-four (24) hours] when accounts are no longer required; 2. [Assignment: eight (8) hours] when users are terminated or transferred; and 3. [Assignment: eight (8) hours] when system usage or need-to-know changes for an individual; i. Authorize access to the system based on: 1. A valid access authorization; 2. Intended system usage; and 3. [Assignment: organization-defined attributes (as required)]; j. Review accounts for compliance with account management requirements [Assignment: monthly for privileged accessed, every six (6) months for non-privileged access]; k. Establish and implement a process for changing shared or group account authenticators (if deployed) when individuals are removed from the group; and l. Align account management processes with personnel termination and transfer processes." + # Control Implementation NeuVector supports internal user accounts and roles in addition to LDAP and SSO for providing RBAC access. + target: + status: + state: not-satisfied + target-id: ac-2 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: ac-2' + uuid: 35b172fc-505d-441c-a498-358eb777ed24 + - description: |- + # Control Description Provide and implement the capability to process, sort, and search audit records for events of interest based on the following content: [Assignment: organization-defined fields within audit records]. + # Control Implementation Grafana is configured with a pre-built dashboard for policy violations that displays data collected by Cluster Auditor. + target: + status: + state: not-satisfied + target-id: au-7.1 + type: objective-id + title: 'Validation Result - Component:375f8171-3eb9-48d6-be3c-c8f1c0fe05fa / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: au-7.1' + uuid: d42a6865-6869-4961-a90e-6d82eee7c561 + - description: |- + # Control Implementation + All encrypted HTTPS connections are terminated at the Istio ingress gateway. + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: f6a130b1-bdb8-41de-8921-c1c373023f59 + - observation-uuid: 3d86e5f1-bf50-43c1-a3d8-4f9d26311481 + - observation-uuid: 60ff69f7-6d6f-4b92-a0a4-4ecd2df24b52 + target: + status: + state: satisfied + target-id: ac-4.4 + type: objective-id + title: 'Validation Result - Component:81f6ec5d-9b8d-408f-8477-f8a04f493690 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: ac-4.4' + uuid: d24258c7-b611-4c00-b387-518682e288a5 + - description: Velero can restore application configuration/data from an approved cloud provider or on-premise location on-demand. + target: + status: + state: not-satisfied + target-id: cp-10 + type: objective-id + title: 'Validation Result - Component:3127D34A-517B-473B-83B0-6536179ABE38 / Control Implementation: 5108E5FC-C45F-477B-8542-9C5611A92485 / Control: cp-10' + uuid: db12a70d-960a-4bcc-bef2-d765371bc641 + - description: |- + # Control Implementation + Istio provides audit record generation capabilities for a variety of event types, including session, connection, transaction, or activity durations, and the number of bytes received and sent. + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: 337f9bea-6f8e-4c89-8142-4474083105e6 + target: + status: + state: satisfied + target-id: au-12 + type: objective-id + title: 'Validation Result - Component:81f6ec5d-9b8d-408f-8477-f8a04f493690 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: au-12' + uuid: f0b63c33-bdbd-43bb-9a36-4a386e4567eb + - description: |- + # Control Description "a. Configure the system to provide only [Assignment: organization-defined mission essential capabilities]; and b. Prohibit or restrict the use of the following functions, ports, protocols, software, and/or services: [Assignment: organization-defined prohibited or restricted functions, system ports, protocols, software, and/or services]." "CM-7 (b) Requirement: The service provider shall use the DoD STIGs or Center for Internet Security guidelines to establish list of prohibited or restricted functions, ports, protocols, and/or services or establishes its own list of prohibited or restricted functions, ports, protocols, and/or services if USGCB is not available. CM-7 Guidance: Information on the USGCB checklists can be found at: https://csrc.nist.gov/projects/united-states-government-configuration-baseline." + # Control Implementation NeuVector is configured securely and only access to required ports are available. + target: + status: + state: not-satisfied + target-id: cm-7 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: cm-7' + uuid: 4bcaa46e-66ab-4b3e-8414-92e28955d4d8 + - description: |- + # Control Description "a. Receive system security alerts, advisories, and directives from [Assignment: o include US-CERT] on an ongoing basis; b. Generate internal security alerts, advisories, and directives as deemed necessary; c. Disseminate security alerts, advisories, and directives to: [Selection (one or more): [Assignment: organization-defined personnel or roles]; to include system security personnel and administrators with configuration/patch-management responsibilities and d. Implement security directives in accordance with established time frames, or notify the issuing organization of the degree of noncompliance." + # Control Implementation NeuVector correlates configuration data with user behavior and network traffic to provide context around misconfigurations and threats in the form of actionable alerts. + target: + status: + state: not-satisfied + target-id: si-5 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: si-5' + uuid: a8b3553e-e9af-4781-83ac-400ea1d77b77 + - description: |- + # Control Description Retain audit records for [Assignment: at least one (1) year] to provide support for after-the-fact investigations of incidents and to meet regulatory and organizational information retention requirements. + # Control Implementation Can configure audit record storage retention policy for defined periods of time via the store(s) Loki is configured to use. + target: + status: + state: not-satisfied + target-id: au-11 + type: objective-id + title: 'Validation Result - Component:a735b5a4-aabd-482d-b335-60ddcd4b1c00 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: au-11' + uuid: 1133f9d6-790b-4f66-ba94-89ce6cf7ed26 + - description: |- + # Control Description Authorize access to management of audit logging functionality to only [Assignment: organization-defined subset of privileged users or roles]. + # Control Implementation Grafana has the ability to provide Role Based Access Control to limit the data sources that end users can view by leveraging an identity provider. Grafana can also limit users to subsets of metrics within a datasource by the use of Label Based Access Control when using Grafana Enterprise. + target: + status: + state: not-satisfied + target-id: au-9.4 + type: objective-id + title: 'Validation Result - Component:108c78a9-5494-4abc-a1e7-f046da419687 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: au-9.4' + uuid: 28f0e109-6c62-405d-b11c-8623f6829dad + - description: |- + # Control Implementation + Istio provides FIPS encryption in transit for all applications in the mesh, TLS termination at ingress, and TLS origination at egress. + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: f6a130b1-bdb8-41de-8921-c1c373023f59 + - observation-uuid: 60ff69f7-6d6f-4b92-a0a4-4ecd2df24b52 + - observation-uuid: bf2a95fb-c40e-425a-a1a3-ec1307343179 + - observation-uuid: 31044f2f-75fd-4472-b624-1d918be32f40 + target: + status: + state: not-satisfied + target-id: sc-13 + type: objective-id + title: 'Validation Result - Component:81f6ec5d-9b8d-408f-8477-f8a04f493690 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: sc-13' + uuid: 3df66b7f-1dec-4ab7-b76e-56023c2881a1 + - description: |- + # Control Implementation + Istio implements with global configuration. + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: f6a130b1-bdb8-41de-8921-c1c373023f59 + - observation-uuid: 3d86e5f1-bf50-43c1-a3d8-4f9d26311481 + - observation-uuid: b2b0c4c3-8b3d-42a6-9ba4-ce36f198e15c + target: + status: + state: satisfied + target-id: sc-8.2 + type: objective-id + title: 'Validation Result - Component:81f6ec5d-9b8d-408f-8477-f8a04f493690 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: sc-8.2' + uuid: 3e58bd7b-2e7d-4e85-bb8e-fc4e8b83f282 + - description: Velero supports back-ups to multiple cloud environments (including geo-separated locations for high availibility) and on-premise environments. + target: + status: + state: not-satisfied + target-id: cp-9.3 + type: objective-id + title: 'Validation Result - Component:3127D34A-517B-473B-83B0-6536179ABE38 / Control Implementation: 5108E5FC-C45F-477B-8542-9C5611A92485 / Control: cp-9.3' + uuid: 76b44e70-4f34-44f1-a8ee-72cb642dedfe + - description: |- + # Control Description + Include as part of control assessments, [Assignment: at least annually], [Selection: announced; unannounced], [Selection (one or more): in-depth monitoring; security instrumentation; automated security test cases; vulnerability scanning; malicious + user testing; insider threat assessment; performance and load testing; data leakage or data loss assessment; [Assignment: organization-defined other forms of assessment]]. + + # Control Implementation NeuVector continually monitors kubernetes environments and container images to detect misconfigurations, advanced network threats, and vulnerable hosts with all attempts to exploit a vulnerability is documented. + target: + status: + state: not-satisfied + target-id: ca-2.2 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: ca-2.2' + uuid: c4dadea0-3628-4444-b493-85fe4f44a9a2 + - description: |- + # Control Description "a. Monitor and scan for vulnerabilities in the system and hosted applications [Assignment: monthly operating system/infrastructure; monthly web applications (including APIs) and databases] and when new vulnerabilities potentially affecting the system are identified and reported; b. Employ vulnerability monitoring tools and techniques that facilitate interoperability among tools and automate parts of the vulnerability management process by using standards for: 1. Enumerating platforms, software flaws, and improper configurations; 2. Formatting checklists and test procedures; and 3. Measuring vulnerability impact; c. Analyze vulnerability scan reports and results from vulnerability monitoring; d. Remediate legitimate vulnerabilities [Assignment: high-risk vulnerabilities mitigated within thirty (30) days from date of discovery; moderate-risk vulnerabilities mitigated within ninety (90) days from date of discovery; low risk vulnerabilities mitigated within one hundred and eighty (180) days from date of discovery] in accordance with an organizational assessment of risk; e. Share information obtained from the vulnerability monitoring process and control assessments with [Assignment: organization-defined personnel or roles] to help eliminate similar vulnerabilities in other systems; and f. Employ vulnerability monitoring tools that include the capability to readily update the vulnerabilities to be scanned." + # Control Implementation NeuVector is Kubernetes and container security tool. NeuVector will scan containers for vulnerabilities in addition to continuous monitoring for active threats. + target: + status: + state: not-satisfied + target-id: ra-5 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: ra-5' + uuid: 3eca257e-9609-41fd-b21f-1aaee5b3d433 + - description: |- + # Control Description Provide a warning to [Assignment: organization-defined personnel, roles, and/or locations] within [Assignment: organization-defined time period] when allocated audit log storage volume reaches [Assignment: organization-defined percentage] of repository maximum audit log storage capacity. + # Control Implementation Alertmanager has pre-built alerts for PVC storage thresholds that would fire for PVCs supporting prometheus metrics storage. Metrics data can be displayed through a Grafana dashboard for visualization. + target: + status: + state: not-satisfied + target-id: au-5.1 + type: objective-id + title: 'Validation Result - Component:375f8171-3eb9-48d6-be3c-c8f1c0fe05fa / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: au-5.1' + uuid: f0e9a25c-2440-4299-8a32-1e9274b98f87 + - description: |- + # Control Description Allocate audit log storage capacity to accommodate [Assignment: organization-defined audit log retention requirements]. + # Control Implementation NeuVector can scale elastically based upon actual workload demands to allocate audit log storage capacity. + target: + status: + state: not-satisfied + target-id: au-4 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: au-4' + uuid: 92598581-3f72-478e-a8f2-33aaeccd56db + - description: Velero can restore application configuration/data from an approved cloud provider or on-premise location on-demand. + target: + status: + state: not-satisfied + target-id: cp-6.2 + type: objective-id + title: 'Validation Result - Component:3127D34A-517B-473B-83B0-6536179ABE38 / Control Implementation: 5108E5FC-C45F-477B-8542-9C5611A92485 / Control: cp-6.2' + uuid: fde3d548-4c98-451e-8ad1-08ebf918ec1f + - description: |- + # Control Description Correlate information from audit records with information obtained from monitoring physical access to further enhance the ability to identify suspicious, inappropriate, unusual, or malevolent activity. + # Control Implementation Cluster Auditor data in prometheus would enable this, but would require prometheus to also obtain access to physical metrics. + target: + status: + state: not-satisfied + target-id: au-6.6 + type: objective-id + title: 'Validation Result - Component:108c78a9-5494-4abc-a1e7-f046da419687 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: au-6.6' + uuid: 8d2a5829-ee96-4a38-b3b9-a7931b551b02 + - description: |- + # Control Description "a. Generate error messages that provide information necessary for corrective actions without revealing information that could be exploited; and b. Reveal error messages only to [Assignment: organization-defined personnel or roles]." + # Control Implementation NeuVector correlates configuration data and network traffic for error tracking to provide context around misconfigurations and threats in the form of actionable alerts. + target: + status: + state: not-satisfied + target-id: si-11 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: si-11' + uuid: e82d6f63-db19-460b-bf7d-3c46dcf1e38c + - description: |- + # Control Description "Require the developer of the system, system component, or system service, at all post-design stages of the system development life cycle, to: a. Develop and implement a plan for ongoing security and privacy control assessments; b. Perform [Selection (one or more): unit; integration; system; regression] testing/evaluation [Assignment: organization-defined frequency] at [Assignment: organization-defined depth and coverage]; c. Produce evidence of the execution of the assessment plan and the results of the testing and evaluation; d. Implement a verifiable flaw remediation process; and e. Correct flaws identified during testing and evaluation." + # Control Implementation NeuVector continually monitors kubernetes environments and container images to detect misconfigurations, advanced network threats, and vulnerable hosts with all attempts to exploit a vulnerability is documented. + target: + status: + state: not-satisfied + target-id: sa-11 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: sa-11' + uuid: ac49e0de-7653-4be5-8005-331927322ec2 + - description: |- + # Control Description Enforce approved authorizations for logical access to information and system resources in accordance with applicable access control policies. + # Control Implementation NeuVector supports internal user accounts and roles in addition to LDAP and SSO for providing RBAC access. + target: + status: + state: not-satisfied + target-id: ac-3 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: ac-3' + uuid: 574305f1-0e70-4cc7-85c3-fcfa94943753 + - description: |- + # Control Description "a. Monitor and control communications at the external managed interfaces to the system and at key internal managed interfaces within the system; b. Implement subnetworks for publicly accessible system components that are [Selection: physically; logically] separated from internal organizational networks; and c. Connect to external networks or systems only through managed interfaces consisting of boundary protection devices arranged in accordance with an organizational security and privacy architecture." + # Control Implementation NeuVector monitors all communications to external interfaces by only connecting to external networks through managed interfaces and utilizes whitelists and blacklists for rules at Layer 7. + target: + status: + state: not-satisfied + target-id: sc-7 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: sc-7' + uuid: bbea5abc-37ef-461c-a912-7118ea5618ca + - description: |- + # Control Description "Authorize access for [Assignment: organization-defined individuals or roles] to: (a) [Assignment: organization-defined all functions not publicly accessible]; and (b) [Assignment: organization-defined all security-relevant information not publicly available]." + # Control Implementation NeuVector supports mapping internal user accounts and roles in addition to LDAP and SSO roles or groups for providing RBAC access. + target: + status: + state: not-satisfied + target-id: ac-6.1 + type: objective-id + title: 'Validation Result - Component:b2fae6f6-aaa1-4929-b453-3c64398a054e / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: ac-6.1' + uuid: e0522516-4f01-4319-963c-b61ffc714e5d + - description: |- + # Control Description Integrate analysis of audit records with analysis of [Selection (one or more): vulnerability scanning information; performance data; system monitoring information; [Assignment: organization-defined data/information collected from other sources]] to further enhance the ability to identify inappropriate or unusual activity. + # Control Implementation Cluster Auditor's audit data is consolidated with system monitoring tooling (node exporters) for consolidated view to enhance inappropriate or unusual activity. + target: + status: + state: not-satisfied + target-id: au-6.5 + type: objective-id + title: 'Validation Result - Component:108c78a9-5494-4abc-a1e7-f046da419687 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: au-6.5' + uuid: 66c039ce-0453-481a-a754-0c8ca7e5a4c0 + - description: |- + # Control Implementation + Istio is configured to isolate system components that perform different mission or business functions. This is achieved through Istio's network policies and mutual TLS, which allow us to control information flows and provide enhanced protection. + related-observations: + - observation-uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - observation-uuid: f6a130b1-bdb8-41de-8921-c1c373023f59 + - observation-uuid: 3d86e5f1-bf50-43c1-a3d8-4f9d26311481 + target: + status: + state: satisfied + target-id: sc-7.21 + type: objective-id + title: 'Validation Result - Component:81f6ec5d-9b8d-408f-8477-f8a04f493690 / Control Implementation: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c / Control: sc-7.21' + uuid: 5d59c939-fb61-4aea-8ef2-39ff71fd6756 + observations: + - collected: 2024-07-09T03:24:38.473729311Z + description: | + [TEST]: 98b97ec9-a9ce-4444-83d8-71066270a424 - lula-validation-error + methods: + - TEST + relevant-evidence: + - description: | + Result: not-satisfied + remarks: | + Error getting Lula validation #98b97ec9-a9ce-4444-83d8-71066270a424: required domain is nil + uuid: 053bdc9e-654d-4287-adf1-02c14e77ece1 + - collected: 2024-07-09T03:24:38.489004016Z + description: | + [TEST]: b0a8f21e-b12f-47ea-a967-2f4a3ec69e44 - gateway-configuration-check + methods: + - TEST + relevant-evidence: + - description: | + Result: satisfied + remarks: | + validate.msg: Only allowed gateways found. All gateway types found. + validate.msg_existing_gateways: istio-admin-gateway/admin-gateway, istio-passthrough-gateway/passthrough-gateway, istio-tenant-gateway/tenant-gateway + validate.msg_allowed_gateways: admin, passthrough, tenant + uuid: 2639ccbf-1a94-440e-b820-90e957f6987c + - collected: 2024-07-09T03:24:38.489063617Z + description: | + [TEST]: 0be7345d-e9d3-4248-9c14-5fed8e7bfa01 - lula-validation-error + methods: + - TEST + relevant-evidence: + - description: | + Result: not-satisfied + remarks: | + Error getting Lula validation #0be7345d-e9d3-4248-9c14-5fed8e7bfa01: required domain is nil + uuid: 65c62b95-df70-4723-bf3b-46799d0536ad + - collected: 2024-07-09T03:24:38.489091198Z + description: | + [TEST]: 9b361d7b-4e07-40db-8b86-3854ed499a4b - lula-validation-error + methods: + - TEST + relevant-evidence: + - description: | + Result: not-satisfied + remarks: | + Error getting Lula validation #9b361d7b-4e07-40db-8b86-3854ed499a4b: required domain is nil + uuid: 41637e36-95ee-4c89-b332-80ca2d006620 + - collected: 2024-07-09T03:24:38.48912419Z + description: | + [TEST]: ecdb90c7-971a-4442-8f29-a8b0f6076bc9 - lula-validation-error + methods: + - TEST + relevant-evidence: + - description: | + Result: not-satisfied + remarks: | + Error getting Lula validation #ecdb90c7-971a-4442-8f29-a8b0f6076bc9: required domain is nil + uuid: f9e01aee-c30f-4df5-a4c7-0af351cef153 + - collected: 2024-07-09T03:24:38.497116991Z + description: | + [TEST]: 70d99754-2918-400c-ac9a-319f874fff90 - istio-metrics-logging-configured + methods: + - TEST + relevant-evidence: + - description: | + Result: satisfied + remarks: | + validate.msg: Metrics logging supported. + uuid: d6de0a77-9d2c-4332-9ab0-3c97c8b5234c + - collected: 2024-07-09T03:24:38.594646609Z + description: | + [TEST]: f345c359-3208-46fb-9348-959bd628301e - istio-prometheus-annotations-validation + methods: + - TEST + relevant-evidence: + - description: | + Result: satisfied + remarks: | + validate.msg: All pods have correct prometheus annotations. + validate.exempt_namespaces_msg: Exempted Namespaces: istio-system, kube-system, uds-dev-stack, zarf + uuid: 6fb0ef76-86ad-4629-9e9d-a725ddbf3373 + - collected: 2024-07-09T03:24:38.594709567Z + description: | + [TEST]: 8be1601e-5870-4573-ab4f-c1c199944815 - lula-validation-error + methods: + - TEST + relevant-evidence: + - description: | + Result: not-satisfied + remarks: | + Error getting Lula validation #8be1601e-5870-4573-ab4f-c1c199944815: required domain is nil + uuid: bf2a95fb-c40e-425a-a1a3-ec1307343179 + - collected: 2024-07-09T03:24:38.594743009Z + description: | + [TEST]: 73434890-2751-4894-b7b2-7e583b4a8977 - lula-validation-error + methods: + - TEST + relevant-evidence: + - description: | + Result: not-satisfied + remarks: | + Error getting Lula validation #73434890-2751-4894-b7b2-7e583b4a8977: required domain is nil + uuid: 31044f2f-75fd-4472-b624-1d918be32f40 + - collected: 2024-07-09T03:24:38.594778174Z + description: | + [TEST]: 9bfc68e0-381a-4006-9f68-c293e3b20cee - lula-validation-error + methods: + - TEST + relevant-evidence: + - description: | + Result: not-satisfied + remarks: | + Error getting Lula validation #9bfc68e0-381a-4006-9f68-c293e3b20cee: required domain is nil + uuid: fa62278d-a485-40ec-a660-51845c227040 + - collected: 2024-07-09T03:24:38.602916174Z + description: | + [TEST]: f346b797-be35-40a8-a93a-585db6fd56ec - istio-tracing-logging-support + methods: + - TEST + relevant-evidence: + - description: | + Result: not-satisfied + remarks: | + validate.msg: Tracing logging not supported. + uuid: b8c97e5c-a953-44f1-9868-42abdb5f36d3 + - collected: 2024-07-09T03:24:38.611569524Z + description: | + [TEST]: 67456ae8-4505-4c93-b341-d977d90cb125 - istio-health-check + methods: + - TEST + relevant-evidence: + - description: | + Result: satisfied + remarks: | + istiohealth.deployment_message: All deployment conditions are true. + istiohealth.hpa_message: HPA has sufficient replicas. + uuid: f920e554-a7c0-4315-89ec-037e7e971ead + - collected: 2024-07-09T03:24:38.611623214Z + description: | + [TEST]: fbe5855d-b4ea-4ff5-9f0d-5901d620577a - lula-validation-error + methods: + - TEST + relevant-evidence: + - description: | + Result: not-satisfied + remarks: | + Error getting Lula validation #fbe5855d-b4ea-4ff5-9f0d-5901d620577a: required domain is nil + uuid: c18cb484-a3d7-4f1b-9de2-bc40675ebef6 + - collected: 2024-07-09T03:24:38.621193684Z + description: | + [TEST]: c6c9daf1-4196-406d-8679-312c0512ab2e - check-istio-admin-gateway-and-usage + methods: + - TEST + relevant-evidence: + - description: | + Result: satisfied + remarks: | + validate.msg: Admin gateway exists. Admin virtual services are using admin gateway. + uuid: 4e69dd7e-0ba5-489c-82fd-bdfdd3d80afd + - collected: 2024-07-09T03:24:38.719799848Z + description: | + [TEST]: 1761ac07-80dd-47d2-947e-09f67943b986 - all-pods-istio-injected + methods: + - TEST + relevant-evidence: + - description: | + Result: satisfied + remarks: | + validate.msg: All pods have Istio sidecar proxy. + validate.exempt_namespaces_msg: Exempted Namespaces: istio-system, kube-system, uds-dev-stack, zarf + uuid: 3d86e5f1-bf50-43c1-a3d8-4f9d26311481 + - collected: 2024-07-09T03:24:38.729154607Z + description: | + [TEST]: 0da39859-a91a-4ca6-bd8b-9b117689188f - all-namespaces-istio-injected + methods: + - TEST + relevant-evidence: + - description: | + Result: not-satisfied + remarks: | + validate.msg: Non-Istio-injected namespaces: {"exempted-app", "podinfo", "test-admin-app", "test-tenant-app"} + validate.exempted_namespaces_msg: Exempted Namespaces: default, istio-admin-gateway, istio-passthrough-gateway, istio-system, istio-tenant-gateway, kube-node-lease, kube-public, kube-system, uds-crds, uds-dev-stack, uds-policy-exemptions, zarf + uuid: 4df2137a-de64-4d02-8121-1911fc9dedab + - collected: 2024-07-09T03:24:38.751849467Z + description: | + [TEST]: 570e2dc7-e6c2-4ad5-8ea3-f07974f59747 - secure-communication-with-istiod + methods: + - TEST + relevant-evidence: + - description: | + Result: satisfied + remarks: | + validate.msg_correct: NetworkPolicies correctly configured for istiod in namespaces: authservice, grafana, keycloak, loki, metrics-server, monitoring, neuvector, promtail, velero. + validate.msg_incorrect: No incorrect istiod NetworkPolicies found. + uuid: a7867fed-93d7-457c-8886-6dae4459c5b2 + - collected: 2024-07-09T03:24:38.751895453Z + description: | + [TEST]: 663f5e92-6db4-4042-8b5a-eba3ebe5a622 - lula-validation-error + methods: + - TEST + relevant-evidence: + - description: | + Result: not-satisfied + remarks: | + Error getting Lula validation #663f5e92-6db4-4042-8b5a-eba3ebe5a622: required domain is nil + uuid: 6a1961d3-8819-4db9-b052-e3998d29f94c + - collected: 2024-07-09T03:24:38.75191546Z + description: | + [TEST]: 19faf69a-de74-4b78-a628-64a9f244ae13 - lula-validation-error + methods: + - TEST + relevant-evidence: + - description: | + Result: not-satisfied + remarks: | + Error getting Lula validation #19faf69a-de74-4b78-a628-64a9f244ae13: required domain is nil + uuid: 76674b13-a05d-40ba-b6ac-99aafe1c916e + - collected: 2024-07-09T03:24:38.757825399Z + description: | + [TEST]: ca49ac97-487a-446a-a0b7-92b20e2c83cb - enforce-mtls-strict + methods: + - TEST + relevant-evidence: + - description: | + Result: satisfied + remarks: | + validate.msg: All PeerAuthentications have mtls mode set to STRICT. + uuid: f6a130b1-bdb8-41de-8921-c1c373023f59 + - collected: 2024-07-09T03:24:38.766341924Z + description: | + [TEST]: 90738c86-6315-450a-ac69-cc50eb4859cc - check-istio-logging-all-traffic + methods: + - TEST + relevant-evidence: + - description: | + Result: satisfied + remarks: | + validate.msg: Istio is logging all traffic + uuid: 337f9bea-6f8e-4c89-8142-4474083105e6 + - collected: 2024-07-09T03:24:38.772656748Z + description: | + [TEST]: fd071676-6b92-4e1c-a4f0-4c8d2bd55aed - ingress-traffic-encrypted + methods: + - TEST + relevant-evidence: + - description: | + Result: satisfied + remarks: | + validate.msg: All gateways encrypt ingress traffic + validate.msg_exempt: Exempted Gateways: istio-passthrough-gateway/passthrough-gateway + uuid: 60ff69f7-6d6f-4b92-a0a4-4ecd2df24b52 + - collected: 2024-07-09T03:24:38.776561899Z + description: | + [TEST]: e38c0695-10f6-40b6-b246-fa58b26ccd25 - istio-authorization-policies-require-authentication + methods: + - TEST + relevant-evidence: + - description: | + Result: satisfied + remarks: | + validate.msg: Authorization Policy requires authentication for keycloak + uuid: 31654aca-4189-447d-b5e6-4928c5acc603 + - collected: 2024-07-09T03:24:38.781059357Z + description: | + [TEST]: 7b045b2a-106f-4c8c-85d9-ae3d7a8e0e28 - istio-rbac-enforcement-check + methods: + - TEST + relevant-evidence: + - description: | + Result: satisfied + remarks: | + validate.msg: Istio RBAC enforced + validate.msg_authPolicies: Authorization Policies: istio-system/authservice, istio-system/jwt-authz, keycloak/keycloak-block-admin-access-from-public-gateway + uuid: f3ff3fbb-16d9-4a92-90e1-d8b7a020bccc + - collected: 2024-07-09T03:24:38.791675282Z + description: | + [TEST]: 3e217577-930e-4469-a999-1a5704b5cecb - request-authenication-and-auth-policies-configured + methods: + - TEST + relevant-evidence: + - description: | + Result: satisfied + remarks: | + validate.msg: All AuthorizationPolicies properly configured. All RequestAuthentications properly configured. + uuid: b2b0c4c3-8b3d-42a6-9ba4-ce36f198e15c + - collected: 2024-07-09T03:24:38.79173886Z + description: | + [TEST]: 7455f86d-b79c-4226-9ce3-f3fb7d9348c8 - lula-validation-error + methods: + - TEST + relevant-evidence: + - description: | + Result: not-satisfied + remarks: | + Error getting Lula validation #7455f86d-b79c-4226-9ce3-f3fb7d9348c8: required domain is nil + uuid: 35470a10-7ec9-4663-980b-c31ad61e08eb + props: + - name: threshold + ns: https://docs.lula.dev/ns + value: "true" + reviewed-controls: + control-selections: + - description: Controls Assessed by Lula + include-controls: + - control-id: ac-6.10 + - control-id: sc-8.1 + - control-id: cp-7 + - control-id: ac-5 + - control-id: cp-9.2 + - control-id: sc-39 + - control-id: cp-9.8 + - control-id: au-7 + - control-id: sc-7.20 + - control-id: cp-7.1 + - control-id: sc-8 + - control-id: cp-7.2 + - control-id: si-4 + - control-id: au-9.2 + - control-id: au-2 + - control-id: cm-5 + - control-id: cm-6 + - control-id: au-3 + - control-id: au-5.2 + - control-id: au7.1 + - control-id: au-6.3 + - control-id: sc-7.4 + - control-id: cp-9 + - control-id: sc-4 + - control-id: si-2.3 + - control-id: cp-6.3 + - control-id: ac-4 + - control-id: cp-9.1 + - control-id: ra-5.3 + - control-id: au-12.1 + - control-id: ra-5.5 + - control-id: ra-5.2 + - control-id: ac-14 + - control-id: au-8 + - control-id: au-6 + - control-id: sc-23 + - control-id: sc-3 + - control-id: ac-2.1 + - control-id: cp-6 + - control-id: sc-10 + - control-id: sc-7.8 + - control-id: ac-6 + - control-id: ca-7 + - control-id: ac-6.9 + - control-id: au-9 + - control-id: sa-11.1 + - control-id: cp-10.4 + - control-id: ac-4.21 + - control-id: au-3.1 + - control-id: cp-6.1 + - control-id: ac-6.3 + - control-id: cp-9.5 + - control-id: si-6 + - control-id: au-6.1 + - control-id: ac-2 + - control-id: au-7.1 + - control-id: ac-4.4 + - control-id: cp-10 + - control-id: au-12 + - control-id: cm-7 + - control-id: si-5 + - control-id: au-11 + - control-id: au-9.4 + - control-id: sc-13 + - control-id: sc-8.2 + - control-id: cp-9.3 + - control-id: ca-2.2 + - control-id: ra-5 + - control-id: au-5.1 + - control-id: au-4 + - control-id: cp-6.2 + - control-id: au-6.6 + - control-id: si-11 + - control-id: sa-11 + - control-id: ac-3 + - control-id: sc-7 + - control-id: ac-6.1 + - control-id: au-6.5 + - control-id: sc-7.21 + description: Controls validated + remarks: Validation performed may indicate full or partial satisfaction + start: 2024-07-09T03:24:38.798446786Z + title: Lula Validation Result + uuid: 5a0a9538-e734-48a5-a327-02e6aa6891b0 + uuid: 5e0a4e5a-3b0e-473c-9165-719942ca3f5b diff --git a/compliance/oscal-component.yaml b/compliance/oscal-component.yaml new file mode 100644 index 000000000..ecb88933e --- /dev/null +++ b/compliance/oscal-component.yaml @@ -0,0 +1,39 @@ +component-definition: + uuid: 8ef481dd-7924-42de-b426-ac300db35ec8 + metadata: + title: UDS Core + last-modified: "2024-06-28T12:00:00Z" + version: "20240628" + oscal-version: 1.1.2 + parties: + - uuid: f3cf70f8-ba44-4e55-9ea3-389ef24847d3 + type: organization + name: Defense Unicorns + links: + - href: https://github.com/defenseunicorns + rel: website + + import-component-definitions: + - href: 'file://./../src/grafana/oscal-component.yaml' + - href: 'file://./../src/istio/oscal-component.yaml' + - href: 'file://./../src/loki/oscal-component.yaml' + - href: 'file://./../src/neuvector/oscal-component.yaml' + - href: 'file://./../src/prometheus-stack/oscal-component.yaml' + - href: 'file://./../src/promtail/oscal-component.yaml' + - href: 'file://./../src/velero/oscal-component.yaml' + + capabilities: + - uuid: 857dcaf8-9080-4cf0-8029-8a03fcdde2df + name: UDS Core + description: >- + UDS Core is a secure runtime platform for mission-critical capabilities. + incorporates-components: + - component-uuid: 7e3269fc-fe33-49c9-be88-6c868e21aae1 + description: Secure Istio Service Mesh + + back-matter: + resources: + - rlinks: + - href: https://github.com/defenseunicorns/uds-core/ + title: UDS Core + uuid: 8fe4806d-4aef-4cf0-b9ed-d95d224e97bc diff --git a/src/istio/oscal-component.yaml b/src/istio/oscal-component.yaml index e1f621528..c6bb07f23 100644 --- a/src/istio/oscal-component.yaml +++ b/src/istio/oscal-component.yaml @@ -1,671 +1,1395 @@ -# add the descriptions inline component-definition: - uuid: cc873a43-e9fa-433b-8c20-222d733daf1e - metadata: - title: Istio Controlplane - last-modified: "2024-01-18T16:41:56Z" - version: "20240118" - oscal-version: 1.1.1 - parties: - - uuid: f3cf70f8-ba44-4e55-9ea3-389ef24847d3 - type: organization - name: Defense Unicorns - links: - - href: https://defenseunicorns.com - rel: website + back-matter: + resources: + - rlinks: + - href: https://github.com/istio/istio/ + title: Istio Operator + uuid: 60826461-D279-468C-9E4B-614FAC44A306 + - description: | + domain: + kubernetes-spec: + create-resources: null + resources: + - description: "" + name: istioMeshConfig + resource-rule: + field: + base64: false + jsonpath: .data.mesh + type: yaml + group: "" + name: istio + namespaces: + - istio-system + resource: configmaps + version: v1 + type: kubernetes + lula-version: "" + metadata: + name: check-istio-logging-all-traffic + uuid: 90738c86-6315-450a-ac69-cc50eb4859cc + provider: + opa-spec: + output: + observations: + - validate.msg + validation: validate.validate + rego: | + package validate + + # Default policy result + default validate = false + default msg = "Logging not enabled or configured" + + # Check if Istio's Mesh Configuration has logging enabled + validate { + logging_enabled.result + } + + msg = logging_enabled.msg + + logging_enabled = {"result": true, "msg": msg} { + # Check for access log file output to stdout + input.istioMeshConfig.accessLogFile == "/dev/stdout" + msg := "Istio is logging all traffic" + } else = {"result": false, "msg": msg} { + msg := "Istio is not logging all traffic" + } + type: opa + title: check-istio-logging-all-traffic + uuid: 90738c86-6315-450a-ac69-cc50eb4859cc + - description: | + domain: + kubernetes-spec: + create-resources: null + resources: + - description: "" + name: pods + resource-rule: + group: "" + name: "" + namespaces: [] + resource: pods + version: v1 + type: kubernetes + lula-version: "" + metadata: + name: istio-prometheus-annotations-validation + uuid: f345c359-3208-46fb-9348-959bd628301e + provider: + opa-spec: + output: + observations: + - validate.msg + - validate.exempt_namespaces_msg + validation: validate.validate + rego: | + package validate + import future.keywords.in + + # Default policy result + default validate = false + default msg = "Not evaluated" + + # Check for required Istio and Prometheus annotations + validate { + has_prometheus_annotation.result + } + msg = has_prometheus_annotation.msg + + # Check for prometheus annotations in pod spec + no_annotation = [sprintf("%s/%s", [pod.metadata.namespace, pod.metadata.name]) | pod := input.pods[_]; not contains_annotation(pod); not is_exempt(pod)] + + has_prometheus_annotation = {"result": true, "msg": msg} { + count(no_annotation) == 0 + msg := "All pods have correct prometheus annotations." + } else = {"result": false, "msg": msg} { + msg := sprintf("Prometheus annotations not found in pods: %s.", [concat(", ", no_annotation)]) + } + + contains_annotation(pod) { + annotations := pod.metadata.annotations + annotations["prometheus.io/scrape"] == "true" + annotations["prometheus.io/path"] != "" + annotations["prometheus.io/port"] == "15020" + } + + # Exemptions + exempt_namespaces = {"kube-system", "istio-system", "uds-dev-stack", "zarf"} + exempt_namespaces_msg = sprintf("Exempted Namespaces: %s", [concat(", ", exempt_namespaces)]) + is_exempt(pod) { + pod.metadata.namespace in exempt_namespaces + } + type: opa + title: istio-prometheus-annotations-validation + uuid: f345c359-3208-46fb-9348-959bd628301e + - description: | + domain: + kubernetes-spec: + create-resources: null + resources: + - description: "" + name: pods + resource-rule: + group: "" + name: "" + namespaces: [] + resource: pods + version: v1 + type: kubernetes + lula-version: "" + metadata: + name: all-pods-istio-injected + uuid: 1761ac07-80dd-47d2-947e-09f67943b986 + provider: + opa-spec: + output: + observations: + - validate.msg + - validate.exempt_namespaces_msg + validation: validate.validate + rego: | + package validate + import rego.v1 + + # Default policy result + default validate := false + default msg := "Not evaluated" + + exempt_namespaces := {"kube-system", "istio-system", "uds-dev-stack", "zarf", "istio-admin-gateway", "istio-tenant-gateway", "istio-passthrough-gateway"} + exempt_namespaces_msg = sprintf("Exempted Namespaces: %s", [concat(", ", exempt_namespaces)]) + + validate if { + has_istio_sidecar.result + } + msg = has_istio_sidecar.msg + + # Check for sidecar and init containers in pod spec + no_sidecar = [sprintf("%s/%s", [pod.metadata.namespace, pod.metadata.name]) | pod := input.pods[_]; not has_sidecar(pod); not is_exempt(pod)] + + has_istio_sidecar = {"result": true, "msg": msg} if { + count(no_sidecar) == 0 + msg := "All pods have Istio sidecar proxy." + } else = {"result": false, "msg": msg} if { + msg := sprintf("Istio sidecar proxy not found in pods: %s.", [concat(", ", no_sidecar)]) + } + + has_sidecar(pod) if { + status := pod.metadata.annotations["sidecar.istio.io/status"] + containers := json.unmarshal(status).containers + initContainers := json.unmarshal(status).initContainers + + has_container_name(pod.spec.containers, containers) + has_container_name(pod.spec.initContainers, initContainers) + } else = false + + has_container_name(containers, names) if { + container := containers[_] + container.name in names + } + + is_exempt(pod) if { + pod.metadata.namespace in exempt_namespaces + } + type: opa + title: all-pods-istio-injected + uuid: 1761ac07-80dd-47d2-947e-09f67943b986 + - description: | + domain: + kubernetes-spec: + create-resources: null + resources: + - description: "" + name: adminGateway + resource-rule: + group: networking.istio.io + name: admin-gateway + namespaces: + - istio-admin-gateway + resource: gateways + version: v1beta1 + - description: "" + name: virtualServices + resource-rule: + group: networking.istio.io + name: "" + namespaces: [] + resource: virtualservices + version: v1beta1 + type: kubernetes + lula-version: "" + metadata: + name: check-istio-admin-gateway-and-usage + uuid: c6c9daf1-4196-406d-8679-312c0512ab2e + provider: + opa-spec: + output: + observations: + - validate.msg + validation: validate.validate + rego: | + package validate + + # Expected admin gateway details + expected_gateway := "admin-gateway" + expected_gateway_namespace := "istio-admin-gateway" + expected_ns_name := sprintf("%s/%s", [expected_gateway_namespace, expected_gateway]) + + # Default policy result + default validate = false + default admin_gw_exists = false + default admin_vs_match = false + default msg = "Not evaluated" + + validate { + result_admin_gw_exixts.result + result_admin_vs_match.result + } + + msg = concat(" ", [result_admin_gw_exixts.msg, result_admin_vs_match.msg]) + + result_admin_gw_exixts = {"result": true, "msg": msg} { + input.adminGateway.kind == "Gateway" + input.adminGateway.metadata.name == expected_gateway + input.adminGateway.metadata.namespace == expected_gateway_namespace + msg := "Admin gateway exists." + } else = {"result": false, "msg": msg} { + msg := "Admin gateway does not exist." + } + + result_admin_vs_match = {"result": true, "msg": msg}{ + count(admin_vs-admin_vs_using_gateway) == 0 + count(all_vs_using_gateway-admin_vs_using_gateway) == 0 + msg := "Admin virtual services are using admin gateway." + } else = {"result": false, "msg": msg} { + msg := sprintf("Mismatch of admin virtual services using gateway. Admin VS not using GW: %s. Non-Admin VS using gateway: %s.", [concat(", ", admin_vs-admin_vs_using_gateway), concat(", ", all_vs_using_gateway-admin_vs_using_gateway)]) + } + + # Count admin virtual services + admin_vs := {adminVs.metadata.name | adminVs := input.virtualServices[_]; adminVs.kind == "VirtualService"; contains(adminVs.metadata.name, "admin")} + + # Count admin VirtualServices correctly using the admin gateway (given by vs name containing "admin") + admin_vs_using_gateway := {adminVs.metadata.name | adminVs := input.virtualServices[_]; adminVs.kind == "VirtualService"; contains(adminVs.metadata.name, "admin"); adminVs.spec.gateways[_] == expected_ns_name} + + # Count all VirtualServices using the admin gateway + all_vs_using_gateway := {vs.metadata.name | vs := input.virtualServices[_]; vs.kind == "VirtualService"; vs.spec.gateways[_] == expected_ns_name} + type: opa + title: check-istio-admin-gateway-and-usage + uuid: c6c9daf1-4196-406d-8679-312c0512ab2e + - description: | + domain: + kubernetes-spec: + create-resources: null + resources: + - description: "" + name: istioConfig + resource-rule: + field: + base64: false + jsonpath: .data.mesh + type: yaml + group: "" + name: istio + namespaces: + - istio-system + resource: configmaps + version: v1 + type: kubernetes + lula-version: "" + metadata: + name: istio-metrics-logging-configured + uuid: 70d99754-2918-400c-ac9a-319f874fff90 + provider: + opa-spec: + output: + observations: + - validate.msg + validation: validate.validate + rego: | + package validate + + # Default policy result + default validate = false + default msg = "Not evaluated" + + # Validate Istio configuration for metrics logging support + validate { + check_metrics_enabled.result + } + msg = check_metrics_enabled.msg + + check_metrics_enabled = { "result": false, "msg": msg } { + input.istioConfig.enablePrometheusMerge == false + msg := "Metrics logging not supported." + } else = { "result": true, "msg": msg } { + msg := "Metrics logging supported." + } + type: opa + title: istio-metrics-logging-configured + uuid: 70d99754-2918-400c-ac9a-319f874fff90 + - description: | + lula-version: "" + metadata: + name: communications-terminated-after-inactivity-PLACEHOLDER + uuid: 663f5e92-6db4-4042-8b5a-eba3ebe5a622 + provider: + opa-spec: + rego: | + package validate + validate := false + + # Check on destination rule, outlier detection? + # -> Doesn't appear that UDS is configured to create destination rules. + type: opa + title: communications-terminated-after-inactivity-PLACEHOLDER + uuid: 663f5e92-6db4-4042-8b5a-eba3ebe5a622 + - description: | + lula-version: "" + metadata: + name: tls-origination-at-egress-PLACEHOLDER + uuid: 8be1601e-5870-4573-ab4f-c1c199944815 + provider: + opa-spec: + rego: | + package validate + default validate := false + # How to prove TLS origination is configured at egress + # DestinationRule? + type: opa + title: tls-origination-at-egress-PLACEHOLDER + uuid: 8be1601e-5870-4573-ab4f-c1c199944815 + - description: | + lula-version: "" + metadata: + name: fips-evaluation-PLACEHOLDER + uuid: 73434890-2751-4894-b7b2-7e583b4a8977 + title: fips-evaluation-PLACEHOLDER + uuid: 73434890-2751-4894-b7b2-7e583b4a8977 + - description: | + domain: + kubernetes-spec: + create-resources: null + resources: + - description: "" + name: authorizationPolicy + resource-rule: + group: security.istio.io + name: keycloak-block-admin-access-from-public-gateway + namespaces: + - keycloak + resource: authorizationpolicies + version: v1beta1 + type: kubernetes + lula-version: "" + metadata: + name: istio-enforces-authorized-keycloak-access + uuid: fbd877c8-d6b6-4d88-8685-2c4aaaab02a1 + provider: + opa-spec: + output: + observations: + - validate.msg + validation: validate.validate + rego: | + package validate + import rego.v1 + + # Default policy result + default validate := false + default msg := "Not evaluated" + + # Validate both AuthorizationPolicy restricts access to Keycloak admin + validate if { + check_auth_policy_for_keycloak_admin_access.result + } + + msg = check_auth_policy_for_keycloak_admin_access.msg + + check_auth_policy_for_keycloak_admin_access = {"result": true, "msg": msg} if { + input.authorizationPolicy.kind == "AuthorizationPolicy" + valid_auth_policy(input.authorizationPolicy) + msg := "AuthorizationPolicy restricts access to Keycloak admin." + } else = {"result": false, "msg": msg} if { + msg := "AuthorizationPolicy does not restrict access to Keycloak admin." + } + + # Define the rule for denying access + expected_keycloak_admin_denial_rule := { + "from": [ + { + "source": { + "notNamespaces": ["istio-admin-gateway"] + } + } + ], + "to": [ + { + "operation": { + "paths": ["/admin*", "/realms/master*"] + } + } + ] + } + + # Validate that the authorization policy contains the expected first rule + valid_auth_policy(ap) if { + ap.spec.action == "DENY" + rules := ap.spec.rules + + # Ensure the expected rule is present in the input policy + some i + rules[i] == expected_keycloak_admin_denial_rule + } + type: opa + title: istio-enforces-authorized-keycloak-access + uuid: fbd877c8-d6b6-4d88-8685-2c4aaaab02a1 + - description: | + domain: + kubernetes-spec: + create-resources: null + resources: + - description: "" + name: istioConfig + resource-rule: + field: + base64: false + jsonpath: .data.mesh + type: yaml + group: "" + name: istio + namespaces: + - istio-system + resource: configmaps + version: v1 + type: kubernetes + lula-version: "" + metadata: + name: istio-tracing-logging-support + uuid: f346b797-be35-40a8-a93a-585db6fd56ec + provider: + opa-spec: + output: + observations: + - validate.msg + validation: validate.validate + rego: | + package validate + + # Default policy result + default validate = false + default msg = "Not evaluated" + + # Validate Istio configuration for event logging support + validate { + check_tracing_enabled.result + } + msg = check_tracing_enabled.msg + + check_tracing_enabled = { "result": true, "msg": msg } { + input.istioConfig.defaultConfig.tracing != null + input.istioConfig.defaultConfig.tracing.zipkin.address != "" + msg := "Tracing logging supported." + } else = { "result": false, "msg": msg } { + msg := "Tracing logging not supported." + } + type: opa + title: istio-tracing-logging-support + uuid: f346b797-be35-40a8-a93a-585db6fd56ec + - description: | + lula-version: "" + metadata: + name: egress-gateway-exists-and-configured-PLACEHOLDER + uuid: ecdb90c7-971a-4442-8f29-a8b0f6076bc9 + title: egress-gateway-exists-and-configured-PLACEHOLDER + uuid: ecdb90c7-971a-4442-8f29-a8b0f6076bc9 + - description: | + domain: + kubernetes-spec: + create-resources: null + resources: + - description: "" + name: networkPolicies + resource-rule: + group: networking.k8s.io + name: "" + namespaces: [] + resource: networkpolicies + version: v1 + type: kubernetes + lula-version: "" + metadata: + name: secure-communication-with-istiod + uuid: 570e2dc7-e6c2-4ad5-8ea3-f07974f59747 + provider: + opa-spec: + output: + observations: + - validate.msg_correct + - validate.msg_incorrect + validation: validate.validate + rego: | + package validate + + # Default policy result + default validate = false + default msg_correct = "Not evaluated" + default msg_incorrect = "Not evaluated" + + # Expected values + expected_istiod_port := 15012 + expected_istiod_protocol := "TCP" + required_namespaces := {"authservice", "grafana", "keycloak", "loki", "metrics-server", "monitoring", "neuvector", "promtail", "velero"} + + # Validate NetworkPolicy for Istiod in required namespaces + validate { + count(required_namespaces - correct_istiod_namespaces) == 0 + } + + msg_correct = sprintf("NetworkPolicies correctly configured for istiod in namespaces: %v.", [concat(", ", correct_istiod_namespaces)]) + msg_incorrect = msg { + missing_namespace := required_namespaces - correct_istiod_namespaces + count(missing_namespace) > 0 + msg := sprintf("NetworkPolicies not correctly configured for istiod in namespaces: %v.", [concat(", ", missing_namespace)]) + } else = "No incorrect istiod NetworkPolicies found." + + # Helper to find correct NetworkPolicies + correct_istiod_policies = {policy | + policy := input.networkPolicies[_] + policy.spec.egress[_].to[_].podSelector.matchLabels["istio"] == "pilot" + policy.spec.egress[_].ports[_].port == expected_istiod_port + policy.spec.egress[_].ports[_].protocol == expected_istiod_protocol + } + + # Helper to extract namespaces of correct NetworkPolicies + correct_istiod_namespaces = {policy.metadata.namespace | + policy := correct_istiod_policies[_] + } + type: opa + title: secure-communication-with-istiod + uuid: 570e2dc7-e6c2-4ad5-8ea3-f07974f59747 + - description: | + domain: + kubernetes-spec: + create-resources: null + resources: + - description: "" + name: peerAuths + resource-rule: + group: security.istio.io + name: "" + namespaces: [] + resource: peerauthentications + version: v1beta1 + type: kubernetes + lula-version: "" + metadata: + name: enforce-mtls-strict + uuid: ca49ac97-487a-446a-a0b7-92b20e2c83cb + provider: + opa-spec: + output: + observations: + - validate.msg + validation: validate.validate + rego: | + package validate + + import future.keywords.every + + # Default policy result + default validate = false + default all_strict = false + default msg = "Not evaluated" + + validate { + result_all_strict.result + } + + msg = concat(" ", [result_all_strict.msg]) + + # Rego policy logic to evaluate if all PeerAuthentications have mtls mode set to STRICT + result_all_strict = {"result": true, "msg": msg} { + every peerAuthentication in input.peerAuths { + mode := peerAuthentication.spec.mtls.mode + mode == "STRICT" + } + msg := "All PeerAuthentications have mtls mode set to STRICT." + } else = {"result": false, "msg": msg} { + msg := "Not all PeerAuthentications have mtls mode set to STRICT." + } + type: opa + title: enforce-mtls-strict + uuid: ca49ac97-487a-446a-a0b7-92b20e2c83cb + - description: | + lula-version: "" + metadata: + name: authorized-traffic-egress-PLACEHOLDER + uuid: 7455f86d-b79c-4226-9ce3-f3fb7d9348c8 + title: authorized-traffic-egress-PLACEHOLDER + uuid: 7455f86d-b79c-4226-9ce3-f3fb7d9348c8 + - description: | + domain: + kubernetes-spec: + create-resources: null + resources: + - description: "" + name: namespaces + resource-rule: + group: "" + name: "" + namespaces: [] + resource: namespaces + version: v1 + type: kubernetes + lula-version: "" + metadata: + name: all-namespaces-istio-injected + uuid: 0da39859-a91a-4ca6-bd8b-9b117689188f + provider: + opa-spec: + output: + observations: + - validate.msg + - validate.exempted_namespaces_msg + validation: validate.validate + rego: | + package validate + import future.keywords.every + import future.keywords.in + + default validate = false + default msg = "Not evaluated" + + # Validation + validate { + check_non_istio_injected_namespaces.result + } + msg = check_non_istio_injected_namespaces.msg + exempted_namespaces_msg = sprintf("Exempted Namespaces: %s", [concat(", ", exempted_namespaces)]) + + # List of exempted namespaces + exempted_namespaces := {"istio-system", "kube-system", "default", "istio-admin-gateway", + "istio-passthrough-gateway", "istio-tenant-gateway", "kube-node-lease", "kube-public", "uds-crds", + "uds-dev-stack", "uds-policy-exemptions", "zarf"} + + # Collect non-Istio-injected namespaces + non_istio_injected_namespaces := {ns.metadata.name | + ns := input.namespaces[_] + ns.kind == "Namespace" + not ns.metadata.labels["istio-injection"] == "enabled" + not ns.metadata.name in exempted_namespaces + } + + # Check no non-Istio-injected namespaces + check_non_istio_injected_namespaces = { "result": true, "msg": "All namespaces are Istio-injected" } { + count(non_istio_injected_namespaces) == 0 + } else = { "result": false, "msg": msg } { + msg := sprintf("Non-Istio-injected namespaces: %v", [non_istio_injected_namespaces]) + } + type: opa + title: all-namespaces-istio-injected + uuid: 0da39859-a91a-4ca6-bd8b-9b117689188f + - description: | + domain: + kubernetes-spec: + create-resources: null + resources: + - description: "" + name: gateways + resource-rule: + group: networking.istio.io + name: "" + namespaces: [] + resource: gateways + version: v1beta1 + type: kubernetes + lula-version: "" + metadata: + name: gateway-configuration-check + uuid: b0a8f21e-b12f-47ea-a967-2f4a3ec69e44 + provider: + opa-spec: + output: + observations: + - validate.msg + - validate.msg_existing_gateways + - validate.msg_allowed_gateways + validation: validate.validate + rego: | + package validate + import rego.v1 + + # default values + default validate := false + default msg := "Not evaluated" + + validate if { + check_expected_gw.result + check_all_gw_found.result + } + + msg := concat(" ", [check_expected_gw.msg, check_all_gw_found.msg]) + msg_existing_gateways := concat(", ", gateways) + msg_allowed_gateways := concat(", ", allowed) + + # Check if only allowed gateways are in the system + allowed := {"admin", "tenant", "passthrough"} + gateways := {sprintf("%s/%s", [gw.metadata.namespace, gw.metadata.name]) | gw := input.gateways[_]} + allowed_gateways := {sprintf("%s/%s", [gw.metadata.namespace, gw.metadata.name]) | gw := input.gateways[_]; gw_in_list(gw, allowed)} + actual_allowed := {s | g := gateways[_]; s := allowed[_]; contains(g, s)} + + check_expected_gw = {"result": true, "msg": msg} if { + gateways == allowed_gateways + msg := "Only allowed gateways found." + } else = {"result": false, "msg": msg} if { + msg := sprintf("Some disallowed gateways found: %v.", [gateways-allowed_gateways]) + } + + gw_in_list(gw, allowed) if { + contains(gw.metadata.name, allowed[_]) + } + + # Check if the entire set contains all required gateways + check_all_gw_found = {"result": true, "msg": msg} if { + actual_allowed == allowed + msg := "All gateway types found." + } else = {"result": false, "msg": msg} if { + msg := sprintf("Gateway type(s) missing: %v.", [allowed - actual_allowed]) + } + type: opa + title: gateway-configuration-check + uuid: b0a8f21e-b12f-47ea-a967-2f4a3ec69e44 + - description: | + domain: + kubernetes-spec: + create-resources: null + resources: + - description: "" + name: authorizationPolicies + resource-rule: + group: security.istio.io + name: "" + namespaces: [] + resource: authorizationpolicies + version: v1beta1 + type: kubernetes + lula-version: "" + metadata: + name: istio-rbac-enforcement-check + uuid: 7b045b2a-106f-4c8c-85d9-ae3d7a8e0e28 + provider: + opa-spec: + output: + observations: + - validate.msg + - validate.msg_authPolicies + validation: validate.validate + rego: | + package validate + + # Default policy result + default validate = false + default msg = "Istio RBAC not enforced" + + # Evaluation for Istio Authorization Policies + validate { + count(all_auth_policies) > 0 + } + + # Get all authorization policies + all_auth_policies := { sprintf("%s/%s", [authPolicy.metadata.namespace, authPolicy.metadata.name]) | + authPolicy := input.authorizationPolicies[_]; authPolicy.kind == "AuthorizationPolicy" } + + msg = "Istio RBAC enforced" { + validate + } + msg_authPolicies = sprintf("Authorization Policies: %v", [concat(", ", all_auth_policies)]) + type: opa + title: istio-rbac-enforcement-check + uuid: 7b045b2a-106f-4c8c-85d9-ae3d7a8e0e28 + - description: | + lula-version: "" + metadata: + name: istio-rbac-for-approved-personnel-PLACEHOLDER + uuid: 9b361d7b-4e07-40db-8b86-3854ed499a4b + title: istio-rbac-for-approved-personnel-PLACEHOLDER + uuid: 9b361d7b-4e07-40db-8b86-3854ed499a4b + - description: | + lula-version: "" + metadata: + name: external-traffic-managed-PLACEHOLDER + uuid: 19faf69a-de74-4b78-a628-64a9f244ae13 + provider: + opa-spec: + rego: | + package validate + default validate := false + # This policy could check meshConfig.outboundTrafficPolicy.mode (default is ALLOW_ANY) + # Possibly would need a ServiceEntry(?) + # (https://istio.io/latest/docs/tasks/traffic-management/egress/egress-control/#envoy-passthrough-to-external-services) + type: opa + title: external-traffic-managed-PLACEHOLDER + uuid: 19faf69a-de74-4b78-a628-64a9f244ae13 + - description: | + domain: + kubernetes-spec: + create-resources: null + resources: + - description: "" + name: istioddeployment + resource-rule: + group: apps + name: istiod + namespaces: + - istio-system + resource: deployments + version: v1 + - description: "" + name: istiodhpa + resource-rule: + group: autoscaling + name: istiod + namespaces: + - istio-system + resource: horizontalpodautoscalers + version: v2 + type: kubernetes + lula-version: "" + metadata: + name: istio-health-check + uuid: 67456ae8-4505-4c93-b341-d977d90cb125 + provider: + opa-spec: + output: + observations: + - istiohealth.deployment_message + - istiohealth.hpa_message + validation: istiohealth.is_istio_healthy + rego: | + package istiohealth + + default is_istio_healthy = false + default deployment_message = "Deployment status not evaluated" + default hpa_message = "HPA status not evaluated" + + # Check if the Istio Deployment is healthy + is_istio_healthy { + count(input.istioddeployment.status.conditions) > 0 + all_deployment_conditions_are_true + input.istiodhpa.status.currentReplicas >= input.istiodhpa.spec.minReplicas + } + + all_deployment_conditions_are_true { + # Ensure every condition in the array has a status that is not "False" + all_true = {c | c := input.istioddeployment.status.conditions[_]; c.status != "False"} + count(all_true) == count(input.istioddeployment.status.conditions) + } + + deployment_message = msg { + all_deployment_conditions_are_true + msg := "All deployment conditions are true." + } else = msg { + msg := "One or more deployment conditions are false." + } + + hpa_message = msg { + input.istiodhpa.status.currentReplicas >= input.istiodhpa.spec.minReplicas + msg := "HPA has sufficient replicas." + } else = msg { + msg := "HPA does not have sufficient replicas." + } + type: opa + title: istio-health-check + uuid: 67456ae8-4505-4c93-b341-d977d90cb125 + - description: | + domain: + kubernetes-spec: + create-resources: null + resources: + - description: "" + name: gateways + resource-rule: + group: networking.istio.io + name: "" + namespaces: [] + resource: gateways + version: v1beta1 + type: kubernetes + lula-version: "" + metadata: + name: ingress-traffic-encrypted + uuid: fd071676-6b92-4e1c-a4f0-4c8d2bd55aed + provider: + opa-spec: + output: + observations: + - validate.msg + - validate.msg_exempt + validation: validate.validate + rego: | + package validate + import future.keywords.every + + default validate = false + default msg = "Not evaluated" + + # Validation + validate { + check_gateways_allowed.result + } + msg := check_gateways_allowed.msg + msg_exempt := sprintf("Exempted Gateways: %s", [concat(", ", exempt_gateways)]) + + # Collect gateways that do not encrypt ingress traffic + gateways_disallowed = {sprintf("%s/%s", [gateway.metadata.namespace, gateway.metadata.name]) | + gateway := input.gateways[_]; + not allowed_gateway(gateway) + } + + check_gateways_allowed = {"result": true, "msg": "All gateways encrypt ingress traffic"} { + count(gateways_disallowed) == 0 + } else = {"result": false, "msg": msg} { + msg := sprintf("Some gateways do not encrypt ingress traffic: %s", [concat(", ", gateways_disallowed)]) + } + + # Check allowed gateway + allowed_gateway(gateway) { + every server in gateway.spec.servers { + allowed_server(server) + } + } + + exempt_gateways := {"istio-passthrough-gateway/passthrough-gateway"} + allowed_gateway(gateway) { + sprintf("%s/%s", [gateway.metadata.namespace, gateway.metadata.name]) in exempt_gateways + # *Unchecked condition that exempted gateway is only used by virtual services that route https traffic + # Find all virtual services that use this gateway + # Check that vs has https scheme + } + + # Check allowed server spec in gateway + allowed_server(server) { + server.port.protocol == "HTTP" + server.tls.httpsRedirect == true + } + + allowed_server(server) { + server.port.protocol == "HTTPS" + server.tls.mode in {"SIMPLE", "OPTIONAL_MUTUAL"} + } + type: opa + title: ingress-traffic-encrypted + uuid: fd071676-6b92-4e1c-a4f0-4c8d2bd55aed components: - - uuid: e7e62a4f-8ae7-4fb0-812c-60ea6ae26374 - type: software - title: Istio Controlplane - description: | - Istio Service Mesh - purpose: Istio Service Mesh - responsible-roles: - - role-id: provider - party-uuids: - - f3cf70f8-ba44-4e55-9ea3-389ef24847d3 - control-implementations: - - uuid: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c - source: https://raw.githubusercontent.com/GSA/fedramp-automation/93ca0e20ff5e54fc04140613476fba80f08e3c7d/dist/content/rev5/baselines/json/FedRAMP_rev5_HIGH-baseline-resolved-profile_catalog.json - description: Controls implemented by Istio and authservice that are inherited by applications + - control-implementations: + - description: Controls implemented by Istio and authservice that are inherited by applications implemented-requirements: - - uuid: 17b76910-1395-48a2-9441-edbb7c1f04ec - control-id: ac-3 - description: >- - # Control Description - Enforce approved authorizations for logical access to information and system resources in accordance with applicable access control policies. - - # Control Implementation - Istio implements with global configuration. - - # How Istio Helps - Istio helps implement access enforcement in two ways: limiting service-to-service access (see AC-4 below), - and acting as an enforcement point for end user authentication and authorization (AC-3, this section). - - Service to Service Access: Istio provides authenticatable runtime identities for all applications in the mesh in the form of X.509 certificates. - Those certificates are used for encryption in transit as well as authentication of the service's identity. - This authenticated principal can be used for access control of service to service communication via Istio's AuthorizationPolicy. - We cover this in detail in AC-4, Information Flow Enforcement, below. - - End User Authentication and Authorization: Istio facilitates end user authentication and authorization in two ways: - 1. Istio has native support for JWT authentication and authorization based on JWT claims. - It can be configured to extract a JWT from each request's headers, validate them against issuers and with specific keys, and limit access based on any of the JWT's fields. - 2. Istio supports extracting metadata from each request and forwarding it to an external authentication and authorization server. - Istio will enforce the verdict returned by this server, and can attach additional metadata returned by the server (e.g., an internal JWT in place of an external API key). - - remarks: This control is fully implemented by this tool. - - - uuid: b4383b6b-bcdf-41db-a323-873de77ba46b - control-id: ac-4 - description: >- - # Control Description - Enforce approved authorizations for controlling the flow of information within the system and between connected systems based on [Assignment: organization-defined information flow control policies]. - - # Control Implementation - Istio implements with mission team configuration. - - # How does Istio help? - Istio encrypts all in-mesh communication at runtime using the service's identity. - This provides TLS for all applications in the mesh. If you're using the Tetrate Istio Distribution, then this TLS is FIPS verified. mTLS is configured through the PeerAuthentication resource, and should be set to STRICT to enforce mTLS between all components of the information system. - Istio's AuthorizationPolicy controls service-to-service communication within the mesh. - Combined with Istio ingress and egress gateways, as well as a few installation settings, Istio can manage all traffic into and out of your deployment. - In addition to AuthorizationPolicies controlling traffic in the mesh, Istio ingress gateways terminate HTTPS on behalf of applications in the mesh (AC-4 (4) - not required by moderate but valuable nonetheless). - By managing how traffic flows out of applications using VirtualServices or ServiceEntries, all traffic leaving your infrastructure can be channeled through an egress gateway. - Egress gateways can audit and limit how traffic flows to external services outside of the information system under control. - - remarks: This control is fully implemented by this tool. - - - uuid: 19bd393a-25fb-4ef1-9633-5fc510247d69 - control-id: ac-4.4 - description: >- - # Control Description - Prevent encrypted information from bypassing [Assignment: intrusion detection mechanisms] by [Selection (one or more): decrypting the information; blocking the flow of the encrypted information; terminating communications sessions attempting to pass encrypted information; [Assignment: organization-defined procedure or method]]. - - # Control Implementation - All encrypted HTTPS connections are terminated at the Istio ingress gateway. - - remarks: This control is fully implemented by this tool. - - - uuid: 2e0879f1-381d-445d-b201-8ba3a1194147 - control-id: ac-4.21 - description: >- - # Control Description - Separate information flows logically or physically using [Assignment: organization-defined mechanisms and/or techniques] to accomplish [Assignment: organization-defined required separations by types of information]. - - # Control Implementation - Istio implements with mission team configuration. - - # How does Istio help? - When Istio is configured as above for AC-4 limiting access to services within the information system and controlling communication ingress and egress to and from the information system it provides logical separation of information flows. - Istio policies can provide this separation at the finest grain possible. For example, for HTTP traffic, Istio provides the ability to limit communication per verb and path, as well as based on header values or end-user credentials stored at headers, in addition to controlling traffic with the traditional network five-tuple. - Istio enforces the policy at the application instance itself. - - remarks: This control is fully met by this tool. - - - uuid: 7e8f7b8e-e95a-479b-96dd-7ff0bf957a84 - control-id: ac-6.3 - description: >- - # Control Description - Authorize network access to [Assignment: [all privileged commands] only for [Assignment: organization-defined compelling operational needs] and document the rationale for such access in the security plan for the system. - - # Control Implementation - Configured with an "admin" gateway to restrict access to applications that only need sysadmin access. - - remarks: This control is fully implemented by this tool. - - - uuid: 36e1ad45-4c25-42b0-b06b-889734fde442 - control-id: ac-6.9 - description: >- - # Control Description - Log the execution of privileged functions. - - # Control Implementation - Istio implements with global configuration. - - # How does Istio help? - Istio produces logs for all traffic in the information system see AU-3 below for more information on what information is logged and how to configure additional information to be logged with each access. - As long as the privileged functions are exposed as network endpoints in the information system, Istio will log their use like it logs all other network traffic. - Logging privileged use outside of the information system like using kubectl to access the cluster directly is outside of the scope of Istio's runtime logging. - - remarks: This control is fully implemented by this tool. - - - uuid: 25609c9a-a482-49e3-ba76-2cee88a5932a - control-id: ac-14 - description: >- - # Control Description - "a. Identify [Assignment: organization-defined user actions] that can be performed on the system without identification or authentication consistent with organizational mission and business functions; and - b. Document and provide supporting rationale in the security plan for the system, user actions not requiring identification or authentication." - - # Control Implementation - Istio implements with mission team configuration. - - # How does Istio help? - Istio can be configured to extract end-user credentials from requests for authentication (either locally, or forwarding them on to an external authorization service), and to disallow requests without authentication tokens. - This is configured using RequestAuthentication and AuthorizationPolicy resources, described at length in AC-4 above. - Using this, Istio's authorization policy becomes documentation of services that do not require authentication. - - remarks: This control is fully implemented by this tool. - - - uuid: 908b6b76-978d-4089-a422-3112656c8452 - control-id: ac-17.3 - description: >- - # Control Description - Route remote accesses through authorized and managed network access control points. - - # Control Implementation - Istio routes remote access through correct configuration and managed network access control points. - - remarks: This control is fully implemented by this tool. - - - uuid: 524006e4-67d7-4124-8679-58392ab20cbb - control-id: au-2 - description: >- - # Control Description - "a. Identify the types of events that the system is capable of logging in support of the audit function: [Assignment: successful and unsuccessful account logon events, account management events, object access, policy change, privilege functions, process tracking, and system events. For Web applications: all administrator activity, authentication checks, authorization checks, data deletions, data access, data changes, and permission changes]; - b. Coordinate the event logging function with other organizational entities requiring audit-related information to guide and inform the selection criteria for events to be logged; - c. Specify the following event types for logging within the system: [Assignment: organization-defined subset of the auditable events defined in AU-2a to be audited continually for each identified event) along with the frequency of (or situation requiring) logging for each identified event type]; - d. Provide a rationale for why the event types selected for logging are deemed to be adequate to support after-the-fact investigations of incidents; and - e. Review and update the event types selected for logging [Assignment: annually or whenever there is a change in the threat environment]." - - # Control Implementation - Istio provides access logs for all HTTP network requests, including mission applications. - - remarks: This control is fully implemented by this tool - - - uuid: a8e9fcc9-f900-4467-9287-b288341c9575 - control-id: au-3 - description: >- - # Control Description - "Ensure that audit records contain information that establishes the following: - a. What type of event occurred; - b. When the event occurred; - c. Where the event occurred; - d. Source of the event; - e. Outcome of the event; and - f. Identity of any individuals, subjects, or objects/entities associated with the event." - - # Control Implementation - Istio implements with global configuration. - - # How does Istio help? - Istio generates access logs for all traffic in the mesh (ingress, internal, and egress) that is a superset of the data in the [Common Log Format](https://en.wikipedia.org/wiki/Common_Log_Format). - For HTTP traffic, this includes timestamp, source and destination IPs, request verb, response code, and more. - You can get a full overview of the data that is provided [in the Istio documentation](https://istio.io/latest/docs/tasks/observability/logs/access-log/). - The format of these logs can be configured per deployment or globally at install time to conform with requirements of existing log analysis tools or other organizational needs. - By default, Envoy sidecars in the mesh emit these logs as text to standard out. However, Envoy can be configured to forward this log data over gRPC to a server that aggregates (and potentially acts on) them. - This is called the [Access Log Service (ALS)](https://www.envoyproxy.io/docs/envoy/latest/api-v3/service/accesslog/v3/als.proto). - These can be augmented by application-specific audit logging, but for many services (and HTTP services especially), the mesh's logs are sufficient to reconstruct an understanding of events to perform an audit. - - remarks: This control is fully implemented by this tool. - - - uuid: 1db223f2-4b59-424a-9bb5-d7a6a2f381e8 - control-id: au-3.1 - description: >- - # Control Description - Generate audit records containing the following additional information: [Assignment: session, connection, transaction, or activity duration; for client-server transactions, the number of bytes received and bytes sent; additional informational messages to diagnose or identify the event; characteristics that describe or identify the object or resource being acted upon; individual identities of group account users; full-text of privileged commands]. - + - control-id: ac-4 + description: |- # Control Implementation - Istio implements with global configuration. - - # How does Istio help? - Istio’s access logs can be configured to produce additional information as needed by the organization. - - remarks: This control is fully implemented by this tool. - - - uuid: 4739a734-5ad6-4898-afb7-00561ee84736 - control-id: au-9 - description: >- - # Control Description - "a. Protect audit information and audit logging tools from unauthorized access, modification, and deletion; and - b. Alert [Assignment: organization-defined personnel or roles] upon detection of unauthorized access, modification, or deletion of audit information." - - # Control Implementation - Istio contributes but does not implement. - - # How does Istio Help? - If you’re using Istio to produce audit information (see AU-3, AU-3 (1)), then the logs that Istio produces are subject to AU-9 controls. - Protecting the logs that Istio produces is outside of the scope of Istio itself, but integrating your log ingestion and protection system with the logs that Istio produces, you can easily satisfy this requirement. - Kubernetes RBAC should be configured to allow only specific users access to the log files Envoy produces, ideally no users should have direct access and instead only access logs via the log ingestion system (like Splunk). - - remarks: This control is fully implemented by this tool. - - - uuid: 395a4976-bf4a-4193-b928-05a0700e03fb - control-id: au-9.2 - description: >- - # Control Description - Store audit records [Assignment: oat least weekly] in a repository that is part of a physically different system or system component than the system or component being audited. - - # Control Implementation - Istio contributes but does not implement. - - # How does Istio Help? - See AU-9 above, but in short: ensure that Istio’s logging configuration aligns with your larger log collection pipeline. The log collection pipeline itself should implement the AU-9 controls required by the organization. - - remarks: This control is fully implemented by this tool. - - - uuid: b06017d9-c9ab-462d-9861-99b9849f4ee4 - control-id: au-12 - description: >- - # Control Description - "a. Provide audit record generation capability for the event types the system is capable of auditing as defined in AU-2a on [Assignment: all information system and network components where audit capability is deployed/available]; - b. Allow [Assignment: organization-defined personnel or roles] to select the event types that are to be logged by specific components of the system; and - c. Generate audit records for the event types defined in AU-2c that include the audit record content defined in AU-3." - - # Control Implementation - Istio implements with global configuration. - - # How does Istio Help? - Istio generates logs for all network traffic - TCP connections, HTTP requests, etc. These events are a subset of all events defined by most organizations in AU-2 a. as worthy of audit. - See AU-3 for details of the information that can be generated, and AU-3 (1) for information on customizing it. - If the only events to be logged per AU-2 a. are network events, then Istio satisfies AU-12 fully for the information system. - - remarks: This control is fully implemented by this tool. - - - uuid: bf8b66b2-8909-4935-98ba-189bf3ffde03 - control-id: cm-5 - description: >- - # Control Description - Define, document, approve, and enforce physical and logical access restrictions associated with changes to the system. - - # Control Implementation - Istio contributes but does not implement. - - # How does Istio Help? - Istio is configured with Kubernetes Custom Resources. As such it can be configured as code, and managed by your existing CM-5 conformant code management processes. - Kubernetes RBAC should be used to control who can change which configuration at runtime. - UDS Core implements CM-5 controls by implementing infrastructure as code practices, configuring Kubernetes RBAC to prevent humans from authoring configuration and allowing only continuous delivery systems (Flux, by default) to author runtime configuration. Since all configuration is managed in this CM-5 conformant way, Istio’s configuration is controlled in a CM-5 conformant way. - - remarks: This control is fully implemented by this tool. - - - uuid: 3ee327e1-2cce-4908-a78d-99e65ce2333a - control-id: cm-6 - description: >- - # Control Description - "a. Establish and document configuration settings for components employed within the system that reflect the most restrictive mode consistent with operational requirements using [Assignment: United States Government Configuration Baseline (USGCB)]; - b. Implement the configuration settings; - c. Identify, document, and approve any deviations from established configuration settings for [Assignment: organization-defined system components] based on [Assignment: organization-defined operational requirements]; and - d. Monitor and control changes to the configuration settings in accordance with organizational policies and procedures." - - "CM-6 (a) Requirement 1: The service provider shall use the DoD STIGs or Center for Internet Security guidelines to establish configuration settings or establishes its own configuration settings if USGCB is not available. - CM-6 (a) Requirement 2: The service provider shall ensure that checklists for configuration settings are Security Content Automation Protocol (SCAP) validated or SCAP compatible (if validated checklists are not available). - CM-6 (a) Guidance: Information on the USGCB can be found at: https://csrc.nist.gov/projects/united-states-government-configuration-baseline." - - - # Control Implementation - Istio contributes but does not implement. - - # How does Istio Help? - This document provides the guidance for configuring Istio, both globally as well as for mission teams. Additional best practices should be followed, including: - - NIST SP 800-204A: Building Secure Microservices-based Applications Using Service-Mesh Architecture - - NIST SP 800-204B: Attribute-based Access Control for Microservices-based Applications using a Service Mesh - Tetrate helps maintain and periodically audits UDS Core’s Istio configurations to ensure they implement best practice defaults. - - remarks: This control is fully implemented by this tool. - - - uuid: 0ab5781b-2f6b-4c71-83ef-e00f10c7ed93 - control-id: cm-8.1 - description: >- - # Control Description - Update the inventory of system components as part of component installations, removals, and system updates. - - # Control Implementation - Istio implements with global configuration. - - # How does Istio Help? - Istio’s service inventory is updated continuously from the Kubernetes API server (the information system’s source of truth for what applications are running). Therefore, the inventory is updated when components of the information system are installed or removed. As a result, Istio implements CM-8 (1) for the information system. - - remarks: This control is fully implemented by this tool. - - - uuid: 8d72738e-99ae-40e8-9fc0-bdfc51d24121 - control-id: cm-8.2 - description: >- - # Control Description - Update the inventory of system components as part of component installations, removals, and system updates. - + Istio encrypts all in-mesh communication at runtime using FIPS verified mTLS in addition to ingress and egress gateways for controlling communication. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#ca49ac97-487a-446a-a0b7-92b20e2c83cb' + rel: lula + text: Check that Istio is enforcing mtls STRICT + - href: '#1761ac07-80dd-47d2-947e-09f67943b986' + rel: lula + text: All pods are istio injected with proxyv2 sidecar + - href: '#fd071676-6b92-4e1c-a4f0-4c8d2bd55aed' + rel: lula + text: Check ingress traffic is encrypted + remarks: '# Control Description Information flow control regulates where information is allowed to travel within an information system and between information systems (as opposed to who is allowed to access the information) and without explicit regard to subsequent accesses to that information. Flow control restrictions include, for example, keeping export-controlled information from being transmitted in the clear to the Internet, blocking outside traffic that claims to be from within the organization, restricting web requests to the Internet that are not from the internal web proxy server, and limiting information transfers between organizations based on data structures and content.' + uuid: 9e158525-96bd-4d4f-a674-7e3eab9aea7a + - control-id: ac-4.4 + description: |- # Control Implementation - Provides an inventory of all workloads (including mission apps) in the service mesh, viewable in Kiali. The inventory is automatically and continuously updated. - - remarks: This control is fully implemented by this tool. - - - uuid: 3d88af30-61e0-47ed-a495-74ca61ce99a7 - control-id: ia-2 - description: >- - # Control Description - Uniquely identify and authenticate organizational users and associate that unique identification with processes acting on behalf of those users. - + All encrypted HTTPS connections are terminated at the Istio ingress gateway. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#ca49ac97-487a-446a-a0b7-92b20e2c83cb' + rel: lula + text: Check that Istio is enforcing mtls STRICT + - href: '#1761ac07-80dd-47d2-947e-09f67943b986' + rel: lula + text: All pods are istio injected with proxyv2 sidecar + - href: '#fd071676-6b92-4e1c-a4f0-4c8d2bd55aed' + rel: lula + text: Check ingress traffic is encrypted + remarks: '# Control Description The information system prevents encrypted information from bypassing content-checking mechanisms by decrypting the information; blocking the flow of the encrypted information; terminating communications sessions attempting to pass encrypted information; Assignment: organization-defined procedure or method.' + uuid: c3e13abc-3c19-4f08-a2f8-40fcbef5daa7 + - control-id: ac-4.21 + description: |- # Control Implementation - Istio implements with mission team configuration. - - # How does Istio Help? - Istio can be used to implement authentication of end-user credentials for applications in the mesh. This is typically configured via Istio’s external authorization service or by validating JWTs on each request (see AC-3). - If components in the information system are protected by Istio configured to validate end-user credentials, then Istio satisfies the authentication clause IA-2: “[the information system] authenticates organizational users (or processes acting on behalf or organizational users).” - Assigning user identities themselves, and ensuring their uniqueness, is out of scope of Istio. (Istio does assign identities to applications or processes running in the information system – see AC-4.) - - remarks: This control is fully implemented by this tool. - - - uuid: 4b28dcb2-f7fb-4944-9661-1182ccf197b2 - control-id: ia-4 - description: >- - # Control Description - "Manage system identifiers by: - a. Receiving authorization from [Assignment: oat a minimum, the ISSO (or similar role within the organization)] to assign an individual, group, role, service, or device identifier; - b. Selecting an identifier that identifies an individual, group, role, service, or device; - c. Assigning the identifier to the intended individual, group, role, service, or device; and - d. Preventing reuse of identifiers for [Assignment: at least two (2) years]." - + Istio is configured to use ingress and egress gateways to provide logical flow separation. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#0da39859-a91a-4ca6-bd8b-9b117689188f' + rel: lula + text: Check namespaces are istio injected + - href: '#c6c9daf1-4196-406d-8679-312c0512ab2e' + rel: lula + text: Check that Istio is configured with an admin gateway and admin services use it + - href: '#b0a8f21e-b12f-47ea-a967-2f4a3ec69e44' + rel: lula + text: Validates that Istio Gateways are available and expected VirtualServices using each Gateway. + remarks: 'Separate information flows logically or physically using [Assignment: organization-defined mechanisms and/or techniques] to accomplish [Assignment: organization-defined required separations by types of information].' + uuid: 6e32feb5-ce43-465f-9422-e3ef3276bf5d + - control-id: ac-6.3 + description: |- # Control Implementation - Istio contributes but does not implement. - - # How does Istio Help? - Istio assigned identities to runtime entities based on their Kubernetes service account. Service accounts are unique per (namespace, service account name) pair and are assigned to all pods in the cluster. - Pods should opt in to using a specific service account, but if they do not then Kubernetes provides a default service account per namespace. - - The identities Istio assigned are: - a. Authorized for the specific application by checking against the Kubernetes API server (the system of record for runtime identities). - b. Each service receives an identity from Kubernetes at runtime, whether it is assigned explicitly or not. - c. Sent only to correct workloads because Istio authenticates runtime proofs (mainly, the pod’s service account token) in addition to authorizing the identity by checking with the Kubernetes API server. - d. Service accounts in Kubernetes are unique. However, Kubernetes-level controls (out of the scope of Istio) need to be implemented to ensure that identities are not re-used. - e. The Kubernetes service account lifecycle is out of scope of Istio. A Kubernetes-level control is need to satisfy this requirement. - - remarks: This control is fully implemented by this tool. - - - uuid: 501ef187-1344-40bf-a697-127ae1d65a41 - control-id: ia-7 - description: >- - # Control Description - Implement mechanisms for authentication to a cryptographic module that meet the requirements of applicable laws, executive orders, directives, policies, regulations, standards, and guidelines for such authentication. - + Configured with an "admin" gateway to restrict access to applications that only need administrative access. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#c6c9daf1-4196-406d-8679-312c0512ab2e' + rel: lula + text: Check that Istio is configured with an admin gateway and admin services use it + remarks: 'Authorize network access to [Assignment: organization-defined privileged commands] only for [Assignment: organization-defined compelling operational needs] and document the rationale for such access in the security plan for the system.' + uuid: 0081f95a-3233-4e07-a6cd-95cb1905c318 + - control-id: ac-6.9 + description: |- # Control Implementation - Istio implements with global configuration. - - # How does Istio Help? - Istio provides encryption in transit for all applications in the mesh, and can also provide TLS termination at ingress and TLS origination at egress. Tetrate Istio Distribution (TID) is the only FIPS 140-2 Verified Istio distribution that exists. It is available from the Iron Bank. - When using the TID FIPS builds, all communication between components of the information system is encrypted using FIPS 140-2 verified software. - - remarks: This control is fully implemented by this tool. - - - uuid: 902e23be-f46b-416e-b407-fa579be28612 - control-id: sc-3 - description: >- - # Control Description - Isolate security functions from nonsecurity functions. - + Istio produces logs for all traffic in the information system. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#90738c86-6315-450a-ac69-cc50eb4859cc' + rel: lula + text: Check that Istio is logging all traffic which could contain priviledged function calls + - href: '#1761ac07-80dd-47d2-947e-09f67943b986' + rel: lula + text: All pods are istio injected with proxyv2 sidecar + remarks: Log the execution of privileged functions. + uuid: 6d8a6c80-2844-4bfd-bc9d-0f5a71e5c979 + - control-id: ac-14 + description: |- # Control Implementation - Istio breaks-down services into microservices to isolate security functions from non-security functions. - - remarks: This control is fully implemented by this tool. - - - uuid: 11732a14-62d3-43ff-b294-5b2508b8e967 - control-id: sc-4 - description: >- - # Control Description - Prevent unauthorized and unintended information transfer via shared system resources. - + Istio implements with service to service and provides authorization policies that require authentication to access any non-public features. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#fbd877c8-d6b6-4d88-8685-2c4aaaab02a1' + rel: lula + text: Validates that Istio is used to authorize access to Keycloak admin console only from admin gateway + remarks: 'a. Identify [Assignment: organization-defined user actions] that can be performed on the system without identification or authentication consistent with organizational mission and business functions; and b. Document and provide supporting rationale in the security plan for the system, user actions not requiring identification or authentication."' + uuid: c8c03abd-244d-4813-a966-3feece1bad6a + - control-id: au-2 + description: |- # Control Implementation - Istio can enforce that outbound traffic goes through an Egress Gateway. When combined with a Network Policy, you can enforce all traffic, or some subset, goes through the egress gateway to prevent unauthorized and unintended information transfer via shared system resources. - - remarks: This control is fully implemented by this tool. - - - uuid: 8258a234-68c6-4b0b-b527-b58e5b39ecda - control-id: sc-5 - description: >- - # Control Description - "a. [Selection: Protect against] the effects of the following types of denial-of-service events: [Assignment: at a minimum: ICMP (ping) flood, SYN flood, slowloris, buffer overflow attack, and volume attack]; and - b. Employ the following controls to achieve the denial-of-service objective: [Assignment: organization-defined controls by type of denial-of-service event]." - + Istio logs all Istio event logs within the system's mesh network. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#90738c86-6315-450a-ac69-cc50eb4859cc' + rel: lula + text: Check that Istio is logging all traffic which could contain audit events + remarks: 'a. Identify the types of events that the system is capable of logging in support of the audit function: [Assignment: organization-defined event types that the system is capable of logging]; b. Coordinate the event logging function with other organizational entities requiring audit-related information to guide and inform the selection criteria for events to be logged; c. Specify the following event types for logging within the system: [Assignment: organization-defined event types (subset of the event types defined in AU-2a.) along with the frequency of (or situation requiring) logging for each identified event type]; d. Provide a rationale for why the event types selected for logging are deemed to be adequate to support after-the-fact investigations of incidents; and e. Review and update the event types selected for logging [Assignment: organization-defined frequency].' + uuid: 88f300a6-aa21-41b4-919d-29ef3e4381bb + - control-id: au-3 + description: |- # Control Implementation - Istio monitors the egress traffic and enforces all the security policies. Monitoring the egress traffic, enables you to analyze, possibly offline, and detect an attack. - - - uuid: 8fcf76d0-a612-4f1a-8c07-2dfe03d7b03a - control-id: sc-7 - description: >- - # Control Description - "a. Monitor and control communications at the external managed interfaces to the system and at key internal managed interfaces within the system; - b. Implement subnetworks for publicly accessible system components that are [Selection: physically; logically] separated from internal organizational networks; and - c. Connect to external networks or systems only through managed interfaces consisting of boundary protection devices arranged in accordance with an organizational security and privacy architecture." - + Istio logs all Istio event logs within the system's mesh network. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#f346b797-be35-40a8-a93a-585db6fd56ec' + rel: lula + text: Check that Istio is configured to provide tracing data + remarks: 'Ensure that audit records contain information that establishes the following: a. What type of event occurred; b. When the event occurred; c. Where the event occurred; d. Source of the event; e. Outcome of the event; and f. Identity of any individuals, subjects, or objects/entities associated with the event.' + uuid: 52756a01-6f5c-49b1-8a6b-972b74a01da4 + - control-id: au-3.1 + description: |- # Control Implementation - Istio implements with global configuration. - - # How does Istio Help? - Istio alone can not completely satisfy the SC-7 requirement, because Istio sits at Layer 4 and above, in other words it sits atop the IP network you provide it. However, Istio can aid in implementing boundary protection in your stack: - a. Istio provides monitoring (AU-12) and control of traffic ingress into and egressing out of the cluster, as well as internally for all communication between components. If all information system components are running in the cluster, this satisfies SC-7 a. - b. Istio operates at layer 4 and above - it cannot implement sub-networks at the IP layer. However, Istio can be used for logical separation of components at runtime (see AC-4 (21)). - Istio’s separation should be augmented with network-level separation, e.g. via a CNI plugin, to help implement a defense in depth strategy. - c. The only ingress into the cluster is via Istio gateways (AC-3), egress is controlled by Istio gateways (AC-4). If all information system components are running in the cluster, this satisfies the needs of SC-7 c. - Further, access policy can be applied at both points, as well as at every application instance via Istio’s sidecar. This gives the organization the opportunity to implement more fine-grained controls than is needed by SC-7. - - remarks: This control is fully implemented by this tool. - - - uuid: cbc3fcca-7628-4f70-ac40-8bea413ae4dc - control-id: sc-7.4 - description: >- - # Control Description - "(a) Implement a managed interface for each external telecommunication service; - (b) Establish a traffic flow policy for each managed interface; - (c) Protect the confidentiality and integrity of the information being transmitted across each interface; - (d) Document each exception to the traffic flow policy with a supporting mission or business need and duration of that need; - (e) Review exceptions to the traffic flow policy [Assignment: at least every ninety (90) days or whenever there is a change in the threat environment that warrants a review of the exceptions] and remove exceptions that are no longer supported by an explicit mission or business need; - (f) Prevent unauthorized exchange of control plane traffic with external networks; - (g) Publish information to enable remote networks to detect unauthorized control plane traffic from internal networks; and - (h) Filter unauthorized control plane traffic from external networks." - + Istio has been configured to implement event logging within our environment. This includes capturing metrics related to the duration of sessions, connections, transactions, or activities. Specifically, Istio's telemetry features are utilized to capture these metrics, which provide valuable data that can be used to infer the duration of sessions or connections. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#70d99754-2918-400c-ac9a-319f874fff90' + rel: lula + text: Check that Istio is configured to provide metrics data + - href: '#1761ac07-80dd-47d2-947e-09f67943b986' + rel: lula + text: All pods are istio injected with proxyv2 sidecar + - href: '#f345c359-3208-46fb-9348-959bd628301e' + rel: lula + text: Check that pods running sidecar have the correct annotations for prometheus metrics scrape + remarks: 'Generate audit records containing the following additional information: [Assignment: organization-defined additional information]. AU-3 (1) [session, connection, transaction, or activity duration; for client-server transactions, the number of bytes received and bytes sent; additional informational messages to diagnose or identify the event; characteristics that describe or identify the object or resource being acted upon; individual identities of group account users; full-text of privileged commands]' + uuid: 16cc258e-d907-47bb-97d9-4e92677cf075 + - control-id: au-12 + description: |- # Control Implementation - Istio implements with global configuration. - - # How does Istio Help? - Like SC-7, Istio works in tandem with a few other components of the infrastructure to satisfy SC-7 (4). - For example, it’s common to use an identity-aware proxy (like UDS Core’s CNAP), or even a cloud provider load balancer (like an ELB) as the initial interface for an external service, immediately passing the requests on to Istio’s ingress. - For all of the information system components in the cluster: - a. Istio provides an interface its ingress and egress gateways for external network traffic. Istio allows configuring how that interface is exposed, including ports and protocols as well as certificates that are served. See AC-4. - b. Istio provides fine-grained layer 7 policy on each request to control how traffic flows through that ingress. It enforces this policy at ingress gateways to control the external traffic ingress into your information system. - Istio also enforces them at egress gateways to control how components of your information system communicate with external systems. See AC-4. - c. Istio’s ingress gateways serve TLS (or mTLS) to external systems, and Istio provides mTLS between applications of the information system in the mesh. See AC-4. - d. Istio must be explicitly configured to allow exceptions, either in AuthorizationPolicy documents controlling runtime access or in resource annotations exempting traffic from Istio’s sidecar. - These can be used as supporting documents for SC-7 (4) d., but will need to be augmented with organizational documentation citing specific mission needs and durations. - e. This is an organizational activity out of the scope of Istio. - - remarks: This control is fully implemented by this tool. - - - uuid: e8c72e81-4e58-42cb-bcd4-714df65e2225 - control-id: sc-7.5 - description: >- - # Control Description - Deny network communications traffic by default and allow network communications traffic by exception [Selection (one or more): at managed interfaces; for [Assignment: any systems]]. - + Istio provides audit record generation capabilities for a variety of event types, including session, connection, transaction, or activity durations, and the number of bytes received and sent. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#90738c86-6315-450a-ac69-cc50eb4859cc' + rel: lula + text: Check that Istio is logging all traffic which could contain audit events + remarks: 'a. Provide audit record generation capability for the event types the system is capable of auditing as defined in AU-2a on [Assignment: organization-defined system components]; b. Allow [Assignment: organization-defined personnel or roles] to select the event types that are to be logged by specific components of the system; and c. Generate audit records for the event types defined in AU-2c that include the audit record content defined in AU-3.' + uuid: 8f645835-6538-4327-a7aa-453b398f5ef4 + - control-id: cm-5 + description: |- # Control Implementation - Istio implements with mission team configuration. - - # How does Istio Help? - At ingress and egress gateways, Istio denies all traffic that does not have explicit traffic routing policies in the form of a VirtualService attached to the gateways. - Inside of the mesh, and to control egress out to external services, you can author AuthorizationPolicies to limit access. - Those policies must be written in the “allow with positive matching” style. - Together, Istio implements the SC-7 (5) control on behalf of applications in the mesh. - - remarks: This control is fully implemented by this tool. - - - uuid: 6ef57828-3fda-49a6-8b18-e4926ade2e05 - control-id: sc-7.8 - description: >- - # Control Description - Route [Assignment: organization-defined internal communications traffic] to [Assignment: organization-defined external networks] through authenticated proxy servers at managed interfaces. - + Istio enforces logical access restrictions associated with changes to the system. Istio's Role-Based Access Control (RBAC) features are used to define and enforce access controls, ensuring that only approved personnel can make changes to the system. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#7b045b2a-106f-4c8c-85d9-ae3d7a8e0e28' + rel: lula + text: Check that Istio is enforcing RBAC + - href: '#9b361d7b-4e07-40db-8b86-3854ed499a4b' + rel: lula + text: Check that particular RBAC is ensuring only approved personnel can make changes to the system [PLACEHOLDER] + remarks: Define, document, approve, and enforce physical and logical access restrictions associated with changes to the system. + uuid: 32e53a18-4b64-4a24-935c-11cbac2c62be + - control-id: sc-3 + description: |- # Control Implementation - Istio’s traffic management model relies on the Envoy proxies that are deployed along with the services. - All traffic that the mesh services send and receive (data plane traffic) is proxied through Envoy, making it easy to direct and control traffic around the mesh without making any changes to the services. - - remarks: This control is fully implemented by this tool. - - - uuid: e288c006-3a9d-44d7-91c9-61a4260bc148 - control-id: sc-7.10 - description: >- - # Control Description - "(a) Prevent the exfiltration of information; and - (b) Conduct exfiltration tests [Assignment: organization-defined frequency]." - Prevention of exfiltration applies to both the intentional and unintentional exfiltration of information. Techniques used to prevent the exfiltration of information from systems may be implemented at internal endpoints, external boundaries, and across managed interfaces and include adherence to protocol - formats, monitoring for beaconing activity from systems, disconnecting external network interfaces except when explicitly needed, employing traffic profile analysis to detect deviations from the volume and types of traffic expected, call backs to command and control centers, conducting penetration testing, - monitoring for steganography, disassembling and reassembling packet headers, and using data loss and data leakage prevention tools. Devices that enforce strict adherence to protocol formats include deep packet inspection firewalls and Extensible Markup Language (XML) gateways. The devices verify adherence - to protocol formats and specifications at the application layer and identify vulnerabilities that cannot be detected by devices that operate at the network or transport layers. The prevention of exfiltration is similar to data loss prevention or data leakage prevention and is closely associated with - cross-domain solutions and system guards that enforce information flow requirements. - + Namespaces, Istio gateways, and network policies collectively by providing resource isolation, secure traffic routing, and network segmentation to prevent unauthorized and unintended information transfer. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#c6c9daf1-4196-406d-8679-312c0512ab2e' + rel: lula + text: Check that Istio is configured with an admin gateway and admin services use it + - href: '#b0a8f21e-b12f-47ea-a967-2f4a3ec69e44' + rel: lula + text: Validates that Istio Gateways are available and expected VirtualServices using each Gateway. + remarks: Isolate security functions from nonsecurity functions. + uuid: 9e2894a3-2452-4f7a-b8a5-f72b89b23c87 + - control-id: sc-4 + description: |- # Control Implementation - Istio can set an alert to detect attempted data exfiltration by a service in the cluster. In this mode, Prometheus can tell you both the source and (attempted) destination workload for the blocked request. - The Istio System manages the ingress and egress network traffic permitted within your OPA-integrated Istio service mesh. You can specify egress traffic is only allowed to a predefined collection of endpoints to minimize the risk of data exfiltration or to implement microservice API authorization. - - remarks: This control is fully implemented by this tool. - - - uuid: 5aadb273-8674-4220-b905-3828b57499cb - control-id: sc-7.20 - description: >- - # Control Description - Provide the capability to dynamically isolate [Assignment: organization-defined system components] from other system components. - + Istio enforces outbound traffic goes through an Egress Gateway with a Network Policy. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#7455f86d-b79c-4226-9ce3-f3fb7d9348c8' + rel: lula + text: Network Policies are in place to ensure that only authorized traffic is allowed to egress the cluster [PLACEHOLDER] + - href: '#ecdb90c7-971a-4442-8f29-a8b0f6076bc9' + rel: lula + text: Egress Gateway exists and is configured [PLACEHOLDER] + remarks: Prevent unauthorized and unintended information transfer via shared system resources. + uuid: 86bc4fb7-f91b-4f2c-b914-65427951018c + - control-id: sc-7.4 + description: |- # Control Implementation - Locality-weighted load balancing allows administrators to control the distribution of traffic to endpoints based on the localities of where the traffic originates and where it will terminate. - These localities are specified using arbitrary labels that designate a hierarchy of localities in {region}/{zone}/{sub-zone} form. - If the goal of the operator is not to distribute load across zones and regions but rather to restrict the region of failover to meet other operational requirements an operator can set a ‘failover’ policy instead of a ‘distribute’ policy. - - remarks: This control is fully implemented by this tool. - - - uuid: 35490063-9fc5-4ea7-ae6e-4ef25fbf2d5a - control-id: sc-7.21 - description: >- - # Control Description - Employ boundary protection mechanisms to isolate [Assignment: organization-defined system components] supporting [Assignment: organization-defined missions and/or business functions]. - + Istio is configured to provide managed interfaces for external telecommunication services, establish traffic flow policies, and protect the confidentiality and integrity of transmitted information. It also prevents unauthorized exchange of control plane traffic and filters unauthorized control plane traffic. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#570e2dc7-e6c2-4ad5-8ea3-f07974f59747' + rel: lula + text: Resources in namespaces can securely communicate with Istio control plane via network policies + - href: '#fbd877c8-d6b6-4d88-8685-2c4aaaab02a1' + rel: lula + text: Validates that Istio is used to authorize access to Keycloak admin console only from admin gateway + - href: '#b0a8f21e-b12f-47ea-a967-2f4a3ec69e44' + rel: lula + text: Validates that Istio Gateways are available and expected VirtualServices using each Gateway. + remarks: '(a) Implement a managed interface for each external telecommunication service; (b) Establish a traffic flow policy for each managed interface; (c) Protect the confidentiality and integrity of the information being transmitted across each interface; (d) Document each exception to the traffic flow policy with a supporting mission or business need and duration of that need; (e) Review exceptions to the traffic flow policy [Assignment: organization-defined frequency] and remove exceptions that are no longer supported by an explicit mission or business need; (f) Prevent unauthorized exchange of control plane traffic with external networks; (g) Publish information to enable remote networks to detect unauthorized control plane traffic from internal networks; and (h) Filter unauthorized control plane traffic from external networks.' + uuid: 85df9e6c-3d94-4c60-9a20-8c481831f1e0 + - control-id: sc-7.8 + description: |- # Control Implementation - Multi-mesh deployments facilitate division of a system into subsystems with different security and compliance requirements, and facilitate the boundary protection. - You put each subsystem into a separate service mesh, preferably on a separate network. You connect the Istio meshes using gateways. The gateways monitor and control cross-mesh traffic at the boundary of each mesh. - Istio isolation boundaries can run multiple TSB-managed Istio environments within a Kubernetes cluster, or spanning several clusters. - These Istio environments are isolated from each other in terms of service discovery and config distribution. - - remarks: This control is fully implemented by this tool. - - - uuid: d07f799b-d95c-461e-ae03-4f174ada99bb - control-id: sc-7.25 - description: >- - # Control Description - Prohibit the direct connection of [Assignment: organization-defined unclassified national security system] to an external network without the use of [Assignment: organization-defined boundary protection device]. - + is configured to route internal communications traffic to external networks through authenticated proxy servers at managed interfaces, using its Egress Gateway. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#ecdb90c7-971a-4442-8f29-a8b0f6076bc9' + rel: lula + text: Egress Gateway exists and is configured [PLACEHOLDER] + - href: '#19faf69a-de74-4b78-a628-64a9f244ae13' + rel: lula + text: Check that external traffic is managed [PLACEHOLDER] + remarks: 'Route [Assignment: organization-defined internal communications traffic] to [Assignment: organization-defined external networks] through authenticated proxy servers at managed interfaces.' + uuid: 4b930af3-ae84-43ff-b751-448fe1c2eec8 + - control-id: sc-7.20 + description: |- # Control Implementation - All outbound traffic from an Istio-enabled pod is redirected to its sidecar proxy by default, accessibility of URLs outside of the cluster depends on the configuration of the proxy. - By default, Istio configures the Envoy proxy to pass through requests for unknown services. Although this provides a convenient way to get started with Istio, configuring stricter control is usually preferable. - Egress gateways can limit how traffic flows to external services outside of the information system under control. - Istio can be configured to extract end-user credentials from requests for authentication (either locally, or forwarding them on to an external authorization service), and to disallow requests without authentication tokens. - - remarks: This control is fully implemented by this tool. - - - uuid: fbdaaeea-0ac4-4bbc-8b75-5b6b7da031e5 - control-id: sc-8 - description: >- - # Control Description - Protect the [Selection confidentiality AND integrity] of transmitted information. - + Istio is configured to dynamically isolate certain internal system components when necessary. This is achieved through Istio's network policies, which allow us to partition or separate system components + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#ca49ac97-487a-446a-a0b7-92b20e2c83cb' + rel: lula + text: Check that Istio is enforcing mtls STRICT + - href: '#1761ac07-80dd-47d2-947e-09f67943b986' + rel: lula + text: All pods are istio injected with proxyv2 sidecar + remarks: 'Provide the capability to dynamically isolate [Assignment: organization-defined system components] from other system components.' + uuid: 30b49a3e-ad38-441d-8c07-5a9018848a02 + - control-id: sc-7.21 + description: |- # Control Implementation - Istio implements with global configuration. - - # How does Istio Help? - Istio provides encryption in transit (TLS) for all applications in the mesh. This ensures both confidentiality and integrity of communication between applications deployed in the mesh. When you deploy a FIPS verified build of Istio (e.g. from the Tetrate Istio Distribution), that encryption conforms to FIPS 140-2 requirements. When Istio is configured in STRICT mTLS mode (see AC-4), it implements the SC-8 control for all applications in the mesh. - - remarks: This control is fully implemented by this tool. - - - uuid: 3a204429-6f70-481c-8092-657cc7e79456 - control-id: sc-8.1 - description: >- - # Control Description - Implement cryptographic mechanisms to [Selection prevent unauthorized disclosure of information AND detect changes to information] during transmission. - + Istio is configured to isolate system components that perform different mission or business functions. This is achieved through Istio's network policies and mutual TLS, which allow us to control information flows and provide enhanced protection. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#ca49ac97-487a-446a-a0b7-92b20e2c83cb' + rel: lula + text: Check that Istio is enforcing mtls STRICT + - href: '#1761ac07-80dd-47d2-947e-09f67943b986' + rel: lula + text: All pods are istio injected with proxyv2 sidecar + remarks: 'Employ boundary protection mechanisms to isolate [Assignment: organization-defined system components] supporting [Assignment: organization-defined missions and/or business functions].' + uuid: c9a1e9bc-3caa-44ce-a300-ecd722487987 + - control-id: sc-8 + description: |- # Control Implementation - Istio implements with global configuration. - - # How does Istio Help? - See SC-8 for full details. In short, Istio provides encryption in transit (mutual TLS) for all applications in the mesh. When you’re using TID’s FIPS verified build of Istio, then this encryption also satisfies FIPS 140-2 requirements. - - remarks: This control is fully implemented by this tool. - - - uuid: b044588e-77b1-4e5d-a1bb-b6b0a789c5b0 - control-id: sc-8.2 - description: >- - # Control Description - Maintain the [Selection (one or more): confidentiality; integrity] of information during preparation for transmission and during reception. - + Istio is configured to protect the confidentiality and integrity of transmitted information across both internal and external networks. This is achieved through Istio's mutual TLS, which encrypts service-to-service communication, ensuring that data in transit is not exposed to the possibility of interception and modification. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#ca49ac97-487a-446a-a0b7-92b20e2c83cb' + rel: lula + text: Check that Istio is enforcing mtls STRICT + - href: '#1761ac07-80dd-47d2-947e-09f67943b986' + rel: lula + text: All pods are istio injected with proxyv2 sidecar + remarks: 'Protect the [Selection (one or more): confidentiality; integrity] of transmitted information.' + uuid: 7548b4ee-e4a3-4e3c-a34b-95eccad45f92 + - control-id: sc-8.1 + description: |- # Control Implementation - Istio implements with global configuration. - - # How does Istio Help? - Istio provides encryption in transit (TLS) for all applications in the mesh. This ensures both confidentiality and integrity of communication between applications deployed in the mesh. When you deploy a FIPS verified build of Istio (e.g. from the Tetrate Istio Distribution), that encryption conforms to FIPS 140-2 requirements. When Istio is configured in STRICT mTLS mode (see AC-4), it implements the SC-8 control for all applications in the mesh. - - remarks: This control is fully implemented by this tool. - - - uuid: 1e4bf509-37d9-4e06-b6ac-11108e760f4c - control-id: sc-10 - description: >- - # Control Description - Terminate the network connection associated with a communications session at the end of the session or after [Assignment: no longer than ten (10) minutes for privileged sessions and no longer than fifteen (15) minutes for user sessions.] - + Istio is configured to protect the confidentiality and integrity of transmitted information across both internal and external networks. This is achieved through Istio's mutual TLS, which encrypts service-to-service communication, ensuring that data in transit is not exposed to the possibility of interception and modification. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#ca49ac97-487a-446a-a0b7-92b20e2c83cb' + rel: lula + text: Check that Istio is enforcing mtls STRICT + - href: '#1761ac07-80dd-47d2-947e-09f67943b986' + rel: lula + text: All pods are istio injected with proxyv2 sidecar + remarks: 'Implement cryptographic mechanisms to [Selection (one or more): prevent unauthorized disclosure of information; detect changes to information] during transmission.' + uuid: 69415B92-0490-4A14-9E0F-E1EE61951F9C + - control-id: sc-8.2 + description: |- # Control Implementation - A timeout for HTTP requests can be specified using a timeout field in a route rule. - - remarks: This control is fully implemented by this tool. - - - uuid: 042b6b8a-759e-472b-b70b-c4351b53803a - control-id: sc-13 - description: >- - # Control Description - "a. Determine the [Assignment: organization-defined cryptographic uses]; and - b. Implement the following types of cryptography required for each specified cryptographic use: [Assignment: FIPS-validated or NSA-approved cryptography]." - + Istio implements with global configuration. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#ca49ac97-487a-446a-a0b7-92b20e2c83cb' + rel: lula + text: Check that Istio is enforcing mtls STRICT to ensure integrity of information sent/received + - href: '#1761ac07-80dd-47d2-947e-09f67943b986' + rel: lula + text: All pods are istio injected with proxyv2 sidecar + - href: '#fbd877c8-d6b6-4d88-8685-2c4aaaab02a1' + rel: lula + text: Validates that Istio is used to authorize access to Keycloak admin console only from admin gateway + remarks: 'Maintain the [Selection (one or more): confidentiality; integrity] of information during preparation for transmission and during reception.' + uuid: c158b75a-cefc-4794-b124-f1e56ff5646d + - control-id: sc-10 + description: |- # Control Implementation - Istio implements with global configuration. - - # How does Istio Help? - As outlined in the section on SC-8, Istio provides encryption in transit for all applications in the mesh. The Tetrate Istio Distribution’s FIPS Verified build is the only FIPS verified build of Istio and Envoy available, and satisfies requirements for FIPS 140-2 as well as the requirement to use the best available software for the job. - - remarks: This control is fully implemented by this tool. - - - uuid: 97cd68fc-1519-4fbc-bca2-c76c16fcc7e1 - control-id: sc-23 - description: >- - # Control Description - Protect the authenticity of communications sessions. - + Istio is configured to manage network connections associated with specific communication sessions. It can be set up to automatically terminate these connections after periods of inactivity, providing an additional layer of security. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#663f5e92-6db4-4042-8b5a-eba3ebe5a622' + rel: lula + text: Istio terminates communication sessions after inactivity [PLACEHOLDER] + remarks: 'Maintain the [Selection (one or more): confidentiality; integrity] of information during preparation for transmission and during reception.' + uuid: 169c9ad3-0a6c-46ee-80cd-cd8cef5eca5c + - control-id: sc-13 + description: |- # Control Implementation - Istio implements with global configuration. - - # How does Istio Help? - Istio provides encryption in transit (TLS) for all applications in the mesh. This ensures both confidentiality and integrity of communication between applications deployed in the mesh. When you deploy a FIPS verified build of Istio (e.g. from the Tetrate Istio Distribution), that encryption conforms to FIPS 140-2 requirements. When Istio is configured in STRICT mTLS mode (see AC-4), it implements the SC-8 control for all applications in the mesh. - - remarks: This control is fully implemented by this tool. - - - uuid: 18df5a35-f209-47d1-84f5-346c22530a5f - control-id: sc-39 - description: >- - # Control Description - Maintain a separate execution domain for each executing system process. - + Istio provides FIPS encryption in transit for all applications in the mesh, TLS termination at ingress, and TLS origination at egress. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#ca49ac97-487a-446a-a0b7-92b20e2c83cb' + rel: lula + text: Check that Istio is enforcing mtls STRICT + - href: '#fd071676-6b92-4e1c-a4f0-4c8d2bd55aed' + rel: lula + text: Istio is encrypting ingress traffic + - href: '#8be1601e-5870-4573-ab4f-c1c199944815' + rel: lula + text: Istio is providing TLS origination at egress [PLACEHOLDER] + - href: '#73434890-2751-4894-b7b2-7e583b4a8977' + rel: lula + text: System is using FIPS-compliant Istio distribution [PLACEHOLDER] + remarks: 'a. Determine the [Assignment: organization-defined cryptographic uses]; and b. Implement the following types of cryptography required for each specified cryptographic use: [Assignment: organization-defined types of cryptography for each specified cryptographic use]."' + uuid: 2bf5c525-af5f-4b8b-8349-3f6a91e0aab9 + - control-id: sc-23 + description: |- # Control Implementation - Istio’s authorization features provide mesh-, namespace-, and workload-wide access control for your workloads in the mesh. - Istio supports trust domain migration for authorization policy. This means if an Istio mesh needs to change its trust domain, the authorization policy doesn’t need to be changed manually. - - remarks: This control is fully implemented by this tool. - - - uuid: 1a778726-73cb-4335-a13d-8ca2bdb6f7d9 - control-id: si-4.22 - description: >- - # Control Description - "(a) Detect network services that have not been authorized or approved by [Assignment: organization-defined authorization or approval processes]; and - (b) [Selection (one or more): Audit; Alert [Assignment: organization-defined personnel or roles]] when detected." - + Istio is configured to protect session authenticity, establishing confidence in the ongoing identities of other parties and the validity of transmitted information. This is achieved through Istio's mutual TLS, which ensures secure communication. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#ca49ac97-487a-446a-a0b7-92b20e2c83cb' + rel: lula + text: Check that Istio is enforcing mtls STRICT + remarks: 'Protect the [Selection (one or more): confidentiality; integrity] of the following information at rest: [Assignment: organization-defined information at rest]. SC-28 Guidance: The organization supports the capability to use cryptographic mechanisms to protect information at rest. SC-28 Guidance: When leveraging encryption from underlying IaaS/PaaS: While some IaaS/PaaS services provide encryption by default, many require encryption to be configured, and enabled by the customer. The CSP has the responsibility to verify encryption is properly configured. SC-28 Guidance: Note that this enhancement requires the use of cryptography in accordance with SC-13.' + uuid: 625bfdc1-0b20-45f3-919b-91afbac77799 + - control-id: sc-39 + description: |- # Control Implementation - Istio implements with global configuration. - - # How does Istio Help? - Istio generates logs for all network traffic - TCP connections, HTTP requests, etc. Can be configured for specific network traffic such as not authorized or approved by a system process or user. - Network event alerts can be configured by organizations need. - - remarks: This control is fully implemented by this tool. - - back-matter: - resources: - - uuid: 11d6961f-7ea3-463e-a765-8e0eddf08c4c - title: Defense Unicorns UDS Core - rlinks: - - href: https://github.com/defenseunicorns/uds-core + Istio is configured to maintain separate execution domains for each executing process. This is achieved through Istio's sidecar proxy design, where each service in the mesh has its own dedicated sidecar proxy to handle its inbound and outbound traffic. This ensures that communication between processes is controlled and one process cannot modify the executing code of another process. + links: + - href: '#67456ae8-4505-4c93-b341-d977d90cb125' + rel: lula + text: Check that Istio is healthy + - href: '#1761ac07-80dd-47d2-947e-09f67943b986' + rel: lula + text: All pods are istio injected with proxyv2 sidecar + remarks: Maintain a separate execution domain for each executing system process. + uuid: f972ef8d-1eb0-403b-8db8-e65a4f4e2aaa + source: https://raw.githubusercontent.com/GSA/fedramp-automation/93ca0e20ff5e54fc04140613476fba80f08e3c7d/dist/content/rev5/baselines/json/FedRAMP_rev5_HIGH-baseline-resolved-profile_catalog.json + uuid: d2afb4c4-2cd8-5305-a6cc-d1bc7b388d0c + description: | + Istio Service Mesh + purpose: Istio Service Mesh + responsible-roles: + - party-uuids: + - f3cf70f8-ba44-4e55-9ea3-389ef24847d3 + role-id: provider + title: Istio Controlplane + type: software + uuid: 81f6ec5d-9b8d-408f-8477-f8a04f493690 + metadata: + last-modified: 2024-07-16T02:47:14.949557671Z + oscal-version: 1.1.2 + parties: + - links: + - href: https://uds.defenseunicorns.com/ + rel: website + name: Unicorn Delivery Service + type: organization + uuid: f3cf70f8-ba44-4e55-9ea3-389ef24847d3 + title: Istio Controlplane + version: "20240614" + uuid: 7e3269fc-fe33-49c9-be88-6c868e21aae1 diff --git a/tasks.yaml b/tasks.yaml index 733dcd98b..370d05bb1 100644 --- a/tasks.yaml +++ b/tasks.yaml @@ -107,6 +107,16 @@ tasks: actions: - task: test:uds-core-upgrade + - name: test-compliance-validate + description: "Validate Compliance of UDS Core to produce Assessment Results" + actions: + - task: test:compliance-validate + + - name: test-compliance-evaluate + description: "Evaluate Compliance of UDS Core against an established threshold" + actions: + - task: test:compliance-evaluate + - name: lint-check description: "Run linting checks" actions: @@ -116,3 +126,7 @@ tasks: description: "Fix linting issues" actions: - task: lint:fix + + - name: lint-oscal + actions: + - task: lint:oscal diff --git a/tasks/lint.yaml b/tasks/lint.yaml index d5b732137..82f6a9ccb 100644 --- a/tasks/lint.yaml +++ b/tasks/lint.yaml @@ -1,3 +1,6 @@ +includes: + - remote: https://raw.githubusercontent.com/defenseunicorns/uds-common/v0.7.0/tasks/lint.yaml + tasks: - name: fix description: "Fix formatting issues in the repo" @@ -17,3 +20,8 @@ tasks: cmd: CMD=pip && which $CMD || CMD=pip3 && $CMD install yamllint - description: yaml lint cmd: yamllint . -c .yamllint --no-warnings + + - name: oscal + actions: + - description: Lula Lint OSCAL + task: remote:oscal diff --git a/tasks/test.yaml b/tasks/test.yaml index 7c66726d4..446348e0b 100644 --- a/tasks/test.yaml +++ b/tasks/test.yaml @@ -2,6 +2,7 @@ includes: - create: ./create.yaml - setup: ./setup.yaml - deploy: ./deploy.yaml + - compliance: https://raw.githubusercontent.com/defenseunicorns/uds-common/v0.7.0/tasks/compliance.yaml tasks: - name: single-package @@ -40,3 +41,18 @@ tasks: - task: create:standard-package - task: deploy:standard-package - task: validate-packages + + - name: compliance-validate + description: "validate against the required compliance" + actions: + - task: compliance:validate + with: + oscalfile: ./compliance/oscal-component.yaml + assessment_results: ./compliance/oscal-assessment-results.yaml + + - name: compliance-evaluate + description: "evaluate against the required compliance" + actions: + - task: compliance:evaluate + with: + assessment_results: ./compliance/oscal-assessment-results.yaml