

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

# Implantar o driver de CSI do Mountpoint para Amazon S3
<a name="s3-csi-create"></a>

Com o [driver Container Storage Interface (CSI) do Mountpoint para Amazon S3](https://github.com/awslabs/mountpoint-s3-csi-driver), suas aplicações do Kubernetes podem acessar objetos do Amazon S3 por meio de uma interface de sistema de arquivos, obtendo alto throughput agregado sem alterar o código de aplicação.

Este procedimento mostrará como implantar o [driver do Amazon EKS de CSI do Mountpoint para Amazon S3](s3-csi.md). Antes de continuar, revise as [Considerações](s3-csi.md#s3-csi-considerations).

## Pré-requisitos
<a name="s3-csi-prereqs"></a>
+ Um provedor AWS Identity and Access Management (IAM) OpenID Connect (OIDC) para o seu cluster. Para determinar se você tem ou para criar uma, 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 do AWS CLI instalada e configurada em seu dispositivo ou 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`, você poderá 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 uma política do IAM
<a name="s3-create-iam-policy"></a>

O driver CSI do Mountpoint para Amazon S3 precisa de permissões do Amazon S3 para interagir com seu sistema de arquivos. Esta seção mostra como criar uma política do IAM que conceda as permissões necessárias.

O exemplo de política a seguir segue as recomendações de permissão do IAM para o Mountpoint. Como alternativa, você pode usar a política [AmazonS3FullAccess](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonS3FullAccess$jsonEditor) gerenciada pela AWS, mas ela concede mais permissões do que as necessárias para o Mountpoint.

Para obter mais informações sobre as permissões recomendadas para o Mountpoint, consulte [Mountpoint IAM permissions](https://github.com/awslabs/mountpoint-s3/blob/main/doc/CONFIGURATION.md#iam-permissions) no GitHub.

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

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

1. Na página **Políticas**, escolha **Criar política**.

1. Em **Editor de políticas**, escolha **JSON**.

1. No **Editor de políticas**, copie e cole o seguinte:
**Importante**  
Substitua `amzn-s3-demo-bucket1` pelo nome do seu próprio bucket do Amazon S3.

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
           {
               "Sid": "MountpointFullBucketAccess",
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket1"
               ]
           },
           {
               "Sid": "MountpointFullObjectAccess",
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:PutObject",
                   "s3:AbortMultipartUpload",
                   "s3:DeleteObject"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket1/*"
               ]
           }
      ]
   }
   ```

   Os buckets de diretório, introduzidos com a classe de armazenamento Amazon S3 Express One Zone, usam um mecanismo de autenticação diferente dos buckets de uso geral. Em vez de usar ações `s3:*`, você deve usar a ação `s3express:CreateSession`. Para obter mais informações sobre os buckets do diretório, consulte [Buckets de diretório](https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-overview.html) no *Guia do usuário do Amazon S3*.

   Abaixo está um exemplo de política de privilégio mínimo que você usaria para um bucket de diretório.

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "s3express:CreateSession",
               "Resource": "arn:aws:s3express:us-west-2:111122223333:bucket/amzn-s3-demo-bucket1--usw2-az1--x-s3"
           }
       ]
   }
   ```

1. Escolha **Próximo**.

1. Na página **Analisar**, atribua um nome à sua política. Esta demonstração usa o nome `AmazonS3CSIDriverPolicy`.

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

## Etapa 2: Criar uma função do IAM
<a name="s3-create-iam-role"></a>

O driver CSI do Mountpoint para Amazon S3 precisa de permissões do Amazon S3 para interagir com seu sistema de arquivos. Esta seção mostra como criar um perfil do IAM para delegar essas permissões. Para criar esse perfil, você pode usar uma destas ferramentas:
+  [eksctl](#eksctl_s3_store_app_data) 
+  [Console de gerenciamento da AWS](#console_s3_store_app_data) 
+  [AWS CLI](#awscli_s3_store_app_data) 

**nota**  
A política do IAM `AmazonS3CSIDriverPolicy` foi criada na seção anterior.

### eksctl
<a name="eksctl_s3_store_app_data"></a>

 **Para criar seu perfil do IAM do driver CSI do Mountpoint para Amazon S3 com o `eksctl` ** 

Para criar o perfil do IAM e a conta de serviço do Kubernetes, execute os comandos a seguir. Esses comandos também anexam a política do IAM `AmazonS3CSIDriverPolicy` ao perfil, anotam a conta de serviço do Kubernetes (`s3-csi-controller-sa`) com o nome do recurso da Amazon (ARN) do perfil do IAM e adicionam o nome da conta de serviço do Kubernetes à política de confiança para o perfil do IAM.

```
CLUSTER_NAME=my-cluster
REGION=region-code
ROLE_NAME=AmazonEKS_S3_CSI_DriverRole
POLICY_ARN=AmazonEKS_S3_CSI_DriverRole_ARN
eksctl create iamserviceaccount \
    --name s3-csi-driver-sa \
    --namespace kube-system \
    --cluster $CLUSTER_NAME \
    --attach-policy-arn $POLICY_ARN \
    --approve \
    --role-name $ROLE_NAME \
    --region $REGION \
    --role-only
```

### Console de gerenciamento da AWS
<a name="console_s3_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).

      Se não forem exibidos URLs, revise os [Pré-requisitos](#s3-csi-prereqs).

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

   1. Escolha **Próximo**.

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

   1. Na caixa **Filtrar políticas**, insira AmazonS3CSIDriverPolicy.
**nota**  
Essa política foi criada na seção anterior.

   1. Marque a caixa de seleção à esquerda do resultado `AmazonS3CSIDriverPolicy` 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\$1S3\$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 a função for criada, escolha a função no console a fim de abri-la 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, em seguida, adicione a linha a seguir após ela. 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:s3-csi-driver-sa"
   ```

1. Certifique-se de que o operador `Condition` esteja definido como `"StringEquals"`.

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

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

1. Visualize o URL do provedor OIDC do cluster. Substitua *my-cluster* pelo nome do cluster. Se o resultado do comando for `None`, revise os [Pré-requisitos](#s3-csi-prereqs).

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

   Veja abaixo um exemplo de saída.

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

1. Crie a função do IAM, concedendo à conta de serviço do Kubernetes a ação `AssumeRoleWithWebIdentity`.

   1. Copie o conteúdo a seguir em um arquivo denominado `aws-s3-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:sub": "system:serviceaccount:kube-system:s3-csi-driver-sa",
                "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"
              }
            }
          }
        ]
      }
      ```

   1. Crie a função. Você pode alterar o *AmazonEKS\$1S3\$1CSI\$1DriverRole* para um nome diferente, mas, se fizer isso, certifique-se de alterá-lo também nas etapas posteriores.

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

1. Anexe a política do IAM criada anteriormente ao perfil executando o comando a seguir.

   ```
   aws iam attach-role-policy \
     --policy-arn arn:aws:iam::aws:policy/AmazonS3CSIDriverPolicy \
     --role-name AmazonEKS_S3_CSI_DriverRole
   ```
**nota**  
A política do IAM `AmazonS3CSIDriverPolicy` foi criada na seção anterior.

1. Pule esta etapa se você estiver instalando o driver como um complemento do Amazon EKS.. Para instalações autogerenciadas do driver, crie contas de serviço do Kubernetes que são anotadas com o ARN do perfil do IAM que você criou.

   1. Salve o conteúdo a seguir em um arquivo denominado `mountpoint-s3-service-account.yaml`. Substitua *111122223333* pelo ID da sua conta.

      ```
      ---
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        labels:
          app.kubernetes.io/name: aws-mountpoint-s3-csi-driver
        name: mountpoint-s3-csi-controller-sa
        namespace: kube-system
        annotations:
          eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole
      ```

   1. Crie a conta de serviço do Kubernetes no cluster: A conta de serviço do Kubernetes (`mountpoint-s3-csi-controller-sa`) é anotada com o perfil do IAM que você criou denominado *AmazonEKS\$1S3\$1CSI\$1DriverRole*.

      ```
      kubectl apply -f mountpoint-s3-service-account.yaml
      ```
**nota**  
Quando você implanta o plug-in nesse procedimento, ele cria e é configurado para usar uma conta de serviço chamada `s3-csi-driver-sa`.

## Etapa 3: instalar o driver de CSI do Mountpoint para Amazon S3
<a name="s3-install-driver"></a>

Você pode instalar o driver CSI do Mountpoint para Amazon S3 por meio do complemento do Amazon EKS. Você pode usar as seguintes ferramentas para adicionar o complemento ao seu cluster:
+  [eksctl](#eksctl_s3_add_store_app_data) 
+  [Console de gerenciamento da AWS](#console_s3_add_store_app_data) 
+  [AWS CLI](#awscli_s3_add_store_app_data) 

Você também pode instalar o driver CSI do Mountpoint para Amazon S3 como uma instalação autogerenciada. Para obter instruções sobre como realizar uma instalação autogerenciada, consulte [Installation](https://github.com/awslabs/mountpoint-s3-csi-driver/blob/main/docs/install.md#deploy-driver) no GitHub.

A partir da versão `v1.8.0`, é possível configurar taints para tolerar os pods do driver CSI. Para fazer isso, especifique um conjunto personalizado de taints para tolerar `node.tolerations` ou tolere todos os taints com `node.tolerateAllTaints`. Para obter mais informações, consulte [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) na documentação do Kubernetes.

### eksctl
<a name="eksctl_s3_add_store_app_data"></a>

 **Para adicionar o complemento do Amazon S3 CSI usando `eksctl` ** 

Execute o comando a seguir. Substitua *my-cluster* pelo nome do seu cluster, *111122223333* pelo ID da sua conta e *AmazonEKS\$1S3\$1CSI\$1DriverRole* pelo nome do [perfil do IAM criado anteriormente](#s3-create-iam-role).

```
eksctl create addon --name aws-mountpoint-s3-csi-driver --cluster my-cluster \
  --service-account-role-arn arn:aws:iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole --force
```

Se você remover a opção *--force* e alguma das configurações do complemento do Amazon EKS entrar em conflito com as configurações existentes, a atualização do complemento do Amazon EKS falhará e você receberá uma mensagem de erro para ajudá-lo a resolver o conflito. Antes de especificar essa opção, certifique-se de que o complemento Amazon EKS não gerencie as configurações que você precisa gerenciar, pois essas configurações são substituídas por essa opção. Para obter mais informações sobre outras opções para essa configuração, consulte [Addons](https://eksctl.io/usage/addons/) (Complementos) na documentação do `eksctl`. Para obter mais informações sobre o gerenciamento de campos do Kubernetes do Amazon EKS, consulte [Determinar os campos que podem ser personalizados para os complementos do Amazon EKS](kubernetes-field-management.md).

É possível personalizar o `eksctl` por meio de arquivos de configuração. Para obter mais informações, consulte [Trabalhar com valores de configuração](https://eksctl.io/usage/addons/#working-with-configuration-values) na documentação do `eksctl`. O seguinte exemplo de mostra como tolerar todos os taints.

```
# config.yaml
...

addons:
- name: aws-mountpoint-s3-csi-driver
  serviceAccountRoleARN: arn:aws:iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole
  configurationValues: |-
    node:
      tolerateAllTaints: true
```

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

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

1. No painel de navegação à esquerda, escolha **Clusters**.

1. Escolha o nome do cluster para o qual você deseja configurar o complemento CSI do Mountpoint para Amazon S3.

1. Escolha a guia **Add-ons** (Complementos).

1. Escolha **Obter mais complementos**.

1. Na página **Selecionar complementos**, faça o seguinte:

   1. Na seção **Complementos do Amazon EKS**, marque a caixa de seleção **Driver CSI do Mountpoint para Amazon S3**.

   1. Escolha **Próximo**.

1. Na página **Definir as configurações dos complementos selecionados**:

   1. Selecione a **Versão** que deseja usar.

   1. Em **Selecionar perfil do IAM**, selecione o nome do perfil do IAM ao qual você anexou a política do IAM do driver CSI do Mountpoint para Amazon S3.

   1. (Opcional) Atualize o **Método de resolução de conflitos** após expandir as **Configurações opcionais**. Se você selecionar **Substituir**, uma ou mais configurações do complemento existente poderão ser substituídas pelas configurações do complemento do Amazon EKS. Se você não habilitar esta opção e houver um conflito com suas configurações existentes, a operação falhará. É possível usar a mensagem de erro resultante para solucionar o conflito. Antes de selecionar essa opção, certifique-se de que o complemento do Amazon EKS não gerencie as configurações que você precisa autogerenciar.

   1. (Opcional) Configure as tolerâncias no campo **Valores de configuração** depois de expandir as **Configurações opcionais**.

   1. Escolha **Próximo**.

1. Na página **Adicionar tags**, escolha **Criar**. Depois que a instalação do complemento for concluída, você verá o complemento instalado.

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

 **Para adicionar o complemento CSI do Mountpoint para Amazon S3 usando a AWS CLI** 

Execute o comando a seguir. Substitua *my-cluster* pelo nome do cluster, *111122223333* pelo ID da conta e *AmazonEKS\$1S3\$1CSI\$1DriverRole* pelo nome do perfil criada anteriormente.

```
aws eks create-addon --cluster-name my-cluster --addon-name aws-mountpoint-s3-csi-driver \
  --service-account-role-arn arn:aws:iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole
```

É possível personalizar o comando com o sinalizador `--configuration-values`. O exemplo alternativo a seguir mostra como tolerar todos os taints.

```
aws eks create-addon --cluster-name my-cluster --addon-name aws-mountpoint-s3-csi-driver \
  --service-account-role-arn arn:aws:iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole \
  --configuration-values '{"node":{"tolerateAllTaints":true}}'
```

## Etapa 4: xonfigurar o Mountpoint para Amazon S3
<a name="s3-configure-mountpoint"></a>

Na maioria dos casos, você pode configurar o Mountpoint para Amazon S3 com apenas um nome de bucket. Para obter instruções sobre como configurar o Mountpoint para Amazon S3, consulte [Configuring Mountpoint for Amazon S3](https://github.com/awslabs/mountpoint-s3/blob/main/doc/CONFIGURATION.md) no GitHub.

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

É possível implantar provisionamento estático para o driver em um bucket do Amazon S3 existente. Para obter mais informações, consulte [Static Provisioning](https://github.com/awslabs/mountpoint-s3-csi-driver/blob/main/examples/kubernetes/static_provisioning/README.md) no GitHub.