UNPKG

@pulumi/kubernetes-compliance-policies

Version:

This repository contains a growing set of Compliance Policies to validate your infrastructure using Pulumi's Crossguard Policy-as-Code framework.

188 lines (187 loc) 8.99 kB
"use strict"; // Copyright 2016-2024, Pulumi Corporation. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // ------------------------------- WARNING ------------------------------------- // This file was programmatically generated. Do not edit unless you know what // you're doing. // ------------------------------- WARNING ------------------------------------- Object.defineProperty(exports, "__esModule", { value: true }); exports.Job = exports.CronJob = void 0; const v1_1 = require("@pulumi/kubernetes/batch/v1"); const policy_1 = require("@pulumi/policy"); const compliance_policy_manager_1 = require("@pulumi/compliance-policy-manager"); const v1_2 = require("@pulumi/kubernetes/batch/v1"); var CronJob; (function (CronJob) { /** * Checks that Kubernetes CronJobs have the recommended labels. * * @severity low * @frameworks none * @topics usability * @link https://kubernetes.io/docs/concepts/overview/working-with-objects/common-labels/ */ CronJob.configureRecommendedLabels = compliance_policy_manager_1.policyManager.registerPolicy({ resourceValidationPolicy: { name: "kubernetes-batch-v1-cronjob-configure-recommended-labels", description: "Checks that Kubernetes CronJobs have the recommended labels.", configSchema: compliance_policy_manager_1.policyManager.policyConfigSchema, enforcementLevel: "advisory", validateResource: (0, policy_1.validateResourceOfType)(v1_1.CronJob, (cronJob, args, reportViolation) => { var _a; if (!compliance_policy_manager_1.policyManager.shouldEvalPolicy(args)) { return; } if (!cronJob.metadata || !cronJob.metadata.labels) { reportViolation("Kubernetes CronJobs should use the recommended labels."); } else { for (const key of Object.keys((_a = cronJob.metadata) === null || _a === void 0 ? void 0 : _a.labels)) { const recommendedLabels = [ "app.kubernetes.io/name", "app.kubernetes.io/instance", "app.kubernetes.io/version", "app.kubernetes.io/component", "app.kubernetes.io/part-of", "app.kubernetes.io/managed-by", ]; if (recommendedLabels.indexOf(key) === -1) { reportViolation("Kubernetes CronJobs should have the recommended labels."); } } } }), }, vendors: ["kubernetes"], services: ["batch"], severity: "low", topics: ["usability"], }); /** * Checks that Kubernetes CronJobs run pods with a read-only filesystem. * * @severity high * @frameworks iso27001, pcidss * @topics runtime, security * @link https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ */ CronJob.enableReadOnlyRootFilesystem = compliance_policy_manager_1.policyManager.registerPolicy({ resourceValidationPolicy: { name: "kubernetes-batch-v1-cronjob-enable-read-only-root-filesystem", description: "Checks that Kubernetes CronJobs run pods with a read-only filesystem.", configSchema: compliance_policy_manager_1.policyManager.policyConfigSchema, enforcementLevel: "advisory", validateResource: (0, policy_1.validateResourceOfType)(v1_1.CronJob, (cronJob, args, reportViolation) => { if (!compliance_policy_manager_1.policyManager.shouldEvalPolicy(args)) { return; } if (cronJob.spec && cronJob.spec.jobTemplate.spec && cronJob.spec.jobTemplate.spec.template.spec && cronJob.spec.jobTemplate.spec.template.spec.containers.length > 0) { cronJob.spec.jobTemplate.spec.template.spec.containers.forEach((container) => { if (!container.securityContext || !container.securityContext.readOnlyRootFilesystem) { reportViolation("Kubernetes CronJobs should run their pods using a read-only filesystem."); } }); } }), }, vendors: ["kubernetes"], services: ["batch"], severity: "high", topics: ["runtime", "security"], frameworks: ["pcidss", "iso27001"], }); })(CronJob || (CronJob = {})); exports.CronJob = CronJob; var Job; (function (Job) { /** * Checks that Kubernetes Jobs have the recommended labels. * * @severity low * @frameworks none * @topics usability * @link https://kubernetes.io/docs/concepts/overview/working-with-objects/common-labels/ */ Job.configureRecommendedLabels = compliance_policy_manager_1.policyManager.registerPolicy({ resourceValidationPolicy: { name: "kubernetes-batch-v1-job-configure-recommended-labels", description: "Checks that Kubernetes Jobs have the recommended labels.", configSchema: compliance_policy_manager_1.policyManager.policyConfigSchema, enforcementLevel: "advisory", validateResource: (0, policy_1.validateResourceOfType)(v1_2.Job, (job, args, reportViolation) => { var _a; if (!compliance_policy_manager_1.policyManager.shouldEvalPolicy(args)) { return; } if (!job.metadata || !job.metadata.labels) { reportViolation("Kubernetes Jobs should use the recommended labels."); } else { for (const key of Object.keys((_a = job.metadata) === null || _a === void 0 ? void 0 : _a.labels)) { const recommendedLabels = [ "app.kubernetes.io/name", "app.kubernetes.io/instance", "app.kubernetes.io/version", "app.kubernetes.io/component", "app.kubernetes.io/part-of", "app.kubernetes.io/managed-by", ]; if (recommendedLabels.indexOf(key) === -1) { reportViolation("Kubernetes Jobs should have the recommended labels."); } } } }), }, vendors: ["kubernetes"], services: ["batch"], severity: "low", topics: ["usability"], }); /** * Checks that Kubernetes Jobs run pods with a read-only filesystem. * * @severity high * @frameworks iso27001, pcidss * @topics runtime, security * @link https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ */ Job.enableReadOnlyRootFilesystem = compliance_policy_manager_1.policyManager.registerPolicy({ resourceValidationPolicy: { name: "kubernetes-batch-v1-job-enable-read-only-root-filesystem", description: "Checks that Kubernetes Jobs run pods with a read-only filesystem.", configSchema: compliance_policy_manager_1.policyManager.policyConfigSchema, enforcementLevel: "advisory", validateResource: (0, policy_1.validateResourceOfType)(v1_2.Job, (job, args, reportViolation) => { if (!compliance_policy_manager_1.policyManager.shouldEvalPolicy(args)) { return; } if (job.spec && job.spec.template && job.spec.template.spec && job.spec.template.spec.containers.length > 0) { job.spec.template.spec.containers.forEach((container) => { if (!container.securityContext || !container.securityContext.readOnlyRootFilesystem) { reportViolation("Kubernetes Jobs should run their pods using a read-only filesystem."); } }); } }), }, vendors: ["kubernetes"], services: ["batch"], severity: "high", topics: ["runtime", "security"], frameworks: ["pcidss", "iso27001"], }); })(Job || (Job = {})); exports.Job = Job;