

 **Ayude a mejorar esta página** 

Para contribuir a esta guía del usuario, elija el enlace **Edit this page on GitHub** que se encuentra en el panel derecho de cada página.

# Implementación del controlador de Mountpoint para Amazon S3
<a name="s3-csi-create"></a>

Con el [controlador de interfaz de almacenamiento de contenedores (CSI) de Mountpoint para Amazon S3](https://github.com/awslabs/mountpoint-s3-csi-driver), las aplicaciones de Kubernetes pueden acceder a los objetos de Amazon S3 a través de una interfaz de sistema de archivos, lo que permite lograr un rendimiento total alto sin cambiar códigos de aplicaciones.

Este procedimiento muestra cómo implementar el [controlador de CSI de Mountpoint para Amazon S3 de Amazon EKS](s3-csi.md). Antes de continuar, revise las [Consideraciones](s3-csi.md#s3-csi-considerations).

## Requisitos previos
<a name="s3-csi-prereqs"></a>
+ Un proveedor existente de OpenID Connect (OIDC) de AWS Identity and Access Management (IAM) para su clúster. Para determinar si ya tiene un proveedor o para crear uno, consulte [Crear un proveedor de OIDC de IAM para su clúster](enable-iam-roles-for-service-accounts.md).
+ La versión 2.12.3 o posterior de AWS CLI instalada y configurada en su dispositivo o AWS CloudShell.
+ La herramienta de línea de comandos de `kubectl` está instalada en su dispositivo o AWS CloudShell. La versión puede ser la misma o hasta una versión secundaria anterior o posterior a la versión de Kubernetes de su clúster. Por ejemplo, si la versión del clúster es `1.29`, puede usar la versión `1.28`, `1.29` o `1.30` de `kubectl` con él. Para instalar o actualizar `kubectl`, consulte [Configuración de `kubectl` y `eksctl`](install-kubectl.md).

## Paso 1: Crear una política de IAM
<a name="s3-create-iam-policy"></a>

El controlador de CSI de Mountpoint para Amazon S3 requiere permisos de Amazon S3 para interactuar con el sistema de archivos. En esta sección se muestra cómo crear una política de IAM que conceda los permisos necesarios.

El siguiente ejemplo de política sigue las recomendaciones de permisos de IAM para Mountpoint. Como alternativa, puede utilizar la política administrada de AWS [AmazonS3FullAccess](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonS3FullAccess$jsonEditor), pero esta política administrada concede más permisos de los necesarios para Mountpoint.

Para obtener más información sobre los permisos recomendados por Mountpoint, consulte [Mountpoint IAM permissions](https://github.com/awslabs/mountpoint-s3/blob/main/doc/CONFIGURATION.md#iam-permissions) en GitHub.

1. Abra la consola de IAM en https://console.aws.amazon.com/iam/.

1. En el panel de navegación izquierdo, elija **Políticas**.

1. En la página **Políticas**, seleccione **Crear una política**.

1. En el **editor de políticas**, seleccione **JSON**.

1. En el **editor de políticas**, copie y pegue lo siguiente:
**importante**  
Reemplace `amzn-s3-demo-bucket1` por el nombre de su bucket de 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/*"
               ]
           }
      ]
   }
   ```

   Los buckets de directorio, introducidos con la clase de almacenamiento Amazon S3 Express One Zone, utilizan un mecanismo de autenticación diferente al de los buckets de uso general. En lugar de utilizar acciones `s3:*`, debe utilizar la acción `s3express:CreateSession`. Para más información sobre los buckets de directorio, consulte [Buckets de directorio](https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-overview.html) en la *Guía de usuario de Amazon S3*.

   A continuación, se muestra un ejemplo de política de privilegios mínimos que utilizaría para un bucket de directorios.

   ```
   {
       "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. Elija **Siguiente**.

1. En la página **Revisar y crear**, asigne un nombre a la política. En este tutorial de ejemplo se utiliza el nombre `AmazonS3CSIDriverPolicy`.

1. Elija **Crear política**.

## Paso 2: creación de un rol de IAM
<a name="s3-create-iam-role"></a>

El controlador de CSI de Mountpoint para Amazon S3 requiere permisos de Amazon S3 para interactuar con el sistema de archivos. En esta sección se muestra cómo crear un rol de IAM para delegar estos permisos. Para crear este rol, puede utilizar una de las siguientes herramientas:
+  [eksctl](#eksctl_s3_store_app_data) 
+  [Consola de administración de AWS](#console_s3_store_app_data) 
+  [AWS CLI](#awscli_s3_store_app_data) 

**nota**  
La política de IAM `AmazonS3CSIDriverPolicy` se creó en la sección anterior.

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

 **Creación del rol de IAM del controlador de CSI de Mountpoint para Amazon S3 con `eksctl` ** 

Para crear el rol de IAM y la cuenta de servicio de Kubernetes, ejecute los siguientes comandos. Estos comandos también asocian la política de IAM `AmazonS3CSIDriverPolicy` al rol, anotan la cuenta de servicio de Kubernetes (`s3-csi-controller-sa`) con el Nombre de recurso de Amazon (ARN) del rol de IAM y agregan el nombre de la cuenta de servicio de Kubernetes a la política de confianza correspondiente al rol de 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
```

### Consola de administración de AWS
<a name="console_s3_store_app_data"></a>

1. Abra la consola de IAM en https://console.aws.amazon.com/iam/.

1. En el panel de navegación izquierdo, elija **Roles**.

1. En la página **Roles**, elija **Crear rol**.

1. En la página **Seleccionar entidad de confianza**, haga lo siguiente:

   1. En la sección **Tipo de entidad de confianza**, elija **Identidad web**.

   1. Para **Identity provider** (Proveedor de identidades), elija **OpenID Connect provider URL** (URL del proveedor de OpenID Connect) para el clúster, como se muestra en **Overview** (Resumen) en Amazon EKS.

      Si no se muestra ninguna URL, consulte la sección [Requisitos previos](#s3-csi-prereqs).

   1. En **Audiencia**, elija `sts.amazonaws.com`.

   1. Elija **Siguiente**.

1. En la página **Agregar permisos**, haga lo siguiente:

   1. En el cuadro **Filtrar políticas**, ingrese AmazonS3CSIDriverPolicy.
**nota**  
Esta política se creó en la sección anterior.

   1. Marque la casilla situada a la izquierda del resultado de `AmazonS3CSIDriverPolicy` que obtuvo en la búsqueda.

   1. Elija **Siguiente**.

1. En la página **Nombrar, revisar y crear**, haga lo siguiente:

   1. En **Nombre del rol**, ingrese un nombre único para su rol, por ejemplo, AmazonEKS\$1S3\$1CSI\$1DriverRole.

   1. En **Agregar etiquetas (Opcional)**, de manera opcional, agregue metadatos al rol asociando etiquetas como pares de clave-valor. Para obtener más información sobre el uso de etiquetas en IAM, consulte [Etiquetado de recursos de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html) en la *Guía de usuario de IAM*.

   1. Elija **Creación de rol**.

1. Una vez creado el rol, seleccione el rol en la consola para abrirlo y editarlo.

1. Elija la pestaña **Relaciones de confianza** y, a continuación, **Editar política de confianza**.

1. Busque la línea que se parezca a la siguiente:

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

   Agregue una coma al final de la línea anterior y, luego, agregue la siguiente línea después de esta. Reemplace *region-code* por la región de AWS en la que se encuentra el clúster. Reemplace *EXAMPLED539D4633E53DE1B71EXAMPLE* con el ID de proveedor de OIDC de su clúster.

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

1. Asegúrese de que el operador `Condition` esté configurado en `"StringEquals"`.

1. Elija **Actualizar política** para terminar.

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

1. Vea la URL del proveedor de OIDC para su clúster. Reemplace *my-cluster* por el nombre de su clúster. Si la salida del comando es `None`, revise los [Requisitos previos](#s3-csi-prereqs).

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

   Un ejemplo de salida sería el siguiente.

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

1. Cree el rol de IAM otorgándole a la cuenta de servicio de Kubernetes la acción `AssumeRoleWithWebIdentity`.

   1. Copie los siguientes contenidos en un archivo denominado `aws-s3-csi-driver-trust-policy.json`. Reemplace *111122223333* por el ID de su cuenta. Reemplace *EXAMPLED539D4633E53DE1B71EXAMPLE* y *region-code* por los valores que se devolvieron en el paso 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. Creación del rol. Puede cambiar el nombre de *AmazonEKS\$1S3\$1CSI\$1DriverRole*, pero si lo hace, asegúrese de cambiarlo también en los pasos posteriores.

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

1. Cree un rol de IAM y adjunte la política de IAM creada previamente al rol con el siguiente comando.

   ```
   aws iam attach-role-policy \
     --policy-arn arn:aws:iam::aws:policy/AmazonS3CSIDriverPolicy \
     --role-name AmazonEKS_S3_CSI_DriverRole
   ```
**nota**  
La política de IAM `AmazonS3CSIDriverPolicy` se creó en la sección anterior.

1. Omita este paso si va a instalar el controlador como complemento de Amazon EKS. Para las instalaciones autoadministradas del controlador, cree cuentas de servicio de Kubernetes que estén anotadas con el ARN del rol de IAM que creó.

   1. Guarde los siguientes contenidos en un archivo llamado `mountpoint-s3-service-account.yaml`. Reemplace *111122223333* por el ID de su cuenta.

      ```
      ---
      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. Cree la cuenta de servicio de Kubernetes en el clúster. La cuenta de servicio de Kubernetes (`mountpoint-s3-csi-controller-sa`) está anotada con el rol de IAM que creó con el nombre *AmazonEKS\$1S3\$1CSI\$1DriverRole*.

      ```
      kubectl apply -f mountpoint-s3-service-account.yaml
      ```
**nota**  
Cuando implementa el complemento en este procedimiento, crea una cuenta de servicio que se llama `s3-csi-driver-sa` y se configura para utilizarla.

## Paso 3: instalación del controlador de CSI de Mountpoint para Amazon S3
<a name="s3-install-driver"></a>

Puede instalar el controlador de CSI de Mountpoint para Amazon S3 a través del complemento de Amazon EKS. Puede usar las herramientas a continuación para agregar el complemento a su clúster:
+  [eksctl](#eksctl_s3_add_store_app_data) 
+  [Consola de administración de AWS](#console_s3_add_store_app_data) 
+  [AWS CLI](#awscli_s3_add_store_app_data) 

Como alternativa, puede instalar el controlador de CSI de Mountpoint para Amazon S3 como instalación autoadministrada. Para obtener instrucciones sobre cómo efectuar una instalación autoadministrada, consulte [Installation](https://github.com/awslabs/mountpoint-s3-csi-driver/blob/main/docs/install.md#deploy-driver) en GitHub.

A partir de la versión `v1.8.0`, es posible configurar taints para tolerar los pods del controlador de CSI. Para ello, especifique un conjunto personalizado de taints para tolerar con `node.tolerations` o tolere todas las taints con `node.tolerateAllTaints`. Para obtener más información, consulte [Taints y toleraciones](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) en la documentación de Kubernetes.

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

 **Agregar el complemento CSI de Amazon S3 con `eksctl` ** 

Ejecute el siguiente comando. Reemplace *my-cluster* por el nombre del clúster, *111122223333* por el ID de cuenta y *AmazonEKS\$1S3\$1CSI\$1DriverRole* por el nombre del [rol de IAM creado 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
```

Si quita la opción *--force* y cualquiera de las configuraciones del complemento de Amazon EKS entran en conflicto con la configuración existente, se produce un error al actualizar el complemento de Amazon EKS y recibe un mensaje de error para ayudarlo a resolver el conflicto. Antes de especificar esta opción, asegúrese de que el complemento de Amazon EKS no administra la configuración que necesita administrar, ya que dicha configuración se sobrescribe con esta opción. Para obtener más información acerca de otras opciones para este ajuste, consulte [Addons](https://eksctl.io/usage/addons/) (Complementos) en la documentación de `eksctl`. Para obtener más información sobre el campo de administración de Kubernetes de Amazon EKS, consulte [Determinación de los campos que se pueden personalizar para los complementos de Amazon EKS](kubernetes-field-management.md).

Puede personalizar `eksctl` mediante archivos de configuración. Para obtener más información, consulte [Trabajar con valores de configuración](https://eksctl.io/usage/addons/#working-with-configuration-values) en la documentación de `eksctl`. En el siguiente ejemplo se demuestra cómo tolerar todas las taints.

```
# config.yaml
...

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

### Consola de administración de AWS
<a name="console_s3_add_store_app_data"></a>

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

1. En el panel de navegación izquierdo, elija **Clusters (Clústeres)**.

1. Seleccione el nombre del clúster para el cual desea configurar el complemento de CSI de Mountpoint para Amazon S3.

1. Elija la pestaña **Complementos**.

1. Escoja **Obtener más complementos**.

1. En la página **Seleccionar complementos**, haga lo siguiente:

   1. En la sección **Complementos de Amazon EKS**, seleccione la casilla de verificación **Controlador de CSI de Mountpoint para Amazon S3**.

   1. Elija **Siguiente**.

1. En la página **Configurar las opciones de complementos seleccionados**, haga lo siguiente:

   1. Seleccione la **Versión** que desea utilizar.

   1. En **Seleccionar rol de IAM**, seleccione el nombre de un rol de IAM al que le haya adjuntado la política de IAM del controlador de CSI de Mountpoint para Amazon S3.

   1. (Opcional) Actualice el **método de resolución de conflictos** después de ampliar los **ajustes de configuración opcionales**. Si selecciona **Anular**, es posible que una o varias configuraciones del complemento existente se sobrescriban con la configuración del complemento de Amazon EKS. Si no habilita esta opción y hay un conflicto con la configuración existente, la operación falla. Puede utilizar el mensaje de error resultante para solucionar el conflicto. Antes de seleccionar esta opción, asegúrese de que el complemento de Amazon EKS no administra las configuraciones que se necesitan autoadministrar.

   1. (Opcional) Configure las tolerancias en el campo **Valores de configuración** después de **ampliar los ajustes de configuración opcionales**.

   1. Elija **Siguiente**.

1. En la página **Revisar y añadir**, elija **Crear**. Una vez finalizada la instalación del complemento, verá el complemento instalado.

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

 **Adición del complemento de CSI de Mountpoint para Amazon S3 mediante la AWS CLI** 

Ejecute el siguiente comando. Reemplace *my-cluster* por el nombre del clúster, *111122223333* por el ID de cuenta y *AmazonEKS\$1S3\$1CSI\$1DriverRole* por el nombre del rol creado 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
```

Puede personalizar el comando con la marca `--configuration-values`. El siguiente ejemplo alternativo muestra cómo tolerar todas las 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}}'
```

## Paso 4: configuración de Mountpoint para Amazon S3
<a name="s3-configure-mountpoint"></a>

En la mayoría de los casos, puede configurar Mountpoint para Amazon S3 solo con un nombre de bucket. Para obtener instrucciones sobre la configuración de Mountpoint para Amazon S3, consulte [Configuring Mountpoint for Amazon S3](https://github.com/awslabs/mountpoint-s3/blob/main/doc/CONFIGURATION.md) en GitHub.

## Paso 5: implementación de una aplicación de muestra
<a name="s3-sample-app"></a>

Puede implementar el aprovisionamiento estático en el controlador de un bucket de Amazon S3 existente. Para obtener más información, consulte [Static provisioning](https://github.com/awslabs/mountpoint-s3-csi-driver/blob/main/examples/kubernetes/static_provisioning/README.md) en GitHub.