

 **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.

# Use o armazenamento do sistema de arquivos do Amazon S3 com o driver CSI do Amazon EFS
<a name="s3files-csi"></a>

O S3 Files é um sistema de arquivos compartilhado que conecta qualquer computação AWS diretamente aos seus dados no Amazon S3. Ele fornece acesso rápido e direto a todos os seus dados do S3 como arquivos com semântica completa do sistema de arquivos e desempenho de baixa latência, sem que seus dados saiam do S3. Isso significa que aplicativos, agentes e equipes baseados em arquivos podem acessar e trabalhar com dados do S3 como um sistema de arquivos usando as ferramentas das quais eles já dependem. O [driver Container Storage Interface (CSI) do Amazon EFS](https://github.com/kubernetes-sigs/aws-efs-csi-driver) permite que os clusters do Kubernetes executados na AWS montem os sistemas de arquivos do Amazon S3 como volumes persistentes a partir da versão [3.0.0](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/CHANGELOG-3.x.md#v300). Este tópico mostra como usar o driver da CSI do Amazon EFS para gerenciar o sistema de arquivos do Amazon S3 no cluster do Amazon EKS.

## Considerações
<a name="s3files-csi-considerations"></a>
+ O driver da CSI do Amazon EFS não é compatível com imagens de contêiner baseadas no Windows.
+ O EKS Fargate não oferece suporte a arquivos S3.
+ O driver CSI do Amazon EFS não é compatível com o Amazon EKS Hybrid Nodes.
+ O suporte aos arquivos do Amazon S3 no driver CSI do Amazon EFS começa na versão [3.0.0](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/CHANGELOG-3.x.md#v300).

## Pré-requisitos
<a name="s3files-csi-prereqs"></a>
+ O driver CSI do Amazon EFS precisa de permissões do AWS Identity and Access Management (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 os perfis do IAM para contas de serviço e a configuração de um provedor OpenID Connect (OIDC) do IAM para o cluster, consulte [Criar um provedor de identidade OIDC do IAM para o cluster](enable-iam-roles-for-service-accounts.md).
+ Versão `2.12.3` ou posterior ou versão `1.27.160` ou posterior da AWS Command Line Interface (AWS CLI) instalada e configurada no seu dispositivo ou no AWS CloudShell. Para verificar sua versão atual, use `aws --version | cut -d / -f2 | cut -d ' ' -f1`. Os gerenciadores de pacotes, como `yum`, `apt-get` ou Homebrew para macOS, geralmente estão várias versões atrás da versão mais recente da AWS CLI. Para instalar a versão mais recente, consulte [Installing](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) e [Quick configuration with aws configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config), no *Guia do usuário da AWS Command Line Interface*. A versão da AWS CLI instalada no AWS CloudShell também pode estar várias versões atrás da versão mais recente. Para atualizá-lo, consulte [Instalar a AWS CLI no seu diretório pessoal](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software), no * Guia do usuário do AWS CloudShell*.
+ A ferramenta da linha de comando `kubectl` está instalada no seu dispositivo ou no AWS CloudShell. A versão pode ser a mesma ou até uma versão secundária anterior ou posterior à versão do Kubernetes do seu cluster. Por exemplo, se a versão do cluster for a `1.29`, será possível usar o `kubectl` versão `1.28`, `1.29` ou `1.30` com ele. Para instalar ou atualizar o `kubectl`, consulte [Configurar o `kubectl` e o `eksctl`](install-kubectl.md).

## Etapa 1: criar perfis do IAM
<a name="s3files-create-iam-resources"></a>

O driver da CSI do Amazon EFS exige permissões do IAM para interagir com seu sistema de arquivos. O driver EFS CSI usa duas contas de serviço com perfis do IAM separados:
+  `efs-csi-controller-sa` — usado pelo controlador, requer `AmazonS3FilesCSIDriverPolicy`.
+  `efs-csi-node-sa` — usado pelo daemonset do nó, requer:
  +  `AmazonS3ReadOnlyAccess` — permite o streaming de leituras diretamente do seu bucket S3 para maior throughput.
  +  `AmazonElasticFileSystemsUtils` — permite publicar logs do efs-utils no Amazon CloudWatch para visibilidade das operações de montagem e facilitar a solução de problemas.

**nota**  
Se quiser usar o sistema de arquivos Amazon S3 e o armazenamento do Amazon EFS, você deve anexar as políticas gerenciadas `AmazonS3FilesCSIDriverPolicy` e `AmazonEFSCSIDriverPolicy` à função de controlador. Para ter mais informações sobre o armazenamento do Amazon EFS, consulte [Usar armazenamento elástico do sistema de arquivos com o Amazon EFS](efs-csi.md).

Para implementar esse procedimento, você pode usar uma das seguintes ferramentas:
+  [`eksctl`](#eksctl_s3files_store_app_data) 
+  [Console de gerenciamento da AWS](#console_s3files_store_app_data) 
+  [AWS CLI](#awscli_s3files_store_app_data) 

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

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

#### Se estiver usando Identidades de Pods
<a name="s3files-eksctl-pod-identities"></a>

Execute os comandos a seguir para criar perfis do IAM e a Identidade de Pods com o `eksctl`. Substitua {{my-cluster}} pelo seu valor.

```
export cluster_name=my-cluster

# Create the controller role
eksctl create podidentityassociation \
    --service-account-name efs-csi-controller-sa \
    --namespace kube-system \
    --cluster $cluster_name \
    --role-name AmazonEKS_EFS_CSI_ControllerRole \
    --permission-policy-arns arn:aws:iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy

# Create the node role
eksctl create podidentityassociation \
    --service-account-name efs-csi-node-sa \
    --namespace kube-system \
    --cluster $cluster_name \
    --role-name AmazonEKS_EFS_CSI_NodeRole \
    --permission-policy-arns arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess,arn:aws:iam::aws:policy/AmazonElasticFileSystemsUtils
```

#### Se estiver usando perfis do IAM para contas de serviço
<a name="s3files-eksctl-irsa"></a>

Execute os seguintes comandos para criar perfis do IAM com o `eksctl`. Substitua {{my-cluster}} pelo nome do seu cluster e {{region-code}} pelo código da região da AWS.

```
export cluster_name=my-cluster
export region_code=region-code

# Create the controller role
export controller_role_name=AmazonEKS_EFS_CSI_ControllerRole
eksctl create iamserviceaccount \
    --name efs-csi-controller-sa \
    --namespace kube-system \
    --cluster $cluster_name \
    --role-name $controller_role_name \
    --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \
    --approve \
    --region $region_code

# Create the node role
export node_role_name=AmazonEKS_EFS_CSI_NodeRole
eksctl create iamserviceaccount \
    --name efs-csi-node-sa \
    --namespace kube-system \
    --cluster $cluster_name \
    --role-name $node_role_name \
    --attach-policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess \
    --attach-policy-arn arn:aws:iam::aws:policy/AmazonElasticFileSystemsUtils \
    --approve \
    --region $region_code
```

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

Execute o seguinte para criar um perfil IAM com Console de gerenciamento da AWS.

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 **Selecionar entidade confiável**, faça o seguinte:

   1. Se estiver usando Identidade de Pods do EKS:

      1. Na seção **Tipo de entidade confiável**), escolha **Service da AWS**.

      1. No menu suspenso **Serviço ou caso de uso**, escolha **EKS**.

      1. Na seção **Caso de uso**, escolha **EKS - Identidade de Pods**.

      1. Escolha **Próximo**.

   1. Se estiver usando perfis do IAM para contas de serviço:

      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 `AmazonS3FilesCSIDriverPolicy`.

   1. Marque a caixa de seleção à esquerda da política retornada na pesquisa.

   1. Escolha **Próximo**.

1. Na página **Name, review, and create** (Nomear, revisar e criar), faça o seguinte:

   1. Em **Nome do perfil**, insira um nome exclusivo para o perfil, como `AmazonEKS_EFS_CSI_ControllerRole`.

   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:

   1. Se estiver usando Identidade de Pods do EKS:

      1. Abra o [console do Amazon EKS](https://console.aws.amazon.com/eks/home#/clusters).

      1. No painel de navegação esquerdo, selecione **Clusters** e depois o nome do cluster para o qual você deseja configurar a associação a Identidade de Pods do EKS.

      1. Escolha a guia **Acesso**.

      1. Em **Associações da Identidade de Pods**, escolha **Criar**.

      1. Escolha o menu suspenso **Perfil do IAM** e selecione o perfil que acabou de criar.

      1. Escolha o campo **Namespace Kubernetes** e a entrada `kube-system`.

      1. Escolha o campo **Conta de serviço do Kubernetes** e a entrada `efs-csi-controller-sa`.

      1. Escolha **Criar**.

      1. Para obter mais informações sobre a criação de associações da Identidade de Pods, consulte [Criar uma associação de identidade de pod (console do AWS )](pod-id-association.md#pod-id-association-create).

      1. Repita as etapas acima para criar uma segunda função para a conta de serviço do nó. Na página **Adicionar permissões**, anexe `AmazonS3ReadOnlyAccess` e `AmazonElasticFileSystemsUtils` em vez disso. Em seguida, crie uma associação da Identidade de Pods com o `efs-csi-node-sa` para o campo da **conta de serviço do Kubernetes**.

   1. Se estiver usando perfis do IAM para contas de serviço:

      1. Escolha o perfil para abri-lo para edição.

      1. Escolha a guia **Relacionamentos de confiança** e, em seguida, escolha **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 a seguinte linha acima da linha anterior. Substitua `<region-code>` pela região da AWS em que seu cluster está localizado. Substitua `<EXAMPLED539D4633E53DE1B71EXAMPLE>` pelo ID do provedor OIDC do cluster.

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

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

      1. Repita as etapas acima para criar uma segunda função para a conta de serviço do nó. Na página **Adicionar permissões**, anexe `AmazonS3ReadOnlyAccess` e `AmazonElasticFileSystemsUtils` em vez disso. Na política de confiança, use `efs-csi-node-sa` para o valor da condição `:sub`.

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

Execute os seguintes comandos para criar perfis do IAM com a AWS CLI.

#### Se estiver usando Identidades de Pods
<a name="s3files-cli-pod-identities"></a>

1. Crie o perfil do IAM que concede as ações `AssumeRole` e `TagSession` ao serviço `pods.eks.amazonaws.com`.

   1. Copie o conteúdo a seguir em um arquivo denominado `aws-efs-csi-driver-trust-policy-pod-identity.json`.

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "AllowEksAuthToAssumeRoleForPodIdentity",
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "pods.eks.amazonaws.com"
                  },
                  "Action": [
                      "sts:AssumeRole",
                      "sts:TagSession"
                  ]
              }
          ]
      }
      ```

   1. Crie a função. Substitua {{my-cluster}} pelo nome do cluster.

      ```
      export cluster_name=my-cluster
      export controller_role_name=AmazonEKS_EFS_CSI_ControllerRole
      aws iam create-role \
        --role-name $controller_role_name \
        --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy-pod-identity.json"
      ```

1. Anexe a política gerenciada do AWS à função de controlador.

   ```
   aws iam attach-role-policy \
     --policy-arn arn:aws:iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \
     --role-name $controller_role_name
   ```

1. Crie um perfil do IAM do nó usando a mesma política de confiança.

   ```
   export node_role_name=AmazonEKS_EFS_CSI_NodeRole
   aws iam create-role \
     --role-name $node_role_name \
     --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy-pod-identity.json"
   ```

1. Anexe as políticas gerenciadas AWS necessárias ao perfil do nó.

   ```
   aws iam attach-role-policy \
     --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess \
     --role-name $node_role_name
   
   aws iam attach-role-policy \
     --policy-arn arn:aws:iam::aws:policy/AmazonElasticFileSystemsUtils \
     --role-name $node_role_name
   ```

1. Execute os comandos a seguir para criar as associações da Identidade de Pods. Substitua `<111122223333>` pelo ID da sua conta.

   ```
   aws eks create-pod-identity-association --cluster-name $cluster_name --role-arn {arn-aws}iam::<111122223333>:role/$controller_role_name --namespace kube-system --service-account efs-csi-controller-sa
   aws eks create-pod-identity-association --cluster-name $cluster_name --role-arn {arn-aws}iam::<111122223333>:role/$node_role_name --namespace kube-system --service-account efs-csi-node-sa
   ```

1. Para obter mais informações sobre a criação de associações da Identidade de Pods, consulte [Criar uma associação de identidade de pod (console do AWS )](pod-id-association.md#pod-id-association-create).

#### Se estiver usando perfis do IAM para contas de serviço
<a name="s3files-cli-irsa"></a>

1. Exiba a URL do provedor OIDC do cluster. Substitua {{my-cluster}} pelo nome do cluster.

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

   Veja abaixo um exemplo de saída.

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

   Se o resultado do comando for `None`, revise os **Pré-requisitos**.

1. Crie o perfil do IAM para a conta de serviço do controlador.

   1. Copie o conteúdo a seguir em um arquivo denominado `controller-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.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>"
                  },
                  "Action": "sts:AssumeRoleWithWebIdentity",
                  "Condition": {
                      "StringEquals": {
                          "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com",
                          "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa"
                      }
                  }
              }
          ]
      }
      ```

   1. Crie a função.

      ```
      export controller_role_name=AmazonEKS_EFS_CSI_ControllerRole
      aws iam create-role \
        --role-name $controller_role_name \
        --assume-role-policy-document file://"controller-trust-policy.json"
      ```

1. Anexe a política gerenciada do AWS à função de controlador.

   ```
   aws iam attach-role-policy \
     --policy-arn arn:aws:iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \
     --role-name $controller_role_name
   ```

1. Crie o perfil do IAM para a conta de serviço do nó.

   1. Copie o conteúdo a seguir em um arquivo denominado `node-trust-policy.json`. Substitua `<111122223333>` pelo ID da sua conta. Substitua `<EXAMPLED539D4633E53DE1B71EXAMPLE>` e `<region-code>` pelos valores retornados na etapa 1.

      ```
      {
          "Version": "2012-10-17", 		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Federated": "arn:aws:iam::<111122223333>:oidc-provider/oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>"
                  },
                  "Action": "sts:AssumeRoleWithWebIdentity",
                  "Condition": {
                      "StringEquals": {
                          "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:sub": "system:serviceaccount:kube-system:efs-csi-node-sa",
                          "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com"
                      }
                  }
              }
          ]
      }
      ```

   1. Crie a função.

      ```
      export node_role_name=AmazonEKS_EFS_CSI_NodeRole
      aws iam create-role \
        --role-name $node_role_name \
        --assume-role-policy-document file://"node-trust-policy.json"
      ```

1. Anexe as políticas gerenciadas AWS necessárias ao perfil do nó.

   ```
   aws iam attach-role-policy \
     --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess \
     --role-name $node_role_name
   
   aws iam attach-role-policy \
     --policy-arn arn:aws:iam::aws:policy/AmazonElasticFileSystemsUtils \
     --role-name $node_role_name
   ```

**nota**  
A política `AmazonS3ReadOnlyAccess` concede acesso de leitura a todos os buckets do S3. Para restringir o acesso a buckets específicos, você pode desanexá-los e substituí-los por uma política embutida baseada em tags. Consulte a [documentação da política do IAM do driver EFS CSI da Amazon](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/docs/iam-policy-create.md) no GitHub para obter detalhes.

## Etapa 2: obter o driver de CSI do Amazon EFS
<a name="s3files-install-driver"></a>

Recomendamos que você instale o driver da CSI do Amazon EFS por meio do complemento Amazon EKS. 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). Se você não conseguir usar o complemento do Amazon EKS, recomendamos que você envie um problema sobre o motivo pelo qual não pode usar o [repositório GitHub para roteiro de contêineres](https://github.com/aws/containers-roadmap/issues).

**Importante**  
Antes de adicionar o driver do Amazon EFS 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 the Amazon EFS CSI Driver](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/docs/install.md#uninstalling-the-amazon-efs-csi-driver) no GitHub.

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

## Etapa 3: criar um sistema de arquivos do Amazon S3
<a name="s3files-create-filesystem"></a>

Para criar um sistema de arquivos do Amazon S3, consulte [Criar um sistema de arquivos do Amazon S3 para o Amazon EKS](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/docs/s3files-create-filesystem.md) no GitHub.

## Etapa 4: implantar uma aplicação de exemplo
<a name="s3files-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 [Exemplos](https://github.com/kubernetes-sigs/aws-efs-csi-driver/tree/master/examples/kubernetes) no GitHub.