

 **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 continua con Argo CD
<a name="argocd"></a>

Argo CD es una herramienta declarativa de entrega continua de GitOps para Kubernetes. Con Argo CD, puede automatizar la implementación y la administración del ciclo de vida de sus aplicaciones en múltiples clústeres y entornos. Argo CD admite varios tipos de orígenes, como los repositorios de Git, los registros de Helm (HTTP y OCI) y las imágenes de OCI, lo que proporciona flexibilidad a las organizaciones con diferentes requisitos de seguridad y cumplimiento.

Con las capacidades de EKS, AWS administra Argo CD completamente, lo que elimina la necesidad de instalar, mantener y escalar los controladores de Argo CD y sus dependencias en sus clústeres.

## Cómo funciona Argo CD
<a name="_how_argo_cd_works"></a>

Argo CD sigue el patrón de GitOps, donde el origen de la aplicación (repositorio de Git, registro de Helm o imagen de OCI) es el origen de información verdadera para definir el estado de la aplicación deseado. Al crear un recurso `Application` de Argo CD, especifique un origen que contenga los manifiestos de la aplicación y un espacio de nombres y un clúster de Kubernetes de destino. Argo CD supervisa de forma continua tanto el origen como el estado activo del clúster y sincroniza automáticamente cualquier cambio para garantizar que el estado del clúster coincida con el estado deseado.

**nota**  
Con la capacidad de EKS para Argo CD, el software de Argo CD se ejecuta en el plano de control de AWS, no en los nodos de trabajo. Esto significa que sus nodos de trabajo no necesitan acceso directo a los repositorios de Git o a los registros de Helm, ya que la capacidad gestiona el acceso al origen desde la cuenta de AWS.

Argo CD proporciona tres tipos de recursos principales:
+  **Aplicación**: define una implementación desde un repositorio de Git a un clúster de destino.
+  **ApplicationSet**: genera múltiples aplicaciones a partir de plantillas para implementaciones de varios clústeres.
+  **AppProject**: proporciona agrupamiento lógico y control de acceso para las aplicaciones.

 **Ejemplo: creación de una aplicación de Argo CD** 

En el ejemplo siguiente, se muestra cómo crear un recurso `Application` de Argo CD:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps.git
    targetRevision: HEAD
    path: guestbook
  destination:
    name: in-cluster
    namespace: guestbook
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
```

**nota**  
Utilice `destination.name` con el nombre del clúster que utilizó al registrar el clúster (como `in-cluster` para el clúster local). El campo `destination.server` también funciona con los ARN de clústeres de EKS, pero se recomienda utilizar los nombres de los clústeres para una mejor legibilidad.

## Ventajas de Argo CD
<a name="_benefits_of_argo_cd"></a>

Argo CD implementa un flujo de trabajo de GitOps en el que define las configuraciones de las aplicaciones en los repositorios de Git y Argo CD sincroniza automáticamente las aplicaciones para que coincidan con el estado deseado. Este enfoque centrado en Git proporciona un registro de auditoría completo de todos los cambios, permite revertirlos fácilmente y se integra de forma natural con sus procesos de revisión y aprobación de código existentes. Argo CD detecta y concilia automáticamente la diferencia entre el estado deseado en Git y el estado real de los clústeres, lo que garantiza que las implementaciones se mantengan coherentes con la configuración declarada.

Con Argo CD, puede implementar y administrar aplicaciones en varios clústeres desde una única instancia de Argo CD, lo que simplifica las operaciones en entornos de varios clústeres y regiones. La interfaz de usuario de Argo CD ofrece capacidades de visualización y supervisión, lo que le permite ver el estado de la implementación, el estado y el historial de sus aplicaciones. La interfaz de usuario se integra con AWS Identity Center (anteriormente AWS SSO) para una autenticación y autorización fluidas, lo que le permite controlar el acceso mediante su infraestructura de administración de identidades existente.

Como parte de las capacidades administradas de EKS, AWS administra completamente Argo CD, lo que elimina la necesidad de instalar, configurar y mantener la infraestructura de Argo CD. AWS administra el escalado, la aplicación de parches y la administración operativa, lo que permite a sus equipos centrarse en la entrega de la aplicación y no en el mantenimiento de la herramienta.

## Integración con AWS Identity Center
<a name="integration_with_shared_aws_identity_center"></a>

Las capacidades administradas de EKS proporcionan una integración directa entre Argo CD y AWS Identity Center, lo que permite una autenticación y autorización fluidas para sus usuarios. Al activar la capacidad de Argo CD, puede configurar la integración de AWS Identity Center para asignar los grupos y usuarios de Identity Center a los roles de RBAC de Argo CD, lo que le permite controlar quién puede acceder a las aplicaciones de Argo CD y administrarlas.

## Integración con otras capacidades administradas de EKS
<a name="_integration_with_other_eks_managed_capabilities"></a>

Argo CD se integra con otras capacidades administradas de EKS.
+  **Controladores de AWS para Kubernetes (ACK)**: utilice Argo CD para administrar la implementación de los recursos de ACK en varios clústeres, lo que activa los flujos de trabajo de GitOps para su infraestructura de AWS.
+  **kro (Kube Resource Orchestrator)**: utilice Argo CD para implementar composiciones de kro en varios clústeres, lo que permite una composición uniforme de los recursos en todo el entorno de Kubernetes.

## Introducción a Argo CD
<a name="_getting_started_with_argo_cd"></a>

Para comenzar a utilizar la capacidad de EKS para Argo CD:

1. Cree y configure un rol de capacidad de IAM con los permisos necesarios para que Argo CD acceda a los orígenes y administre aplicaciones.

1.  [Cree un recurso de capacidad de Argo CD](create-argocd-capability.md) en su clúster de EKS a través de la consola de AWS, la AWS CLI o su infraestructura preferida como herramienta de código.

1. Configure el acceso al repositorio y registre los clústeres para la implementación de aplicaciones.

1. Cree recursos de aplicación para implementar las aplicaciones desde los orígenes declarativos.

# Creación de una capacidad de Argo CD
<a name="create-argocd-capability"></a>

En este tema, se explica cómo crear una capacidad de Argo CD en un clúster de Amazon EKS.

## Requisitos previos
<a name="_prerequisites"></a>

Antes de crear una capacidad de Argo CD, asegúrese de que disponga de lo siguiente:
+ Un clúster de Amazon EKS existente que ejecute una versión de Kubernetes compatible (se admiten todas las versiones con soporte estándar y ampliado)
+  **AWS Identity Center configurado**: necesario para la autenticación de Argo CD (no se admiten los usuarios locales)
+ Un rol de capacidad de IAM con permisos para Argo CD
+ Permisos de IAM suficientes para crear recursos de capacidad en los clústeres de EKS
+  `kubectl` configurado para comunicarse con el clúster
+ (Opcional) La CLI de Argo CD instalada para facilitar la administración de clústeres y repositorios
+ (Para la CLI o eksctl) La herramienta de la CLI adecuada instalada y configurada

Para obtener instrucciones sobre cómo crear el rol de capacidad de IAM, consulte [Rol de IAM de capacidad de Amazon EKS](capability-role.md). Para obtener la configuración de Identity Center, consulte [Introducción a AWS Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html).

**importante**  
El rol de capacidad de IAM que proporcione determina a qué recursos de AWS puede acceder Argo CD. Esto incluye el acceso al repositorio de Git a través de CodeConnections y los secretos en Secrets Manager. Para obtener orientación sobre cómo crear un rol adecuado con los permisos de privilegio mínimo, consulte [Rol de IAM de capacidad de Amazon EKS](capability-role.md) y [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md).

## Elección de la herramienta
<a name="_choose_your_tool"></a>

Puede crear una capacidad de Argo CD mediante la Consola de administración de AWS, la AWS CLI o eksctl:
+  [Creación de una capacidad de Argo CD mediante la consola](argocd-create-console.md): uso de la consola para una experiencia guiada
+  [Creación de una capacidad de Argo CD mediante la AWS CLI](argocd-create-cli.md): uso de la AWS CLI para scripts y automatización
+  [Creación de una capacidad de Argo CD mediante eksctl](argocd-create-eksctl.md): uso de eksctl para una experiencia nativa de Kubernetes

## Qué ocurre cuando se crea una capacidad de Argo CD
<a name="_what_happens_when_you_create_an_argo_cd_capability"></a>

Cuando crea una capacidad de Argo CD:

1. EKS crea el servicio de capacidad de Argo CD en el plano de control de AWS.

1. Las definiciones de recursos personalizados (CRD) de Kubernetes se instalan en el clúster.

1. Se crea automáticamente una entrada de acceso para el rol de capacidad de IAM, con políticas de entrada de acceso específicas de la capacidad que conceden permisos básicos de Kubernetes (consulte [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md)).

1. Argo CD comienza a supervisar sus recursos personalizados (Aplicaciones, ApplicationSets, AppProjects)

1. El estado de la capacidad cambia de `CREATING` a `ACTIVE`. 

1. La interfaz de usuario de Argo CD pasa a estar accesible a través de su URL

Una vez activa, puede crear Aplicaciones de Argo CD en el clúster para implementar desde los orígenes declarativos.

**nota**  
La entrada de acceso creada automáticamente no concede permisos para implementar aplicaciones en clústeres. Para implementar aplicaciones, debe configurar permisos adicionales de control de acceso basado en roles de Kubernetes para cada clúster de destino. Consulte [Registro de clústeres de destino](argocd-register-clusters.md) para obtener detalles sobre cómo registrar clústeres y configurar el acceso.

## Siguientes pasos
<a name="_next_steps"></a>

Después de crear la capacidad de Argo CD:
+  [Conceptos de Argo CD](argocd-concepts.md): más información sobre los principios de GitOps, las políticas de sincronización y los patrones de varios clústeres
+  [Uso de Argo CD](working-with-argocd.md): configuración del acceso a repositorios, registro de clústeres de destino y creación de aplicaciones
+  [Consideraciones sobre Argo CD](argocd-considerations.md): exploración de los patrones de arquitectura de varios clústeres y configuración avanzada

# Creación de una capacidad de Argo CD mediante la consola
<a name="argocd-create-console"></a>

En este tema, se describe cómo crear una capacidad de Argo CD mediante la Consola de administración de AWS.

## Requisitos previos
<a name="_prerequisites"></a>
+  ** AWS Identity Center configurado**: Argo CD requiere AWS Identity Center para la autenticación. No se admiten usuarios locales. Si no ha configurado AWS Identity Center, consulte [Introducción a AWS Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html) para crear una instancia de Identity Center y [Adición de usuarios](https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html) y [Adición de grupos](https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html) para crear usuarios y grupos a fin de acceder a Argo CD.

## Creación de la capacidad de Argo CD
<a name="_create_the_argo_cd_capability"></a>

1. Abra la consola de Amazon EKS en https://console.aws.amazon.com/eks/home\$1/clusters.

1. Seleccione el nombre del clúster para abrir la página de detalles del clúster.

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

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

1. Elija **Crear capacidad de Argo CD**.

1. Para el **rol de capacidad de IAM**:
   + Si ya tiene un rol de capacidad de IAM, selecciónelo en el menú desplegable.
   + Si necesita crear un rol, elija **Crear rol de Argo CD**. 

     De este modo, se abre la consola de IAM en una nueva pestaña con la política de confianza rellenada previamente y el acceso completo de lectura a Secrets Manager. No se agrega ningún otro permiso de forma predeterminada, pero puede agregarlos si es necesario. Si tiene previsto usar los repositorios de CodeCommit u otros servicios de AWS, agregue los permisos adecuados antes de crear el rol.

     Después de crear el rol, regrese a la consola de EKS y el rol se seleccionará automáticamente.
**nota**  
Si tiene previsto usar las integraciones opcionales con AWS Secrets Manager o AWS CodeConnections, tendrá que agregar permisos al rol. Para ver ejemplos de políticas de IAM y guías de configuración, consulte [Administración de secretos de aplicaciones con AWS Secrets Manager](integration-secrets-manager.md) y [Conexión a los repositorios de Git con AWS CodeConnections](integration-codeconnections.md).

1. Configure la integración de AWS Identity Center:

   1. Seleccione **Habilitar la integración de AWS Identity Center**.

   1. Elija su instancia de Identity Center en el menú desplegable.

   1. Para configurar las asignaciones de roles para RBAC, asigne usuarios o grupos a los roles de Argo CD (ADMIN, EDITOR o VIEWER)

1. Seleccione **Crear**.

Comenzará el proceso de creación de la capacidad.

## Comprobación de la activación de la capacidad
<a name="_verify_the_capability_is_active"></a>

1. En la pestaña **Capacidades**, consulte el estado de la capacidad de Argo CD.

1. Espere a que el estado cambie de `CREATING` a `ACTIVE`.

1. Una vez activa, la capacidad está lista para usarse.

Para obtener información sobre los estados de la capacidad y la solución de problemas, consulte [Uso de recursos de capacidades](working-with-capabilities.md).

## Acceso a la interfaz de usuario de Argo CD
<a name="_access_the_argo_cd_ui"></a>

Después de que la capacidad esté activa, puede acceder a la interfaz de usuario de Argo CD:

1. En la página de la capacidad de Argo CD, seleccione **Abrir la interfaz de usuario de Argo CD**.

1. La interfaz de usuario de Argo CD se abre en una nueva pestaña del navegador.

1. Ahora puede crear aplicaciones y administrar las implementaciones a través de la interfaz de usuario.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Uso de Argo CD](working-with-argocd.md): configuración de repositorios, registro de clústeres y creación de aplicaciones
+  [Consideraciones sobre Argo CD](argocd-considerations.md): arquitectura de varios clústeres y configuración avanzada
+  [Uso de recursos de capacidades](working-with-capabilities.md): administración del recurso de la capacidad de Argo CD

# Creación de una capacidad de Argo CD mediante la AWS CLI
<a name="argocd-create-cli"></a>

En este tema, se describe cómo crear una capacidad de Argo CD mediante la AWS CLI.

## Requisitos previos
<a name="_prerequisites"></a>
+  **AWS CLI**: versión `2.12.3` o posterior. Para comprobar la versión, ejecute `aws --version`. Para obtener más información, consulte [Instalación](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) en la Guía del usuario de la interfaz de la línea de comandos de AWS.
+  ** `kubectl` ** – una herramienta de línea de comandos para trabajar con clústeres de Kubernetes. Para obtener más información, consulte [Configuración de `kubectl` y `eksctl`](install-kubectl.md).
+  ** AWS Identity Center configurado**: Argo CD requiere AWS Identity Center para la autenticación. No se admiten usuarios locales. Si no ha configurado AWS Identity Center, consulte [Introducción a AWS Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html) para crear una instancia de Identity Center y [Adición de usuarios](https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html) y [Adición de grupos](https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html) para crear usuarios y grupos a fin de acceder a Argo CD.

## Paso 1: creación de un rol de capacidad de IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Cree un archivo de política de confianza:

```
cat > argocd-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

Cree el rol de IAM:

```
aws iam create-role \
  --role-name ArgoCDCapabilityRole \
  --assume-role-policy-document file://argocd-trust-policy.json
```

**nota**  
Si tiene previsto usar las integraciones opcionales con AWS Secrets Manager o AWS CodeConnections, tendrá que agregar permisos al rol. Para ver ejemplos de políticas de IAM y guías de configuración, consulte [Administración de secretos de aplicaciones con AWS Secrets Manager](integration-secrets-manager.md) y [Conexión a los repositorios de Git con AWS CodeConnections](integration-codeconnections.md).

## Paso 2: creación de la capacidad de Argo CD
<a name="_step_2_create_the_argo_cd_capability"></a>

Cree el recurso de la capacidad de Argo CD en su clúster.

En primer lugar, defina las variables de entorno para la configuración de Identity Center:

```
# Get your Identity Center instance ARN (replace region if your IDC instance is in a different region)
export IDC_INSTANCE_ARN=$(aws sso-admin list-instances --region [.replaceable]`region` --query 'Instances[0].InstanceArn' --output text)

# Get a user ID for RBAC mapping (replace with your username and region if needed)
export IDC_USER_ID=$(aws identitystore list-users \
  --region [.replaceable]`region` \
  --identity-store-id $(aws sso-admin list-instances --region [.replaceable]`region` --query 'Instances[0].IdentityStoreId' --output text) \
  --query 'Users[?UserName==`your-username`].UserId' --output text)

echo "IDC_INSTANCE_ARN=$IDC_INSTANCE_ARN"
echo "IDC_USER_ID=$IDC_USER_ID"
```

Cree la capacidad con la integración de Identity Center. Sustituya *region-code* por la región de AWS donde se encuentra el clúster, *my-cluster* por el nombre del clúster e *idc-region-code* por el código de la región donde se ha configurado el IAM Identity Center:

```
aws eks create-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd \
  --type ARGOCD \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/ArgoCDCapabilityRole \
  --delete-propagation-policy RETAIN \
  --configuration '{
    "argoCd": {
      "awsIdc": {
        "idcInstanceArn": "'$IDC_INSTANCE_ARN'",
        "idcRegion": "'[.replaceable]`idc-region-code`'"
      },
      "rbacRoleMappings": [{
        "role": "ADMIN",
        "identities": [{
          "id": "'$IDC_USER_ID'",
          "type": "SSO_USER"
        }]
      }]
    }
  }'
```

El comando devuelve una respuesta inmediatamente, pero la capacidad tarda algún tiempo en activarse mientras EKS crea la infraestructura y los componentes de la capacidad necesarios. EKS instalará las definiciones de recursos personalizados de Kubernetes relacionadas con esta capacidad en el clúster según se vaya creando.

**nota**  
Si recibe un error que indica que el clúster no existe o que no tiene permisos, compruebe lo siguiente:  
El nombre del clúster es correcto
La AWS CLI está configurada para la región correcta
Dispone de los permisos de IAM necesarios

## Paso 3: comprobación de la activación de la capacidad
<a name="_step_3_verify_the_capability_is_active"></a>

Espere a que se active la capacidad. Reemplace *region-code* por la región de AWS en la que se encuentra el clúster y *my-cluster* por el nombre del clúster.

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd \
  --query 'capability.status' \
  --output text
```

La capacidad estará lista cuando aparezca el estado `ACTIVE`. No continúe con el paso siguiente hasta que el estado sea `ACTIVE`.

También puede ver todos los detalles de la capacidad:

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd
```

## Paso 4: comprobación de la disponibilidad de los recursos personalizados
<a name="_step_4_verify_custom_resources_are_available"></a>

Una vez que la capacidad esté activa, compruebe que los recursos personalizados de Argo CD estén disponibles en el clúster:

```
kubectl api-resources | grep argoproj.io
```

Debería ver todos los tipos de recursos `Application` y `ApplicationSet` en la lista.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Uso de Argo CD](working-with-argocd.md): configuración de repositorios, registro de clústeres y creación de aplicaciones
+  [Consideraciones sobre Argo CD](argocd-considerations.md): arquitectura de varios clústeres y configuración avanzada
+  [Uso de recursos de capacidades](working-with-capabilities.md): administración del recurso de la capacidad de Argo CD

# Creación de una capacidad de Argo CD mediante eksctl
<a name="argocd-create-eksctl"></a>

En este tema, se describe cómo crear una capacidad de Argo CD mediante eksctl.

**nota**  
Los siguientes pasos requieren la versión `0.220.0` o posterior de eksctl. Para comprobar la versión, ejecute `eksctl version`.

## Paso 1: creación de un rol de capacidad de IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Cree un archivo de política de confianza:

```
cat > argocd-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

Cree el rol de IAM:

```
aws iam create-role \
  --role-name ArgoCDCapabilityRole \
  --assume-role-policy-document file://argocd-trust-policy.json
```

**nota**  
Para esta configuración básica, no se necesitan políticas de IAM adicionales. Si tiene previsto usar Secrets Manager para las credenciales del repositorio o CodeConnections, tendrá que agregar permisos al rol. Para ver ejemplos de políticas de IAM y guías de configuración, consulte [Administración de secretos de aplicaciones con AWS Secrets Manager](integration-secrets-manager.md) y [Conexión a los repositorios de Git con AWS CodeConnections](integration-codeconnections.md).

## Paso 2: obtención de la configuración de AWS Identity Center
<a name="step_2_get_your_shared_aws_identity_center_configuration"></a>

Obtenga el ARN y el ID de usuario de su instancia de Identity Center para la configuración de RBAC:

```
# Get your Identity Center instance ARN
aws sso-admin list-instances --query 'Instances[0].InstanceArn' --output text

# Get a user ID for admin access (replace 'your-username' with your Identity Center username)
aws identitystore list-users \
  --identity-store-id $(aws sso-admin list-instances --query 'Instances[0].IdentityStoreId' --output text) \
  --query 'Users[?UserName==`your-username`].UserId' --output text
```

Anote estos valores, ya que los necesitará en el siguiente paso.

## Paso 3: creación de un archivo de configuración de eksctl
<a name="_step_3_create_an_eksctl_configuration_file"></a>

Cree un archivo llamado `argocd-capability.yaml` con el siguiente contenido. Sustituya los valores de marcador de posición por el nombre del clúster, la región del clúster, el ARN del rol de IAM, el ARN de la instancia de Identity Center, la región de Identity Center y el ID de usuario:

```
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: my-cluster
  region: cluster-region-code

capabilities:
  - name: my-argocd
    type: ARGOCD
    roleArn: arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole
    deletePropagationPolicy: RETAIN
    configuration:
      argocd:
        awsIdc:
          idcInstanceArn: arn:aws:sso:::instance/ssoins-123abc
          idcRegion: idc-region-code
        rbacRoleMappings:
          - role: ADMIN
            identities:
              - id: 38414300-1041-708a-01af-5422d6091e34
                type: SSO_USER
```

**nota**  
Puede agregar varios usuarios o grupos a las asignaciones de RBAC. Para los grupos, utilice `type: SSO_GROUP` y proporcione el ID del grupo. Los roles disponibles son `ADMIN`, `EDITOR` y `VIEWER`.

## Paso 4: creación de la capacidad de Argo CD
<a name="_step_4_create_the_argo_cd_capability"></a>

Aplique el archivo de configuración:

```
eksctl create capability -f argocd-capability.yaml
```

El comando vuelve inmediatamente, pero la capacidad tarda algún tiempo en activarse.

## Paso 5: comprobación de la activación de la capacidad
<a name="_step_5_verify_the_capability_is_active"></a>

Compruebe el estado de la capacidad. Reemplace *region-code* por la región de AWS donde creó el clúster y *my-cluster* por el nombre de su clúster.

```
eksctl get capability \
  --region region-code \
  --cluster my-cluster \
  --name my-argocd
```

La capacidad estará lista cuando aparezca el estado `ACTIVE`.

## Paso 6: comprobación de la disponibilidad de los recursos personalizados
<a name="_step_6_verify_custom_resources_are_available"></a>

Una vez que la capacidad esté activa, compruebe que los recursos personalizados de Argo CD estén disponibles en el clúster:

```
kubectl api-resources | grep argoproj.io
```

Debería ver todos los tipos de recursos `Application` y `ApplicationSet` en la lista.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Uso de Argo CD](working-with-argocd.md): más información sobre cómo crear y administrar aplicaciones de Argo CD
+  [Consideraciones sobre Argo CD](argocd-considerations.md): configuración del SSO y el acceso a varios clústeres
+  [Uso de recursos de capacidades](working-with-capabilities.md): administración del recurso de la capacidad de Argo CD

# Conceptos de Argo CD
<a name="argocd-concepts"></a>

Para implementar GitOps, Argo CD trata a Git como el único origen de información para las implementaciones de aplicaciones. En este tema, se muestra un ejemplo práctico y, a continuación, se explican los conceptos básicos que debe comprender al trabajar con la capacidad de EKS para Argo CD.

## Introducción a Argo CD
<a name="_getting_started_with_argo_cd"></a>

Después de crear la capacidad de Argo CD (consulte [Creación de una capacidad de Argo CD](create-argocd-capability.md)), puede comenzar a implementar aplicaciones. En este ejemplo, se explica el registro de un clúster y la creación de una aplicación.

### Paso 1: Configurar
<a name="_step_1_set_up"></a>

 **Registro del clúster** (obligatorio)

Registre el clúster en el que desea implementar las aplicaciones. En este ejemplo, registraremos el mismo clúster en el que se ejecuta Argo CD (puede usar el nombre `in-cluster` por motivos de compatibilidad con la mayoría de los ejemplos de Argo CD):

```
# Get your cluster ARN
CLUSTER_ARN=$(aws eks describe-cluster \
  --name my-cluster \
  --query 'cluster.arn' \
  --output text)

# Register the cluster using Argo CD CLI
argocd cluster add $CLUSTER_ARN \
  --aws-cluster-name $CLUSTER_ARN \
  --name in-cluster \
  --project default
```

**nota**  
Para obtener información sobre cómo configurar la CLI de Argo CD para que funcione con la capacidad de Argo CD en EKS, consulte [Uso de la CLI de Argo CD con la capacidad administrada](argocd-comparison.md#argocd-cli-configuration).

Como alternativa, registre el clúster mediante un secreto de Kubernetes (consulte [Registro de clústeres de destino](argocd-register-clusters.md) para obtener más información).

 **Configuración del acceso al repositorio** (opcional)

En este ejemplo, se usa un repositorio de GitHub público, por lo que no se requiere ninguna configuración del repositorio. Para los repositorios privados, configure el acceso mediante AWS Secrets Manager, CodeConnections o secretos de Kubernetes (consulte [Configuración del acceso al repositorio](argocd-configure-repositories.md) para obtener más información).

Para los servicios de AWS (ECR para gráficos de Helm, CodeConnections y CodeCommit), puede hacer referencia a ellos directamente en los recursos de la aplicación sin necesidad de crear un repositorio. El rol de capacidad debe tener los permisos para llamar a los permisos de IAM necesarios. Para obtener más información, consulte [Configuración del acceso al repositorio](argocd-configure-repositories.md).

### Paso 2: Cree una aplicación
<a name="_step_2_create_an_application"></a>

Cree este manifiesto de aplicación en `my-app.yaml`:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps.git
    targetRevision: HEAD
    path: guestbook
  destination:
    name: in-cluster
    namespace: guestbook
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true
```

Aplique la aplicación:

```
kubectl apply -f my-app.yaml
```

Después de aplicar esta aplicación, Argo CD: 1. Sincroniza la aplicación de Git con el clúster (implementación inicial). 2. Supervisa el repositorio de Git para detectar cambios. 3. Sincroniza automáticamente los cambios posteriores en el clúster. 4. Detecta y corrige cualquier desviación del estado deseado. 5. Proporciona el estado y el historial de sincronización en la interfaz de usuario.

Consulte el estado de la aplicación:

```
kubectl get application guestbook -n argocd
```

También puede ver la aplicación mediante la CLI de Argo CD o la interfaz de usuario de Argo CD (accesible desde la consola de EKS, en la pestaña Capacidades del clúster).

**nota**  
Cuando utilice la CLI de Argo CD con la capacidad administrada, especifique las aplicaciones con el prefijo de espacio de nombres: `argocd app get argocd/guestbook`.

**nota**  
Utilice el nombre del clúster en `destination.name` (el nombre que utilizó al registrar el clúster). La capacidad administrada no admite el valor predeterminado local en el clúster (`kubernetes.default.svc`).

## Conceptos clave
<a name="_core_concepts"></a>

### Principios y tipos de orígenes de GitOps
<a name="_gitops_principles_and_source_types"></a>

Argo CD implementa GitOps, donde el origen de la aplicación es el único origen de información para las implementaciones:
+  **Declarativo**: el estado deseado se declara mediante manifiestos de YAML, gráficos de Helm o superposiciones de Kustomize.
+  **Con control de versiones**: se hace un seguimiento de cada cambio con un registro de auditoría completo.
+  **Automatizado**: Argo CD supervisa continuamente los orígenes y sincroniza automáticamente los cambios.
+  **Recuperación automática**: detecta y corrige una desviación entre el estado deseado y el real del clúster.

 **Tipos de orígenes compatibles**:
+  **Repositorios de Git**: GitHub, GitLab, Bitbucket, CodeCommit (HTTPS, SSH o CodeConnections)
+  **Registros de Helm**: registros HTTP (como `https://aws.github.io/eks-charts`) y registros OCI (como `public.ecr.aws`)
+  **Imágenes OCI**: imágenes de contenedor que incluyen manifiestos o gráficos de Helm (como `oci://registry-1.docker.io/user/my-app`)

Esta flexibilidad permite a las organizaciones elegir orígenes que cumplan con sus requisitos de seguridad y conformidad. Por ejemplo, las organizaciones que restringen el acceso a Git desde clústeres pueden usar ECR para gráficos de Helm o imágenes OCI.

Para obtener más información, consulte [Application Sources](https://argo-cd.readthedocs.io/en/stable/user-guide/application-sources/) en la documentación de Argo CD.

### Sincronización y conciliación
<a name="_sync_and_reconciliation"></a>

Argo CD supervisa continuamente sus orígenes y clústeres para detectar y corregir las diferencias:

1. Sondea los orígenes para ver si hay cambios (de forma predeterminada, cada 6 minutos).

1. Compara el estado deseado con el estado del clúster.

1. Marca las aplicaciones como `Synced` o `OutOfSync`. 

1. Sincroniza los cambios automáticamente (si se configuró) o espera su aprobación manual.

1. Supervisa el estado de los recursos después de la sincronización.

 Las **ondas de sincronización** controlan el orden de creación de los recursos mediante anotaciones:

```
metadata:
  annotations:
    argocd.argoproj.io/sync-wave: "0"  # Default if not specified
```

Los recursos se aplican por orden de onda (primero, los números más bajos, incluidos los negativos, como `-1`). La fase `0` es la predeterminada si no se especifica. Esto permite crear dependencias como espacios de nombres (fase `-1`), antes de las implementaciones (fase `0`) y antes de los servicios (fase `1`).

 La **recuperación automática** revierte los cambios manuales:

```
spec:
  syncPolicy:
    automated:
      selfHeal: true
```

**nota**  
La capacidad administrada utiliza el seguimiento de recursos basado en anotaciones (no en etiquetas) para mejorar la compatibilidad con las convenciones de Kubernetes y otras herramientas.

Para obtener información detallada sobre las fases de la sincronización, los enlaces y los patrones avanzados, consulte la [documentación de sincronización de Argo CD](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-waves/).

### Estado de la aplicación
<a name="_application_health"></a>

Argo CD supervisa el estado de todos los recursos de la aplicación:

 **Estados**: \$1 **En buen estado** (todos los recursos se ejecutan según lo esperado) \$1 **En curso** (los recursos se están creando o actualizando) \$1 **Degradado** (algunos recursos no están en buen estado: bloqueo de pods, errores de trabajos) \$1 **Suspendido** (la aplicación se pausó de forma intencionada) \$1 **Falta** (los recursos definidos en Git no están en el clúster)

Argo CD tiene comprobaciones de estado integradas para los recursos comunes de Kubernetes (implementaciones, StatefulSets, trabajos, etc.) y admite comprobaciones de estado personalizadas para CRD.

El estado de la aplicación viene determinado por todos sus recursos: si hay algún recurso `Degraded`, el estado de la aplicación será `Degraded`.

Para obtener más información, consulte [Resource Health](https://argo-cd.readthedocs.io/en/stable/operator-manual/health/) en la documentación de Argo CD.

### Patrones de varios clústeres
<a name="_multi_cluster_patterns"></a>

Argo CD admite dos patrones de implementación principales:

 **Radial**: ejecute Argo CD en un clúster de administración dedicado que se implemente en varios clústeres de cargas de trabajo. \$1 Control y visibilidad centralizados \$1 Políticas coherentes en todos los clústeres \$1 Una instancia de Argo CD que administrar \$1 Separación clara entre el plano de control y las cargas de trabajo

 **Por clúster**: ejecute Argo CD en cada clúster y administre solo las aplicaciones de ese clúster. \$1 Separación de clústeres (un error no afecta a los demás) \$1 Redes más sencillas (sin comunicación entre clústeres) \$1 Configuración inicial más sencilla (sin registro de clústeres)

Elija la opción radial para los equipos de plataformas que administran varios clústeres, o la opción por clúster para equipos independientes o cuando los clústeres deban estar completamente aislados.

Para obtener información detallada sobre la configuración de varios clústeres, consulte [Consideraciones sobre Argo CD](argocd-considerations.md).

### Proyectos
<a name="_projects"></a>

Los proyectos proporcionan agrupamiento lógico y control de acceso para las aplicaciones:
+  **Restricciones de origen**: limite los repositorios de Git que se pueden usar.
+  **Restricciones de destino**: limite los clústeres y espacios de nombres que se pueden usar como destino.
+  **Restricciones de recursos**: limite los tipos de recursos de Kubernetes que se pueden implementar.
+  **Integración con RBAC**: asigne proyectos a ID de usuarios y grupos de AWS Identity Center.

Las aplicaciones pertenecen a un único proyecto. Si no se especifica, utilizan el proyecto `default`, que no tiene restricciones de forma predeterminada. Para uso en producción, edite el proyecto `default` para restringir el acceso y cree nuevos proyectos con las restricciones adecuadas.

Para obtener información sobre la configuración de proyectos y los patrones RBAC, consulte [Configuración de los permisos de Argo CD](argocd-permissions.md).

### Opciones de sincronización
<a name="_sync_options"></a>

Refine el comportamiento de la sincronización con opciones comunes:
+  `CreateNamespace=true`: se crea automáticamente el espacio de nombres de destino.
+  `ServerSideApply=true`: se utiliza la aplicación del servidor para una mejor resolución de conflictos.
+  `SkipDryRunOnMissingResource=true`: se omite la ejecución de prueba cuando las CRD aún no existan (útil para instancias de kro).

```
spec:
  syncPolicy:
    syncOptions:
    - CreateNamespace=true
    - ServerSideApply=true
    - SkipDryRunOnMissingResource=true
```

Para obtener una lista completa de las opciones de sincronización, consulte la [documentación sobre las opciones de sincronización de Argo CD](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-options/).

## Siguientes pasos
<a name="_next_steps"></a>
+  [Configuración del acceso al repositorio](argocd-configure-repositories.md): configuración del acceso al repositorio de Git
+  [Registro de clústeres de destino](argocd-register-clusters.md): registro de los clústeres de destino para la implementación
+  [Creación de aplicaciones](argocd-create-application.md): creación de la primera aplicación
+  [Consideraciones sobre Argo CD](argocd-considerations.md): patrones específicos de EKS, integración con Identity Center y configuración de varios clústeres
+  [Documentación de Argo CD](https://argo-cd.readthedocs.io/en/stable/): documentación completa de Argo CD que incluye enlaces de sincronización, comprobaciones de estado y patrones avanzados

# Configuración de los permisos de Argo CD
<a name="argocd-permissions"></a>

La capacidad administrada de Argo CD se integra con AWS Identity Center para la autenticación y utiliza roles de RBAC integrados para la autorización. En este tema, se explica cómo configurar los permisos para los usuarios y los equipos.

## Cómo funcionan los permisos con Argo CD
<a name="_how_permissions_work_with_argo_cd"></a>

La capacidad de Argo CD utiliza AWS Identity Center para la autenticación y proporciona tres roles de RBAC integrados para la autorización.

Cuando un usuario accede a Argo CD:

1. Se autentican mediante AWS Identity Center (que puede federarse con su proveedor de identidad corporativa)

1.  AWS Identity Center proporciona información sobre los usuarios y grupos a Argo CD

1. Argo CD asigna usuarios y grupos a roles de RBAC en función de su configuración

1. Los usuarios solo ven las aplicaciones y los recursos a los que tienen permiso de acceso

## Roles de RBAC integrados
<a name="_built_in_rbac_roles"></a>

La capacidad de Argo CD proporciona tres roles integrados que se asignan a los usuarios y grupos de AWS Identity Center. Son **roles con alcance global** que controlan el acceso a recursos de Argo CD, como proyectos, clústeres y repositorios.

**importante**  
Los roles globales controlan el acceso a Argo CD en sí, no a recursos con alcance de proyecto, como las aplicaciones. Los usuarios Editor y Visualizador no pueden ver ni administrar aplicaciones de forma predeterminada; necesitan roles de proyecto para acceder a recursos con alcance de proyecto. Consulte [Roles de proyecto y acceso con alcance de proyecto](#project-roles) para obtener más información sobre cómo conceder acceso a las aplicaciones y a otros recursos con alcance de proyecto.

 **ADMIN** 

Acceso completo a todos los recursos y configuraciones de Argo CD:
+ Crear, actualizar y eliminar aplicaciones y ApplicationSets en cualquier proyecto
+ Administración de la configuración de Argo CD
+ Registro y administración de los clústeres de destino de la implementación
+ Configuración del acceso al repositorio
+ Crear y administrar proyectos
+ Visualización del estado y el historial de todas las aplicaciones
+ Enumerar y acceder a todos los clústeres y repositorios

 **EDITOR** 

Puede actualizar proyectos y configurar roles de proyecto, pero no puede modificar la configuración global de Argo CD:
+ Actualizar proyectos existentes (no puede crear ni eliminar proyectos)
+ Configurar roles y permisos de proyecto
+ Ver claves GPG y certificados
+ No puede modificar la configuración global de Argo CD
+ No puede administrar clústeres ni repositorios directamente
+ No puede ver ni administrar aplicaciones sin roles de proyecto

 **VIEWER** 

Acceso de solo lectura a los recursos de Argo CD:
+ Ver configuraciones de proyectos
+ Enumerar todos los proyectos (incluidos los proyectos a los que el usuario no está asignado)
+ Ver claves GPG y certificados
+ No puede enumerar clústeres ni repositorios
+ Imposibilidad de hacer cambios
+ No puede ver ni administrar aplicaciones sin roles de proyecto

**nota**  
Para conceder a los usuarios Editor o Visualizador acceso a las aplicaciones, un Administrador o un Editor debe crear roles de proyecto que asignen grupos de Identity Center a permisos específicos dentro de un proyecto.

## Roles de proyecto y acceso con alcance de proyecto
<a name="project-roles"></a>

Los roles globales Administrador, Editor y Visualizador controlan el acceso a Argo CD en sí. Los roles de proyecto controlan el acceso a los recursos y las capacidades dentro de un proyecto específico, incluidos:
+  **Recursos**: aplicaciones, ApplicationSets, credenciales de repositorios y credenciales de clústeres
+  **Capacidades**: acceso a registros y acceso de ejecución (exec) a los pods de aplicaciones

 **Explicación del modelo de permisos de dos niveles**:
+  **Alcance global**: los roles integrados determinan lo que los usuarios pueden hacer con los proyectos, los clústeres, los repositorios y la configuración de Argo CD
+  **Alcance de proyecto**: los roles de proyecto determinan lo que los usuarios pueden hacer con los recursos y las capacidades dentro de un proyecto específico

Esto significa:
+ Los usuarios Administrador pueden acceder a todos los recursos y capacidades de los proyectos sin configuración adicional
+ Los usuarios Editor y Visualizador deben recibir roles de proyecto para acceder a los recursos y las capacidades del proyecto
+ Los usuarios Editor pueden crear roles de proyecto para concederse a sí mismos y a otros acceso dentro de los proyectos que pueden actualizar

 **Flujo de trabajo de ejemplo**:

1. Un Administrador asigna un grupo de Identity Center al rol Editor a nivel global

1. Un Administrador crea un proyecto para un equipo

1. El Editor configura roles de proyecto dentro de ese proyecto para conceder a los miembros del equipo acceso a recursos con alcance de proyecto

1. Los miembros del equipo (que pueden tener el rol global Visualizador) ahora pueden ver y administrar aplicaciones en ese proyecto según los permisos de su rol de proyecto

Para obtener más información sobre la configuración de roles de proyecto, consulte [Control de acceso basado en proyectos](#_project_based_access_control).

## Configuración de las asignaciones de roles
<a name="_configure_role_mappings"></a>

Asigne los usuarios y grupos de AWS Identity Center a los roles de Argo CD al crear o actualizar la capacidad.

 **Ejemplo de asignación de roles**:

```
{
  "rbacRoleMapping": {		 	 	 
    "ADMIN": ["AdminGroup", "alice@example.com"],
    "EDITOR": ["DeveloperGroup", "DevOpsTeam"],
    "VIEWER": ["ReadOnlyGroup", "bob@example.com"]
  }
}
```

**nota**  
Los nombres de los roles distinguen entre mayúsculas y minúsculas y deben estar en mayúsculas (ADMIN, EDITOR, VIEWER).

**importante**  
La integración de capacidades de EKS con AWS Identity Center admite hasta 1000 identidades por capacidad de Argo CD. Una identidad puede ser un usuario o un grupo.

 **Actualice las asignaciones de roles**:

```
aws eks update-capability \
  --region us-east-1 \
  --cluster-name cluster \
  --capability-name capname \
  --endpoint "https://eks.ap-northeast-2.amazonaws.com" \
  --role-arn "arn:aws:iam::[.replaceable]111122223333:role/[.replaceable]`EKSCapabilityRole`" \
  --configuration '{
    "argoCd": {
      "rbacRoleMappings": {
        "addOrUpdateRoleMappings": [
          {
            "role": "ADMIN",
            "identities": [
              { "id": "686103e0-f051-7068-b225-e6392b959d9e", "type": "SSO_USER" }
            ]
          }
        ]
      }
    }
  }'
```

## Uso de la cuenta de administrador
<a name="_admin_account_usage"></a>

La cuenta de administrador está diseñada para la configuración inicial y las tareas administrativas, como el registro de clústeres y la configuración de repositorios.

 **Cuándo es adecuado usar la cuenta de administrador**:
+ Configuración inicial de la capacidad
+ Desarrollo individual o demostraciones rápidas
+ Tareas administrativas (registro de clústeres, configuración de repositorios, creación de proyectos)

 **Prácticas recomendadas para la cuenta de administrador**:
+ No asigne tokens de la cuenta al control de versiones.
+ Cambie los tokens inmediatamente si se han expuesto.
+ Limite el uso de los tokens de la cuenta a las tareas administrativas y de configuración.
+ Establezca tiempos de vencimiento cortos (máximo 12 horas).
+ Solo se pueden crear 5 tokens de la cuenta en un momento determinado.

 **Cuándo se usa el acceso basado en proyectos**:
+ Entornos de desarrollo compartidos con varios usuarios
+ Cualquier entorno que se asemeje al de producción
+ Cuando necesite registros de auditoría sobre quién llevó a cabo las acciones
+ Cuando necesite aplicar restricciones de recursos o límites de acceso

Para entornos de producción y escenarios de varios usuarios, utilice el control de acceso basado en proyectos con roles de RBAC dedicados asignados a grupos de AWS Identity Center.

## Control de acceso basado en proyectos
<a name="_project_based_access_control"></a>

Utilice proyectos de Argo CD (AppProject) para proporcionar un control del acceso y un aislamiento de los recursos detallados para los equipos.

**importante**  
Antes de asignar usuarios o grupos a roles específicos de proyecto, primero debe asignarlos a un rol global de Argo CD (Administrador, Editor o Visualizador) en la configuración de la capacidad. Los usuarios no pueden acceder a Argo CD sin una asignación a un rol global, incluso si están asignados a roles de proyecto.  
Considere asignar a los usuarios el rol Visualizador a nivel global y, posteriormente, conceder permisos adicionales mediante roles específicos de proyecto. Esto proporciona un acceso básico y permite un control detallado a nivel de proyecto.

Los proyectos proporcionan lo siguiente:
+  **Restricciones de origen**: limite los repositorios de Git que se pueden usar.
+  **Restricciones de destino**: limite los clústeres y espacios de nombres que se pueden usar como destino.
+  **Restricciones de recursos**: limite los tipos de recursos de Kubernetes que se pueden implementar.
+  **Integración con RBAC**: asigne los proyectos a grupos de AWS Identity Center o roles de Argo CD.

 **Ejemplo de proyecto para el aislamiento de equipos**:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a
  namespace: argocd
spec:
  description: Team A applications

  # Required: Specify which namespaces this project watches for Applications
  sourceNamespaces:
  - argocd

  # Source restrictions
  sourceRepos:
  - https://github.com/myorg/team-a-apps

  # Destination restrictions
  destinations:
  - namespace: team-a-*
    server: arn:aws:eks:us-west-2:111122223333:cluster/production

  # Resource restrictions
  clusterResourceWhitelist:
  - group: ''
    kind: Namespace
  namespaceResourceWhitelist:
  - group: 'apps'
    kind: Deployment
  - group: ''
    kind: Service
  - group: ''
    kind: ConfigMap
```

### Espacios de nombres de origen
<a name="_source_namespaces"></a>

Cuando se utiliza la capacidad de Argo CD en EKS, el campo `spec.sourceNamespaces` es obligatorio en las definiciones de AppProject. Este campo especifica qué espacio de nombres puede contener aplicaciones o ApplicationSets que hagan referencia a este proyecto.

**importante**  
La capacidad de Argo CD en EKS solo admite un único espacio de nombres para las aplicaciones y los ApplicationSets: el espacio de nombres que especificó al crear la capacidad (normalmente, `argocd`). Esto difiere de Argo CD de código abierto, que admite múltiples espacios de nombres.

 **Configuración de AppProject** 

Todos los AppProjects deben incluir el espacio de nombres configurado de la capacidad en `sourceNamespaces`:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a-project
  namespace: argocd
spec:
  description: Applications for Team A

  # Required: Specify the capability's configured namespace (configuration.argoCd.namespace)
  sourceNamespaces:
    - argocd  # Must match your capability's namespace configuration

  # Source repositories this project can deploy from
  sourceRepos:
    - 'https://github.com/my-org/team-a-*'

  # Destination restrictions
  destinations:
    - namespace: 'team-a-*'
      server: arn:aws:eks:us-west-2:111122223333:cluster/my-cluster
```

**nota**  
Si omite el espacio de nombres de la capacidad en `sourceNamespaces`, las aplicaciones o los ApplicationSets de ese espacio de nombres no podrán hacer referencia a este proyecto, lo que provocará errores en la implementación.

 **Asigne usuarios a los proyectos**:

Los roles de proyecto conceden a los usuarios Editor y Visualizador acceso a los recursos del proyecto (aplicaciones, ApplicationSets y credenciales de repositorios y clústeres) y a las capacidades (registros y ejecución [exec]). Sin roles de proyecto, estos usuarios no pueden acceder a estos recursos, incluso si tienen acceso mediante un rol global.

Los usuarios Administrador tienen acceso a todas las aplicaciones sin necesidad de roles de proyecto.

 **Ejemplo: concesión de acceso a aplicaciones a los miembros del equipo** 

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a
  namespace: argocd
spec:
  # ... project configuration ...

  sourceNamespaces:
  - argocd

  # Project roles grant Application-level access
  roles:
  - name: developer
    description: Team A developers - can manage Applications
    policies:
    - p, proj:team-a:developer, applications, *, team-a/*, allow
    - p, proj:team-a:developer, clusters, get, *, allow  # See cluster names in UI
    groups:
    - 686103e0-f051-7068-b225-e6392b959d9e  # Identity Center group ID

  - name: viewer
    description: Team A viewers - read-only Application access
    policies:
    - p, proj:team-a:viewer, applications, get, team-a/*, allow
    - p, proj:team-a:viewer, clusters, get, *, allow  # See cluster names in UI
    groups:
    - 786203e0-f051-7068-b225-e6392b959d9f  # Identity Center group ID
```

**nota**  
Incluya `clusters, get, *, allow` en los roles de proyecto para permitir que los usuarios vean los nombres de los clústeres en la interfaz de usuario. Sin este permiso, el clúster de destino aparece como “desconocido”.

 **Explicación sobre las políticas de los roles de proyecto**:

El formato de la política es: `p, proj:<project>:<role>, <resource>, <action>, <object>, <allow/deny>` 

 **Políticas de recursos**:
+  `applications, , team-a/, allow`: acceso completo a todas las aplicaciones en el proyecto team-a
+  `applications, get, team-a/*, allow`: acceso de solo lectura a las aplicaciones
+  `applications, sync, team-a/*, allow`: puede sincronizar aplicaciones, pero no crear ni eliminar
+  `applications, delete, team-a/*, allow`: puede eliminar aplicaciones (utilícelo con precaución)
+  `applicationsets, , team-a/, allow`: acceso completo a los ApplicationSets
+  `repositories, *, *, allow`: acceso a las credenciales de repositorios
+  `clusters, *, *, allow`: acceso a las credenciales de clústeres

 **Políticas de capacidades**:
+  `logs, , team-a/, allow`: acceso a los registros de aplicaciones
+  `exec, , team-a/, allow`: acceso de ejecución (exec) a los pods de aplicaciones

**nota**  
Los usuarios Editor pueden crear roles de proyecto para concederse a sí mismos y a otros permisos dentro de los proyectos que pueden actualizar. Esto permite a los líderes de equipo controlar el acceso a los recursos con alcance de proyecto para su equipo sin requerir la intervención de un Administrador.

**nota**  
Utilice los ID de grupos de Identity Center (no los nombres de los grupos) en el campo `groups`. También puede utilizar los ID de usuario de Identity Center para conceder acceso a usuarios individuales. Puede encontrar estos ID en la consola de AWS Identity Center o mediante la CLI de AWS.

## Patrones de permisos comunes
<a name="_common_permission_patterns"></a>

 **Patrón 1: equipo de administración con acceso completo** 

```
{
  "rbacRoleMapping": {		 	 	 
    "ADMIN": ["PlatformTeam", "SRETeam"]
  }
}
```

Los usuarios Administrador pueden ver y administrar todos los recursos con alcance de proyecto sin configuración adicional.

 **Patrón 2: los líderes de equipo administran proyectos; los desarrolladores acceden mediante roles de proyecto** 

```
{
  "rbacRoleMapping": {		 	 	 
    "ADMIN": ["PlatformTeam"],
    "EDITOR": ["TeamLeads"],
    "VIEWER": ["AllDevelopers"]
  }
}
```

1. El Administrador crea proyectos para cada equipo

1. Los líderes de equipo (Editor) configuran roles de proyecto para conceder a sus desarrolladores acceso a los recursos del proyecto (aplicaciones, ApplicationSets y credenciales) y a las capacidades (registros y ejecución [exec])

1. Los desarrolladores (visualizador) solo pueden acceder a los recursos y las capacidades permitidos por sus roles de proyecto

 **Patrón 3: acceso basado en equipos mediante roles de proyecto** 

1. El administrador crea proyectos y asigna a los líderes de equipo el rol de editor a nivel global

1. Los líderes de equipo (editor) asignan a los miembros del equipo a roles de proyecto dentro de sus proyectos

1. Los miembros del equipo solo necesitan el rol global de visualizador; los roles de proyecto proporcionan acceso a los recursos y las capacidades del proyecto

```
{
  "rbacRoleMapping": {		 	 	 
    "ADMIN": ["PlatformTeam"],
    "EDITOR": ["TeamLeads"],
    "VIEWER": ["AllDevelopers"]
  }
}
```

## Prácticas recomendadas
<a name="_best_practices"></a>

 **Utilice grupos en lugar de usuarios individuales**: asigne grupos de AWS Identity Center a roles de Argo CD en lugar de usuarios individuales para facilitar la administración.

 **Comience con el privilegio mínimo**: comience con el acceso de VIEWER y otorgue el de EDITOR o ADMIN según sea necesario.

 **Use los proyectos para el aislamiento de equipos**: cree AppProjects independientes para diferentes equipos o entornos a fin de aplicar los límites.

 **Aproveche la federación de Identity Center**: configure AWS Identity Center para federarse con su proveedor de identidad corporativa a fin de administrar los usuarios de forma centralizada.

 **Revise el acceso periódicamente**: revise periódicamente las asignaciones de roles y de proyectos para garantizar los niveles de acceso adecuados.

 **Limite el acceso a los clústeres**: recuerde que el RBAC de Argo CD controla el acceso a los recursos y las operaciones de Argo CD, pero no se corresponde con el RBAC de Kubernetes. Los usuarios con acceso de Argo CD pueden implementar aplicaciones en los clústeres a los que Argo CD tiene acceso. Limite los clústeres a los que puede acceder Argo CD y utilice las restricciones de destino del proyecto para controlar dónde se pueden implementar las aplicaciones.

## AWSPermisos de servicios de
<a name="shared_aws_service_permissions"></a>

Para utilizar los servicios de AWS directamente en los recursos de la aplicación (sin crear recursos del repositorio), adjunte los permisos de IAM necesarios al rol de capacidad.

 **ECR para gráficos de Helm**:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecr:GetAuthorizationToken",
        "ecr:BatchCheckLayerAvailability",
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage"
      ],
      "Resource": "*"
    }
  ]
}
```

 **Repositorios de CodeCommit**:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codecommit:GitPull"
      ],
      "Resource": "arn:aws:codecommit:region:account-id:repository-name"
    }
  ]
}
```

 **CodeConnections (GitHub, GitLab, Bitbucket)**:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codeconnections:UseConnection"
      ],
      "Resource": "arn:aws:codeconnections:region:account-id:connection/connection-id"
    }
  ]
}
```

Consulte [Configuración del acceso al repositorio](argocd-configure-repositories.md) para obtener más información sobre el uso de estas integraciones.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Uso de Argo CD](working-with-argocd.md): más información sobre cómo crear aplicaciones y administrar implementaciones
+  [Conceptos de Argo CD](argocd-concepts.md): descripción de los conceptos de Argo CD, como los proyectos
+  [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md): revisión de las prácticas recomendadas de seguridad para capacidades

# Uso de Argo CD
<a name="working-with-argocd"></a>

Con Argo CD, define aplicaciones en los repositorios de Git y Argo CD las sincroniza automáticamente con los clústeres de Kubernetes. Esto permite la implementación declarativa de aplicaciones con control de versiones y una detección automática de desviaciones.

## Requisitos previos
<a name="_prerequisites"></a>

Antes de trabajar con Argo CD, necesita lo siguiente:
+ Un clúster de EKS con la capacidad de Argo CD creada (consulte [Creación de una capacidad de Argo CD](create-argocd-capability.md))
+ Un repositorio de Git que contiene manifiestos de Kubernetes
+  `kubectl` configurado para comunicarse con el clúster

## Tareas comunes
<a name="_common_tasks"></a>

Los siguientes temas lo guían en las tareas más comunes de Argo CD:

 **[Configuración del acceso al repositorio](argocd-configure-repositories.md)**: configure Argo CD para acceder a repositorios de Git mediante AWS Secrets Manager, AWS CodeConnections o secretos de Kubernetes.

 **[Registro de clústeres de destino](argocd-register-clusters.md)**: registre los clústeres de destino en los que Argo CD implementará las aplicaciones.

 **[Uso de proyectos de Argo CD](argocd-projects.md)**: organice aplicaciones y aplique límites de seguridad con proyectos para los entornos de varios inquilinos.

 **[Creación de aplicaciones](argocd-create-application.md)**: cree aplicaciones de Argo CD que se implementan desde los repositorios de Git con sincronización automática o manual.

 **[Uso de ApplicationSets](argocd-applicationsets.md)**: utilice ApplicationSets para implementar aplicaciones en varios entornos o clústeres mediante plantillas y generadores.

## Acceso a la interfaz de usuario de Argo CD
<a name="_access_the_argo_cd_ui"></a>

Acceda a la interfaz de usuario de Argo CD a través de la consola de EKS:

1. Abra la consola de Amazon EKS.

1. Seleccione el clúster.

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

1. Elija **Argo CD**. 

1. Elija **Abrir la interfaz de usuario de Argo CD**. 

La interfaz de usuario proporciona la topología visual de las aplicaciones, el estado y el historial de la sincronización, los eventos y el estado de los recursos, los controles de sincronización manual y la administración de aplicaciones.

## Documentación ascendente
<a name="_upstream_documentation"></a>

Para obtener información detallada acerca de las características de Argo CD:
+  [Documentación de Argo CD](https://argo-cd.readthedocs.io/): guía del usuario completa
+  [Application Spec](https://argo-cd.readthedocs.io/en/stable/user-guide/application-specification/): referencia completa de la API de la aplicación
+  [Guía de ApplicationSet](https://argo-cd.readthedocs.io/en/stable/user-guide/application-set/): patrones y ejemplos de ApplicationSet
+  [GitHub de Argo CD](https://github.com/argoproj/argo-cd): código fuente y ejemplos

# Configuración del acceso al repositorio
<a name="argocd-configure-repositories"></a>

Antes de implementar aplicaciones, configure Argo CD para acceder a sus repositorios de Git y registros de gráficos de Helm. Argo CD admite varios métodos de autenticación para GitHub, GitLab, Bitbucket, AWS CodeCommit y AWS ECR.

**nota**  
Para las integraciones directas de servicios de AWS (gráficos de Helm de ECR, repositorios de CodeCommit y CodeConnections), puede hacer referencia a ellas directamente en los recursos de la aplicación sin necesidad de crear un repositorio. El rol de capacidad debe tener los permisos para llamar a los permisos de IAM necesarios. Para obtener más información, consulte [Configuración de los permisos de Argo CD](argocd-permissions.md).

## Requisitos previos
<a name="_prerequisites"></a>
+ Un clúster de EKS con la capacidad de Argo CD creada
+ Repositorios de Git que contienen manifiestos de Kubernetes
+  `kubectl` configurado para comunicarse con el clúster

**nota**  
 AWS CodeConnections se puede conectar a servidores Git ubicados en la nube de AWS o en las instalaciones. Para obtener más información, consulte [AWS CodeConnections](https://docs.aws.amazon.com/codeconnections/latest/userguide/welcome.html).

## Métodos de autenticación
<a name="_authentication_methods"></a>


| Método | Caso de uso | Permisos de IAM necesarios | 
| --- | --- | --- | 
|   **Integración directa con servicios de AWS**   | 
|  CodeCommit  |  Integración directa con los repositorios de Git de AWS CodeCommit. No es necesario configurar el repositorio.  |   `codecommit:GitPull`   | 
|  CodeConnections  |  Conéctese a GitHub, GitLab o Bitbucket con autenticación administrada. Requiere la configuración de la conexión.  |   `codeconnections:UseConnection`   | 
|  Artefactos OCI de ECR  |  Integración directa con AWS ECR para gráficos de Helm en formato OCI e imágenes de manifiesto. No es necesario configurar el repositorio.  |   `arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly`   | 
|   **Configuración del repositorio con credenciales**   | 
|   AWS Secrets Manager (nombre de usuario o token)  |  Almacene tokens de acceso personal o contraseñas. Habilita la rotación de credenciales sin acceso a Kubernetes.  |   `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess`   | 
|   AWS Secrets Manager (clave SSH)  |  Utilice autenticación mediante clave SSH. Habilita la rotación de credenciales sin acceso a Kubernetes.  |   `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess`   | 
|   AWS Secrets Manager (aplicación de GitHub)  |  Autenticación de GitHub App con clave privada. Habilita la rotación de credenciales sin acceso a Kubernetes.  |   `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess`   | 
|  Secreto de Kubernetes  |  Método de Argo CD estándar con secretos en el clúster  |  Ninguno (los permisos se gestionan mediante la entrada de acceso de EKS con el control de acceso basado en roles de Kubernetes)  | 

## Acceso directo a los servicios de AWS
<a name="direct_access_to_shared_aws_services"></a>

Para los servicios de AWS, puede hacer referencia a ellos directamente en los recursos de la aplicación sin necesidad de crear configuraciones del repositorio. El rol de capacidad debe tener los permisos para llamar a los permisos de IAM necesarios.

### Repositorios de CodeCommit
<a name="_codecommit_repositories"></a>

Haga referencia a los repositorios de CodeCommit directamente en las aplicaciones:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  source:
    repoURL: https://git-codecommit.region.amazonaws.com/v1/repos/repository-name
    targetRevision: main
    path: kubernetes/manifests
```

Permisos de rol de capacidad necesarios:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codecommit:GitPull",
      "Resource": "arn:aws:codecommit:region:account-id:repository-name"
    }
  ]
}
```

### CodeConnections
<a name="_codeconnections"></a>

Haga referencia a los repositorios de GitHub, GitLab o Bitbucket a través de CodeConnections. El formato de URL del repositorio se deriva del ARN de conexión de CodeConnections.

El formato de URL del repositorio es:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  source:
    repoURL: https://codeconnections.region.amazonaws.com/git-http/account-id/region/connection-id/owner/repository.git
    targetRevision: main
    path: kubernetes/manifests
```

Permisos de rol de capacidad necesarios:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codeconnections:UseConnection",
      "Resource": "arn:aws:codeconnections:region:account-id:connection/connection-id"
    }
  ]
}
```

### Gráficos de Helm de ECR
<a name="_ecr_helm_charts"></a>

ECR almacena los gráficos de Helm como artefactos OCI. Argo CD admite dos formas de hacer referencia a ellos:

 **Formato Helm** (recomendado para gráficos de Helm):

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-helm
  namespace: argocd
spec:
  source:
    repoURL: account-id.dkr.ecr.region.amazonaws.com/repository-name
    targetRevision: chart-version
    chart: chart-name
    helm:
      valueFiles:
        - values.yaml
```

Nota: No incluya el prefijo `oci://` cuando utilice el formato Helm. Utilice el campo `chart` para especificar el nombre del gráfico.

 **Formato OCI** (para artefactos OCI con manifiestos de Kubernetes):

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-oci
  namespace: argocd
spec:
  source:
    repoURL: oci://account-id.dkr.ecr.region.amazonaws.com/repository-name
    targetRevision: artifact-version
    path: path-to-manifests
```

Nota: Incluya el prefijo `oci://` cuando utilice el formato OCI. Utilice el campo `path` en lugar de `chart`.

Permisos del rol de capacidad requeridos: asocie la política administrada:

```
arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly
```

Esta política incluye los permisos necesarios de ECR: `ecr:GetAuthorizationToken`, `ecr:BatchGetImage` y `ecr:GetDownloadUrlForLayer`.

## Uso de AWS Secrets Manager
<a name="using_shared_aws_secrets_manager"></a>

Almacene las credenciales del repositorio en Secrets Manager y haga referencia a ellas en las configuraciones del repositorio de Argo CD. El uso de Secrets Manager permite la rotación automática de credenciales sin requerir acceso mediante el control de acceso basado en roles de Kubernetes; las credenciales se pueden rotar mediante permisos de IAM para Secrets Manager, y Argo CD lee automáticamente los valores actualizados.

**nota**  
Para reutilizar credenciales en varios repositorios (por ejemplo, todos los repositorios de una organización de GitHub), utilice plantillas de credenciales de repositorio con `argocd.argoproj.io/secret-type: repo-creds`. Esto ofrece una mejor experiencia de usuario que crear secretos de repositorio individuales. Para obtener más información, consulte [Credenciales de repositorio](https://argo-cd.readthedocs.io/en/stable/operator-manual/argocd-repo-creds-yaml/) en la documentación de Argo CD.

### Autenticación con nombre de usuario y token
<a name="_username_and_token_authentication"></a>

Para los repositorios HTTPS con contraseñas o tokens de acceso personales:

 **Cree un secreto en Secrets Manager**:

```
aws secretsmanager create-secret \
  --name argocd/my-repo \
  --description "GitHub credentials for Argo CD" \
  --secret-string '{"username":"your-username","token":"your-personal-access-token"}'
```

 **Campos de certificado de cliente TLS opcionales** (para servidores Git privados):

```
aws secretsmanager create-secret \
  --name argocd/my-private-repo \
  --secret-string '{
    "username":"your-username",
    "token":"your-token",
    "tlsClientCertData":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t",
    "tlsClientCertKey":"LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCi4uLgotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0t"
  }'
```

**nota**  
Los valores de `tlsClientCertData` y `tlsClientCertKey` deben estar codificados en base64.

 **Cree un secreto de repositorio que haga referencia a Secrets Manager**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://github.com/your-org/your-repo
  secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/my-repo-AbCdEf
  project: default
```

### Autenticación con clave SSH
<a name="_ssh_key_authentication"></a>

Para el acceso a Git basado en SSH, almacene la clave privada como texto sin formato (no JSON):

 **Cree el secreto con la clave SSH privada**:

```
aws secretsmanager create-secret \
  --name argocd/my-repo-ssh \
  --description "SSH key for Argo CD" \
  --secret-string "-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
...
-----END OPENSSH PRIVATE KEY-----"
```

 **Cree un secreto de repositorio para SSH**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo-ssh
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: git@github.com:your-org/your-repo.git
  secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/my-repo-ssh-AbCdEf
  project: default
```

### Autenticación de la aplicación de GitHub
<a name="_github_app_authentication"></a>

Para la autenticación de la aplicación de GitHub con una clave privada:

 **Cree el secreto con las credenciales de la aplicación de GitHub**:

```
aws secretsmanager create-secret \
  --name argocd/github-app \
  --description "GitHub App credentials for Argo CD" \
  --secret-string '{
    "githubAppPrivateKeySecret":"LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQouLi4KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0=",
    "githubAppID":"123456",
    "githubAppInstallationID":"12345678"
  }'
```

**nota**  
El valor de `githubAppPrivateKeySecret` debe estar codificado en base64.

 **Campo opcional para GitHub Enterprise**:

```
aws secretsmanager create-secret \
  --name argocd/github-enterprise-app \
  --secret-string '{
    "githubAppPrivateKeySecret":"LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQouLi4KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0=",
    "githubAppID":"123456",
    "githubAppInstallationID":"12345678",
    "githubAppEnterpriseBaseUrl":"https://github.example.com/api/v3"
  }'
```

 **Cree un secreto de repositorio para la aplicación de GitHub**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo-github-app
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://github.com/your-org/your-repo
  secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/github-app-AbCdEf
  project: default
```

### Plantillas de credenciales de repositorio
<a name="_repository_credential_templates"></a>

Para reutilizar credenciales en varios repositorios (por ejemplo, todos los repositorios de una organización o usuario de GitHub), utilice plantillas de credenciales de repositorio con `argocd.argoproj.io/secret-type: repo-creds`. Esto ofrece una mejor experiencia de usuario que crear secretos de repositorio individuales para cada repositorio.

 **Cree una plantilla de credenciales de repositorio**:

```
apiVersion: v1
kind: Secret
metadata:
  name: github-org-creds
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repo-creds
stringData:
  type: git
  url: https://github.com/your-org
  secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/github-org-AbCdEf
```

Esta plantilla de credenciales se aplica a todos los repositorios que coincidan con el prefijo de URL `https://github.com/your-org`. A continuación, puede hacer referencia a cualquier repositorio de esta organización en Aplicaciones sin crear secretos adicionales.

Para obtener más información, consulte [Credenciales de repositorio](https://argo-cd.readthedocs.io/en/stable/operator-manual/argocd-repo-creds-yaml/) en la documentación de Argo CD.

**importante**  
Asegúrese de que el rol de capacidad de IAM tenga asociada la política administrada `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess`, o permisos equivalentes que incluyan `secretsmanager:GetSecretValue` y permisos de descifrado de KMS. Consulte [Consideraciones sobre Argo CD](argocd-considerations.md) para obtener información sobre la configuración de las políticas de IAM.

## Uso de AWS CodeConnections
<a name="using_shared_aws_codeconnections"></a>

Para obtener información sobre la integración de CodeConnections, consulte [Conexión a los repositorios de Git con AWS CodeConnections](integration-codeconnections.md).

CodeConnections proporciona autenticación administrada para GitHub, GitLab y Bitbucket sin almacenar credenciales.

## Uso de secretos de Kubernetes
<a name="_using_kubernetes_secrets"></a>

Almacene las credenciales directamente en Kubernetes mediante el método de Argo CD estándar.

 **Para HTTPS con token de acceso personal**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://github.com/your-org/your-repo
  username: your-username
  password: your-personal-access-token
```

 **Para SSH**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo-ssh
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: git@github.com:your-org/your-repo.git
  sshPrivateKey: |
    -----BEGIN OPENSSH PRIVATE KEY-----
    ... your private key ...
    -----END OPENSSH PRIVATE KEY-----
```

## Repositorios de CodeCommit
<a name="_codecommit_repositories_2"></a>

Para AWS CodeCommit, conceda permisos de CodeCommit a su rol de capacidad de IAM (`codecommit:GitPull`).

Configure el repositorio:

```
apiVersion: v1
kind: Secret
metadata:
  name: codecommit-repo
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://git-codecommit.us-west-2.amazonaws.com/v1/repos/my-repo
  project: default
```

Para obtener información detallada sobre la configuración de la política de IAM, consulte [Consideraciones sobre Argo CD](argocd-considerations.md).

## Comprobación de la conexión del repositorio
<a name="_verify_repository_connection"></a>

Compruebe el estado de la conexión a través de la interfaz de usuario de Argo CD, en Configuración → Repositorios. La interfaz de usuario muestra el estado de la conexión y cualquier error de autenticación.

Los secretos de repositorio no incluyen información sobre el estado.

## Recursos adicionales
<a name="_additional_resources"></a>
+  [Registro de clústeres de destino](argocd-register-clusters.md): registro de los clústeres de destino para implementaciones
+  [Creación de aplicaciones](argocd-create-application.md): creación de la primera aplicación
+  [Consideraciones sobre Argo CD](argocd-considerations.md): configuración de seguridad y permisos de IAM
+  [Private Repositories](https://argo-cd.readthedocs.io/en/stable/user-guide/private-repositories/): referencia de la configuración de repositorio ascendente

# Registro de clústeres de destino
<a name="argocd-register-clusters"></a>

Registre los clústeres para que Argo CD pueda implementar aplicaciones en ellos. Puede registrar el mismo clúster en el que se ejecuta Argo CD (clúster local) o clústeres remotos en cuentas o regiones diferentes. Una vez que se registre un clúster, permanecerá en estado de conexión “Desconocido” hasta que cree una aplicación dentro de ese clúster. Para crear una aplicación de Argo CD después de que el clúster esté registrado, consulte [Creación de aplicaciones](argocd-create-application.md).

## Requisitos previos
<a name="_prerequisites"></a>
+ Un clúster de EKS con la capacidad de Argo CD creada
+  `kubectl` configurado para comunicarse con el clúster
+ Para clústeres remotos: permisos de IAM y entradas de acceso adecuados

## Registro del clúster local
<a name="_register_the_local_cluster"></a>

Para implementar aplicaciones en el mismo clúster en el que se ejecuta Argo CD, regístrelo como destino de implementación.

**importante**  
La capacidad de Argo CD no registra automáticamente el clúster local. Debe registrarlo de forma explícita para implementar aplicaciones en el mismo clúster. Puede utilizar el nombre del clúster `in-cluster` para garantizar la compatibilidad con la mayoría de los ejemplos de Argo CD disponibles en línea.

**nota**  
Se crea automáticamente una entrada de acceso de EKS para el clúster local con el rol de la capacidad de Argo CD, pero no se conceden permisos de control de acceso basado en roles de Kubernetes de forma predeterminada. Esto sigue el principio de privilegio mínimo; debe configurar explícitamente los permisos que Argo CD necesita según el caso de uso. Por ejemplo, si solo utiliza este clúster como centro de Argo CD para administrar clústeres remotos, no necesita permisos de implementación locales. Consulte la sección Requisitos de control de acceso basado en roles (RBAC) de la entrada de acceso que figura a continuación para conocer las opciones de configuración.

 **Uso de la CLI de Argo CD**:

```
argocd cluster add <cluster-context-name> \
  --aws-cluster-name arn:aws:eks:us-west-2:111122223333:cluster/my-cluster \
  --name local-cluster
```

 **Uso de un secreto de Kubernetes**:

```
apiVersion: v1
kind: Secret
metadata:
  name: local-cluster
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: cluster
stringData:
  name: local-cluster
  server: arn:aws:eks:us-west-2:111122223333:cluster/my-cluster
  project: default
```

Aplique la configuración:

```
kubectl apply -f local-cluster.yaml
```

**nota**  
Use el ARN del clúster de EKS en el campo `server`, no la URL del servidor de API de Kubernetes. La capacidad administrada requiere que los ARN identifiquen los clústeres. El `kubernetes.default.svc` predeterminado no es compatible.

## Registro de clústeres remotos
<a name="_register_remote_clusters"></a>

Para implementar en clústeres remotos:

 **Paso 1: creación de la entrada de acceso en el clúster remoto** 

Reemplace *region-code* por la región de AWS en la que está el clúster remoto, sustituya *remote-cluster* por el nombre del clúster remoto y el ARN por el ARN del rol de capacidad de Argo CD.

```
aws eks create-access-entry \
  --region region-code \
  --cluster-name remote-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --type STANDARD
```

 **Paso 2: Asociar una política de acceso con permisos de control de acceso basado en roles de Kubernetes** 

La entrada de acceso requiere permisos de control de acceso basado en roles de Kubernetes para que Argo CD pueda implementar aplicaciones. Para comenzar rápidamente, puede utilizar la `AmazonEKSClusterAdminPolicy`:

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name remote-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**importante**  
La `AmazonEKSClusterAdminPolicy` proporciona acceso completo de administrador del clúster (equivalente a `system:masters`). Esto resulta conveniente para comenzar, pero no se debe utilizar en entornos de producción. Para entornos de producción, utilice permisos más restrictivos mediante la asociación de la entrada de acceso con grupos personalizados de Kubernetes y la creación de las vinculaciones adecuadas de Role o ClusterRole. Consulte la sección de configuración para entornos de producción que figura a continuación para aplicar el principio de privilegio mínimo.

 **Paso 3: registro del clúster en Argo CD** 

 **Uso de la CLI de Argo CD**:

```
argocd cluster add <cluster-context-name> \
  --aws-cluster-name arn:aws:eks:us-west-2:111122223333:cluster/remote-cluster \
  --name remote-cluster
```

 **Uso de un secreto de Kubernetes**:

```
apiVersion: v1
kind: Secret
metadata:
  name: remote-cluster
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: cluster
stringData:
  name: remote-cluster
  server: arn:aws:eks:us-west-2:111122223333:cluster/remote-cluster
  project: default
```

Aplique la configuración:

```
kubectl apply -f remote-cluster.yaml
```

## Clústeres entre cuentas
<a name="_cross_account_clusters"></a>

Para implementar en clústeres de diferentes cuentas de AWS:

1. En la cuenta de destino, cree una entrada de acceso en el clúster de EKS de destino y use como entidad principal el ARN del rol de IAM de la capacidad de Argo CD de la cuenta de origen.

1. Asocie una política de acceso con los permisos adecuados de control de acceso basado en roles de Kubernetes

1. Registre el clúster en Argo CD con su ARN de clúster de EKS

No es necesario crear roles de IAM adicionales ni configurar ninguna política de confianza: las entradas de acceso de EKS gestionan el acceso entre cuentas.

El formato del ARN del clúster incluye la región, por lo que las implementaciones entre regiones siguen el mismo proceso que las implementaciones en la misma región.

## Comprobación del registro del clúster
<a name="_verify_cluster_registration"></a>

Consulte los clústeres registrados:

```
kubectl get secrets -n argocd -l argocd.argoproj.io/secret-type=cluster
```

O bien, compruebe el estado del clúster en la interfaz de usuario de Argo CD, en Configuración → Clústeres.

## Clústeres privados
<a name="_private_clusters"></a>

La capacidad de Argo CD proporciona un acceso transparente a clústeres de EKS totalmente privados sin necesidad de emparejamiento de VPC ni una configuración de red especializada.

 AWS administra automáticamente la conectividad entre la capacidad de Argo CD y los clústeres remotos privados.

Solo tiene que registrar el clúster privado con su ARN, sin necesidad de aplicar ninguna configuración de red adicional.

## Requisitos de control de acceso basado en roles de la entrada de acceso
<a name="_access_entry_rbac_requirements"></a>

Cuando crea una capacidad de Argo CD, se crea automáticamente una entrada de acceso de EKS para el rol de la capacidad, pero no se conceden permisos de control de acceso basado en roles de Kubernetes de forma predeterminada. Este diseño intencional sigue el principio de privilegio mínimo; los distintos casos de uso requieren permisos diferentes.

Por ejemplo: \$1 Si utiliza el clúster solo como centro de Argo CD para administrar clústeres remotos, no necesita permisos de implementación locales. \$1 Si implementa aplicaciones de forma local, necesita acceso de lectura en todo el clúster y acceso de escritura en espacios de nombres específicos. \$1 Si necesita crear definiciones de recursos personalizados, requiere permisos adicionales de administrador del clúster.

Debe configurar explícitamente los permisos que Argo CD necesita según sus requisitos.

### Permisos mínimos para Argo CD
<a name="_minimum_permissions_for_argo_cd"></a>

Argo CD necesita dos tipos de permisos para funcionar sin errores:

 **Permisos de lectura (en todo el clúster)**: Argo CD debe poder leer todos los tipos de recursos y las definiciones de recursos personalizados (CRD) en el clúster para:
+ Detección de recursos y comprobaciones de estado
+ Detección de desviaciones entre el estado deseado y el estado real
+ Validación de los recursos antes de la implementación

 **Permisos de escritura (específicos de espacio de nombres)**: Argo CD necesita permisos para crear, actualizar y eliminar recursos definidos en las aplicaciones para:
+ Implementar cargas de trabajo de aplicaciones (implementaciones, servicios, ConfigMaps, etc.)
+ Aplicar recursos personalizados (CRD específicos de las aplicaciones)
+ Administrar el ciclo de vida de las aplicaciones

### Configuración rápida
<a name="_quick_setup"></a>

Para comenzar rápidamente, realizar pruebas o trabajar en entornos de desarrollo, utilice `AmazonEKSClusterAdminPolicy`:

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name my-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**importante**  
La `AmazonEKSClusterAdminPolicy` proporciona acceso completo de administrador del clúster (equivalente a `system:masters`), incluida la capacidad de crear definiciones de recursos personalizados, modificar recursos en todo el clúster e implementar en cualquier espacio de nombres. Esto resulta conveniente para desarrollo y pruebas de concepto, pero no se debe utilizar en producción. Para producción, utilice la configuración de privilegio mínimo que figura a continuación.

### Configuración para producción con privilegio mínimo
<a name="_production_setup_with_least_privilege"></a>

Para entornos de producción, cree una configuración personalizada de control de acceso basado en roles de Kubernetes que conceda:
+ Acceso de lectura en todo el clúster a todos los recursos (para detección y comprobaciones de estado)
+ Acceso de escritura específico de espacio de nombres (para implementaciones)

 **Paso 1: Asocie la entrada de acceso a un grupo personalizado de Kubernetes** 

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name my-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSEditPolicy \
  --access-scope type=namespace,namespaces=app-namespace
```

 **Paso 2: Cree un ClusterRole para el acceso de lectura** 

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: argocd-read-all
rules:
# Read access to all resources for discovery and health checks
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["get", "list", "watch"]
```

 **Paso 3: Cree un rol para el acceso de escritura en los espacios de nombres de la aplicación** 

```
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: argocd-deploy
  namespace: app-namespace
rules:
# Full access to deploy application resources
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["*"]
```

 **Paso 4: Vincule los roles al grupo de Kubernetes** 

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: argocd-read-all
subjects:
- kind: Group
  name: eks-access-entry:arn:aws:iam::111122223333:role/ArgoCDCapabilityRole
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: argocd-read-all
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: argocd-deploy
  namespace: app-namespace
subjects:
- kind: Group
  name: eks-access-entry:arn:aws:iam::111122223333:role/ArgoCDCapabilityRole
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: argocd-deploy
  apiGroup: rbac.authorization.k8s.io
```

**nota**  
El formato del nombre de grupo para las entradas de acceso es `eks-access-entry:` seguido del ARN de la entidad principal. Repita el RoleBinding para cada espacio de nombres en el que Argo CD deba implementar aplicaciones.

**importante**  
Argo CD debe poder leer todos los tipos de recursos en el clúster para realizar comprobaciones de estado y detección, incluso si solo implementa en espacios de nombres específicos. Sin acceso de lectura en todo el clúster, Argo CD generará errores al verificar el estado de las aplicaciones.

## Restricción del acceso al clúster con proyectos
<a name="_restrict_cluster_access_with_projects"></a>

Utilice los proyectos para controlar en qué clústeres y espacios de nombres se pueden implementar las aplicaciones mediante la configuración de los clústeres y espacios de nombres de destino permitidos en `spec.destinations`:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: production
  namespace: argocd
spec:
  destinations:
  - server: arn:aws:eks:us-west-2:111122223333:cluster/prod-cluster
    namespace: '*'
  - server: arn:aws:eks:eu-west-1:111122223333:cluster/prod-eu-cluster
    namespace: '*'
  sourceRepos:
  - 'https://github.com/example/production-apps'
```

Para obtener más información, consulte [Uso de proyectos de Argo CD](argocd-projects.md).

## Recursos adicionales
<a name="_additional_resources"></a>
+  [Uso de proyectos de Argo CD](argocd-projects.md): organización de las aplicaciones y aplicación de los límites de seguridad
+  [Creación de aplicaciones](argocd-create-application.md): implementación de su primera aplicación
+  [Uso de ApplicationSets](argocd-applicationsets.md): implementación en varios clústeres con ApplicationSets
+  [Consideraciones sobre Argo CD](argocd-considerations.md): patrones de varios clústeres y configuración entre cuentas
+  [Declarative Cluster Setup](https://argo-cd.readthedocs.io/en/stable/operator-manual/declarative-setup/#clusters): referencia de la configuración del clúster ascendente

# Uso de proyectos de Argo CD
<a name="argocd-projects"></a>

Los proyectos de Argo CD (AppProjects) proporcionan agrupamiento lógico y control de acceso para las aplicaciones. Los proyectos definen qué repositorios de Git, clústeres de destino y espacios de nombres pueden usar las aplicaciones, lo que habilita la multitenencia y los límites de seguridad en las instancias de Argo CD compartidas.

## Cuándo se usan los proyectos
<a name="_when_to_use_projects"></a>

Use los proyectos en los siguientes casos:
+ Separación de aplicaciones por equipo, entorno o unidad de negocio
+ Restricción de los repositorios desde los que los equipos pueden implementar
+ Limitación de los clústeres y espacios de nombres en los que los equipos pueden implementar
+ Aplicación de cuotas de recursos y tipos de recursos permitidos
+ Concesión de acceso a la implementación de aplicaciones de autoservicio con barreras de protección

## Proyecto predeterminado
<a name="_default_project"></a>

Cada capacidad de Argo CD incluye un proyecto `default` que permite el acceso a todos los repositorios, clústeres y espacios de nombres. Si bien es útil para las pruebas iniciales, cree proyectos dedicados con restricciones explícitas para su uso en producción.

Para obtener más información sobre la configuración predeterminada del proyecto y cómo restringirla, consulte [The Default Project](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#the-default-project) en la documentación de Argo CD.

## Creación de un proyecto
<a name="_create_a_project"></a>

Para crear un proyecto, aplique un recurso de `AppProject` al clúster.

 **Ejemplo: proyecto específico de un equipo** 

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a
  namespace: argocd
spec:
  description: Applications for Team A

  # Source repositories this project can deploy from
  sourceRepos:
    - 'https://github.com/my-org/team-a-*'
    - 'https://github.com/my-org/shared-libs'

  # Destination clusters and namespaces
  destinations:
    - name: dev-cluster
      namespace: team-a-dev
    - name: prod-cluster
      namespace: team-a-prod

  # Allowed resource types
  clusterResourceWhitelist:
    - group: ''
      kind: Namespace

  namespaceResourceWhitelist:
    - group: 'apps'
      kind: Deployment
    - group: ''
      kind: Service
    - group: ''
      kind: ConfigMap
```

Aplique el proyecto:

```
kubectl apply -f team-a-project.yaml
```

## Configuración del proyecto
<a name="_project_configuration"></a>

### Repositorios de código fuente
<a name="_source_repositories"></a>

Controle qué repositorios de Git pueden usar las aplicaciones de este proyecto:

```
spec:
  sourceRepos:
    - 'https://github.com/my-org/app-*'  # Wildcard pattern
    - 'https://github.com/my-org/infra'  # Specific repo
```

Puede usar comodines y patrones de negación (prefijo `!`) para permitir o denegar repositorios específicos. Para obtener más información, consulte [Managing Projects](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#managing-projects) en la documentación de Argo CD.

### Restricciones de destino
<a name="_destination_restrictions"></a>

Limite dónde se pueden implementar las aplicaciones:

```
spec:
  destinations:
    - name: prod-cluster  # Specific cluster by name
      namespace: production
    - name: '*'  # Any cluster
      namespace: team-a-*  # Namespace pattern
```

**importante**  
Utilice nombres de clústeres y patrones de espacios de nombres específicos en lugar de comodines para los proyectos de producción. De este modo, se impiden las implementaciones accidentales en clústeres o espacios de nombres no autorizados.

Puede utilizar comodines y patrones de negación para controlar los destinos. Para obtener más información, consulte [Managing Projects](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#managing-projects) en la documentación de Argo CD.

### Restricciones de recursos
<a name="_resource_restrictions"></a>

Controle qué tipos de recursos de Kubernetes se pueden implementar:

 **Recursos basados en clústeres**:

```
spec:
  clusterResourceWhitelist:
    - group: ''
      kind: Namespace
    - group: 'rbac.authorization.k8s.io'
      kind: Role
```

 **Recursos basados en espacios de nombres**:

```
spec:
  namespaceResourceWhitelist:
    - group: 'apps'
      kind: Deployment
    - group: ''
      kind: Service
    - group: ''
      kind: ConfigMap
    - group: 's3.services.k8s.aws'
      kind: Bucket
```

Use listas de elementos prohibidos para denegar recursos específicos:

```
spec:
  namespaceResourceBlacklist:
    - group: ''
      kind: Secret  # Prevent direct Secret creation
```

## Asignación de aplicaciones a proyectos
<a name="_assign_applications_to_projects"></a>

Al crear una aplicación, especifique el proyecto en el campo `spec.project`:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  project: team-a  # Assign to team-a project
  source:
    repoURL: https://github.com/my-org/my-app
    path: manifests
  destination:
    name: prod-cluster
    namespace: team-a-prod
```

Las aplicaciones sin un proyecto específico utilizan el proyecto `default`.

## Roles del proyecto y RBAC
<a name="_project_roles_and_rbac"></a>

Los proyectos pueden definir roles personalizados para el control de acceso detallado. Asigne roles del proyecto a los usuarios y grupos de AWS Identity Center según la configuración de la capacidad para controlar quién puede sincronizar, actualizar o eliminar aplicaciones.

 **Ejemplo: proyecto con roles de desarrollador y administrador** 

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a
  namespace: argocd
spec:
  sourceRepos:
    - '*'
  destinations:
    - name: '*'
      namespace: 'team-a-*'

  roles:
    - name: developer
      description: Developers can sync applications
      policies:
        - p, proj:team-a:developer, applications, sync, team-a/*, allow
        - p, proj:team-a:developer, applications, get, team-a/*, allow
      groups:
        - team-a-developers

    - name: admin
      description: Admins have full access
      policies:
        - p, proj:team-a:admin, applications, *, team-a/*, allow
      groups:
        - team-a-admins
```

Para obtener más información sobre los roles del proyecto, los tokens JWT para las canalizaciones de CI/CD y la configuración d RBAC, consulte [Project Roles](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#project-roles) en la documentación de Argo CD.

## Patrones comunes
<a name="_common_patterns"></a>

### Proyectos basados en entornos
<a name="_environment_based_projects"></a>

Cree proyectos separados para cada entorno:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: production
  namespace: argocd
spec:
  sourceRepos:
    - 'https://github.com/my-org/*'
  destinations:
    - name: prod-cluster
      namespace: '*'
  # Strict resource controls for production
  clusterResourceWhitelist: []
  namespaceResourceWhitelist:
    - group: 'apps'
      kind: Deployment
    - group: ''
      kind: Service
```

### Proyectos basados en equipos
<a name="_team_based_projects"></a>

Aísle los equipos con proyectos específicos:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: platform-team
  namespace: argocd
spec:
  sourceRepos:
    - 'https://github.com/my-org/platform-*'
  destinations:
    - name: '*'
      namespace: 'platform-*'
  # Platform team can manage cluster resources
  clusterResourceWhitelist:
    - group: '*'
      kind: '*'
```

### Proyectos de varios clústeres
<a name="_multi_cluster_projects"></a>

Implemente en varios clústeres con políticas coherentes:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: global-app
  namespace: argocd
spec:
  sourceRepos:
    - 'https://github.com/my-org/global-app'
  destinations:
    - name: us-west-cluster
      namespace: app
    - name: eu-west-cluster
      namespace: app
    - name: ap-south-cluster
      namespace: app
```

## Prácticas recomendadas
<a name="_best_practices"></a>

 **Comience con proyectos restrictivos**: comience con permisos limitados y amplíelos según sea necesario en lugar de comenzar con un acceso amplio.

 **Utilice patrones de espacios de nombres**: use los comodines en las restricciones de los espacios de nombres (por ejemplo, `team-a-*`) para ofrecer flexibilidad mientras mantiene los límites.

 **Separe los proyectos de producción**: utilice proyectos específicos para la producción con controles más estrictos y políticas de sincronización manual.

 **Documente los propósitos del proyecto**: utilice el campo `description` para explicar para qué sirve cada proyecto y quién debe usarlo.

 **Revise los permisos del proyecto con regularidad**: audite los proyectos periódicamente para asegurarse de que las restricciones sigan alineándose con las necesidades del equipo y los requisitos de seguridad.

## Recursos adicionales
<a name="_additional_resources"></a>
+  [Configuración de los permisos de Argo CD](argocd-permissions.md): configuración de la integración de Identity Center y RBAC
+  [Creación de aplicaciones](argocd-create-application.md): creación de aplicaciones dentro de los proyectos
+  [Uso de ApplicationSets](argocd-applicationsets.md): uso de ApplicationSets con proyectos para implementaciones de varios clústeres
+  [Documentación de proyectos de Argo CD](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/): referencia ascendente completa

# Creación de aplicaciones
<a name="argocd-create-application"></a>

Las aplicaciones representan implementaciones en los clústeres de destino. Cada aplicación define un origen (repositorio de Git) y un destino (clúster y espacio de nombres). Cuando se apliquen, Argo CD creará los recursos especificados en los manifiestos del repositorio de Git en el espacio de nombres del clúster. Las aplicaciones suelen especificar las implementaciones de cargas de trabajo, pero pueden administrar cualquier recurso de Kubernetes disponible en el clúster de destino.

## Requisitos previos
<a name="_prerequisites"></a>
+ Un clúster de EKS con la capacidad de Argo CD creada
+ Acceso al repositorio configurado (consulte [Configuración del acceso al repositorio](argocd-configure-repositories.md))
+ Clúster de destino registrado (consulte [Registro de clústeres de destino](argocd-register-clusters.md))
+  `kubectl` configurado para comunicarse con el clúster

## Creación de una aplicación básica
<a name="_create_a_basic_application"></a>

Defina una aplicación que se implemente desde un repositorio de Git:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps
    targetRevision: HEAD
    path: guestbook
  destination:
    name: in-cluster
    namespace: default
```

**nota**  
Utilice `destination.name` con el nombre del clúster que utilizó al registrar el clúster (como `in-cluster` para el clúster local). El campo `destination.server` también funciona con los ARN de clústeres de EKS, pero se recomienda utilizar los nombres de los clústeres para una mejor legibilidad.

Aplique la aplicación:

```
kubectl apply -f application.yaml
```

Consulte el estado de la aplicación:

```
kubectl get application guestbook -n argocd
```

## Configuración del origen
<a name="_source_configuration"></a>

 **Repositorio de Git**:

```
spec:
  source:
    repoURL: https://github.com/example/my-app
    targetRevision: main
    path: kubernetes/manifests
```

 **Confirmación o etiqueta de Git específica**:

```
spec:
  source:
    targetRevision: v1.2.0  # or commit SHA
```

 **Gráfico de Helm**:

```
spec:
  source:
    repoURL: https://github.com/example/helm-charts
    targetRevision: main
    path: charts/my-app
    helm:
      valueFiles:
      - values.yaml
      parameters:
      - name: image.tag
        value: v1.2.0
```

 **Gráfico de Helm con valores de un repositorio Git externo** (patrón de múltiples orígenes):

```
spec:
  sources:
  - repoURL: https://github.com/example/helm-charts
    targetRevision: main
    path: charts/my-app
    helm:
      valueFiles:
      - $values/environments/production/values.yaml
  - repoURL: https://github.com/example/config-repo
    targetRevision: main
    ref: values
```

Para obtener más información, consulte [Archivos de valores de Helm desde un repositorio Git externo](https://argo-cd.readthedocs.io/en/stable/user-guide/multiple_sources/#helm-value-files-from-external-git-repository) en la documentación de Argo CD.

 **Gráfico de Helm desde ECR**:

```
spec:
  source:
    repoURL: oci://account-id.dkr.ecr.region.amazonaws.com/repository-name
    targetRevision: chart-version
    chart: chart-name
```

Si el rol de capacidad tiene los permisos de ECR necesarios, el repositorio se utiliza directamente y no es necesario configurarlo. Para obtener más información, consulte [Configuración del acceso al repositorio](argocd-configure-repositories.md).

 **Repositorio de Git desde CodeCommit**:

```
spec:
  source:
    repoURL: https://git-codecommit.region.amazonaws.com/v1/repos/repository-name
    targetRevision: main
    path: kubernetes/manifests
```

Si el rol de capacidad tiene los permisos de CodeCommit necesarios, el repositorio se utiliza directamente y no es necesario configurarlo. Para obtener más información, consulte [Configuración del acceso al repositorio](argocd-configure-repositories.md).

 **Repositorio de Git desde CodeConnections**:

```
spec:
  source:
    repoURL: https://codeconnections.region.amazonaws.com/git-http/account-id/region/connection-id/owner/repository.git
    targetRevision: main
    path: kubernetes/manifests
```

El formato de URL del repositorio se deriva del ARN de conexión de CodeConnections. Si el rol de capacidad tiene los permisos de CodeConnections necesarios y hay una conexión configurada, el repositorio se utiliza directamente y no es necesario configurarlo. Para obtener más información, consulte [Configuración del acceso al repositorio](argocd-configure-repositories.md).

 **Kustomize**:

```
spec:
  source:
    repoURL: https://github.com/example/kustomize-app
    targetRevision: main
    path: overlays/production
    kustomize:
      namePrefix: prod-
```

## Políticas de sincronización
<a name="_sync_policies"></a>

Controle la forma en que Argo CD sincroniza las aplicaciones.

 **Sincronización manual (predeterminada)**:

Las aplicaciones requieren una aprobación manual para la sincronización:

```
spec:
  syncPolicy: {}  # No automated sync
```

Active manualmente la sincronización:

```
kubectl patch application guestbook -n argocd \
  --type merge \
  --patch '{"operation": {"initiatedBy": {"username": "admin"}, "sync": {}}}'
```

 **Sincronización automática**:

Las aplicaciones se sincronizan automáticamente cuando se detectan cambios en Git:

```
spec:
  syncPolicy:
    automated: {}
```

 **Recuperación automática**:

Se revierten automáticamente los cambios manuales en el clúster:

```
spec:
  syncPolicy:
    automated:
      selfHeal: true
```

Cuando se activa, Argo CD revierte cualquier cambio manual hecho directamente en el clúster, lo que garantiza que Git continúe siendo el origen de información verdadera.

 **Poda**:

Se eliminan automáticamente los recursos eliminados de Git:

```
spec:
  syncPolicy:
    automated:
      prune: true
```

**aviso**  
La poda eliminará los recursos del clúster. Úsela con precaución en entornos de producción.

 **Sincronización automática combinada**:

```
spec:
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true
```

 **Configuración de reintentos**:

Configure el comportamiento de reintento para sincronizaciones fallidas:

```
spec:
  syncPolicy:
    retry:
      limit: 5  # Number of failed sync attempts; unlimited if less than 0
      backoff:
        duration: 5s  # Amount to back off (default unit: seconds, also supports "2m", "1h")
        factor: 2  # Factor to multiply the base duration after each failed retry
        maxDuration: 3m  # Maximum amount of time allowed for the backoff strategy
```

Esto resulta especialmente útil para los recursos que dependen de que las definiciones de recursos personalizados (CRD) se creen primero, o cuando se trabaja con instancias de kro en las que la CRD puede no estar disponible de inmediato.

## Opciones de sincronización
<a name="_sync_options"></a>

Configuración de sincronización adicional:

 **Cree un espacio de nombres si no existe**:

```
spec:
  syncPolicy:
    syncOptions:
    - CreateNamespace=true
```

 **Omitir la ejecución en seco para recursos no presentes**:

Resulta útil al aplicar recursos que dependen de definiciones de recursos personalizados (CRD) que aún no existen (como las instancias de kro):

```
spec:
  syncPolicy:
    syncOptions:
    - SkipDryRunOnMissingResource=true
```

Esto también se puede aplicar a recursos específicos mediante el uso de una etiqueta en el propio recurso.

 **Valide los recursos antes de aplicar**:

```
spec:
  syncPolicy:
    syncOptions:
    - Validate=true
```

 **Aplicar solo sin sincronización**:

```
spec:
  syncPolicy:
    syncOptions:
    - ApplyOutOfSyncOnly=true
```

## Características de sincronización avanzadas
<a name="_advanced_sync_features"></a>

Argo CD admite características de sincronización avanzadas para implementaciones complejas:
+  **Ondas de sincronización**: controlan el orden de creación de los recursos con anotaciones `argocd.argoproj.io/sync-wave`
+  **Enlaces de sincronización**: ejecutan trabajos antes o después de la sincronización con anotaciones `argocd.argoproj.io/hook` (PreSync, PostSync, SyncFail)
+  **Evaluación del estado de los recursos**: comprobaciones de estado personalizadas para los recursos específicos de la aplicación

Para obtener más información, consulte [Sync Waves](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-waves/) y [Resource Hooks](https://argo-cd.readthedocs.io/en/stable/user-guide/resource_hooks/) en la documentación de Argo CD.

## Omisión de diferencias
<a name="_ignore_differences"></a>

Evite que Argo CD sincronice campos específicos administrados por otros controladores (como la administración de réplicas de HPA):

```
spec:
  ignoreDifferences:
  - group: apps
    kind: Deployment
    jsonPointers:
    - /spec/replicas
```

Para obtener más información sobre los patrones de omisión y las exclusiones de campos, consulte [Diffing Customization](https://argo-cd.readthedocs.io/en/stable/user-guide/diffing/) en la documentación de Argo CD.

## Implementación en varios entornos
<a name="_multi_environment_deployment"></a>

Implemente la misma aplicación en varios entornos:

 **Desarrollo de**:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-dev
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/my-app
    targetRevision: develop
    path: overlays/development
  destination:
    name: dev-cluster
    namespace: my-app
```

 **Producción**:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-prod
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/my-app
    targetRevision: main
    path: overlays/production
  destination:
    name: prod-cluster
    namespace: my-app
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
```

## Supervisión y administración de aplicaciones
<a name="_monitor_and_manage_applications"></a>

 **Consulte el estado de la aplicación**:

```
kubectl get application my-app -n argocd
```

 **Acceda a la interfaz de usuario de Argo CD**:

Abra la interfaz de usuario de Argo CD a través de la consola de EKS para ver la topología de la aplicación, el estado de la sincronización, el estado de los recursos y el historial de implementación. Consulte [Uso de Argo CD](working-with-argocd.md) para obtener instrucciones de acceso a la interfaz de usuario.

 **Revierta aplicaciones**:

Revierta a una revisión anterior mediante la interfaz de usuario de Argo CD, la CLI de Argo CD o mediante la actualización de `targetRevision` en la especificación de la aplicación a una confirmación o etiqueta anterior de Git.

Uso de la CLI de Argo CD:

```
argocd app rollback argocd/my-app <revision-id>
```

**nota**  
Cuando utilice la CLI de Argo CD con la capacidad administrada, especifique las aplicaciones con el prefijo de espacio de nombres: `namespace/appname`.

Para obtener más información, consulte el comando de reversión de aplicaciones [argocd app rollback](https://argo-cd.readthedocs.io/en/stable/user-guide/commands/argocd_app_rollback/) en la documentación de Argo CD.

## Recursos adicionales
<a name="_additional_resources"></a>
+  [Uso de proyectos de Argo CD](argocd-projects.md): organización de aplicaciones con proyectos para entornos multitenencia
+  [Uso de ApplicationSets](argocd-applicationsets.md): implementación en varios clústeres con plantillas
+  [Application Specification](https://argo-cd.readthedocs.io/en/stable/user-guide/application-specification/): referencia completa de la API de la aplicación
+  [Sync Options](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-options/): configuración de sincronización avanzada

# Uso de ApplicationSets
<a name="argocd-applicationsets"></a>

Los ApplicationSets generan varias aplicaciones a partir de plantillas, lo que le permite implementar la misma aplicación en varios clústeres, entornos o espacios de nombres con una sola definición de recursos.

## Requisitos previos
<a name="_prerequisites"></a>
+ Un clúster de EKS con la capacidad de Argo CD creada
+ Acceso al repositorio configurado (consulte [Configuración del acceso al repositorio](argocd-configure-repositories.md))
+  `kubectl` configurado para comunicarse con el clúster

**nota**  
No se requieren varios clústeres de destino para ApplicationSets. Puede utilizar generadores distintos del generador de clústeres (como los generadores de lista, git o matriz) para implementar aplicaciones sin clústeres remotos.

## Cómo funcionan los ApplicationSets
<a name="_how_applicationsets_work"></a>

Los ApplicationSets utilizan generadores para producir parámetros y, a continuación, aplicarlos a una plantilla de aplicación. Cada conjunto de parámetros generados crea una aplicación.

Generadores comunes para implementaciones de EKS:
+  **Generador de listas**: defina de forma explícita los clústeres y los parámetros para cada entorno.
+  **Generador de clústeres**: implemente automáticamente en todos los clústeres registrados.
+  **Generador de Git**: genere aplicaciones a partir de la estructura del repositorio.
+  **Generador de matrices**: combine generadores para implementaciones multidimensionales.
+  **Generador de combinación**: combina parámetros de varios generadores

Para obtener una referencia completa sobre generadores, consulte la [documentación de ApplicationSet](https://argo-cd.readthedocs.io/en/stable/user-guide/application-set/).

## Generador de listas
<a name="_list_generator"></a>

Implemente en varios clústeres con una configuración explícita:

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: guestbook-all-clusters
  namespace: argocd
spec:
  generators:
  - list:
      elements:
      - environment: dev
        replicas: "2"
      - environment: staging
        replicas: "3"
      - environment: prod
        replicas: "5"
  template:
    metadata:
      name: 'guestbook-{{environment}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/guestbook
        targetRevision: HEAD
        path: 'overlays/{{environment}}'
      destination:
        name: '{{environment}}-cluster'
        namespace: guestbook
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
```

**nota**  
Utilice `destination.name` con nombres de clústeres para mejorar la legibilidad. El campo `destination.server` también funciona con los ARN de clústeres de EKS si es necesario.

Esto crea tres aplicaciones: `guestbook-dev`, `guestbook-staging` y `guestbook-prod`.

## Generador de clústeres
<a name="_cluster_generator"></a>

Implemente automáticamente en todos los clústeres registrados:

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: cluster-addons
  namespace: argocd
spec:
  generators:
  - clusters: {}
  template:
    metadata:
      name: '{{name}}-addons'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/cluster-addons
        targetRevision: HEAD
        path: addons
      destination:
        server: '{{server}}'
        namespace: kube-system
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
```

Esto crea automáticamente una aplicación para cada clúster registrado.

 **Filtrar clústeres**:

Utilice `matchLabels` para incluir clústeres específicos o `matchExpressions` para excluir clústeres:

```
spec:
  generators:
  - clusters:
      selector:
        matchLabels:
          environment: production
        matchExpressions:
        - key: skip-appset
          operator: DoesNotExist
```

## Generadores de Git
<a name="_git_generators"></a>

Los generadores de Git crean aplicaciones basadas en la estructura del repositorio:
+  **Generador de directorios**: implemente cada directorio como una aplicación independiente (útil para microservicios).
+  **Generador de archivos**: genere aplicaciones a partir de archivos de parámetros (útil para implementaciones con varios inquilinos).

 **Ejemplo: implementación de microservicios** 

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: microservices
  namespace: argocd
spec:
  generators:
  - git:
      repoURL: https://github.com/example/microservices
      revision: HEAD
      directories:
      - path: services/*
  template:
    metadata:
      name: '{{path.basename}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/microservices
        targetRevision: HEAD
        path: '{{path}}'
      destination:
        name: my-cluster
        namespace: '{{path.basename}}'
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
        syncOptions:
        - CreateNamespace=true
```

Para obtener detalles sobre los generadores de Git y la configuración basada en archivos, consulte [Git Generator](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators-Git/) en la documentación de Argo CD.

## Generador de matrices
<a name="_matrix_generator"></a>

Combine varios generadores para implementarlos en múltiples dimensiones (entornos × clústeres):

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: multi-env-multi-cluster
  namespace: argocd
spec:
  generators:
  - matrix:
      generators:
      - list:
          elements:
          - environment: dev
          - environment: staging
          - environment: prod
      - clusters:
          selector:
            matchLabels:
              region: us-west-2
  template:
    metadata:
      name: 'app-{{environment}}-{{name}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/app
        targetRevision: HEAD
        path: 'overlays/{{environment}}'
      destination:
        name: '{{name}}'
        namespace: 'app-{{environment}}'
```

Para obtener más información sobre cómo combinar generadores, consulte [Matrix Generator](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators-Matrix/) en la documentación de Argo CD.

## Implementación multirregional
<a name="_multi_region_deployment"></a>

Implemente en clústeres de varias regiones:

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: global-app
  namespace: argocd
spec:
  generators:
  - list:
      elements:
      - clusterName: prod-us-west
        region: us-west-2
      - clusterName: prod-us-east
        region: us-east-1
      - clusterName: prod-eu-west
        region: eu-west-1
  template:
    metadata:
      name: 'app-{{region}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/app
        targetRevision: HEAD
        path: kubernetes
        helm:
          parameters:
          - name: region
            value: '{{region}}'
      destination:
        name: '{{clusterName}}'
        namespace: app
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
```

## Administración de ApplicationSets
<a name="_manage_applicationsets"></a>

 **Vea los ApplicationSets y las aplicaciones generadas**:

```
kubectl get applicationsets -n argocd
kubectl get applications -n argocd -l argocd.argoproj.io/application-set-name=<applicationset-name>
```

 **Actualice un ApplicationSet**:

Modifique la especificación de ApplicationSet y vuelva a aplicarla. Argo CD actualiza automáticamente todas las aplicaciones generadas:

```
kubectl apply -f applicationset.yaml
```

 **Elimine un ApplicationSet**:

```
kubectl delete applicationset <name> -n argocd
```

**aviso**  
Al eliminar un conjunto de aplicaciones, se eliminan todas las aplicaciones generadas. Si esas aplicaciones tienen `prune: true`, sus recursos también se eliminarán de los clústeres de destino.  
Para conservar los recursos implementados al eliminar un ApplicationSet, establezca `.syncPolicy.preserveResourcesOnDeletion` en `true` en la especificación del ApplicationSet. Para obtener más información, consulte [Eliminación de recursos y limpieza de aplicaciones](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Application-Deletion/) en la documentación de Argo CD.

**importante**  
La característica ApplicationSets de Argo CD tiene consideraciones de seguridad que debe tener en cuenta antes de utilizar ApplicationSets. Para obtener más información, consulte [Seguridad de ApplicationSet](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Security/) en la documentación de Argo CD.

## Recursos adicionales
<a name="_additional_resources"></a>
+  [Uso de proyectos de Argo CD](argocd-projects.md): organización de ApplicationSets con proyectos
+  [Creación de aplicaciones](argocd-create-application.md): descripción de la configuración de la aplicación
+  [Documentación de ApplicationSet](https://argo-cd.readthedocs.io/en/stable/user-guide/application-set/): patrones y referencia completos sobre generadores
+  [Referencia sobre generadores](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators/): especificaciones detalladas sobre los generadores

# Consideraciones sobre Argo CD
<a name="argocd-considerations"></a>

En este tema, se tratan aspectos importantes al usar la capacidad de EKS para Argo CD, como la planificación, los permisos, la autenticación y los patrones de implementación en varios clústeres.

## Planificación
<a name="_planning"></a>

Antes de implementar Argo CD, tenga en cuenta lo siguiente:

 **Estrategia de repositorio**: determine dónde se almacenarán los manifiestos de la aplicación (CodeCommit, GitHub, GitLab, Bitbucket). Planifique la estructura del repositorio y la estrategia de ramificación para los diferentes entornos.

 **Estrategia de RBAC**: planifique qué equipos o usuarios deben tener acceso de administrador, editor o lector. Asígnelos a los grupos de AWS Identity Center o a los roles de Argo CD.

 **Arquitectura de varios clústeres**: determine si administrará varios clústeres desde una única instancia de Argo CD. Considere la posibilidad de utilizar un clúster de administración dedicado para Argo CD.

 **Organización de las aplicaciones**: planifique cómo estructurará las aplicaciones y ApplicationSets. Considere la posibilidad de utilizar proyectos para organizar las aplicaciones por equipo o entorno.

 **Políticas de sincronización**: decida si las aplicaciones deben sincronizarse automáticamente o si deben aprobarse manualmente. La sincronización automática es habitual en el desarrollo y manual en la producción.

## Permisos
<a name="_permissions"></a>

Para obtener información detallada sobre los roles de capacidad de IAM, las políticas de confianza y las prácticas recomendadas de seguridad, consulte [Rol de IAM de capacidad de Amazon EKS](capability-role.md) y [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md).

### Descripción general de los roles de capacidad de IAM
<a name="_iam_capability_role_overview"></a>

Al crear un recurso de capacidad de Argo CD, proporciona un rol de capacidad de IAM. A diferencia de ACK, Argo CD administra principalmente los recursos de Kubernetes, no los recursos de AWS directamente. Sin embargo, el rol de capacidad de IAM es obligatorio para:
+ Acceder a los repositorios privados de Git en CodeCommit
+ Integrar con AWS Identity Center para la autenticación
+ Acceder a los secretos en AWS Secrets Manager (si está configurado)
+ Implementaciones entre clústeres en otros clústeres de EKS

### Integración de CodeCommit
<a name="_codecommit_integration"></a>

Si utiliza repositorios de CodeCommit, adjunte una política con permisos de lectura:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codecommit:GitPull"
      ],
      "Resource": "*"
    }
  ]
}
```

**importante**  
Para su uso en producción, restrinja el campo `Resource` a los ARN de repositorio específicos en lugar de usar `"*"`.  
Ejemplo:  

```
"Resource": "arn:aws:codecommit:us-west-2:111122223333:my-app-repo"
```
Esto limita el acceso de la capacidad de Argo CD únicamente a los repositorios que necesita administrar.

### Integración de Secrets Manager
<a name="_secrets_manager_integration"></a>

Si almacena las credenciales del repositorio en Secrets Manager, asocie la política administrada para acceso de lectura:

```
arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess
```

Esta política incluye los permisos necesarios: `secretsmanager:GetSecretValue`, `secretsmanager:DescribeSecret` y permisos de descifrado de KMS.

### Configuración básica
<a name="_basic_setup"></a>

Para la funcionalidad básica de Argo CD con repositorios de Git públicos, no se requieren políticas de IAM adicionales más allá de la política de confianza.

## Autenticación
<a name="_authentication"></a>

### Integración de AWS Identity Center
<a name="shared_aws_identity_center_integration"></a>

La capacidad administrada de Argo CD se integra directamente con AWS Identity Center (anteriormente AWS SSO), lo que le permite utilizar su proveedor de identidad actual para la autenticación.

Al configurar la integración de AWS Identity Center:

1. Los usuarios acceden a la interfaz de usuario de Argo CD a través de la consola de EKS

1. Se autentican mediante AWS Identity Center (que puede federarse con su proveedor de identidad corporativa)

1.  AWS Identity Center proporciona información sobre los usuarios y grupos a Argo CD

1. Argo CD asigna usuarios y grupos a roles de RBAC en función de su configuración

1. Los usuarios solo ven las aplicaciones y los recursos a los que tienen permiso de acceso

### Simplificación del acceso con los conjuntos de permisos de Identity Center
<a name="_simplifying_access_with_identity_center_permission_sets"></a>

 AWS Identity Center proporciona dos rutas de autenticación distintas cuando se trabaja con Argo CD:

 **Autenticación mediante la API de Argo CD**: Identity Center proporciona autenticación de inicio de sesión único a la interfaz de usuario y a la API de Argo CD. Se configura mediante las asignaciones de roles de RBAC de la capacidad de Argo CD.

 **Acceso a los clústeres de EKS**: la capacidad de Argo CD utiliza el rol de IAM proporcionado por el cliente para autenticarse en los clústeres de EKS mediante las entradas de acceso. Estas entradas de acceso se pueden configurar manualmente para agregar o eliminar permisos.

Puede usar los [conjuntos de permisos de Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtocreatepermissionset.html) para simplificar la administración de identidades al permitir que una sola identidad acceda a los clústeres de Argo CD y EKS. De este modo, se reduce la sobrecarga, ya que se le requiere que administre solo una identidad en ambos sistemas, en lugar de mantener credenciales separadas para el acceso a Argo CD y al clúster.

### Asignaciones de roles de RBAC
<a name="_rbac_role_mappings"></a>

Argo CD cuenta con roles integrados que puede asignar a los usuarios y grupos de AWS Identity Center:

 **ADMIN**: acceso completo a todas las aplicaciones y configuraciones. Puede crear, implementar y eliminar aplicaciones. Puede administrar la configuración de Argo CD.

 **EDITOR**: puede crear y modificar aplicaciones. No puede cambiar la configuración de Argo CD ni eliminar aplicaciones.

 **VIEWER**: acceso de solo lectura a las aplicaciones. Puede ver el estado y el historial de la aplicación. No puede hacer cambios.

**nota**  
Los nombres de los roles distinguen entre mayúsculas y minúsculas y deben estar en mayúsculas (ADMIN, EDITOR, VIEWER).

**importante**  
La integración de capacidades de EKS con AWS Identity Center admite hasta 1000 identidades por capacidad de Argo CD. Una identidad puede ser un usuario o un grupo.

## Implementaciones de varios clústeres
<a name="_multi_cluster_deployments"></a>

La capacidad administrada de Argo CD admite implementaciones de varios clústeres, lo que le permite administrar las aplicaciones en los clústeres de desarrollo, prueba y producción desde una única instancia de Argo CD.

### Cómo funcionan varios clústeres
<a name="_how_multi_cluster_works"></a>

Al registrar clústeres adicionales con Argo CD:

1. Crea secretos de clúster que hacen referencia a los clústeres de EKS de destino por ARN

1. Se crean aplicaciones o ApplicationSets que tienen distintos clústeres como destino

1. Argo CD se conecta a cada clúster para implementar y supervisar recursos

1. Puede ver y administrar todos los clústeres desde una única interfaz de usuario de Argo CD

### Requisitos previos para varios clústeres
<a name="_prerequisites_for_multi_cluster"></a>

Antes de registrar clústeres adicionales:
+ Cree una entrada de acceso en el clúster de destino para el rol de capacidad de Argo CD
+ Garantice la conectividad de red entre la capacidad de Argo CD y los clústeres de destino
+ Compruebe los permisos de IAM para acceder a los clústeres de destino

### Registro de un clúster
<a name="_register_a_cluster"></a>

Registre los clústeres mediante Kubernetes Secrets en el espacio de nombres `argocd`.

Obtenga el ARN del clúster de destino. Reemplace *region-code* por la región de AWS en la que está el clúster de destino y sustituya *target-cluster* por el nombre del clúster de destino.

```
aws eks describe-cluster \
  --region region-code \
  --name target-cluster \
  --query 'cluster.arn' \
  --output text
```

Cree un secreto de clúster mediante el ARN del clúster:

```
apiVersion: v1
kind: Secret
metadata:
  name: target-cluster
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: cluster
type: Opaque
stringData:
  name: target-cluster
  server: arn:aws:eks:us-west-2:111122223333:cluster/target-cluster
  project: default
```

**importante**  
Use el ARN del clúster de EKS en el campo `server`, no la URL del servidor de API de Kubernetes. La capacidad administrada requiere que los ARN identifiquen los clústeres de destino.

Aplique el secreto:

```
kubectl apply -f cluster-secret.yaml
```

### Configuración de la entrada de acceso en el clúster de destino
<a name="_configure_access_entry_on_target_cluster"></a>

El clúster de destino debe tener una entrada de acceso que conceda al rol de capacidad de Argo CD permiso para implementar aplicaciones. Reemplace *region-code* por la región de AWS en la que está el clúster de destino, sustituya *target-cluster* por el nombre del clúster de destino y el ARN por el ARN del rol de capacidad de Argo CD.

```
aws eks create-access-entry \
  --region region-code \
  --cluster-name target-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --type STANDARD \
  --kubernetes-groups system:masters
```

**nota**  
Para su uso en producción, considere la posibilidad de utilizar grupos de Kubernetes más restrictivos en lugar de `system:masters`.

### Acceso a clústeres privados
<a name="_private_cluster_access"></a>

La capacidad administrada de Argo CD se puede implementar en clústeres de EKS totalmente privados sin necesidad de emparejamiento de VPC ni una configuración de red especializada. AWS administra automáticamente la conectividad entre la capacidad de Argo CD y los clústeres remotos privados. Asegúrese de que los controles de acceso al repositorio y las políticas de control de acceso basado en roles de Argo CD estén configurados correctamente.

### Implementaciones entre cuentas
<a name="_cross_account_deployments"></a>

Para implementaciones entre cuentas, agregue el rol de capacidad de IAM de Argo CD desde la cuenta de origen a la entrada de acceso de EKS del clúster de destino:

1. En la cuenta de destino, cree una entrada de acceso en el clúster de EKS de destino

1. Utilice el ARN del rol de capacidad de IAM de Argo CD de la cuenta de origen como entidad principal

1. Configure los permisos de RBAC de Kubernetes adecuados para la entrada de acceso

1. Registre el clúster de destino en Argo CD con su ARN de clúster de EKS

No es necesario crear roles de IAM adicionales ni configurar ninguna política de confianza: las entradas de acceso de EKS gestionan el acceso entre cuentas.

## Prácticas recomendadas
<a name="_best_practices"></a>

 **Utilice fuentes declarativas como fuente de verdad**: almacene todos los manifiestos de las aplicaciones en fuentes declarativas (repositorios Git, registros de Helm o imágenes OCI), lo que permite el control de versiones, los registros de auditoría y la colaboración.

 **Implemente un RBAC adecuado**: utilice la integración de AWS Identity Center para controlar quién puede acceder a las aplicaciones de Argo CD y administrarlas. Argo CD admite un control de acceso detallado a los recursos dentro de las aplicaciones (implementaciones, pods, ConfigMaps, secretos).

 **Utilice ApplicationSets para implementaciones en varios entornos**: utilice ApplicationSets para implementar aplicaciones en varios clústeres o espacios de nombres con diferentes configuraciones.

## Administración del ciclo de vida
<a name="_lifecycle_management"></a>

### Políticas de sincronización de aplicaciones
<a name="_application_sync_policies"></a>

Controle la forma en que Argo CD sincroniza las aplicaciones:

 **Sincronización manual**: las aplicaciones requieren una aprobación manual para sincronizar los cambios. Recomendada para entornos de **producción**.

 **Sincronización automática**: las aplicaciones se sincronizan automáticamente cuando se detectan cambios en Git. Común en entornos de desarrollo y prueba.

 **Recuperación automática**: se revierten automáticamente los cambios manuales hechos en el clúster. Garantiza que el estado del clúster coincida con Git.

 **Poda**: se eliminan automáticamente los recursos eliminados de Git. Úselo con precaución, ya que puede eliminar recursos.

### Estado de la aplicación
<a name="_application_health"></a>

Argo CD supervisa continuamente el estado de las aplicaciones:
+  **En buen estado**: todos los recursos se ejecutan según lo esperado
+  **En curso**: los recursos se están creando o actualizando
+  **Degradado**: algunos recursos no están en buen estado
+  **Suspendido**: la aplicación está en pausa
+  **Falta**: faltan recursos en el clúster

### Plazos de sincronización
<a name="_sync_windows"></a>

Configure los plazos de sincronización para controlar cuándo se pueden sincronizar las aplicaciones:
+ Permita las sincronizaciones solo durante los periodos de mantenimiento
+ Bloquee las sincronizaciones durante el horario laboral
+ Programe sincronizaciones automáticas para horarios específicos
+ Utilice periodos de sincronización en situaciones en las que necesite realizar cambios y detener cualquier sincronización (escenarios de emergencia)

## Configuración de webhooks para una sincronización más rápida
<a name="_webhook_configuration_for_faster_sync"></a>

De forma predeterminada, Argo CD sondea los repositorios de Git cada 6 minutos para detectar cambios. Para implementaciones con mayor capacidad de respuesta, configure los webhooks de Git para que activen sincronizaciones inmediatas cuando se inserten cambios.

Los webhooks proporcionan varios beneficios:
+ Respuesta de sincronización inmediata cuando se inserta el código (segundos en lugar de minutos)
+ Reducción de la sobrecarga de sondeo y mejora del rendimiento del sistema
+ Uso más eficiente de los límites de velocidad de la API
+ Mejor experiencia de usuario con comentarios más rápidos

### Punto de conexión de webhook
<a name="_webhook_endpoint"></a>

La URL del webhook sigue el patrón `${serverUrl}/api/webhook`, donde `serverUrl` es la URL del servidor de Argo CD.

Por ejemplo, si la URL del servidor de Argo CD es `https://abc123.eks-capabilities.us-west-2.amazonaws.com`, la URL del webhook es:

```
https://abc123.eks-capabilities.us-west-2.amazonaws.com/api/webhook
```

### Configuración de webhooks por proveedor de Git
<a name="_configure_webhooks_by_git_provider"></a>

 **GitHub**: en la configuración del repositorio, agregue un webhook con la URL del webhook de Argo CD. Establezca el tipo de contenido en `application/json` y seleccione “Solo el evento de inserción”.

 **GitLab**: en la configuración del proyecto, agregue un webhook con la URL del webhook de Argo CD. Active “Eventos de inserción” y, opcionalmente, “Etiquetar eventos de inserción”.

 **Bitbucket**: en la configuración del repositorio, agregue un webhook con la URL del webhook de Argo CD. Seleccione “Inserción del repositorio” como activador.

 **CodeCommit**: cree una regla de Amazon EventBridge que active los cambios de estado del repositorio de CodeCommit y envíe notificaciones al punto de conexión del webhook de Argo CD.

Para obtener instrucciones detalladas sobre la configuración de webhooks, consulte [Argo CD Webhook Configuration](https://argo-cd.readthedocs.io/en/stable/operator-manual/webhook/).

**nota**  
Los webhooks complementan los sondeos, no las sustituyen. Argo CD sigue sondeando los repositorios como mecanismo alternativo en caso de que se pierdan las notificaciones de los webhooks.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Uso de Argo CD](working-with-argocd.md): más información sobre cómo crear y administrar aplicaciones de Argo CD
+  [Solución de problemas con capacidades de Argo CD](argocd-troubleshooting.md): resolución de problemas con Argo CD
+  [Uso de recursos de capacidades](working-with-capabilities.md): administración del recurso de la capacidad de Argo CD

# Solución de problemas con capacidades de Argo CD
<a name="argocd-troubleshooting"></a>

En este tema, se proporciona una guía para la solución de problemas de la capacidad de EKS para Argo CD, lo que incluye las comprobaciones de estado de la capacidad, los problemas de sincronización de las aplicaciones, la autenticación de repositorios y las implementaciones en varios clústeres.

**nota**  
Las capacidades de EKS son completamente administradas y se ejecutan fuera del clúster. No tiene acceso a los registros del servidor de Argo CD ni al espacio de nombres `argocd`. La solución de problemas se centra en el estado de la capacidad, el estado de la aplicación y la configuración.

## La capacidad está ACTIVA, pero las aplicaciones no se sincronizan
<a name="_capability_is_active_but_applications_arent_syncing"></a>

Si la capacidad de Argo CD muestra el estado `ACTIVE`, pero las aplicaciones no se están sincronizando, compruebe el estado de la capacidad y de la aplicación.

 **Compruebe el estado de la capacidad**:

Puede ver los problemas de estado de la capacidad en la consola de EKS o mediante la AWS CLI.

 **Consola**:

1. Abra la consola de Amazon EKS en https://console.aws.amazon.com/eks/home\$1/clusters.

1. Seleccione el nombre del clúster.

1. Seleccione la pestaña **Observabilidad**.

1. Elija **Supervisar clúster**.

1. Seleccione la pestaña **Capacidades** para ver el estado de todas las capacidades.

 ** AWS CLI**:

```
# View capability status and health
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd

# Look for issues in the health section
```

 **Causas habituales**:
+  **Repositorio no configurado**: el repositorio de Git no se agregó a Argo CD.
+  **Error de autenticación**: las credenciales de la clave SSH, el token o CodeCommit no son válidas.
+  **Aplicación no creada**: no hay recursos de la aplicación en el clúster.
+  **Política de sincronización**: se requiere sincronización manual (la sincronización automática no está activada).
+  **Permisos de IAM**: faltan permisos para CodeCommit o Secrets Manager.

 **Compruebe el estado de la aplicación**:

```
# List applications
kubectl get application -n argocd

# View sync status
kubectl get application my-app -n argocd -o jsonpath='{.status.sync.status}'

# View application health
kubectl get application my-app -n argocd -o jsonpath='{.status.health}'
```

 **Compruebe las condiciones de la aplicación**:

```
# Describe application to see detailed status
kubectl describe application my-app -n argocd

# View application health
kubectl get application my-app -n argocd -o jsonpath='{.status.health}'
```

## Aplicaciones bloqueadas en el estado “En curso”
<a name="_applications_stuck_in_progressing_state"></a>

Si una aplicación muestra `Progressing`, pero nunca aparece `Healthy`, compruebe el estado de los recursos y los eventos de la aplicación.

 **Compruebe el estado de los recursos**:

```
# View application resources
kubectl get application my-app -n argocd -o jsonpath='{.status.resources}'

# Check for unhealthy resources
kubectl describe application my-app -n argocd | grep -A 10 "Health Status"
```

 **Causas habituales**:
+  **La implementación no está lista**: los pods no se inician o las sondas de preparación fallan.
+  **Dependencias de recursos**: recursos que esperan a que otros recursos estén listos.
+  **Errores al extraer imágenes**: no se puede acceder a las imágenes del contenedor.
+  **Recursos insuficientes**: el clúster carece de CPU o memoria para los pods.

 **Verifique la configuración del clúster de destino** (para configuraciones de varios clústeres):

```
# List registered clusters
kubectl get secret -n argocd -l argocd.argoproj.io/secret-type=cluster

# View cluster secret details
kubectl get secret cluster-secret-name -n argocd -o yaml
```

## Errores de autenticación de repositorios
<a name="_repository_authentication_failures"></a>

Si Argo CD no puede acceder a los repositorios de Git, compruebe la configuración de autenticación.

 **Para repositorios de CodeCommit**:

Compruebe que el rol de capacidad de IAM tenga permisos de CodeCommit:

```
# View IAM policies
aws iam list-attached-role-policies --role-name my-argocd-capability-role
aws iam list-role-policies --role-name my-argocd-capability-role

# Get specific policy details
aws iam get-role-policy --role-name my-argocd-capability-role --policy-name policy-name
```

El rol necesita el permiso `codecommit:GitPull` para los repositorios.

 **Para repositorios de Git privados**:

Compruebe que las credenciales del repositorio estén configuradas correctamente:

```
# Check repository secret exists
kubectl get secret -n argocd repo-secret-name -o yaml
```

Asegúrese de que el secreto contenga las credenciales de autenticación correctas (clave SSH, token o nombre de usuario y contraseña).

 **Para los repositorios que utilizan Secrets Manager**:

```
# Verify IAM Capability Role has Secrets Manager permissions
aws iam list-attached-role-policies --role-name my-argocd-capability-role

# Test secret retrieval
aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:region-code:111122223333:secret:my-secret
```

## Problemas en implementaciones de varios clústeres
<a name="_multi_cluster_deployment_issues"></a>

Si las aplicaciones no se implementan en clústeres remotos, compruebe la configuración de acceso y el registro del clúster.

 **Compruebe el registro del clúster**:

```
# List registered clusters
kubectl get secret -n argocd -l argocd.argoproj.io/secret-type=cluster

# Verify cluster secret format
kubectl get secret CLUSTER_SECRET_NAME -n argocd -o yaml
```

Asegúrese de que el campo `server` contenga el ARN del clúster de EKS, no la URL de la API de Kubernetes.

 **Compruebe la entrada de acceso del clúster de destino**:

En el clúster de destino, compruebe que el rol de capacidad de Argo CD tenga una entrada de acceso:

```
# List access entries (run on target cluster or use AWS CLI)
aws eks list-access-entries --cluster-name target-cluster

# Describe specific access entry
aws eks describe-access-entry \
  --cluster-name target-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/my-argocd-capability-role
```

 **Compruebe los permisos de IAM para varias cuentas**:

Para las implementaciones entre cuentas, compruebe que el rol de capacidad de Argo CD tenga una entrada de acceso en el clúster de destino. La capacidad administrada utiliza las entradas de acceso de EKS para el acceso entre cuentas, no para asumir el rol de IAM.

Para obtener más información sobre la configuración de varios clústeres, consulte [Registro de clústeres de destino](argocd-register-clusters.md).

## Siguientes pasos
<a name="_next_steps"></a>
+  [Consideraciones sobre Argo CD](argocd-considerations.md): consideraciones y prácticas recomendadas de Argo CD
+  [Uso de Argo CD](working-with-argocd.md): creación y administración de aplicaciones de Argo CD
+  [Registro de clústeres de destino](argocd-register-clusters.md): configuración de implementaciones de varios clústeres
+  [Solución de problemas de capacidades de EKS](capabilities-troubleshooting.md): orientación general de solución de problemas de la capacidad

# Comparación de la capacidad de EKS para Argo CD con Argo CD autoadministrado
<a name="argocd-comparison"></a>

La capacidad de EKS para Argo CD proporciona una experiencia de Argo CD completamente administrada que se ejecuta en EKS. Para obtener una comparación general entre las capacidades de EKS y las soluciones autoadministradas, consulte [Consideraciones sobre las capacidades de EKS](capabilities-considerations.md). Este tema se centra en las diferencias específicas de Argo CD, lo que incluye la autenticación, la administración de varios clústeres y la compatibilidad con características ascendentes.

## Diferencias con Argo CD ascendente
<a name="_differences_from_upstream_argo_cd"></a>

La capacidad de EKS para Argo CD se basa en Argo CD ascendente, pero difiere en la forma en que se accede a él, se configura y se integra con los servicios de AWS.

 **RBAC y autenticación**: la capacidad incluye tres roles de RBAC (administrador, editor y lector) y utiliza AWS Identity Center para la autenticación en lugar de la autenticación integrada de Argo CD. Configure las asignaciones de roles a través del parámetro `rbacRoleMapping` de la capacidad para asignar grupos de Identity Center a roles de Argo CD, no a través del ConfigMap `argocd-rbac-cm` de Argo CD. La interfaz de usuario de Argo CD se aloja con su propia URL directa (búsquela en la consola de EKS, en la pestaña Capacidades del clúster), y el acceso a la API utiliza la autenticación y la autorización de AWS a través de IAM.

 **Configuración de clústeres**: esta funcionalidad no configura automáticamente las topologías de clústeres locales ni radiales. Usted configura los clústeres de destino de la implementación y las entradas de acceso de EKS. La capacidad solo admite clústeres de Amazon EKS como destinos de implementación que utilizan ARN de clústeres de EKS (no URL de servidores de API de Kubernetes). La capacidad no agrega automáticamente el clúster local (`kubernetes.default.svc`) como destino de implementación. Para implementar en el mismo clúster en el que se creó la capacidad, registre ese clúster de forma explícita mediante su ARN.

 **Acceso remoto simplificado a los clústeres**: esta capacidad simplifica las implementaciones de varios clústeres al utilizar las entradas de acceso de EKS para conceder a Argo CD acceso a los clústeres remotos, lo que elimina la necesidad de configurar roles de IAM para cuentas de servicio (IRSA) o establecer suposiciones de roles de IAM entre cuentas. La capacidad también proporciona un acceso transparente a clústeres de EKS totalmente privados sin necesidad de emparejamiento de VPC ni una configuración de red especializada. AWS administra automáticamente la conectividad entre la capacidad de Argo CD y los clústeres remotos privados.

 **Integración directa de servicios de AWS**: esta capacidad proporciona una integración directa con los servicios de AWS mediante los permisos de IAM del rol de capacidad. Puede hacer referencia a repositorios de CodeCommit, gráficos de Helm de ECR y CodeConnections directamente en los recursos de la aplicación sin necesidad de crear configuraciones de repositorio. Esto simplifica la autenticación y elimina la necesidad de administrar credenciales independientes para los servicios de AWS. Para obtener más información, consulte [Configuración del acceso al repositorio](argocd-configure-repositories.md).

 **Compatibilidad con espacios de nombres**: la capacidad requiere que especifique un único espacio de nombres en el que se deben crear los recursos personalizados Aplicación, ApplicationSet y AppProject de Argo CD.

**nota**  
Esta restricción del espacio de nombres solo se aplica a los recursos personalizados propios de Argo CD (Aplicación, ApplicationSet, AppProject). Las cargas de trabajo de la aplicación se pueden implementar en cualquier espacio de nombres de cualquier clúster de destino. Por ejemplo, si crea la capacidad con el espacio de nombres `argocd`, todos los recursos personalizados Aplicación se deben crear en el espacio de nombres `argocd`, pero esas Aplicaciones pueden implementar cargas de trabajo en `default`, `production`, `staging` o en cualquier otro espacio de nombres.

**nota**  
La capacidad administrada tiene requisitos específicos para el uso de la interfaz de línea de comandos (CLI) y la configuración de AppProject:  
Al utilizar la CLI de Argo CD, especifique las aplicaciones con el prefijo del espacio de nombres: `argocd app sync namespace/appname` 
Los recursos AppProject deben especificar `.spec.sourceNamespaces` para definir qué espacios de nombres puede supervisar el proyecto para los recursos de tipo Aplicación (por lo general, el espacio de nombres que especificó al crear la capacidad)
Las anotaciones de seguimiento de recursos utilizan el formato: `namespace_appname:group/kind:namespace/name` 

 **Características no compatibles**: las siguientes características no están disponibles en la capacidad administrada:
+ Complementos de administración de configuración (CMP) para la generación de manifiestos personalizados
+ Scripts de Lua personalizados para evaluar el estado de los recursos (se admiten las comprobaciones de estado integradas para recursos estándar)
+ Controlador de notificaciones
+ Proveedores de SSO personalizados (solo se admite AWS Identity Center, lo que incluye la identidad federada de terceros a través de AWS Identity Center)
+ Extensiones de interfaz de usuario y banners personalizados
+ Acceso directo a `argocd-cm`, `argocd-params` y otros ConfigMaps de configuración
+ Modificación del tiempo de espera de sincronización (fijado en 120 segundos)

 **Compatibilidad**: las aplicaciones y los ApplicationSets funcionan de forma idéntica a Argo CD ascendente sin cambios en los manifiestos. La capacidad utiliza las mismas API y CRD de Kubernetes, por lo que herramientas como `kubectl` funcionan de la misma manera. La capacidad es totalmente compatible con aplicaciones y ApplicationSets, flujos de trabajo de GitOps con sincronización automática, implementaciones de varios clústeres, políticas de sincronización (automatizadas, de poda, de autorreparación), enlaces y ondas de sincronización, evaluación del estado de los recursos de Kubernetes estándar, capacidades de reversión, orígenes de repositorios de Git (HTTPS y SSH), manifiestos de Helm, Kustomize y sin formato de YAML, credenciales de la aplicación de GitHub, proyectos para multitenencia y exclusiones e inclusiones de recursos.

## Uso de la CLI de Argo CD con la capacidad administrada
<a name="argocd-cli-configuration"></a>

La CLI de Argo CD funciona igual que Argo CD ascendente para la mayoría de las operaciones, pero la autenticación y el registro de clústeres son diferentes.

### Requisitos previos
<a name="_prerequisites"></a>

Instale la CLI de Argo CD según las [instrucciones de instalación ascendente](https://argo-cd.readthedocs.io/en/stable/cli_installation/).

### Configuración
<a name="_configuration"></a>

Configure la CLI mediante variables de entorno:

1. Obtenga la URL del servidor de Argo CD desde la consola de EKS (en la pestaña **Capacidades** del clúster) o mediante la CLI de AWS. Se debe eliminar el prefijo `https://`:

   ```
   export ARGOCD_SERVER=$(aws eks describe-capability \
     --cluster-name my-cluster \
     --capability-name my-argocd \
     --query 'capability.configuration.argoCd.serverUrl' \
     --output text \
     --region region-code | sed 's|^https://||')
   ```

1. Genere un token de cuenta desde la interfaz de usuario de Argo CD (**Configuración** → **Cuentas** → **Administración** → **Generar nuevo token**) y configúrelo como una variable de entorno:

   ```
   export ARGOCD_AUTH_TOKEN="your-token-here"
   ```

**importante**  
Esta configuración utiliza el token de la cuenta de administrador para los flujos de trabajo de configuración y desarrollo iniciales. Para casos de uso de producción, utilice tokens y roles del ámbito del proyecto para seguir el principio de privilegio mínimo. Para obtener más información sobre la configuración de RBAC y roles del proyecto, consulte [Configuración de los permisos de Argo CD](argocd-permissions.md).

1. Establezca la opción de gRPC requerida:

   ```
   export ARGOCD_OPTS="--grpc-web"
   ```

Con estas variables de entorno configuradas, puede utilizar la CLI de Argo CD sin el comando `argocd login`.

### Diferencias clave
<a name="_key_differences"></a>

La capacidad administrada tiene las siguientes limitaciones de CLI:
+  Los comandos `argocd admin` no son compatibles (requieren el acceso directo a pods).
+  `argocd login` no es compatible (utilice tokens de proyecto o cuenta como alternativa).
+  `argocd cluster add` requiere el indicador `--aws-cluster-name` con el ARN del clúster de EKS.

### Ejemplo: registro de un clúster
<a name="_example_register_a_cluster"></a>

Registre un clúster de EKS para la implementación de la aplicación:

```
# Get the cluster ARN
CLUSTER_ARN=$(aws eks describe-cluster \
  --name my-cluster \
  --query 'cluster.arn' \
  --output text)

# Register the cluster
argocd cluster add $CLUSTER_ARN \
  --aws-cluster-name $CLUSTER_ARN \
  --name in-cluster \
  --project default
```

Para obtener la documentación completa de la CLI de Argo CD, consulte la [referencia de la CLI de Argo CD](https://argo-cd.readthedocs.io/en/stable/user-guide/commands/argocd/).

## Ruta de migración
<a name="_migration_path"></a>

Puede migrar de Argo CD autoadministrado a la capacidad administrada:

1. Revise la configuración actual de Argo CD para detectar características no compatibles (controlador de notificaciones, CMP, comprobaciones de estado personalizadas, extensiones de la interfaz de usuario)

1. Escale los controladores de Argo CD autoadministrado a cero réplicas para evitar conflictos

1. Cree un recurso de la capacidad de Argo CD en su clúster.

1. Exporte sus aplicaciones, ApplicationSets y AppProjects.

1. Migre las credenciales de repositorios, los secretos de clústeres y las plantillas de credenciales de repositorios (repocreds).

1. Si utiliza claves GPG, certificados TLS o hosts SSH conocidos, migre también estas configuraciones.

1. Actualice los campos `destination.server` para usar los nombres de los clústeres o los ARN de los clústeres de EKS.

1. Aplíquelos a la instancia de Argo CD administrado.

1. Compruebe que las aplicaciones se estén sincronizando correctamente.

1. Desinstale su instalación de Argo CD autoadministrado.

La capacidad administrada utiliza las mismas API y definiciones de recursos de Argo CD, por lo que sus manifiestos existentes funcionan con modificaciones mínimas.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Creación de una capacidad de Argo CD](create-argocd-capability.md): creación de un recurso de capacidad de Argo CD
+  [Uso de Argo CD](working-with-argocd.md): implementación de su primera aplicación
+  [Consideraciones sobre Argo CD](argocd-considerations.md): configuración de la integración de AWS Identity Center