Skip to main content
Version: Next

Create, Update and Maintain secrets and credentials

Maintaining secrets in a Kubernetes environment is a critical aspect of managing applications and infrastructure securely. Secrets can include sensitive information such as API keys, passwords, and certificates that should not be exposed or stored in plain text. Kubernetes provides a Secrets object which is intended to hold sensitive information. Here is a detailed documentation on how to manage secrets in Kubernetes, particularly in the context of Helm charts and application properties.

Overview for backend system

Kubernetes Secrets: A Kubernetes Secret is an object that contains a small amount of sensitive data such as a password, a token, or a key. This data can be used by Pods to perform their operations without exposing the sensitive information in their configuration. Helm Charts: Helm is a package manager for Kubernetes that allows you to define, install, and upgrade even the most complex Kubernetes applications. Helm charts can help manage Kubernetes applications along with their configuration and services. Values.yaml: This is a YAML file used by Helm charts to define default configuration values which can be overridden during deployment time. Infrastructure Operations Teams: These are the teams responsible for managing and operating the underlying infrastructure, including the management of sensitive secrets.

Storing Secrets in Kubernetes Creating Secrets

Use kubectl to create a secret from literal values:

kubectl create secret generic my-secret --from-literal=key1=value1 --from-literal=key2=value2

To create a secret from a file:

kubectl create secret generic my-secret --from-file=path/to/bar

Using Secrets in Pods

Secrets can be mounted as data volumes or be exposed as environment variables to be used by a container in a Pod. When a secret is mounted as a volume, files are created containing the secret values. When using environment variables, the secret values are assigned to environment variables within the container. Best Practices for Using Secrets

Do not store secrets in your application code. Use RBAC to restrict access to secrets. Enable encryption at rest for Secrets to ensure they are stored securely in the etcd database. Rotate secrets periodically and revoke the old ones. Managing Secrets with Helm Defining Secrets in Helm Charts

Create a template file for your secrets within the Helm chart, typically named secrets.yaml. Use the .Values object to reference values that will be populated from the values.yaml file or overridden at deployment time. values.yaml

Define placeholders for your secrets in values.yaml but do not store the actual sensitive values in this file. You can provide environment-specific overrides using additional values files (e.g., values.prod.yaml). Overriding Secrets at Deployment Time

When deploying your application with Helm, override the default values with actual secrets:

helm install my-release my-chart --values values.yaml --set secret.key1=value1,secret.key2=value2

Alternatively, use a separate file that contains the overrides for secrets and pass it during deployment:

helm install my-release my-chart -f values.yaml -f secrets.prod.yaml

Role of Infrastructure Operations Teams

Infrastructure operations teams should manage the secrets and ensure they are securely handled during the deployment process. They may use tools like HashiCorp Vault, AWS Secrets Manager, or Azure Key Vault to manage secrets outside of Kubernetes and inject them at deployment time. CI/CD Integration

Integrate secret management into your CI/CD pipeline. Ensure that secrets are not exposed in logs or other pipeline artifacts.

Auditing and Monitoring

Regularly audit access to secrets and monitor their usage. Set up alerts for unauthorized access attempts.

Overview for Frontend system

For mobile applications, managing secrets is equally important to ensure the security of sensitive information. Since mobile applications are distributed to end-users, it's crucial to avoid embedding secrets within the application code or resources. Instead, secrets should be fetched securely at runtime when needed. Here's how you can manage secrets for mobile applications using a Content Management System (CMS) and a Backend for Frontend (BFF) service:

Overview Content Management System (CMS): A CMS is used to manage the creation and modification of digital content. In the context of secrets management, it can also be used to securely store and control access to secrets needed by mobile applications. Backend for Frontend (BFF): The BFF pattern involves creating a backend service tailored to the needs of a specific frontend. This service acts as an intermediary between the frontend and various backend services or systems, including the CMS. Storing Secrets for Mobile Applications CMS as a Secrets Store

Use the CMS to securely store the secrets needed by the mobile application. Ensure that the CMS has robust security measures in place, such as encryption, access controls, and audit logging. Only authorized personnel should have access to manage secrets within the CMS. Fetching Secrets at Runtime

The mobile application should never store secrets locally or in the application code. Instead, when the application requires a secret, it should make a secure API call to the BFF service. BFF Service Responsibilities

The BFF service acts as a secure proxy to fetch secrets from the CMS. Implement authentication and authorization in the BFF to ensure that only authenticated and authorized requests from the mobile application can retrieve secrets. The BFF can also cache secrets temporarily if necessary, to reduce the number of calls to the CMS, but this must be done securely with proper encryption and eviction policies. Secure Communication

Ensure that all communication between the mobile application, the BFF, and the CMS is encrypted using TLS to prevent man-in-the-middle attacks. Use token-based authentication (such as OAuth 2.0) to secure API calls between the mobile application and the BFF. Least Privilege Principle

Apply the principle of least privilege to limit access to secrets. The mobile application should only be able to fetch the secrets it absolutely needs to function. Security Best Practices

Regularly rotate secrets and update the CMS with new values. Monitor access to the CMS and BFF for any unauthorized attempts to access secrets. Consider implementing additional security measures such as rate limiting and IP whitelisting for the BFF.