

 **Ajudar a melhorar esta página** 

Para contribuir com este guia de usuário, escolha o link **Editar esta página no GitHub**, disponível no painel direito de cada página.

# Usar armazenamento de volumes do Kubernetes com o Amazon EBS
<a name="ebs-csi"></a>

**nota**  
 **Novo:** o Modo Automático do Amazon EKS automatiza tarefas de rotina para armazenamento em blocos. Saiba como [Implantar uma workload com estado de exemplo no Modo Automático do EKS](sample-storage-workload.md).

O [driver CSI (Container Storage Interface) do Amazon Elastic Block Store (Amazon EBS)](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/) gerencia o ciclo de vida dos volumes do Amazon EBS como armazenamento para os volumes do Kubernetes que você cria. O driver da CSI do Amazon EBS cria volumes do Amazon EBS para estes tipos de volumes do Kubernetes: [volumes temporários](https://kubernetes.io/docs/concepts/storage/ephemeral-volumes/) e [volumes persistentes](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) genéricos.

## Considerações
<a name="ebs-csi-considerations"></a>
+ Você não precisa instalar o Controlador da CSI do Amazon EBS nos clusters do Modo Automático do EKS.
+ Você não pode montar volumes do Amazon EBS em pods do Fargate.
+ Você pode executar o controlador da CSI do Amazon EBS em nós do Fargate, mas o `DaemonSet` do nó da CSI do Amazon EBS só pode ser executado em instâncias do Amazon EC2.
+ Os volumes do Amazon EBS e o driver CSI do Amazon EBS não são compatíveis com o Amazon EKS Hybrid Nodes.
+ Suporte será fornecido para a versão complementar mais recente e para uma versão anterior. As correções de bugs ou vulnerabilidades encontradas na versão mais recente serão incorporadas à versão anterior como uma nova versão secundária.
+ O Modo Automático do EKS exige que as classes de armazenamento usem `ebs.csi.eks.amazonaws.com` como provisionador. O driver CSI padrão do Amazon EBS (`ebs.csi.aws.com`) gerencia seus próprios volumes separadamente. Para usar volumes existentes com o Modo Automático do EKS, migre-os usando snapshots de volume para uma classe de armazenamento que use o provisionador do Modo Automático.

**Importante**  
Para utilizar a funcionalidade de snapshot do driver da CSI do Amazon EBS, primeiro é necessário instalar o controlador de snapshots da CSI. Para obter mais informações, consulte [Habilitar a funcionalidade de snapshot para volumes CSI](csi-snapshot-controller.md).

## Pré-requisitos
<a name="ebs-csi-prereqs"></a>
+ Um cluster existente. Para ver a versão necessária da plataforma, execute o comando a seguir.

  ```
  aws eks describe-addon-versions --addon-name aws-ebs-csi-driver
  ```
+ O driver CSI do EBS precisa de permissões do AWS IAM.
  +  A AWS sugere o uso de Identidades de Pod do EKS. Para obter mais informações, consulte [Visão geral da configuração do EKS Pod Identities](pod-identities.md#pod-id-setup-overview).
  + Para obter informações sobre perfis do IAM para contas de serviço, consulte [Criar um provedor de identidade OIDC do IAM para o cluster](enable-iam-roles-for-service-accounts.md).

## Etapa 1: criar um perfil do IAM
<a name="csi-iam-role"></a>

O plugin CSI do Amazon EBS requer permissões do IAM para fazer chamadas para APIs da AWS em seu nome. Se você não concluir essas etapas, a tentativa de instalar o complemento e de executar `kubectl describe pvc` mostrarão `failed to provision volume with StorageClass` junto com erro `could not create volume in EC2: UnauthorizedOperation`. Para obter mais informações, consulte [Configurar permissão de driver](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md#set-up-driver-permissions) no GitHub.

**nota**  
Os pods terão acesso às permissões atribuídas ao perfil do IAM, a menos que você bloqueie o acesso ao IMDS. Para obter mais informações, consulte [Proteger os clusters do Amazon EKS com as práticas recomendadas](security-best-practices.md).

O procedimento a seguir mostra como criar um perfil do IAM e associar a política gerenciada da AWS a ele. Para implementar esse procedimento, você pode usar uma das seguintes ferramentas:
+  [`eksctl`](#eksctl_store_app_data) 
+  [Console de gerenciamento da AWS](#console_store_app_data) 
+  [AWS CLI](#awscli_store_app_data) 

**nota**  
É possível criar uma política autogerenciada com permissões de escopo reduzido. Analise a política [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEBSCSIDriverPolicy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEBSCSIDriverPolicy.html) e crie uma política do IAM personalizada com permissões reduzidas.

**nota**  
As etapas específicas desse procedimento foram escritas para usar o driver como um complemento do Amazon EKS. Diferentes etapas para usar o driver como um complemento autogerenciado. Para obter mais informações, consulte [Set up driver permissions](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md#set-up-driver-permissions) no GitHub.

### `eksctl`
<a name="eksctl_store_app_data"></a>

1. Criar um perfil do IAM e associar uma política. AWS mantém uma política AWS gerenciada ou você pode criar sua própria política personalizada. É possível criar um perfil do IAM e anexar a política gerenciada AWS com o seguinte comando. Substitua *my-cluster* pelo nome do cluster. O comando implementa uma pilha do AWS CloudFormation que cria um perfil do IAM e anexa a política do IAM a ela.

   ```
   eksctl create iamserviceaccount \
           --name ebs-csi-controller-sa \
           --namespace kube-system \
           --cluster my-cluster \
           --role-name AmazonEKS_EBS_CSI_DriverRole \
           --role-only \
           --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
           --approve
   ```

1. Você poderá pular esta etapa se não usar uma [chave do KMS](https://aws.amazon.com/kms/) personalizada. Se você usar uma para criptografia nos volumes do Amazon EBS, personalize o perfil do IAM conforme necessário. Por exemplo, faça o seguinte:

   1. Copie e cole o código a seguir em um novo arquivo `kms-key-for-encryption-on-ebs.json`. Substitua *custom-key-arn* pelo [ARN da chave do KMS](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html#awskeymanagementservice-key) personalizada.

      ```
      {
            "Version":"2012-10-17",		 	 	 
            "Statement": [
              {
                "Effect": "Allow",
                "Action": [
                  "kms:CreateGrant",
                  "kms:ListGrants",
                  "kms:RevokeGrant"
                ],
                "Resource": ["arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"],
                "Condition": {
                  "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                  }
                }
              },
              {
                "Effect": "Allow",
                "Action": [
                  "kms:Encrypt",
                  "kms:Decrypt",
                  "kms:ReEncrypt*",
                  "kms:GenerateDataKey*",
                  "kms:DescribeKey"
                ],
                "Resource": ["arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"]
              }
            ]
          }
      ```

   1. Crie a política. É possível alterar *KMS\$1Key\$1For\$1Encryption\$1On\$1EBS\$1Policy* para um nome diferente. Porém, se fizer isso, não se esqueça de alterá-lo também em etapas posteriores.

      ```
      aws iam create-policy \
            --policy-name KMS_Key_For_Encryption_On_EBS_Policy \
            --policy-document file://kms-key-for-encryption-on-ebs.json
      ```

   1. Anexe a política do IAM necessária ao perfil com o comando a seguir. Substitua *111122223333* pelo ID da sua conta.

      ```
      aws iam attach-role-policy \
            --policy-arn arn:aws:iam::111122223333:policy/KMS_Key_For_Encryption_On_EBS_Policy \
            --role-name AmazonEKS_EBS_CSI_DriverRole
      ```

### Console de gerenciamento da AWS
<a name="console_store_app_data"></a>

1. Abra o console do IAM em https://console.aws.amazon.com/iam/.

1. No painel de navegação à esquerda, escolha **Funções**.

1. Na página **Perfis**, selecione **Criar perfil**.

1. Na página **Select trusted entity** (Selecionar entidade confiável), faça o seguinte:

   1. Na seção **Tipo de entidade confiável**, escolha **Identidade da Web**.

   1. Para **Identity provider** (Provedor de identidade), escolha **OpenID Connect provider URL** (URL do provedor OpenID Connect) para o seu cluster (conforme mostrado na guia **Overview** (Visão geral) do Amazon EKS).

   1. Em **Público**, escolha `sts.amazonaws.com`.

   1. Escolha **Próximo**.

1. Na página **Add permissions** (Adicionar permissões), faça o seguinte:

   1. Na caixa **Filtrar políticas** insira `AmazonEBSCSIDriverPolicy`.

   1. Marque a caixa de seleção à esquerda do `AmazonEBSCSIDriverPolicy` retornado na pesquisa.

   1. Escolha **Próximo**.

1. Na página **Nomear, revisar e criar**, faça o seguinte:

   1. Em **Nome do perfil**, insira um nome exclusivo para o perfil, como *AmazonEKS\$1EBS\$1CSI\$1DriverRole*.

   1. Em **Adicionar tags (Opcional)**, adicione metadados ao perfil anexando tags como pares chave-valor. Para obter mais informações sobre o uso de tags no IAM, consulte [Marcar recursos do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html) no *Guia do usuário do IAM*.

   1. Selecione **Criar perfil**.

1. Depois que o perfil for criado, escolha-o no console para abri-lo para edição.

1. Escolha a guia **Trust relationships** (Relacionamentos de confiança) e, em seguida, escolha **Edit trust policy** (Editar política de confiança).

1. Encontre a linha semelhante à seguinte:

   ```
   "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"
   ```

   Adicione uma vírgula ao final da linha anterior e depois adicione a linha a seguir após a anterior. Substitua *region-code* pela região da AWS em que seu cluster se encontra. Substitua *EXAMPLED539D4633E53DE1B71EXAMPLE* pelo ID do provedor OIDC do cluster.

   ```
   "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa"
   ```

1. Escolha **Atualizar política** para concluir.

1. Se você usar uma [chave do KMS](https://aws.amazon.com/kms/) personalizada para criptografia em seus volumes do Amazon EBS, personalize o perfil do IAM conforme necessário. Por exemplo, faça o seguinte:

   1. No painel de navegação à esquerda, escolha **Políticas**.

   1. Na página **Policies** (Políticas), escolha **Create Policy** (Criar política).

   1. Na página **Criar política**, escolha a guia **JSON**.

   1. Copie e cole o código a seguir no editor, substituindo *custom-key-arn* pelo [ARN da chave KMS](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html#awskeymanagementservice-key) personalizada.

      ```
      {
            "Version":"2012-10-17",		 	 	 
            "Statement": [
              {
                "Effect": "Allow",
                "Action": [
                  "kms:CreateGrant",
                  "kms:ListGrants",
                  "kms:RevokeGrant"
                ],
                "Resource": ["arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"],
                "Condition": {
                  "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                  }
                }
              },
              {
                "Effect": "Allow",
                "Action": [
                  "kms:Encrypt",
                  "kms:Decrypt",
                  "kms:ReEncrypt*",
                  "kms:GenerateDataKey*",
                  "kms:DescribeKey"
                ],
                "Resource": ["arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"]
              }
            ]
          }
      ```

   1. Escolha **Próximo: tags**.

   1. Na página **Add tags (optional)** (Adicionar etiquetas - opcional), escolha **Next: Review** (Próximo: revisar).

   1. Em **Nome**, insira um nome exclusivo para sua política (por exemplo, *KMS\$1Key\$1For\$1Encryption\$1On\$1EBS\$1Policy*).

   1. Escolha **Criar política**.

   1. No painel de navegação à esquerda, selecione **Perfis**.

   1. Escolha ***AmazonEKS\$1EBS\$1CSI\$1DriverRole*** no console para abri-lo para edição.

   1. Na lista suspensa **Add permissions** (Adicionar permissões), escolha **Attach policies** (Anexar políticas).

   1. Na caixa **Políticas de filtro**, insira *KMS\$1Key\$1For\$1Encryption\$1On\$1EBS\$1Policy*.

   1. Marque a caixa de seleção à esquerda da *KMS\$1Key\$1For\$1Encryption\$1On\$1EBS\$1Policy* retornada na pesquisa.

   1. Escolha **Anexar políticas**.

### AWS CLI
<a name="awscli_store_app_data"></a>

1. Exiba a URL do provedor OIDC do cluster. Substitua *my-cluster* pelo nome do cluster. Se o resultado do comando for `None`, revise os **Pré-requisitos**.

   ```
   aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text
   ```

   Veja um exemplo de saída abaixo.

   ```
   https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
   ```

1. Crie o perfil do IAM, concedendo a ação `AssumeRoleWithWebIdentity`.

   1. Copie o conteúdo a seguir em um arquivo chamado `aws-ebs-csi-driver-trust-policy.json`. Substitua *111122223333* pelo ID da sua conta. Substitua *EXAMPLED539D4633E53DE1B71EXAMPLE* e *region-code* pelos valores retornados na etapa anterior.

      ```
      {
            "Version":"2012-10-17",		 	 	 
            "Statement": [
              {
                "Effect": "Allow",
                "Principal": {
                  "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
                },
                "Action": "sts:AssumeRoleWithWebIdentity",
                "Condition": {
                  "StringEquals": {
                    "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com",
                    "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa"
                  }
                }
              }
            ]
          }
      ```

   1. Crie a função. É possível alterar *AmazonEKS\$1EBS\$1CSI\$1DriverRole* para um nome diferente. Se você alterá-lo, não se esqueça de alterá-lo em etapas superiores.

      ```
      aws iam create-role \
            --role-name AmazonEKS_EBS_CSI_DriverRole \
            --assume-role-policy-document file://"aws-ebs-csi-driver-trust-policy.json"
      ```

1. Associar uma política. AWS mantém uma política AWS gerenciada ou você pode criar sua própria política personalizada. Anexe a política gerenciada pela AWS ao perfil com o comando a seguir.

   ```
   aws iam attach-role-policy \
         --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
         --role-name AmazonEKS_EBS_CSI_DriverRole
   ```

1. Se você usar uma [chave do KMS](https://aws.amazon.com/kms/) personalizada para criptografia em seus volumes do Amazon EBS, personalize o perfil do IAM conforme necessário. Por exemplo, faça o seguinte:

   1. Copie e cole o código a seguir em um novo arquivo `kms-key-for-encryption-on-ebs.json`. Substitua *custom-key-arn* pelo [ARN da chave do KMS](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html#awskeymanagementservice-key) personalizada.

      ```
      {
            "Version":"2012-10-17",		 	 	 
            "Statement": [
              {
                "Effect": "Allow",
                "Action": [
                  "kms:CreateGrant",
                  "kms:ListGrants",
                  "kms:RevokeGrant"
                ],
                "Resource": ["arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"],
                "Condition": {
                  "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                  }
                }
              },
              {
                "Effect": "Allow",
                "Action": [
                  "kms:Encrypt",
                  "kms:Decrypt",
                  "kms:ReEncrypt*",
                  "kms:GenerateDataKey*",
                  "kms:DescribeKey"
                ],
                "Resource": ["arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"]
              }
            ]
          }
      ```

   1. Crie a política. É possível alterar *KMS\$1Key\$1For\$1Encryption\$1On\$1EBS\$1Policy* para um nome diferente. Porém, se fizer isso, não se esqueça de alterá-lo também em etapas posteriores.

      ```
      aws iam create-policy \
            --policy-name KMS_Key_For_Encryption_On_EBS_Policy \
            --policy-document file://kms-key-for-encryption-on-ebs.json
      ```

   1. Anexe a política do IAM necessária ao perfil com o comando a seguir. Substitua *111122223333* pelo ID da sua conta.

      ```
      aws iam attach-role-policy \
            --policy-arn arn:aws:iam::111122223333:policy/KMS_Key_For_Encryption_On_EBS_Policy \
            --role-name AmazonEKS_EBS_CSI_DriverRole
      ```

Agora que você criou o perfil do IAM do driver de CSI do Amazon EBS, poderá avançar para a próxima seção. Quando você implanta o complemento com esse perfil do IAM, ele cria e é configurado para usar uma conta de serviço chamada `ebs-csi-controller-sa`. A conta de serviço está vinculada a um `clusterrole` do Kubernetes que recebe as permissões necessárias do Kubernetes.

## Etapa 2: obter o driver de CSI do Amazon EBS
<a name="managing-ebs-csi"></a>

Recomendamos que você instale o driver de CSI do Amazon EBS por meio do complemento do Amazon EKS para reforçar a segurança e reduzir o volume do trabalho. Para adicionar um complemento do Amazon EKS ao cluster, consulte [Criar um complemento do Amazon EKS](creating-an-add-on.md). Para obter mais informações sobre complementos, consulte [Complementos do Amazon EKS](eks-add-ons.md).

**Importante**  
Antes de adicionar o driver do Amazon EBS como um complemento do Amazon EKS, verifique se você não tem uma versão autogerenciada do driver instalada no seu cluster. Em caso afirmativo, consulte [Uninstalling a self-managed Amazon EBS CSI driver](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md#uninstalling-the-ebs-csi-driver) no GitHub.

**nota**  
Por padrão, o perfil de RBAC usado pela CSI do EBS tem permissões para realizar mutações em nós a fim de fornecer suporte à funcionalidade de remoção de taints. Por conta de limitações do RBAC do Kubernetes, isso também possibilita a modificação de qualquer outro nó presente no cluster. O chart do Helm conta com um parâmetro (`node.serviceAccount.disableMutation`) que desabilita permissões de RBAC para modificar nós, vinculadas ao perfil da conta de serviço ebs-csi-node. Caso habilitado, as funcionalidades do driver, por exemplo, a remoção de taints, deixarão de operar.

Como alternativa, se quiser uma instalação autogerenciada do driver CSI do Amazon EBS, consulte [Installation](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md) no GitHub.

## Etapa 3: implantar uma aplicação de exemplo
<a name="ebs-sample-app"></a>

Você pode implantar toda uma variedade de aplicações de exemplo e modificá-las conforme necessário. Para obter mais informações, consulte [Kubernetes Examples](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/tree/master/examples/kubernetes) no GitHub.