| File: Resources\PodSecurityContextV1.cs | Web Access |
| Project: src\src\Aspire.Hosting.Kubernetes\Aspire.Hosting.Kubernetes.csproj (Aspire.Hosting.Kubernetes) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using YamlDotNet.Serialization; namespace Aspire.Hosting.Kubernetes.Resources; /// <summary> /// Represents the security context settings for a Kubernetes Pod. /// </summary> /// <remarks> /// The <see cref="PodSecurityContextV1"/> class provides configuration options for controlling /// security-related attributes of a Kubernetes Pod. These settings include user and group ID /// management, AppArmor profiles, seccomp profiles, SELinux options, sysctl settings, Windows-specific /// security options, and more. /// </remarks> [YamlSerializable] public sealed class PodSecurityContextV1 { /// <summary> /// Represents the AppArmor profile configuration associated with the pod security context. /// This property defines the AppArmor settings that are applied to the containers /// in the pod, such as profile type and/or specific profiles applied for runtime security. /// </summary> /// <remarks> /// AppArmor allows defining mandatory access control policies for applications. /// When set, this property specifies the AppArmor profile details, enabling fine-grained /// security controls on containerized workloads. /// </remarks> [YamlMember(Alias = "appArmorProfile")] public AppArmorProfileV1? AppArmorProfile { get; set; } /// <summary> /// Specifies the Seccomp (Secure Computing Mode) profile configuration for a pod or container /// in Kubernetes to restrict system calls made by workloads to enhance security. /// </summary> /// <remarks> /// The SeccompProfile helps define how system calls are filtered and managed for the workload. /// It can specify which system calls are allowed or denied by the operating system /// through predefined or local profiles. /// </remarks> [YamlMember(Alias = "seccompProfile")] public SeccompProfileV1? SeccompProfile { get; set; } /// <summary> /// Gets or sets the file system group ID (fsGroup) to be applied to all /// volumes mounted in the pod if the volume's security policy supports it. /// The ownership of the volumes and permissions may be modified /// based on this ID to ensure the designated fsGroup has the required access. /// </summary> [YamlMember(Alias = "fsGroup")] public long? FsGroup { get; set; } /// <summary> /// Specifies the primary group ID for processes that will run in the container or pod. /// This property allows you to control the group ownership for files and processes /// within the pod, ensuring consistent group-level permissions during runtime. /// </summary> [YamlMember(Alias = "runAsGroup")] public long? RunAsGroup { get; set; } /// <summary> /// Specifies the user ID to run the container or pod processes as. /// If set, this overrides the user ID specified in the container image or runtime default. /// </summary> [YamlMember(Alias = "runAsUser")] public long? RunAsUser { get; set; } /// <summary> /// Defines the SELinux options that control the security labeling applied to /// the pod or container. SELinuxOptions are part of the SELinux security /// mechanism in Linux, allowing fine-grained access control and isolation. /// </summary> [YamlMember(Alias = "seLinuxOptions")] public SeLinuxOptionsV1? SeLinuxOptions { get; set; } /// <summary> /// Gets the list of supplementary group IDs that are applied to the container's /// process. Supplemental groups provide additional Unix group IDs that the /// container's main process should run as, in addition to the primary group. /// This property is typically used to grant access permissions to resources /// shared by multiple Unix groups. /// </summary> [YamlMember(Alias = "supplementalGroups")] public List<long> SupplementalGroups { get; } = []; /// <summary> /// Represents a collection of kernel parameters (sysctls) for a pod in Kubernetes. /// Sysctls are used to configure the kernel parameters at runtime, affecting /// the behavior of the operating system for the container. /// </summary> [YamlMember(Alias = "sysctls")] public List<SysctlV1> Sysctls { get; } = []; /// <summary> /// Represents Windows-specific security context options for a Kubernetes pod or container. /// Provides customization settings for Windows-based environments. /// </summary> [YamlMember(Alias = "windowsOptions")] public WindowsSecurityContextOptionsV1? WindowsOptions { get; set; } /// <summary> /// Specifies whether the container should run as a non-root user. /// If set to true, it enforces that the container does not run as a root user. /// A value of null indicates no explicit preference. /// </summary> [YamlMember(Alias = "runAsNonRoot")] public bool? RunAsNonRoot { get; set; } /// <summary> /// Gets or sets the policy that determines when to change the group ownership /// of files within the volume mounted in a pod. It specifies how and when /// Kubernetes manages the ownership change for the specified `fsGroup`. /// Possible values are typically "Always" or "OnRootMismatch". /// </summary> [YamlMember(Alias = "fsGroupChangePolicy")] public string FsGroupChangePolicy { get; set; } = null!; /// <summary> /// Specifies the policy for handling supplemental groups in the security context of a Kubernetes pod. /// This property determines how the system assigns or enforces supplemental groups for the containers /// within the pod. It allows for the control of additional group memberships that the /// container processes can utilize beyond the primary group. /// </summary> [YamlMember(Alias = "supplementalGroupsPolicy")] public string SupplementalGroupsPolicy { get; set; } = null!; }