Quero montar um sistema de arquivos criptografado do Amazon Elastic File System (Amazon EFS) em um pod no Amazon Elastic Kubernetes Service (Amazon EKS).
Resolução
É possível criptografar seus dados em seu sistema de arquivos do Amazon EFS enquanto eles estão em estado de dados em trânsito e dados em repouso. Os dados em trânsito são definidos por padrão.
Observação: se você receber mensagens de erro ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Criptografe dados em trânsito com TLS
Para criptografar seus dados em trânsito com o TLS, conclua as seguintes etapas:
-
Implante o driver Container Storage Interface (CSI) do Amazon EFS em seu cluster do Amazon EKS.
-
Crie um sistema de arquivos do Amazon EFS.
Observação: ao criar o sistema de arquivos, crie um destino de montagem para o Amazon EFS em todas as Zonas de disponibilidade em que seus nós do EKS estão localizados.
-
Clone o repositório do GitHub em seu sistema local.
git clone https://github.com/kubernetes-sigs/aws-efs-csi-driver.git
-
Vá até o diretório de exemplo encryption_in_transit:
cd aws-efs-csi-driver/examples/kubernetes/encryption_in_transit/
-
Para recuperar seu ID do sistema de arquivos do Amazon EFS, execute o seguinte comando describe-file-systems:
aws efs describe-file-systems --query "FileSystems[*].FileSystemId" --output text
-
Acesse o arquivo pv.yaml no diretório /examples/kubernetes/encryption_in_transit/specs/. Em seguida, substitua o valor de VolumeHandle pelo FileSystemId do sistema de arquivos do Amazon EFS que precisa ser montado.
O arquivo pv.yaml deve ser semelhante ao seguinte:
apiVersion: v1
kind: PersistentVolume
metadata:
name: efs-pv
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: efs-sc
csi:
driver: efs.csi.aws.com
volumeHandle: FileSystemId
volumeAttributes:
encryptInTransit: "true"
Observação: substitua FileSystemId pelo seu ID do sistema de arquivos Amazon EFS. A opção de montagem volumeAttributes: encryptInTransit ativa a criptografia em trânsito.
-
Implante a classe de armazenamento, a declaração de volume persistente, o volume persistente e o pod do diretório /examples/kubernetes/encryption_in_transit/specs/:
kubectl apply -f specs/storageclass.yaml
kubectl apply -f specs/pv.yaml
kubectl apply -f specs/claim.yaml
kubectl apply -f specs/pod.yaml
-
Para verificar se seu pod está em um estado de execução, execute o seguinte comando:
kubectl get pods
-
Para listar os volumes persistentes no namespace padrão, execute o seguinte comando:
kubectl get pv
-
Para descrever o volume persistente, execute o seguinte comando:
kubectl describe pv efs-pv
Observação: o ID do sistema de arquivos do Amazon EFS está listado como o VolumeHandle.
Para verificar se os dados estão gravados no sistema de arquivos do Amazon EFS, execute o seguinte comando:
kubectl exec -ti efs-app -- tail -f /data/out.txt
Criptografe dados em repouso
Observação: depois de criar um sistema de arquivos do EFS, não é possível alterar sua configuração de criptografia. Isso significa que não é possível modificar um sistema de arquivos não criptografado para torná-lo criptografado.
Para criptografar dados em repouso, conclua as seguintes etapas:
-
Implante o driver CSI do Amazon EFS em seu cluster do Amazon EKS.
-
Crie um sistema de arquivos do Amazon EFS com criptografia em repouso ativa.
Observação: o Console de gerenciamento da AWS ativa automaticamente a criptografia em repouso com uma chave do AWS Key Management Service (AWS KMS) gerenciada pela AWS. A AWS CLI e SDK exigem que você ative a criptografia explicitamente.
-
Clone o repositório do GitHub a seguir em seu sistema local:
git clone https://github.com/kubernetes-sigs/aws-efs-csi-driver.git
-
Vá para o diretório de exemplo multiple_pods:
cd aws-efs-csi-driver/examples/kubernetes/multiple_pods/
-
Para recuperar seu ID do sistema de arquivos do Amazon EFS, execute o seguinte comando:
aws efs describe-file-systems
Exemplo de saída:
{
"FileSystems": [
{
"SizeInBytes": {
"Timestamp": **timestamp**,
"Value": **value**
},
"ThroughputMode": "**throughput-mode**",
"CreationToken": "**creation-token**",
"Encrypted": true,
"CreationTime": **creation-time**,
"PerformanceMode": "**performance-mode**",
"FileSystemId": "**file-system-id**",
"NumberOfMountTargets": **number**,
"LifeCycleState": "available",
"KmsKeyId": "arn:aws:kms:ap-southeast-1:**account-id**:key/**key-id**",
"OwnerId": "**owner-id**"
}
]
}
-
Acesse o arquivo pv.yaml no diretório /examples/kubernetes/multiple_pods/specs/. Em seguida, substitua o valor de volumeHandle pelo FileSystemId do sistema de arquivos do Amazon EFS que precisa ser montado.
O arquivo pv.yaml deve ser semelhante ao seguinte:
apiVersion: v1
kind: PersistentVolume
metadata:
name: efs-pv
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: efs-sc
csi:
driver: efs.csi.aws.com
volumeHandle: FileSystemId
Observação: substitua FileSystemId pelo seu ID do sistema de arquivos Amazon EFS.
-
Implante a classe de armazenamento, a declaração de volume persistente, o volume persistente e o pod do diretório /examples/kubernetes/multiple_pods/specs/:
kubectl apply -f specs/storageclass.yaml
kubectl apply -f specs/pv.yaml
kubectl apply -f specs/claim.yaml
kubectl apply -f specs/pod1.yaml
kubectl apply -f specs/pod2.yaml
-
Para verificar se seu pod está em um estado de execução, execute o seguinte comando:
kubectl get pods
-
Para listar os volumes persistentes no namespace padrão, execute o seguinte comando:
kubectl get pv
-
Para descrever o volume persistente, execute o seguinte comando:
kubectl describe pv efs-pv
- Para verificar se os dados estão gravados no sistema de arquivos do Amazon EFS, execute os seguintes comandos:
kubectl exec -ti app1 -- tail /data/out1.txt
kubectl exec -ti app2 -- tail /data/out1.txt