5. Securing Kube-APIServer: etcd
Tips to protect etcd
- Only Kube-APIServer is allowed to communicate with etcd
- Over TLS
- configmaps and secrets must not be compromised, as they are injected to application pod.
- Kube-APIServer must be updated to use encryption provider configuration
Encryption Providers
1. identity : NULL encryption
2. aescbc :
- Slow and strong
- Recommended
- key length = 32 bits
- Algo: Public Key Cryptographic Standards (PKCS): Advanced Encryption Standard (AES) cipher algo in Cipher Block Chaining (CBC) mode. Refer RFC 3602
3. secretbox
- faster
- key length = 32 bits
Algo: XSalsa20 and Poly1305 encryption
4. aesgcm
- fastest
- key length = 16 bots or 32 bits
- key rotation every 200,000 writes
5. kms
- uses new Data Encryption Key (DEK) for every encryption along with AES-CBC
Sample Encryption Policy File
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
name: configureKeys
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: encKey
secret: Ezqai0SIGChGOwf0VdbkFtYPUM2EYf1TAAQbDrfizJQ=
- identity: {}
Assume the above YAML file is located at /var/lib/minikube/certs/ec.yaml then we shall mount this hostPath with same folder and specify to API Server with argument :
--encryption-provider-config=/var/lib/minikube/certs/ec.yaml
- One can encrypt many K8s objects instead of just secrets.
- new key should be at top of conifg file to encrypt. next line can be old key, to decrypt previously encrypted parameters.
- Encryption key should be in separate KMS (key management system)
0 comments:
Post a Comment