

 **Ajudar a melhorar esta página** 

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

# Implantação contínua com o Argo CD
<a name="argocd"></a>

O Argo CD é uma ferramenta de entrega contínua declarativa e baseada em GitOps para Kubernetes. Com o Argo CD, você pode automatizar a implantação e o gerenciamento do ciclo de vida de suas aplicações em vários clusters e ambientes. O Argo CD oferece suporte a vários tipos de origem, incluindo repositórios do Git, registros do Helm (HTTP e OCI) e imagens OCI, proporcionando flexibilidade para organizações com requisitos de segurança e conformidade distintos.

Com as funcionalidades do EKS, o Argo CD é totalmente gerenciado pela AWS, o que elimina a necessidade de instalação, manutenção e escalabilidade dos controladores do Argo CD e de suas dependências nos clusters.

## Funcionamento do Argo CD
<a name="_how_argo_cd_works"></a>

O Argo CD segue o padrão de GitOps, no qual a origem da sua aplicação (por exemplo, repositório do Git, registro do Helm ou imagem OCI) é a fonte da verdade para definir o estado desejado da aplicação. Ao criar um recurso `Application` do Argo CD, você especifica a origem que contém os manifestos da aplicação e o cluster e o namespace do Kubernetes de destino. O Argo CD monitora continuamente tanto a origem quanto o estado em execução no cluster, sincronizando automaticamente quaisquer alterações para garantir que o estado do cluster corresponda ao estado desejado.

**nota**  
Com a funcionalidade do EKS para o Argo CD, o software do Argo CD é executado no ambiente de gerenciamento da AWS, e não em seus nós de processamento. Isso significa que os nós de processamento não precisam de acesso direto a repositórios do Git ou a registros do Helm, pois a funcionalidade gerencia o acesso à origem a partir da conta da AWS.

O Argo CD fornece três tipos de recursos primários:
+  **Application**: define uma implantação proveniente de um repositório do Git para um cluster de destino
+  **ApplicationSet**: gera diversas Applications usando modelos para implantações em vários clusters
+  **AppProject**: fornece agrupamento lógico e controle de acesso para as Applications

 **Exemplo: criação de uma Application do Argo CD** 

O exemplo a seguir mostra como criar um recurso `Application` do 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**  
Use `destination.name` com o nome do cluster utilizado ao registrar o cluster (como `in-cluster` para o cluster local). O campo `destination.server` também funciona com ARNs de cluster de EKS, mas o uso de nomes de cluster é recomendado para melhor legibilidade.

## Benefícios do Argo CD
<a name="_benefits_of_argo_cd"></a>

O Argo CD implementa um fluxo de trabalho de GitOps no qual você define as configurações da aplicação em repositórios do Git e o Argo CD sincroniza automaticamente as aplicações para corresponderem ao estado desejado. Essa abordagem centrada no Git fornece uma trilha de auditoria completa de todas as alterações, permite reversões fáceis e integra-se naturalmente aos seus processos existentes de revisão e aprovação de código. O Argo CD detecta e reconcilia automaticamente o desvio entre o estado desejado no Git e o estado real nos clusters, garantindo que as implantações permaneçam consistentes com a configuração declarada.

Com o Argo CD, é possível implantar e gerenciar aplicações em vários clusters usando uma única instância do Argo CD, simplificando as operações em ambientes com vários clusters e diversas regiões. A interface do usuário do Argo CD fornece funcionalidades de visualização e monitoramento, permitindo que você visualize o status da implantação, a integridade e o histórico das aplicações. A interface do usuário se integra ao Centro de Identidade da AWS (anteriormente AWS SSO) para autenticação e autorização simplificadas, permitindo que você controle o acesso com a infraestrutura de gerenciamento de identidades existente.

Como parte das funcionalidades gerenciadas do EKS, o Argo CD é totalmente gerenciado pela AWS, eliminando a necessidade de instalar, configurar e manter a infraestrutura do Argo CD. A AWS cuida da escalabilidade, da aplicação de patches e do gerenciamento operacional, permitindo que as equipes se concentrem na entrega de aplicações em vez da manutenção de ferramentas.

## Integração com o Centro de Identidade da AWS
<a name="integration_with_shared_aws_identity_center"></a>

As funcionalidades gerenciadas do EKS fornecem integração direta entre o Argo CD e o Centro de Identidade da AWS, permitindo autenticação e autorização simplificadas para os usuários. Ao habilitar a funcionalidade do Argo CD, é possível configurar a integração com o Centro de Identidade da AWS para mapear grupos e usuários do Centro de Identidade para perfis de RBAC do Argo CD, permitindo controlar quem pode acessar e gerenciar aplicações no Argo CD.

## Integração com outras funcionalidades gerenciadas do EKS
<a name="_integration_with_other_eks_managed_capabilities"></a>

O Argo CD pode ser integrado a outras funcionalidades gerenciadas do EKS.
+  **AWS Controllers for Kubernetes (ACK)**: use o Argo CD para gerenciar a implantação de recursos do ACK em diversos clusters, possibilitando fluxos de trabalho de GitOps para a infraestrutura da AWS.
+  **kro (Kube Resource Orchestrator)**: use o Argo CD para implantar composições do kro em vários clusters, possibilitando uma composição de recursos consistente em todo o seu ambiente do Kubernetes.

## Conceitos básicos do Argo CD
<a name="_getting_started_with_argo_cd"></a>

Para começar a usar a funcionalidade do EKS para o Argo CD:

1. Crie e configure um perfil da funcionalidade do IAM com as permissões necessárias para que o Argo CD acesse suas fontes e gerencie aplicações

1.  [Crie um recurso da funcionalidade do Argo CD](create-argocd-capability.md) em seu cluster de EKS por meio do Console da AWS, da AWS CLI ou da ferramenta de infraestrutura como código de sua preferência.

1. Configure o acesso ao repositório e registre os clusters para a implantação de aplicações.

1. Crie recursos de Application para implantar suas aplicações usando fontes declarativas.

# Criar um recurso Argo CD
<a name="create-argocd-capability"></a>

Este tópico explica como criar uma funcionalidade do Argo CD no cluster do Amazon EKS.

## Pré-requisitos
<a name="_prerequisites"></a>

Antes de criar uma funcionalidade do Argo CD, certifique-se de ter:
+ Um cluster do Amazon EKS existente executando uma versão compatível do Kubernetes (há suporte para todas as versões nos períodos de suporte padrão e estendido)
+  **Centro de Identidade da AWS configurado**: necessário para a autenticação do Argo CD (não há suporte para usuários locais)
+ Um perfil do IAM da funcionalidade com permissões para o Argo CD
+ Permissões do IAM suficientes para criar recursos de funcionalidades em clusters de EKS
+  `kubectl` configurado para o estabelecimento de comunicação com o cluster
+ (Opcional) A CLI do Argo CD instalada para facilitar o gerenciamento de clusters e repositórios
+ (Para a CLI ou o eksctl) A ferramenta de CLI apropriada instalada e configurada

Para obter instruções sobre como criar o perfil do IAM para a funcionalidade, consulte [Perfil do IAM para a funcionalidade do Amazon EKS](capability-role.md). Para obter a configuração do Centro de Identidade, consulte [Conceitos básicos do Centro de Identidade da AWS](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html).

**Importante**  
O perfil do IAM para a funcionalidade que você fornece determina quais recursos da AWS o Argo CD pode acessar. Isso inclui o acesso a repositórios do Git por meio do CodeConnections e a segredos no Secrets Manager. Para obter orientações sobre como criar um perfil apropriado com permissões de privilégio mínimo, consulte [Perfil do IAM para a funcionalidade do Amazon EKS](capability-role.md) e [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md).

## Escolha da ferramenta
<a name="_choose_your_tool"></a>

É possível criar uma funcionalidade do Argo CD por meio do Console de gerenciamento da AWS, da AWS CLI ou do eksctl:
+  [Criação de uma funcionalidade do Argo CD por meio do Console](argocd-create-console.md): use o Console para obter uma experiência guiada
+  [Criação de uma funcionalidade do Argo CD por meio da AWS CLI](argocd-create-cli.md): use a AWS CLI para obter scripts e automação
+  [Criação de uma funcionalidade do Argo CD por meio do eksctl](argocd-create-eksctl.md): use o eksctl para obter uma experiência nativa do Kubernetes

## O que ocorre durante a criação de uma funcionalidade do Argo CD
<a name="_what_happens_when_you_create_an_argo_cd_capability"></a>

Ao criar uma funcionalidade do Argo CD:

1. O EKS cria o serviço da funcionalidade do Argo CD no ambiente de gerenciamento da AWS

1. As definições de recursos personalizados (CRDs, na sigla em inglês) são instaladas no cluster

1. Uma entrada de acesso é criada automaticamente para seu perfil de funcionalidade do IAM com políticas de entrada de acesso específicas de recursos que concedem permissões básicas do Kubernetes (consulte [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md))

1. O Argo CD começa a monitorar os recursos personalizados (ApplicationSets, AppProjects)

1. O status da funcionalidade é alterado de `CREATING` para `ACTIVE` 

1. A interface de usuário do Argo CD torna-se acessível por meio de seu URL

Uma vez ativa, será possível criar Applications do Argo CD no seu cluster para realizar implantações a partir das suas fontes declarativas.

**nota**  
A entrada de acesso criada automaticamente não concede permissões para implantar aplicações em clusters. Para implantar aplicações, é necessário configurar permissões de RBAC adicionais do Kubernetes para cada cluster de destino. Consulte [Registro de clusters de destino](argocd-register-clusters.md) para obter detalhes sobre como registrar clusters e configurar o acesso.

## Próximas etapas
<a name="_next_steps"></a>

Após criar a funcionalidade do Argo CD:
+  [Conceitos do Argo CD](argocd-concepts.md): aprenda sobre os princípios de GitOps, as políticas de sincronização e os padrões para vários clusters
+  [Como trabalhar com o Argo CD](working-with-argocd.md): configure o acesso ao repositório, registre os clusters de destino e crie Applications
+  [Considerações sobre o Argo CD](argocd-considerations.md): conheça os padrões de arquitetura de vários clusters e a configuração avançada

# Criação de uma funcionalidade do Argo CD por meio do Console
<a name="argocd-create-console"></a>

Este tópico descreve como criar uma funcionalidade do Argo CD usando o Console de gerenciamento da AWS.

## Pré-requisitos
<a name="_prerequisites"></a>
+  **Centro de Identidade da AWS configurado**: o Argo CD requer o Centro de Identidade da AWS para autenticação. Não há suporte para usuários locais. Se você não tiver o Centro de Identidade da AWS configurado, consulte [Conceitos básicos do Centro de Identidade da AWS](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html) para criar uma instância do Centro de Identidade, e [Adicionar usuários](https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html) e [Adicionar grupos](https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html) para criar usuários e grupos para acesso ao Argo CD.

## Criação da funcionalidade do Argo CD
<a name="_create_the_argo_cd_capability"></a>

1. Abra o console do Amazon EKS em https://console.aws.amazon.com/eks/home\$1/clusters.

1. Selecione o nome do cluster para abrir a página de detalhes do cluster.

1. Escolha a guia **Funcionalidades**.

1. Na barra de navegação à esquerda, selecione **Argo CD**.

1. Escolha **Criar funcionalidade do Argo CD**.

1. No **perfil da funcionalidade do IAM**:
   + Se você já tiver um perfil da funcionalidade do IAM, selecione-o no menu suspenso
   + Se a criação de um perfil for necessária, escolha **Criar perfil do Argo CD** 

     Isso abre o console do IAM em uma nova guia com a política de confiança preenchida previamente e fornece acesso total de leitura ao Secrets Manager. Nenhuma outra permissão é adicionada por padrão, mas você pode adicioná-las se necessário. Se você planeja usar repositórios do CodeCommit ou outros serviços da AWS, adicione as permissões adequadas antes de criar o perfil.

     Após criar o perfil, retorne ao console do EKS e o perfil será selecionado automaticamente.
**nota**  
Se você planeja usar as integrações opcionais com o AWS Secrets Manager ou o AWS CodeConnections, precisará adicionar permissões ao perfil. Para obter exemplos da política do IAM e de orientações de configuração, consulte [Gerenciamento de segredos de aplicações com o AWS Secrets Manager](integration-secrets-manager.md) e [Estabelecimento de conexão com repositórios do Git usando o AWS CodeConnections](integration-codeconnections.md).

1. Configure a integração com o Centro de Identidade da AWS:

   1. Selecione **Habilitar integração com o Centro de Identidade da AWS**.

   1. Escolha sua instância do Centro de Identidade no menu suspenso.

   1. Configure os mapeamentos de perfil para RBAC atribuindo usuários ou grupos aos perfis do Argo CD (ADMIN, EDITOR ou VIEWER).

1. Escolha **Criar**.

O processo de criação da funcionalidade é iniciado.

## Verificação da ativação da funcionalidade
<a name="_verify_the_capability_is_active"></a>

1. Na guia **Funcionalidades**, visualize o status da funcionalidade do Argo CD.

1. Aguarde até que o status mude de `CREATING` para `ACTIVE`.

1. Assim que estiver com o status ativo, a funcionalidade estará pronta para uso.

Para obter informações sobre os status das funcionalidades e sobre a solução de problemas, consulte [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md).

## Acesso à interface do usuário do Argo CD
<a name="_access_the_argo_cd_ui"></a>

Depois que a funcionalidade estiver ativa, você poderá acessar a interface do usuário do Argo CD:

1. Na página da funcionalidade do Argo CD, escolha **Abrir interface do usuário do Argo CD**.

1. A interface do usuário do Argo CD será aberta em uma nova guia do navegador.

1. Em seguida, você pode criar Applications e gerenciar implantações por meio da interface do usuário.

## Próximas etapas
<a name="_next_steps"></a>
+  [Como trabalhar com o Argo CD](working-with-argocd.md): configure repositórios, registre clusters e crie Applications
+  [Considerações sobre o Argo CD](argocd-considerations.md): acesse a arquitetura de vários clusters e a configuração avançada
+  [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md): gerencie os recursos da funcionalidade do Argo CD

# Criação de uma funcionalidade do Argo CD por meio da AWS CLI
<a name="argocd-create-cli"></a>

Este tópico descreve como criar uma funcionalidade do Argo CD usando a AWS CLI.

## Pré-requisitos
<a name="_prerequisites"></a>
+  **AWS CLI**: versão `2.12.3` ou em versões posteriores. Para verificar a versão, execute `aws --version`. Para obter mais informações, consulte [Instalação](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) no Guia do Usuário da Interface de Linha de Comando AWS.
+  ** `kubectl` ** – uma ferramenta de linha de comando para trabalhar com clusters do Kubernetes. Para obter mais informações, consulte [Configurar o `kubectl` e o `eksctl`](install-kubectl.md).
+  **Centro de Identidade da AWS configurado**: o Argo CD requer o Centro de Identidade da AWS para autenticação. Não há suporte para usuários locais. Se você não tiver o Centro de Identidade da AWS configurado, consulte [Conceitos básicos do Centro de Identidade da AWS](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html) para criar uma instância do Centro de Identidade, e [Adicionar usuários](https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html) e [Adicionar grupos](https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html) para criar usuários e grupos para acesso ao Argo CD.

## Etapa 1: criação de um perfil da funcionalidade do IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Crie um arquivo de política de confiança:

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

Crie o perfil do IAM:

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

**nota**  
Se você planeja usar as integrações opcionais com o AWS Secrets Manager ou o AWS CodeConnections, precisará adicionar permissões ao perfil. Para obter exemplos da política do IAM e de orientações de configuração, consulte [Gerenciamento de segredos de aplicações com o AWS Secrets Manager](integration-secrets-manager.md) e [Estabelecimento de conexão com repositórios do Git usando o AWS CodeConnections](integration-codeconnections.md).

## Etapa 2: criação da funcionalidade do Argo CD
<a name="_step_2_create_the_argo_cd_capability"></a>

Crie o recurso da funcionalidade do Argo CD no cluster.

Primeiro, defina as variáveis de ambiente para a sua configuração do Centro de Identidade:

```
# 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"
```

Crie a funcionalidade com integração ao Centro de Identidade. Substitua *region-code* pela região da AWS em que seu cluster está localizado e *my-cluster* pelo nome do seu cluster e *idc-region-code* pelo código da região em que seu Centro de Identidade do IAM foi configurado:

```
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"
        }]
      }]
    }
  }'
```

O comando é concluído de imediato, mas a funcionalidade demora algum tempo para se tornar ativa, conforme o EKS cria a infraestrutura e os componentes necessários para a funcionalidade. O EKS instalará as definições de recursos personalizados do Kubernetes relacionadas a essa funcionalidade no cluster durante o processo de criação.

**nota**  
Caso ocorra um erro indicando a inexistência do cluster ou falta de permissões, verifique o seguinte:  
Se o nome do cluster está correto
Se a AWS CLI está configurada para a região correta
Se você tem as permissões do IAM obrigatórias

## Etapa 3: verificação da ativação da funcionalidade
<a name="_step_3_verify_the_capability_is_active"></a>

Aguarde até que a funcionalidade se torne ativa. Substitua *region-cod*e pela região da AWS em que seu cluster está localizado e *my-cluster* pelo nome do seu cluster.

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

A funcionalidade estará pronta assim que o status mostrar `ACTIVE`. Não prossiga para a próxima etapa até que o status seja `ACTIVE`.

Também é possível visualizar os detalhes completos da funcionalidade:

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

## Etapa 4: verificação da disponibilidade de recursos personalizados
<a name="_step_4_verify_custom_resources_are_available"></a>

Após a funcionalidade estar ativa, verifique se os recursos personalizados do Argo CD estão disponíveis no cluster:

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

Os tipos de recursos `Application` e `ApplicationSet` devem aparecer na lista apresentada.

## Próximas etapas
<a name="_next_steps"></a>
+  [Como trabalhar com o Argo CD](working-with-argocd.md): configure repositórios, registre clusters e crie Applications
+  [Considerações sobre o Argo CD](argocd-considerations.md): acesse a arquitetura de vários clusters e a configuração avançada
+  [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md): gerencie os recursos da funcionalidade do Argo CD

# Criação de uma funcionalidade do Argo CD por meio do eksctl
<a name="argocd-create-eksctl"></a>

Este tópico descreve como criar uma funcionalidade do Argo CD usando o eksctl.

**nota**  
Para realizar as etapas seguintes, é necessário estar utilizando o eksctl na versão `0.220.0` ou em versões posteriores. Para verificar a versão, execute `eksctl version`.

## Etapa 1: criação de um perfil da funcionalidade do IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Crie um arquivo de política de confiança:

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

Crie o perfil do IAM:

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

**nota**  
Para esta configuração básica, não são necessárias políticas do IAM adicionais. Se você planeja usar o Secrets Manager para credenciais de repositório ou para o CodeConnections, precisará adicionar permissões ao perfil. Para obter exemplos da política do IAM e de orientações de configuração, consulte [Gerenciamento de segredos de aplicações com o AWS Secrets Manager](integration-secrets-manager.md) e [Estabelecimento de conexão com repositórios do Git usando o AWS CodeConnections](integration-codeconnections.md).

## Etapa 2: obtenção da configuração do Centro de Identidade da AWS
<a name="step_2_get_your_shared_aws_identity_center_configuration"></a>

Obtenha o ARN da instância do Centro de Identidade e o ID do usuário para a configuração 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 esses valores. Você precisará deles na próxima etapa.

## Etapa 3: criação de um arquivo de configuração do eksctl
<a name="_step_3_create_an_eksctl_configuration_file"></a>

Crie um arquivo chamado `argocd-capability.yaml` com o conteúdo a seguir. Substitua os valores com espaços reservados pelo nome do seu cluster, região, ARN do perfil do IAM, ARN da instância do Centro de Identidade, região do Centro de Identidade e ID do usuário:

```
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**  
É possível adicionar vários usuários ou grupos aos mapeamentos de RBAC. Para grupos, use `type: SSO_GROUP` e forneça o ID do grupo. Os perfis disponíveis são `ADMIN`, `EDITOR` e `VIEWER`.

## Etapa 4: criação da funcionalidade do Argo CD
<a name="_step_4_create_the_argo_cd_capability"></a>

Aplique o arquivo de configuração:

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

O comando é executado de forma imediata, mas a funcionalidade demora algum tempo para se tornar ativa.

## Etapa 5: verificação da ativação da funcionalidade
<a name="_step_5_verify_the_capability_is_active"></a>

Verifique o status da funcionalidade. Substitua *region-code* pela região AWS em que seu cluster se encontra e substitua *my-cluster* pelo nome do seu cluster.

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

A funcionalidade estará pronta assim que o status mostrar `ACTIVE`.

## Etapa 6: verificação da disponibilidade de recursos personalizados
<a name="_step_6_verify_custom_resources_are_available"></a>

Após a funcionalidade estar ativa, verifique se os recursos personalizados do Argo CD estão disponíveis no cluster:

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

Os tipos de recursos `Application` e `ApplicationSet` devem aparecer na lista apresentada.

## Próximas etapas
<a name="_next_steps"></a>
+  [Como trabalhar com o Argo CD](working-with-argocd.md): aprenda a criar e gerenciar Applications do Argo CD
+  [Considerações sobre o Argo CD](argocd-considerations.md): configure o SSO e o acesso a vários clusters
+  [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md): gerencie os recursos da funcionalidade do Argo CD

# Conceitos do Argo CD
<a name="argocd-concepts"></a>

O Argo CD implementa o GitOps ao tratar o Git como a única fonte de verdade para as implantações da aplicação. Este tópico apresenta um exemplo prático e, em seguida, explica os conceitos fundamentais que você precisa entender ao trabalhar com a funcionalidade do EKS para o Argo CD.

## Conceitos básicos do Argo CD
<a name="_getting_started_with_argo_cd"></a>

Após criar a funcionalidade do Argo CD (consulte [Criar um recurso Argo CD](create-argocd-capability.md)), é possível começar a implantar as aplicações. Este exemplo demonstra o registro de um cluster e a criação de uma Application.

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

 **Registrar o cluster** (obrigatório)

Registre o cluster no local em que você deseja implantar aplicações. Para este exemplo, registraremos o mesmo cluster em que o Argo CD está sendo executado (você pode usar o nome `in-cluster` para obter compatibilidade com a maioria dos exemplos do 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 obter informações sobre a configuração da CLI do Argo CD para trabalho com a funcionalidade do Argo CD no EKS, consulte [Uso da CLI do Argo CD com a funcionalidade gerenciada](argocd-comparison.md#argocd-cli-configuration).

Como alternativa, registre o cluster usando um Kubernetes Secret (consulte [Registro de clusters de destino](argocd-register-clusters.md) para obter mais detalhes).

 **Configurar o acesso ao repositório** (opcional)

Este exemplo utiliza um repositório público do GitHub, portanto, nenhuma configuração de repositório é necessária. Para repositórios privados, configure o acesso usando o AWS Secrets Manager, o CodeConnections ou o Kubernetes Secrets (consulte [Configuração do acesso ao repositório](argocd-configure-repositories.md) para obter mais detalhes).

No caso de serviços da AWS (como ECR para charts do Helm, CodeConnections e CodeCommit), é possível referenciá-los diretamente nos recursos da Application sem precisar criar um Repository. O perfil da funcionalidade deve ter as permissões do IAM necessárias. Para mais detalhes, consulte [Configuração do acesso ao repositório](argocd-configure-repositories.md).

### Etapa 2: criar um aplicativo
<a name="_step_2_create_an_application"></a>

Crie este manifesto da Application em `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 a Application:

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

Após aplicar esta Application, o Argo CD: 1. Sincroniza a aplicação do Git com o cluster (implantação inicial) 2. Monitora o repositório do Git em busca de alterações 3. Sincroniza automaticamente as alterações posteriores com o seu cluster 4. Detecta e corrige qualquer desvio em relação ao estado desejado 5. Fornece o status da integridade e o histórico de sincronização na interface do usuário

Visualize o status da aplicação:

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

Também é possível visualizar a aplicação usando a CLI do Argo CD ou a interface do usuário do Argo CD (que é acessível a partir do console do EKS, na guia Funcionalidades do seu cluster).

**nota**  
Ao usar a CLI do Argo CD com o recurso gerenciado, especifique as aplicações com o prefixo do namespace: `argocd app get argocd/guestbook`.

**nota**  
Use o nome do cluster em `destination.name` (o nome que você utilizou ao registrar o cluster). A funcionalidade gerenciada não oferece suporte ao padrão local “in-cluster” (`kubernetes.default.svc`).

## Conceitos principais
<a name="_core_concepts"></a>

### Princípios de GitOps e tipos de origem
<a name="_gitops_principles_and_source_types"></a>

O Argo CD implementa o GitOps, no qual a origem da sua aplicação é a única fonte de verdade para as implantações:
+  **Declarativo**: o estado desejado é declarado usando manifestos no formato YAML, charts do Helm ou sobreposições do Kustomize
+  **Versionado**: cada alteração é rastreada com uma trilha de auditoria completa
+  **Automatizado** o Argo CD monitora continuamente as origens e sincroniza as alterações automaticamente
+  **Autorreparação**: detecta e corrige desvios entre o estado desejado e o estado atual do cluster

 **Tipos de origem com suporte**:
+  **Repositórios do Git**: GitHub, GitLab, Bitbucket, CodeCommit (HTTPS, SSH ou CodeConnections)
+  **Registros do Helm**: registros HTTP (como `https://aws.github.io/eks-charts`) e registros OCI (como `public.ecr.aws`)
+  **Imagens OCI**: imagens de contêiner contendo manifestos ou charts do Helm (como `oci://registry-1.docker.io/user/my-app`)

Essa flexibilidade permite que as organizações escolham origens que atendam aos seus requisitos de segurança e conformidade. Por exemplo, organizações que restringem o acesso ao Git proveniente de clusters podem usar o ECR para charts do Helm ou imagens OCI.

Para obter mais informações, consulte [Application Sources](https://argo-cd.readthedocs.io/en/stable/user-guide/application-sources/) na documentação do Argo CD.

### Sincronização e reconciliação
<a name="_sync_and_reconciliation"></a>

O Argo CD monitora continuamente as origens e os clusters para detectar e corrigir diferenças:

1. Realiza a verificação de alterações nas origens (padrão: a cada seis minutos)

1. Compara o estado desejado com o estado do cluster

1. Marca as aplicações como `Synced` ou `OutOfSync` 

1. Sincroniza as alterações automaticamente (se configurado) ou aguarda aprovação manual

1. Monitora a integridade do recurso após a sincronização

 Os **ciclos de sincronização** controlam a ordem de criação de recursos usando anotações:

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

Os recursos são aplicados na ordem do ciclo (com números menores primeiro, incluindo números negativos como `-1`). O ciclo `0` é o padrão, caso não seja especificado. Isso permite a criação de dependências, como namespaces (ciclo `-1`) antes das implantações (ciclo `0`) antes dos serviços (ciclo `1`).

 A **autorreparação** reverte automaticamente as alterações manuais:

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

**nota**  
A funcionalidade gerenciada usa o rastreamento de recursos baseado em anotações (em vez de empregar o rastreamento baseado em rótulos) para obter melhor compatibilidade com as convenções do Kubernetes e com as outras ferramentas.

Para obter informações detalhadas sobre as fases de sincronização, os hooks e os padrões avançados, consulte a [documentação de sincronização do Argo CD](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-waves/).

### Integridade da aplicação
<a name="_application_health"></a>

O Argo CD monitora a integridade de todos os recursos da aplicação:

 **Status de integridade**: \$1 **Íntegro**: todos os recursos estão sendo executados conforme o esperado \$1 **Em progresso**: os recursos estão sendo criados ou atualizados \$1 **Degradado**: alguns recursos não estão íntegros (por exemplo, pods falhando e trabalhos com erros) \$1 **Suspenso**: a aplicação está pausada intencionalmente \$1 **Ausente**: os recursos definidos no Git não estão presentes no cluster

O Argo CD conta com verificações de integridade integradas para recursos comuns do Kubernetes (por exemplo, Deployments, StatefulSets, Jobs e outros) e oferece suporte a verificações de integridade personalizadas para CRDs.

A saúde da aplicação é determinada por todos os seus recursos. Dessa forma, se qualquer recurso estiver no estado `Degraded`, a aplicação será considerada `Degraded`.

Para obter mais informações, consulte [Resource Health](https://argo-cd.readthedocs.io/en/stable/operator-manual/health/) na documentação do Argo CD.

### Padrões de diversos clusters
<a name="_multi_cluster_patterns"></a>

O Argo CD é compatível com dois padrões principais de implantação:

 **Hub-and-spoke**: execute o Argo CD em um cluster de gerenciamento dedicado que realiza a implantação para diversos clusters de workloads: \$1 Controle e visibilidade centralizados \$1 Políticas consistentes em todos os clusters \$1 Apenas uma instância do Argo CD para gerenciamento \$1 Separação clara entre o ambiente de gerenciamento e as workloads

 **Por cluster**: execute o Argo CD em cada cluster, gerenciando apenas as aplicações daquele cluster específico: \$1 Isolamento de clusters (portanto, uma falha não afeta os demais) \$1 Rede simplificada (sem necessidade de comunicação entre clusters) \$1 Configuração inicial simplificada (sem necessidade de registro de clusters)

Escolha o modelo hub-and-spoke para equipes de plataformas que gerenciam muitos clusters ou o modelo por cluster para equipes independentes ou quando os clusters precisarem de isolamento total.

Para obter configurações detalhadas de diversos clusters, consulte [Considerações sobre o Argo CD](argocd-considerations.md).

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

Os Projects fornecem agrupamento lógico e controle de acesso para as Applications:
+  **Restrições de origem**: limitam quais repositórios do Git podem ser utilizados
+  **Restrições de destino**: limitam quais clusters e namespaces podem ser destinos de implantação
+  **Restrições de recursos**: limitam quais tipos de recursos do Kubernetes podem ser implantados
+  **Integração com o RBAC**: mapeia projetos para IDs de usuários e de grupos do Centro de Identidade da AWS

As Applications pertencem a um único projeto. Se não for especificado, elas utilizarão o projeto `default`, que não conta com restrições por padrão. Para uso em produção, edite o projeto `default` para restringir o acesso e criar novos projetos com as restrições apropriadas.

Para obter as configurações de projetos e os padrões de RBAC, consulte [Configuração das permissões do Argo CD](argocd-permissions.md).

### Opções de sincronização
<a name="_sync_options"></a>

Realize um ajuste fino do comportamento de sincronização com estas opções conhecidas:
+  `CreateNamespace=true`: cria automaticamente o namespace de destino
+  `ServerSideApply=true`: usa o Server-Side Apply para obter uma melhor resolução de conflitos
+  `SkipDryRunOnMissingResource=true`: ignora a simulação quando as CRDs ainda não existem (sendo útil para instâncias do kro)

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

Para obter uma lista completa de opções de sincronização, consulte a [documentação de opções de sincronização do Argo CD](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-options/).

## Próximas etapas
<a name="_next_steps"></a>
+  [Configuração do acesso ao repositório](argocd-configure-repositories.md): configure o acesso ao repositório do Git
+  [Registro de clusters de destino](argocd-register-clusters.md): registre os clusters de destino para a implantação
+  [Criação de Applications](argocd-create-application.md): crie sua primeira Application
+  [Considerações sobre o Argo CD](argocd-considerations.md): acesse os padrões específicos para EKS, a integração com o Centro de Identidade e a configuração de diversos clusters
+  [Documentação do Argo CD](https://argo-cd.readthedocs.io/en/stable/): acesse a documentação abrangente do Argo CD, incluindo hooks de sincronização, verificações de integridade e padrões avançados

# Configuração das permissões do Argo CD
<a name="argocd-permissions"></a>

A funcionalidade gerenciada do Argo CD se integra ao Centro de Identidade da AWS para autenticação e usa perfis de RBAC integrados para autorização. Este tópico explica como configurar permissões para usuários e equipes.

## Funcionamento de permissões com o Argo CD
<a name="_how_permissions_work_with_argo_cd"></a>

A funcionalidade do Argo CD usa o Centro de Identidade da AWS para autenticação e fornece três perfis de RBAC integrados para autorização.

Quando um usuário acessa o Argo CD:

1. A autenticação é realizada por meio do Centro de Identidade da AWS (que pode ser federado ao seu provedor de identidades corporativo)

1.  O Centro de Identidade da AWS fornece informações de usuários e grupos ao Argo CD

1. O Argo CD mapeia usuários e grupos para perfis de RBAC com base na sua configuração

1. Os usuários visualizam somente as aplicações e os recursos aos quais têm permissão de acessar

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

A funcionalidade do Argo CD fornece três perfis integrados que você mapeia para usuários e grupos do Centro de Identidade da AWS. Esses são **perfis com escopo global** que controlam o acesso aos recursos do Argo CD, como projetos, clusters e repositórios.

**Importante**  
Os perfis globais controlam o acesso ao próprio Argo CD, não aos recursos do escopo do projeto, como Applications. Os usuários EDITOR e VIEWER não podem ver nem gerenciar Applications por padrão, eles precisam de perfis no projeto para acessar os recursos do escopo do projeto. Consulte [Perfis do projeto e acesso ao escopo do projeto](#project-roles) para obter detalhes sobre como conceder acesso a Applications e outros recursos do escopo do projeto.

 **ADMIN** 

Acesso total a todos os recursos e configurações do Argo CD:
+ Criação, atualização e exclusão de Applications e ApplicationSets
+ Gerenciamento da configuração do Argo CD
+ Registro e gerenciamento de clusters de destino para implantação
+ Configuração do acesso ao repositório
+ Crie e gerencie projetos.
+ Visualização do status e do histórico de todas as aplicações
+ Liste e acesse todos os clusters e repositórios

 **EDITOR** 

Pode atualizar projetos e configurar perfis do projeto, mas não pode alterar as configurações globais do Argo CD:
+ Atualize projetos existentes (não é possível criar ou excluir projetos)
+ Configure perfis e permissões de projetos.
+ Visualize chaves e certificados GPG
+ Não é possível alterar a configuração do Argo CD
+ Não é possível gerenciar clusters ou repositórios diretamente
+ Não é possível ver ou gerenciar Applications sem perfis do projeto

 **VIEWER** 

Acesso somente de leitura a recursos do Argo CD:
+ Exiba a configuração do projeto
+ Liste todos os projetos (incluindo projetos aos quais o usuário não está atribuído)
+ Visualize chaves e certificados GPG
+ Sem permissão para o registro de clusters ou de repositórios
+ Sem permissão para a realização de quaisquer alterações
+ Não é possível ver ou gerenciar Applications sem perfis do projeto

**nota**  
Para conceder aos usuários EDITOR ou VIEWER acesso a Applications, um ADMINISTRADOR ou EDITOR deve criar perfis do projeto que mapeiem os grupos do Centro de Identidade para permissões específicas em um projeto.

## Perfis do projeto e acesso ao escopo do projeto
<a name="project-roles"></a>

Perfis globais (ADMIN, EDITOR e VIEWER) controlam o acesso ao Argo CD em si. Os perfis do projeto controlam o acesso a recursos e funcionalidades em um projeto específico, incluindo:
+  **Recursos**: Applications, ApplicationSets, credenciais do repositório, credenciais do cluster
+  **Funcionalidades**: acesso a registros, acesso executivo aos pods de aplicações

 **Noções básicas sobre o modelo de permissão de dois níveis**:
+  **Escopo global**: perfis integrados determinam o que os usuários podem fazer com projetos, clusters, repositórios e configurações de CD do Argo
+  **Escopo do projeto**: os perfis do projeto determinam o que os usuários podem fazer com recursos e funcionalidades em um projeto específico

Isso significa que:
+ Os usuários ADMIN podem acessar todos os recursos e funcionalidades do projeto sem configuração adicional
+ Os usuários EDITOR e VIEWER devem receber perfis de projeto para acessar os recursos e funcionalidades do projeto
+ Os usuários EDITOR podem criar perfis do projeto para conceder a si mesmos e a outras pessoas acesso aos projetos que possam ser atualizados

 **Exemplo de fluxo de trabalho**

1. Um ADMIN mapeia um grupo do Centro de Identidade para o perfil EDITOR globalmente

1. Um ADMINISTRADOR cria um projeto para uma equipe

1. O EDITOR configura os perfis do projeto dentro desse projeto para conceder aos membros da equipe acesso aos recursos do escopo do projeto

1. Os membros da equipe (que podem ter o perfil global VIEWER) agora podem ver e gerenciar aplicações nesse projeto com base nas permissões de perfil do projeto

Para obter detalhes sobre como configurar os perfis do projeto, consulte [Controle de acesso baseado em projetos](#_project_based_access_control).

## Configuração de mapeamentos de perfil
<a name="_configure_role_mappings"></a>

Mapeie usuários e grupos do Centro de Identidade da AWS para os perfis do Argo CD durante a criação ou a atualização da funcionalidade.

 **Exemplo de mapeamento de perfil**:

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

**nota**  
Os nomes dos perfis diferenciam maiúsculas de minúsculas e devem estar em letras maiúsculas (ADMIN, EDITOR e VIEWER).

**Importante**  
A integração das funcionalidades do EKS com o Centro de Identidade da AWS fornece suporte para até mil identidades por funcionalidade do Argo CD. Uma identidade pode ser um usuário ou um grupo.

 **Atualize os mapeamentos de perfil**:

```
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 da conta de administrador
<a name="_admin_account_usage"></a>

A conta de administrador é destinada à configuração inicial e às tarefas administrativas, como o registro de clusters e a configuração de repositórios.

 **Situações apropriadas para o uso da conta de administrador**:
+ Configuração inicial da funcionalidade
+ Desenvolvimento individual ou demonstrações rápidas
+ Tarefas administrativas (como registro de cluster, configuração de repositórios e criação de projetos)

 **Práticas recomendadas para a conta de administrador**:
+ Sem permissão para a confirmação de tokens da conta para o controle de versão
+ Rotação imediata de tokens em caso de exposição
+ Limitação do uso de tokens da conta para tarefas de configuração e de administração
+ Definição de prazos curtos de expiração (máximo de 12 horas)
+ Limite de criação de apenas cinco tokens simultâneos na conta

 **Situações para uso do acesso baseado em projetos**:
+ Ambientes de desenvolvimento compartilhados com vários usuários
+ Qualquer ambiente com características do ambiente de produção
+ Quando há necessidade de trilhas de auditoria para identificação de ações por parte dos usuários
+ Quando há necessidade da aplicação de restrições de recursos ou limites de acesso

Para ambientes de produção e cenários com vários usuários, use o controle de acesso baseado em projetos com perfis de RBAC dedicados e mapeados para grupos do Centro de Identidade da AWS.

## Controle de acesso baseado em projetos
<a name="_project_based_access_control"></a>

Use o Argo CD Projects (AppProject) para a disponibilização de controle de acesso detalhado e isolamento de recursos para as equipes.

**Importante**  
Antes de atribuir usuários ou grupos aos perfis específicos do projeto, é necessário primeiro mapeá-los para um perfil global do Argo CD (ADMIN, EDITOR ou VIEWER) na configuração do recurso. Os usuários não podem acessar o Argo CD sem um mapeamento global de perfis, mesmo que estejam atribuídos aos perfis do projeto.  
Considere mapear usuários para o perfil VIEWER globalmente e, em seguida, conceder permissões adicionais por meio de perfis específicos do projeto. Isso fornece acesso básico e, ao mesmo tempo, permite um controle refinado no nível do projeto.

Os projetos fornecem:
+  **Restrições de origem**: limitam quais repositórios do Git podem ser utilizados
+  **Restrições de destino**: limitam quais clusters e namespaces podem ser destinos de implantação
+  **Restrições de recursos**: limitam quais tipos de recursos do Kubernetes podem ser implantados
+  **Integração de RBAC**: mapeamento de projetos para grupos do Centro de Identidade da AWS ou perfis do Argo CD

 **Exemplo de projeto para isolamento de equipes**:

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

### Namespaces da origem
<a name="_source_namespaces"></a>

Ao usar a funcionalidade EKS do Argo CD, o campo `spec.sourceNamespaces` é obrigatório nas definições de AppProject. Esse campo especifica qual namespace pode conter Applications or ApplicationSets que façam referência a esse projeto.

**Importante**  
A funcionalidade EKS do Argo CD oferece suporte a apenas um único namespace para Applications and ApplicationSets, o namespace que você especificou ao criar a funcionalidade (normalmente `argocd`). Isso difere do Argo CD de código aberto, que oferece suporte a vários namespaces.

 **Configuração do AppProject** 

Todos os AppProjects devem incluir o namespace configurado da funcionalidade em `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**  
Se você omitir o namespace da funcionalidade de `sourceNamespaces`, Applications ou ApplicationSets nesse namespace não poderão referenciar esse projeto, resultando em falhas de implantação.

 **Atribua usuários a projetos**:

Os perfis do projeto concedem aos usuários EDITOR e VIEWER acesso aos recursos do projeto (Applications, ApplicationSets, credenciais de repositório e cluster) e funcionalidades (logs, exec). Sem os perfis do projeto, esses usuários não podem acessar esses recursos, mesmo que tenham acesso global ao perfil.

Usuários com perfil de ADMIN têm acesso a todas as Applications sem precisar de perfis do projeto.

 **Exemplo: concessão de acesso a Applications aos membros da equipe** 

```
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**  
Inclua `clusters, get, *, allow` nos perfis do projeto para permitir que os usuários vejam os nomes dos clusters na interface do usuário. Sem essa permissão, o cluster de destino será exibido como “desconhecido”.

 **Noções básicas das políticas de perfis do projeto**:

O formato da política é: `p, proj:<project>:<role>, <resource>, <action>, <object>, <allow/deny>` 

 **Políticas de recursos**:
+  `applications, , team-a/, allow`: acesso total a todas as Applications no projeto team-a
+  `applications, get, team-a/*, allow`: acesso somente leitura às Applications
+  `applications, sync, team-a/*, allow`: pode sincronizar Applications, mas não criar/excluir
+  `applications, delete, team-a/*, allow`: pode excluir Applications (use com cuidado)
+  `applicationsets, , team-a/, allow`: acesso total aos ApplicationSets
+  `repositories, *, *, allow`: acesso às credenciais do repositório
+  `clusters, *, *, allow`: acesso às credenciais do cluster

 **Políticas de funcionalidade**:
+  `logs, , team-a/, allow`: acesso aos logs da aplicação
+  `exec, , team-a/, allow`: acesso executivo aos pods de aplicações

**nota**  
Os usuários EDITOR podem criar perfis de projeto para conceder a si mesmos e a outros permissões nos projetos que podem atualizar Isso permite que os líderes de equipe controlem o acesso aos recursos do escopo do projeto para sua equipe sem exigir a intervenção do ADMIN.

**nota**  
Use IDs de grupo do Centro de Identidade (não nomes de grupos) no campo `groups`. Você também pode usar os IDs de usuário do Centro de Identidade para acesso de usuários individuais. Encontre esses IDs no console do Centro de Identidade da AWS ou usando a CLI da AWS.

## Padrões de permissão comuns
<a name="_common_permission_patterns"></a>

 **Padrão 1: equipe administrativa com acesso total** 

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

Os usuários ADMIN podem visualizar e gerenciar todos os recursos do escopo do projeto sem configuração adicional.

 **Padrão 2: os líderes de equipes gerenciam projetos, os desenvolvedores os acessam por meio de perfis do projeto** 

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

1. Um ADMIN cria projetos para cada equipe

1. Os líderes da equipe (EDITOR) configuram os perfis do projeto para conceder aos desenvolvedores acesso aos recursos do projeto (Applications, ApplicationSets, credenciais) e funcionalidades (logs, execução)

1. Os desenvolvedores (VIEWER) só podem acessar recursos e funcionalidades permitidos por seus perfis no projeto

 **Padrão 3: acesso baseado em equipe com perfis do projeto** 

1. O ADMIN cria projetos e mapeia líderes de equipe para o perfil EDITOR globalmente

1. Os líderes da equipe (EDITOR) atribuem aos membros da equipe os perfis do projeto em seus projetos

1. Os membros da equipe só precisam do perfil VIEWER. Os perfis do projeto fornecem acesso aos recursos e funcionalidades do projeto

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

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

 **Use grupos em vez de usuários individuais**: mapeie grupos do Centro de Identidade da AWS para perfis do Argo CD, em vez de usuários individuais, para facilitar o gerenciamento.

 **Comece a aplicar permissões com o privilégio mínimo**: inicie com acesso com o perfil de VIEWER e conceda acesso de EDITOR ou de ADMIN, conforme necessário.

 **Use projetos para o isolamento de equipes**: crie AppProjects separados para diferentes equipes ou ambientes a fim de aplicar limites.

 **Aproveite a federação do Centro de Identidade**: configure o Centro de Identidade da AWS para federar com seu provedor de identidades corporativo para gerenciamento centralizado de usuários

 **Análises de acesso regulares**: revise periodicamente os mapeamentos de perfis e as atribuições de projetos para garantir níveis de acesso adequados.

 **Limite o acesso ao cluster**: lembre-se de que o RBAC do Argo CD controla o acesso a recursos e operações do Argo CD, mas não corresponde ao RBAC do Kubernetes. Usuários com acesso ao Argo CD podem implantar aplicações em clusters aos quais o Argo CD tem acesso. Limite quais clusters o Argo CD pode acessar e use restrições de destino de projeto para controlar os locais em que as aplicações podem ser implantadas.

## AWSPermissões de serviço do
<a name="shared_aws_service_permissions"></a>

Para usar serviços da AWS diretamente nos recursos da Application (sem a necessidade de criar recursos de Repository), vincule as permissões do IAM obrigatórias ao perfil da funcionalidade.

 **ECR para charts do Helm**:

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

 **Repositórios do CodeCommit**:

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

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

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

Consulte [Configuração do acesso ao repositório](argocd-configure-repositories.md) para obter detalhes sobre como usar essas integrações.

## Próximas etapas
<a name="_next_steps"></a>
+  [Como trabalhar com o Argo CD](working-with-argocd.md): saiba como criar aplicações e gerenciar implantações
+  [Conceitos do Argo CD](argocd-concepts.md): compreenda os conceitos do Argo CD, incluindo o Projects
+  [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md): analise as práticas recomendadas de segurança para as funcionalidades

# Como trabalhar com o Argo CD
<a name="working-with-argocd"></a>

Ao usar o Argo CD, você define as aplicações em repositórios do Git e a funcionalidade se encarrega de sincronizá-las automaticamente nos clusters do Kubernetes. Isso permite a implantação de aplicações de forma declarativa e com controle de versão, contando com a detecção automática de desvios.

## Pré-requisitos
<a name="_prerequisites"></a>

Antes de começar a trabalhar o Argo CD, é necessário ter:
+ Um cluster do EKS com a funcionalidade para o Argo CD criada (consulte [Criar um recurso Argo CD](create-argocd-capability.md))
+ Um repositório do Git que contém manifestos do Kubernetes
+  `kubectl` configurado para o estabelecimento de comunicação com o cluster

## Tarefas comuns
<a name="_common_tasks"></a>

Os seguintes tópicos orientam você na realização de tarefas comuns do Argo CD:

 **[Configuração do acesso ao repositório](argocd-configure-repositories.md)**: configure o Argo CD para acessar seus repositórios do Git usando o AWS Secrets Manager, o AWS CodeConnections ou Kubernetes Secrets.

 **[Registro de clusters de destino](argocd-register-clusters.md)**: registre os clusters de destino nos quais o Argo CD implantará aplicações.

 **[Trabalho com o Argo CD Projects](argocd-projects.md)**: organize aplicações e aplique limites de segurança usando Projects para ambientes multilocatários.

 **[Criação de Applications](argocd-create-application.md)**: crie Applications que realizam a implantação de repositórios do Git com políticas de sincronização automática ou manual.

 **[Uso de ApplicationSets](argocd-applicationsets.md)**: use ApplicationSets para implantar aplicações em múltiplos ambientes ou clusters usando modelos e geradores.

## Acesso à interface do usuário do Argo CD
<a name="_access_the_argo_cd_ui"></a>

Acesse a interface do usuário do Argo CD por meio do console do EKS:

1. Abra o console do Amazon EKS

1. Selecione o cluster

1. Escolha a guia **Funcionalidades**

1. Escolha **Argo CD** 

1. Escolha **Abrir interface do usuário do Argo CD** 

A interface de usuário fornece a topologia visual da aplicação, o status e o histórico de sincronização, a integridade dos recursos e os eventos, os controles de sincronização manual e o gerenciamento de aplicações.

## Documentação original
<a name="_upstream_documentation"></a>

Para obter informações detalhadas sobre as funcionalidades do Argo CD:
+  [Documentação do Argo CD](https://argo-cd.readthedocs.io/): acesse o guia do usuário completo
+  [Application Spec](https://argo-cd.readthedocs.io/en/stable/user-guide/application-specification/): acesse a referência de API completa para a Application
+  [ApplicationSet Guide](https://argo-cd.readthedocs.io/en/stable/user-guide/application-set/): acesse padrões e exemplos de ApplicationSet
+  [Argo CD GitHub](https://github.com/argoproj/argo-cd): acesse o código-fonte e exemplos

# Configuração do acesso ao repositório
<a name="argocd-configure-repositories"></a>

Antes de implantar aplicações, configure o Argo CD para acessar os repositórios do Git e os registros do chart do Helm. O Argo CD oferece suporte a diversos métodos de autenticação para GitHub, GitLab, Bitbucket, AWS CodeCommit e AWS ECR.

**nota**  
No caso de integrações diretas com serviços da AWS (como charts do Helm do ECR, repositórios do CodeCommit e CodeConnections), é possível referenciá-los diretamente nos recursos da Application sem a necessidade de criar configurações de Repository. O perfil da funcionalidade deve ter as permissões do IAM necessárias. Para mais detalhes, consulte [Configuração das permissões do Argo CD](argocd-permissions.md).

## Pré-requisitos
<a name="_prerequisites"></a>
+ Um cluster de EKS com a funcionalidade para o Argo CD criada
+ Repositórios do Git que contêm manifestos do Kubernetes
+  `kubectl` configurado para o estabelecimento de comunicação com o cluster

**nota**  
 OAWS CodeConnections pode se conectar a servidores Git localizados na nuvem AWS ou on-premises. Para obter mais informações, consulte [AWS CodeConnections](https://docs.aws.amazon.com/codeconnections/latest/userguide/welcome.html).

## Métodos de autenticação
<a name="_authentication_methods"></a>


| Método | Caso de uso | Permissões do IAM necessárias | 
| --- | --- | --- | 
|   **Integração direta com serviços da AWS**   | 
|  CodeCommit  |  Integração direta com repositórios do Git do AWS CodeCommit. Nenhuma configuração de Repository é necessária.  |   `codecommit:GitPull`   | 
|  CodeConnections  |  Estabeleça conexão com o GitHub, o GitLab ou o Bitbucket usando autenticação gerenciada. Requer configuração da conexão.  |   `codeconnections:UseConnection`   | 
|  Artefatos da OCI do ECR  |  Integração direta com o AWS ECR para charts do Helm baseados em OCI e imagens de manifestos. Nenhuma configuração de Repository é necessária.  |   `arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly`   | 
|   **Configuração do repositório com credenciais**   | 
|   AWS Secrets Manager (nome do usuário/token)  |  Armazene tokens de acesso pessoal ou senhas Permite a alternância de credenciais sem acesso ao Kubernetes.  |   `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess`   | 
|   AWS Secrets Manager (chave SSH)  |  Use a autenticação por chave SSH. Permite a alternância de credenciais sem acesso ao Kubernetes.  |   `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess`   | 
|   AWS Secrets Manager (aplicativo do GitHub)  |  Autenticação pela aplicação do GitHub com chave privada Permite a alternância de credenciais sem acesso ao Kubernetes.  |   `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess`   | 
|  Kubernetes Secret  |  Método padrão do Argo CD usando segredos “in-cluster”  |  Nenhuma (permissões gerenciadas pelo EKS Access Entry com Kubernetes RBAC)  | 

## Acesso direto aos serviços da AWS
<a name="direct_access_to_shared_aws_services"></a>

No caso de serviços da AWS, é possível referenciá-los diretamente nos recursos da Application sem precisar criar configurações de Repository. O perfil da funcionalidade deve ter as permissões do IAM necessárias.

### Repositórios do CodeCommit
<a name="_codecommit_repositories"></a>

Referencie repositórios do CodeCommit diretamente nas Applications:

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

Permissões obrigatórias do perfil da funcionalidade:

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

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

Referencie repositórios do GitHub, do GitLab ou do Bitbucket por meio do CodeConnections. O formato do URL do repositório é derivado do ARN da conexão do CodeConnections.

O formato do URL do repositório é:

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

Permissões obrigatórias do perfil da funcionalidade:

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

### Charts do Helm do ECR
<a name="_ecr_helm_charts"></a>

O ECR armazena charts do Helm como artefatos OCI. O Argo CD oferece duas maneiras de referenciá-los:

 **Formato Helm** (recomendado para charts do 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
```

Observação: não inclua o prefixo `oci://` ao usar o formato Helm. Use o campo `chart` para especificar o nome do chart.

 **Formato OCI** (para artefatos OCI que contêm manifestos do 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
```

Observação: inclua o prefixo `oci://` ao usar o formato OCI. Utilize o campo `path` em vez de `chart`.

Permissões de perfil de funcionalidade necessárias - anexe a política gerenciada:

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

Essa política inclui as permissões ECR necessárias: `ecr:GetAuthorizationToken`, `ecr:BatchGetImage` e `ecr:GetDownloadUrlForLayer`.

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

Armazene credenciais de repositório no Secrets Manager e faça referência a elas nas configurações de Repository do Argo CD. O uso do Secrets Manager permite a alternância automática de credenciais sem exigir acesso ao Kubernetes RBAC. As credenciais podem ser alternadas usando as permissões do IAM para o Secrets Manager, e o Argo CD lê automaticamente os valores atualizados.

**nota**  
Para reutilização de credenciais em vários repositórios (por exemplo, todos os repositórios em uma organização do GitHub), use modelos de credenciais de repositório com `argocd.argoproj.io/secret-type: repo-creds`. Isso fornece uma melhor experiência de usuário do que criar segredos de repositórios individuais. Para obter mais informações, consulte [Credenciais de repositórios](https://argo-cd.readthedocs.io/en/stable/operator-manual/argocd-repo-creds-yaml/) na documentação do Argo CD.

### Autenticação por nome de usuário e token
<a name="_username_and_token_authentication"></a>

Para repositórios HTTPS com tokens de acesso pessoal ou senhas:

 **Criar o segredo no 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 opcionais para certificado TLS de cliente** (para servidores do Git privados):

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

**nota**  
Os valores `tlsClientCertData` e `tlsClientCertKey` devem estar codificados em base64.

 **Criar um segredo de repositório referenciando o 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
```

### Autenticação por chave SSH
<a name="_ssh_key_authentication"></a>

Para obter acesso ao Git baseado em SSH, armazene a chave privada em texto não formatado (não em JSON):

 **Criar o segredo com a chave privada SSH**:

```
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-----"
```

 **Criar um segredo de repositório 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
```

### Autenticação por aplicativo do GitHub
<a name="_github_app_authentication"></a>

Para a autenticação pelo aplicativo do GitHub com uma chave privada:

 **Criar o segredo com as credenciais do aplicativo do 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**  
O valor `githubAppPrivateKeySecret` deve estar codificado em base64.

 **Campo opcional para o 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"
  }'
```

 **Criar um segredo de repositório para o aplicativo do 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
```

### Modelos de credencial de repositório
<a name="_repository_credential_templates"></a>

Para reutilização de credenciais em vários repositórios (por exemplo, todos os repositórios em uma organização ou usuário do GitHub), use modelos de credenciais de repositório com `argocd.argoproj.io/secret-type: repo-creds`. Isso fornece uma melhor experiência de usuário do que criar segredos de repositórios individuais para cada respositório.

 **Crie um modelo de credencial de repositório**:

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

Esse modelo de credencial se aplica a todos os repositórios que correspondam ao prefixo `https://github.com/your-org` da URL. Em seguida, é possível referenciar qualquer repositório dessa organização em Applications sem criar segredos adicionais.

Para obter mais informações, consulte [Credenciais de repositórios](https://argo-cd.readthedocs.io/en/stable/operator-manual/argocd-repo-creds-yaml/) na documentação do Argo CD.

**Importante**  
Certifique-se de que seu perfil de funcionalidade do IAM tenha a política gerenciada `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess` anexada ou permissões equivalentes, incluindo `secretsmanager:GetSecretValue` e permissões de descriptografia do KMS. Consulte [Considerações sobre o Argo CD](argocd-considerations.md) para obter a configuração da política do IAM.

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

Para a integração com o CodeConnections, consulte [Estabelecimento de conexão com repositórios do Git usando o AWS CodeConnections](integration-codeconnections.md).

O CodeConnections fornece autenticação gerenciada para GitHub, GitLab e Bitbucket sem armazenar credenciais.

## Uso do Kubernetes Secrets
<a name="_using_kubernetes_secrets"></a>

Armazene credenciais diretamente no Kubernetes usando o método padrão do Argo CD.

 **Para HTTPS com token de acesso pessoal**:

```
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 o 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-----
```

## Repositórios do CodeCommit
<a name="_codecommit_repositories_2"></a>

Para o AWS CodeCommit, conceda ao perfil da funcionalidade do IAM permissões do CodeCommit (`codecommit:GitPull`).

Configurar o repositório:

```
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 obter a configuração detalhada da política do IAM, consulte [Considerações sobre o Argo CD](argocd-considerations.md).

## Verificação da conexão do repositório
<a name="_verify_repository_connection"></a>

Verifique o status da conexão pela interface do usuário do Argo CD em “Settings → Repositories”. A interface do usuário apresenta o status da conexão e quaisquer erros de autenticação.

Os segredos do repositório não incluem informações de status.

## Recursos adicionais
<a name="_additional_resources"></a>
+  [Registro de clusters de destino](argocd-register-clusters.md): registre os clusters de destino para implantações
+  [Criação de Applications](argocd-create-application.md): crie sua primeira Application
+  [Considerações sobre o Argo CD](argocd-considerations.md): acesse as permissões do IAM e as configuração de segurança
+  [Private Repositories](https://argo-cd.readthedocs.io/en/stable/user-guide/private-repositories/): acesse a referência de configuração de repositórios da versão original

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

Registre clusters para permitir que o Argo CD implante aplicações neles. É possível registrar o mesmo cluster em que o Argo CD está em execução (cluster local) ou clusters remotos em diferentes contas ou regiões. Depois que um cluster for registrado, ele permanecerá em um estado de conexão desconhecido até que você crie uma aplicação dentro desse cluster. Para criar uma aplicação do Argo CD após o registro do cluster, consulte [Criação de Applications](argocd-create-application.md).

## Pré-requisitos
<a name="_prerequisites"></a>
+ Um cluster de EKS com a funcionalidade para o Argo CD criada
+  `kubectl` configurado para o estabelecimento de comunicação com o cluster
+ Para clusters remotos: permissões do IAM e entradas de acesso adequadas

## Registro do cluster local
<a name="_register_the_local_cluster"></a>

Para implantar aplicações no mesmo cluster em que o Argo CD está em execução, registre-o como um destino de implantação.

**Importante**  
A funcionalidade do Argo CD não realiza o registro automático do cluster local. É necessário registrá-lo explicitamente para fazer a implantação de aplicações no mesmo cluster. É possível usar o nome `in-cluster` do cluster para compatibilidade com a maioria dos exemplos do Argo CD online.

**nota**  
Uma entrada de acesso EKS é criada automaticamente para o cluster local com o perfil de funcionalidade do Argo CD, mas nenhuma permissão RBAC do Kubernetes é concedida por padrão. Isso segue o princípio do privilégio mínimo, sendo necessário configurar explicitamente as permissões que o Argo CD precisa com base no seu caso de uso. Por exemplo, se você usar esse cluster apenas como um hub do Argo CD para gerenciar clusters remotos, ele não precisará de nenhuma permissão de implantação local. Consulte a seção Requisitos de entrada de acesso do RBAC abaixo para ver as opções de configuração.

 **Com a CLI do Argo CD**:

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

 **Com um Kubernetes Secret**:

```
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 a configuração:

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

**nota**  
Use o ARN do cluster de EKS no campo `server`, e não o URL do servidor da API do Kubernetes. A funcionalidade gerenciada requer ARNs para identificar os clusters. O valor padrão `kubernetes.default.svc` não é compatível.

## Registro de clusters remotos
<a name="_register_remote_clusters"></a>

Para implantar em clusters remotos:

 **Etapa 1: criação da entrada de acesso no cluster remoto** 

Substitua *region-code* pela região da AWS em que seu cluster remoto está, substitua *remote-cluster* pelo nome do cluster remoto e substitua o ARN pelo ARN do perfil da funcionalidade para o 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
```

 **Etapa 2: associar uma política de acesso às permissões de RBAC do Kubernetes** 

A entrada de acesso requer permissões do Kubernetes RBAC para o Argo CD implantar aplicações. Para começar a usar rapidamente, é possível utilizar a `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**  
A `AmazonEKSClusterAdminPolicy` fornece acesso total ao administrador do cluster (equivalente a `system:masters`). Isso é conveniente para começar, mas não deve ser usado em produção. Para ambientes de produção, use permissões mais restritivas associando a entrada de acesso a grupos personalizados do Kubernetes e criando associações apropriadas de Role ou ClusterRole. Consulte a seção de configuração de produção abaixo para ver a configuração de privilégios mínimos.

 **Etapa 3: registro do cluster no Argo CD** 

 **Com a CLI do Argo CD**:

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

 **Com um Kubernetes Secret**:

```
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 a configuração:

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

## Clusters entre contas
<a name="_cross_account_clusters"></a>

Para realizar a implantação em clusters localizados em contas da AWS distintas:

1. Na conta de destino, crie uma entrada de acesso no cluster de destino do EKS usando o ARN do perfil da funcionalidade do IAM do Argo CD da conta de origem como a entidade principal

1. Associe uma política de acesso com as permissões RBAC apropriadas do Kubernetes

1. Registre o cluster no Argo CD usando o ARN do cluster de EKS

Não é necessária a criação de perfis do IAM adicionais nem a configuração de política de confiança. As entradas de acesso do EKS gerenciam o acesso entre contas.

O formato do ARN do cluster inclui a região; portanto, implantações entre regiões seguem o mesmo processo das implantações na mesma região.

## Verificação do registro do cluster
<a name="_verify_cluster_registration"></a>

Consulte os clusters que estão registrados:

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

Como opção, verifique o status do cluster na interface do Argo CD em Configurações → Clusters.

## Clusters privados
<a name="_private_clusters"></a>

A funcionalidade do Argo CD fornece acesso transparente a clusters de EKS totalmente privados, sem exigir emparelhamento da VPC ou configurações de rede especializadas.

 A AWS gerencia automaticamente a conectividade entre a funcionalidade do Argo CD e os clusters remotos privados.

Basta registrar o cluster privado usando seu ARN. Nenhuma configuração de rede adicional é necessária.

## Requisitos do RBAC de entrada de acesso
<a name="_access_entry_rbac_requirements"></a>

Quando você cria uma funcionalidade do Argo CD, uma entrada de acesso do EKS é criada automaticamente para o perfil de funcionalidade, mas nenhuma permissão de RBAC do Kubernetes é concedida por padrão. Esse design intencional segue o princípio de privilégio mínimo, em que diferentes casos de uso exigem permissões diferentes.

Por exemplo: \$1 Se você usar o cluster somente como um hub do Argo CD para gerenciar clusters remotos, ele não precisará de permissões de implantação locais \$1 Se você implantar aplicações localmente, ele precisará de acesso de leitura em todo o cluster e acesso de gravação a namespaces específicos \$1 Se for preciso criar CRDs, serão necessárias permissões adicionais de administrador de cluster

É necessário configurar explicitamente as permissões que o Argo CD precisa com base em seus requisitos.

### Permissões mínimas para o Argo CD
<a name="_minimum_permissions_for_argo_cd"></a>

O Argo CD precisa de dois tipos de permissões para funcionar sem erros:

 **Permissões de leitura (em todo o cluster)**: o Argo CD deve ser capaz de ler todos os tipos de recursos e definições de recursos personalizadas (CRDs) em todo o cluster para:
+ Descoberta de recursos e verificações de integridade
+ Detecção do desvio entre o estado desejado e o real
+ Validação de recursos antes da implantação

 **Permissões de gravação (específicas do namespace)**: o Argo CD precisa criar, atualizar e excluir permissões para recursos definidos em Applications:
+ Implantar workloads de aplicações (implantações, serviços, ConfigMaps etc.)
+ Aplicar recursos personalizados (CRDs específicos para suas aplicações)
+ Gerenciamento do ciclo de vida do aplicação

### Configuração rápida
<a name="_quick_setup"></a>

Para começar rapidamente, testar ou desenvolver ambientes, use a `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**  
A `AmazonEKSClusterAdminPolicy` fornece acesso total ao administrador do cluster (equivalente a `system:masters`), incluindo a capacidade de criar CRDs, modificar recursos em todo o cluster e implantar em qualquer namespace. Isso é conveniente para desenvolvimento e POCs, mas não deve ser usado em ambientes de produção. Para produção, use a configuração de privilégios mínimos abaixo.

### Configuração de produção com privilégio mínimo
<a name="_production_setup_with_least_privilege"></a>

Para ambientes de produção, crie um RBAC personalizado do Kubernetes que conceda:
+ Acesso de leitura em todo o cluster a todos os recursos (para descobertas e verificações de integridade)
+ Acesso de gravação específico ao namespace (para implantações)

 **Etapa 1: associar a entrada de acesso a um grupo de Kubernetes personalizado** 

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

 **Etapa 2: criar um ClusterRole para acesso de leitura** 

```
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"]
```

 **Etapa 3: criar um perfil para acesso de gravação aos namespaces da aplicação** 

```
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: ["*"]
```

 **Etapa 4: vincular perfis ao 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**  
O formato do nome do grupo para entradas de acesso é `eks-access-entry:` seguido pelo ARN principal. Repita o RoleBinding para cada namespace em que o Argo CD deva implantar aplicações.

**Importante**  
O Argo CD deve ser capaz de ler todos os tipos de recursos em todo o cluster para verificações de integridade e descoberta, mesmo que seja implantado apenas em namespaces específicos. Sem acesso de leitura em todo o cluster, o Argo CD mostrará erros ao verificar a integridade da aplicação.

## Restrição do acesso ao cluster com o Projects
<a name="_restrict_cluster_access_with_projects"></a>

Use Projects para controlar em quais clusters e namespaces as Applications podem ser implantadas configurando os clusters e namespaces de destino permitidos em `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 obter detalhes, consulte [Trabalho com o Argo CD Projects](argocd-projects.md).

## Recursos adicionais
<a name="_additional_resources"></a>
+  [Trabalho com o Argo CD Projects](argocd-projects.md): organize as Applications e aplique limites de segurança
+  [Criação de Applications](argocd-create-application.md): implante sua primeira aplicação
+  [Uso de ApplicationSets](argocd-applicationsets.md): realize implantações em vários clusters com ApplicationSets
+  [Considerações sobre o Argo CD](argocd-considerations.md): acesse padrões com vários clusters e a configuração entre contas
+  [Declarative Cluster Setup](https://argo-cd.readthedocs.io/en/stable/operator-manual/declarative-setup/#clusters): acesse a referência de configuração da versão original do cluster

# Trabalho com o Argo CD Projects
<a name="argocd-projects"></a>

O Argo CD Projects (AppProject) oferece agrupamento lógico e controle de acesso para Applications. Os projetos definem quais repositórios do Git, clusters de destino e namespaces podem ser usados pelas Applications, viabilizando multilocação e limites de segurança em instâncias compartilhadas do Argo CD.

## Situações para o uso do Argo CD Projects
<a name="_when_to_use_projects"></a>

Use o Projects para:
+ Separar aplicações por equipe, ambiente ou unidade de negócio
+ Restringir de quais repositórios as equipes podem realizar a implantação
+ Limitar para quais clusters e namespaces as equipes podem realizar a implantação
+ Aplicar cotas de recursos e tipos de recursos permitidos
+ Fornecer implantação de aplicações de autoatendimento com barreiras de proteção

## Projeto padrão
<a name="_default_project"></a>

Cada funcionalidade do Argo CD inclui um projeto `default` que permite acesso a todos os repositórios, clusters e namespaces. Apesar de ser útil para testes iniciais, crie Argo CD Projects dedicados com restrições específicas para o uso em produção.

Para obter detalhes sobre a configuração do projeto padrão e como restringi-lo, consulte [The Default Project](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#the-default-project) na documentação do Argo CD.

## Criar um projeto
<a name="_create_a_project"></a>

Crie um Argo CD Project por meio da aplicação de um recurso `AppProject` em seu cluster.

 **Exemplo: projeto específico por equipe** 

```
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 o Project:

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

## Configuração de projetos
<a name="_project_configuration"></a>

### Repositórios de origem
<a name="_source_repositories"></a>

Controle quais repositórios do Git podem ser usados por Applications neste projeto:

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

É possível empregar caracteres curinga e padrões de negação (prefixo `!`) para permitir ou bloquear repositórios específicos. Para obter detalhes, consulte [Managing Projects](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#managing-projects) na documentação do Argo CD.

### Restrições de destinos
<a name="_destination_restrictions"></a>

Limite o local em que as Applications podem ser implantadas:

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

**Importante**  
Use nomes de clusters específicos e padrões de namespace em vez de caracteres curingas para Projects destinados a ambientes de produção. Isso impede a implantação acidental em clusters ou namespaces não autorizados.

É possível usar caracteres curinga e padrões de negação para controlar os destinos. Para obter detalhes, consulte [Managing Projects](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#managing-projects) na documentação do Argo CD.

### Restrições de recursos
<a name="_resource_restrictions"></a>

Controle quais tipos de recursos do Kubernetes podem ser implantados:

 **Recursos com escopo de cluster**:

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

 **Recursos com escopo de namespace**:

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

Use listas de restrições para negar recursos específicos:

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

## Atribuição de Applications a Projects
<a name="_assign_applications_to_projects"></a>

Ao criar uma Application, especifique o projeto no 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
```

As Applications sem um projeto especificado usam o projeto `default`.

## Perfis de projeto e RBAC
<a name="_project_roles_and_rbac"></a>

Os Projects podem definir perfis personalizados para um controle de acesso mais preciso. Mapeie os perfis do projeto para usuários e grupos do Centro de Identidade da AWS na configuração de funcionalidades para controlar as pessoas com permissões para sincronizar, atualizar ou excluir aplicações.

 **Exemplo: Project com perfis de desenvolvedor e de 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 obter detalhes sobre os perfis de projeto, tokens JWT para pipelines de CI/CD e configuração de RBAC, consulte [Project Roles](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#project-roles) na documentação do Argo CD.

## Padrões comuns
<a name="_common_patterns"></a>

### Projects com base no ambiente
<a name="_environment_based_projects"></a>

Crie projetos separados para cada ambiente:

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

### Projects com base em equipe
<a name="_team_based_projects"></a>

Isole as equipes com projetos dedicados:

```
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: '*'
```

### Projects com vários clusters
<a name="_multi_cluster_projects"></a>

Faça a implantação em vários clusters utilizando políticas consistentes:

```
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áticas recomendadas
<a name="_best_practices"></a>

 **Comece com Projects restritivos**: comece com permissões limitadas e expanda conforme necessário, em vez de começar com acesso amplo.

 **Use padrões de namespace**: use curingas nas restrições de namespace (como `team-a-*`) para permitir flexibilidade e, ao mesmo tempo, manter os limites.

 **Projetos separados para ambientes de produção**: use projetos dedicados para produção com controles mais rigorosos e políticas de sincronização manual.

 **Documente os objetivos do Project**: use o campo `description` para explicar a finalidade de cada projeto e quem deve usá-lo.

 **Analise as permissões do Project regularmente**: audite os Projects periodicamente para garantir que as restrições ainda estejam alinhadas com as necessidades da equipe e os requisitos de segurança.

## Recursos adicionais
<a name="_additional_resources"></a>
+  [Configuração das permissões do Argo CD](argocd-permissions.md): configure o RBAC e a integração com o Centro de Identidade
+  [Criação de Applications](argocd-create-application.md): crie Applications em Projects
+  [Uso de ApplicationSets](argocd-applicationsets.md): use ApplicationSets com os Projects para realizar implantações em vários clusters
+  [Documentação do Argo CD Projects](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/): acesse a referência oficial completa

# Criação de Applications
<a name="argocd-create-application"></a>

As Applications correspondem a implantações nos clusters de destino. Cada Application define uma origem (repositório do Git) e um destino (cluster e namespace). Quando aplicado, o Argo CD criará os recursos especificados pelos manifestos no repositório do Git para o namespace no cluster. As Applications frequentemente especificam implantações de workloads, mas podem gerenciar quaisquer recursos do Kubernetes disponíveis no cluster de destino.

## Pré-requisitos
<a name="_prerequisites"></a>
+ Um cluster de EKS com a funcionalidade para o Argo CD criada
+ Acesso ao repositório configurado (consulte [Configuração do acesso ao repositório](argocd-configure-repositories.md))
+ Cluster de destino registrado (consulte [Registro de clusters de destino](argocd-register-clusters.md))
+  `kubectl` configurado para o estabelecimento de comunicação com o cluster

## Criação de uma Application básica
<a name="_create_a_basic_application"></a>

Defina uma Application que realize implantações usando um repositório do 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**  
Use `destination.name` com o nome do cluster utilizado ao registrar o cluster (como `in-cluster` para o cluster local). O campo `destination.server` também funciona com ARNs de cluster de EKS, mas o uso de nomes de cluster é recomendado para melhor legibilidade.

Aplique a Application:

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

Visualize o status da Application:

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

## Configuração da origem
<a name="_source_configuration"></a>

 **Repositório do Git**:

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

 **Etiqueta ou confirmação específica do Git**:

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

 **Chart do 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
```

 **Chart do Helm com valores do repositório Git externo** (padrão de várias fontes):

```
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 obter mais informações, consulte [Arquivos de valor do Helm do repositório Git externo](https://argo-cd.readthedocs.io/en/stable/user-guide/multiple_sources/#helm-value-files-from-external-git-repository) na documentação do Argo CD.

 **Chart do Helm do ECR**:

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

Se o perfil da funcionalidade tiver as permissões necessárias do ECR, o repositório será usado diretamente, sem necessidade da configuração de Repository adicional. Para mais detalhes, consulte [Configuração do acesso ao repositório](argocd-configure-repositories.md).

 **Repositório do Git do CodeCommit**:

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

Se o perfil da funcionalidade tiver as permissões necessárias do CodeCommit, o repositório será usado diretamente, sem necessidade da configuração de Repository adicional. Para mais detalhes, consulte [Configuração do acesso ao repositório](argocd-configure-repositories.md).

 **Repositório do Git do CodeConnections**:

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

O formato do URL do repositório é derivado do ARN da conexão do CodeConnections. Se o perfil da funcionalidade tiver as permissões necessárias do CodeConnections e uma conexão estiver configurada, o repositório será usado diretamente, sem necessidade da configuração de Repository adicional. Para mais detalhes, consulte [Configuração do acesso ao repositório](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 sincronização
<a name="_sync_policies"></a>

Defina como o Argo CD deve sincronizar as aplicações.

 **Sincronização manual (padrão)**:

As aplicações exigem aprovação manual para sincronizar alterações:

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

Acionamento manual da sincronização:

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

 **Sincronização automática**:

As aplicações são sincronizadas automaticamente quando alterações no Git são detectadas:

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

 **Autorreparação**:

Reverte automaticamente alterações manuais no cluster:

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

Quando esta opção está habilitada, o Argo CD reverte quaisquer alterações realizadas diretamente no cluster, garantindo que o Git permaneça como fonte da verdade.

 **Supressão**:

Exclui automaticamente recursos removidos do Git:

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

**Atenção**  
A supressão excluirá recursos do seu cluster. Use com cautela em ambientes de produção.

 **Sincronização automática combinada**:

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

 **Configuração de novas tentativas**

Configure o comportamento de novas tentativas para sincronizações com falha:

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

Isso é particularmente útil para recursos que dependam da criação de CRDs primeiro ou quando se trabalha com instâncias kro em que o CRD pode não estar imediatamente disponível.

## Opções de sincronização
<a name="_sync_options"></a>

Configuração de sincronização adicional:

 **Crie um namespace, se ele não existir**:

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

 **Ignore a simulação em caso de falta de recursos**:

Útil ao aplicar recursos que dependam de CRDs que ainda não existam (como instâncias kro):

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

Isso também pode ser aplicado a recursos específicos usando um rótulo no próprio recurso.

 **Valide os recursos antes de realizar a aplicação**:

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

 **Realize a aplicação somente quando não estiver em sincronização**:

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

## Recursos avançados de sincronização
<a name="_advanced_sync_features"></a>

O Argo CD oferece recursos avançados de sincronização para implantações complexas:
+  **Ciclos de sincronização**: controlam a ordem de criação de recursos usando anotações `argocd.argoproj.io/sync-wave`
+  **Hooks de sincronização**: executam trabalhos antes ou depois da sincronização usando as anotações `argocd.argoproj.io/hook` (nomeadamente, PreSync, PostSync e SyncFail)
+  **Avaliação da integridade dos recursos**: verificações de integridade personalizadas são realizadas para recursos específicos da aplicação

Para obter detalhes, consulte [Sync Waves](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-waves/) e [Resource Hooks](https://argo-cd.readthedocs.io/en/stable/user-guide/resource_hooks/) na documentação do CD Argo.

## Desconsideração de diferenças
<a name="_ignore_differences"></a>

Evite que o Argo CD sincronize campos específicos gerenciados por outros controladores (como a HPA gerenciando réplicas):

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

Para obter detalhes sobre como desconsiderar padrões e realizar exclusões de campos, consulte [Diffing Customization](https://argo-cd.readthedocs.io/en/stable/user-guide/diffing/) na documentação do Argo CD.

## Implantação em vários ambientes
<a name="_multi_environment_deployment"></a>

Implante a mesma aplicação em vários ambientes:

 **Desenvolvimento do**:

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

 **Produção**:

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

## Monitoramento e gerenciamento de Applications
<a name="_monitor_and_manage_applications"></a>

 **Visualize o status da Application**:

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

 **Acesse a interface do usuário do Argo CD**:

Abra a interface do usuário do Argo CD pelo console do EKS para visualizar a topologia da aplicação, o status de sincronização, a integridade dos recursos e o histórico de implantações. Consulte [Como trabalhar com o Argo CD](working-with-argocd.md) para obter instruções de acesso à interface do usuário.

 **Reversão de Applications**:

Reverta para uma revisão anterior por meio da interface do usuário do Argo CD, da CLI do Argo CD ou atualizando o `targetRevision` na especificação da aplicação para uma confirmação ou etiqueta anterior no Git.

Com a CLI do Argo CD:

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

**nota**  
Ao usar a CLI do Argo CD com o recurso gerenciado, especifique as aplicações com o prefixo do namespace: `namespace/appname`.

Para obter mais informações, consulte [reversão de aplicações do argocd](https://argo-cd.readthedocs.io/en/stable/user-guide/commands/argocd_app_rollback/) na documentação do Argo CD.

## Recursos adicionais
<a name="_additional_resources"></a>
+  [Trabalho com o Argo CD Projects](argocd-projects.md): organize aplicações com Projects para ambientes multilocatários
+  [Uso de ApplicationSets](argocd-applicationsets.md): realize implantações em vários clusters com modelos
+  [Application Specification](https://argo-cd.readthedocs.io/en/stable/user-guide/application-specification/): acesse a referência de API completa para a Application
+  [Sync Options](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-options/): acesse a configuração de sincronização avançada

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

Os ApplicationSets geram diversas Applications a partir de modelos, possibilitando a implantação da mesma aplicação em diversos clusters, ambientes ou namespaces com uma única definição de recurso.

## Pré-requisitos
<a name="_prerequisites"></a>
+ Um cluster de EKS com a funcionalidade para o Argo CD criada
+ Acesso ao repositório configurado (consulte [Configuração do acesso ao repositório](argocd-configure-repositories.md))
+  `kubectl` configurado para o estabelecimento de comunicação com o cluster

**nota**  
Não são necessários vários clusters de destino para ApplicationSets. É possível usar geradores diferentes do gerador de cluster (como geradores de lista, git ou matriz) para implantar aplicações sem clusters remotos.

## Funcionamento dos ApplicationSets
<a name="_how_applicationsets_work"></a>

Os ApplicationSets usam geradores para criar parâmetros e, em seguida, aplicá-los a um modelo de Application. Cada conjunto de parâmetros gerados cria uma Application.

Geradores mais usados em implantações do EKS:
+  **Gerador de listas**: define explicitamente clusters e parâmetros para cada ambiente
+  **Gerador de cluster**: realiza a implantação automática em todos os clusters registrados
+  **Gerador do Git**: gera Applications com base na estrutura do repositório
+  **Gerador de matriz**: combina geradores para implantações multidimensionais
+  **Mesclar gerador**: mescla parâmetros de vários geradores

Para obter uma referência completa dos geradores, consulte a [Documentação do ApplicationSet](https://argo-cd.readthedocs.io/en/stable/user-guide/application-set/).

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

Realize uma implantação em vários clusters usando configuração 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**  
Use `destination.name` com nomes de cluster para melhor legibilidade. O campo `destination.server` também funciona com ARNs de cluster de EKS, se necessário.

Essa ação realiza a criação de três Applications: `guestbook-dev`, `guestbook-staging` e `guestbook-prod`.

## Gerador de cluster
<a name="_cluster_generator"></a>

Realize a implantação automática de todos os clusters 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
```

Essa ação cria automaticamente uma Application para cada cluster registrado.

 **Clusters de filtros**:

Use `matchLabels` para incluir clusters específicos ou `matchExpressions` para excluir clusters:

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

## Geradores do Git
<a name="_git_generators"></a>

Os geradores do Git criam Applications com base na estrutura do repositório:
+  **Gerador de diretório**: implanta cada diretório como uma Application separada (útil para microsserviços)
+  **Gerador de arquivo** gera Applications com base em arquivos de parâmetros (útil para implantações multilocatárias)

 **Exemplo: implantação de microsserviços** 

```
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 obter mais detalhes sobre os geradores do Git e a configuração baseada em arquivos, consulte [Git Generator](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators-Git/) na documentação do Argo CD.

## Gerador de matriz
<a name="_matrix_generator"></a>

Use a combinação de vários geradores para realizar implantações em diversas dimensões (ambientes × clusters):

```
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 obter mais detalhes sobre como combinar geradores, consulte [Matrix Generator](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators-Matrix/) na documentação do Argo CD.

## Implantação multirregião
<a name="_multi_region_deployment"></a>

Realize a implantação em clusters distribuídos por várias regiões:

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

## Gerenciamento de ApplicationSets
<a name="_manage_applicationsets"></a>

 **Visualize os ApplicationSets e as Applications geradas**:

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

 **Atualize um ApplicationSet**:

Modifique a especificação do ApplicationSet e a aplique novamente. O Argo CD atualiza automaticamente todas as Applications geradas:

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

 **Exclua um ApplicationSet**:

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

**Atenção**  
Ao excluir um ApplicationSet, todas as Applications geradas são apagadas. Se essas Applications tiverem `prune: true`, os recursos correspondentes também serão removidos dos clusters de destino.  
Para preservar os recursos implantados ao excluir um ApplicationSet, defina `.syncPolicy.preserveResourcesOnDeletion` como `true` na especificação do ApplicationSet. Para obter mais informações, consulte [Corte de aplicações e exclusão de recursos](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Application-Deletion/) na documentação do Argo CD.

**Importante**  
O recurso ApplicationSets do Argo CD tem considerações de segurança que devem ser conhecidas antes de usar o ApplicationSets. Para obter mais informações, consulte [Segurança do ApplicationSet](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Security/) na documentação do Argo CD.

## Recursos adicionais
<a name="_additional_resources"></a>
+  [Trabalho com o Argo CD Projects](argocd-projects.md): organize os ApplicationSets com Projects
+  [Criação de Applications](argocd-create-application.md): compreenda a configuração das Applications
+  [Documentação do ApplicationSet](https://argo-cd.readthedocs.io/en/stable/user-guide/application-set/): referência completa de geradores e seus padrões
+  [Referência de geradores](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators/): especificações detalhadas dos geradores

# Considerações sobre o Argo CD
<a name="argocd-considerations"></a>

Neste tópico, são apresentadas as principais considerações para usar a funcionalidade do EKS para o Argo CD, incluindo planejamento, permissões, autenticação e padrões de implantação em vários clusters.

## Planejamento
<a name="_planning"></a>

Antes de implantar o Argo CD, considere o seguinte:

 **Estratégia de repositório**: determine o local em que os manifestos das suas aplicações serão armazenados (por exemplo, CodeCommit, GitHub, GitLab ou Bitbucket). Planeje a estrutura do repositório e a estratégia de ramificação para diferentes ambientes.

 **Estratégia de RBAC**: defina quais equipes ou usuários terão acesso como administrador, editor ou visualizador. Relacione essas permissões aos grupos do Centro de Identidade da AWS ou aos perfis do Argo CD.

 **Arquitetura de vários clusters**: determine se você gerenciará vários clusters usando uma única instância do Argo CD. Avalie a possibilidade de empregar um cluster de gerenciamento dedicado para o Argo CD.

 **Organização das aplicações**: planeje como você estruturará Applications e ApplicationSets. Avalie a utilização de projetos para estruturar as aplicações de acordo com a equipe ou o ambiente.

 **Políticas de sincronização**: defina se as aplicações serão sincronizadas automaticamente ou se precisarão de aprovação manual. A sincronização automática é comum em ambientes de desenvolvimento, e a manual em ambientes de produção.

## Permissões
<a name="_permissions"></a>

Para obter informações detalhadas sobre os perfis de funcionalidades do IAM, as políticas de confiança e as práticas recomendadas de segurança, consulte [Perfil do IAM para a funcionalidade do Amazon EKS](capability-role.md) e [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md).

### Visão geral do perfil da funcionalidade do IAM
<a name="_iam_capability_role_overview"></a>

Ao criar um recurso de funcionalidade do Argo CD, você fornece um perfil da funcionalidade do IAM. Diferentemente do ACK, o Argo CD gerencia principalmente recursos do Kubernetes e não recursos da AWS diretamente. No entanto, o perfil de funcionalidade do IAM é necessário para:
+ Acessar repositórios do Git privados no CodeCommit
+ Integrar-se ao Centro de Identidade da AWS para autenticação
+ Acessar segredos no AWS Secrets Manager (se configurado)
+ Realizar implantações entre clusters para outros clusters de EKS

### Integração com o CodeCommit
<a name="_codecommit_integration"></a>

Se você estiver usando repositórios do CodeCommit, anexe uma política com permissões de leitura:

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

**Importante**  
Para uso em ambientes de produção, restrinja o campo `Resource` a ARNs específicos de repositórios, em vez de usar `"*"`.  
Exemplo:  

```
"Resource": "arn:aws:codecommit:us-west-2:111122223333:my-app-repo"
```
Isso limita o acesso à funcionalidade do Argo CD somente aos repositórios necessários para gerenciamento.

### Integração do Secrets Manager
<a name="_secrets_manager_integration"></a>

Se você estiver armazenando credenciais de repositório no Secrets Manager, anexe a política gerenciada para acesso de leitura:

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

Essa política inclui as permissões necessárias: `secretsmanager:GetSecretValue`, `secretsmanager:DescribeSecret` e perissões de descriptografia do KMS.

### Configuração básica
<a name="_basic_setup"></a>

Para a funcionalidade básica do CD Argo com repositórios do Git públicos, nenhuma política do IAM adicional é necessária além da política de confiança.

## Autenticação
<a name="_authentication"></a>

### Integração com o Centro de Identidade da AWS
<a name="shared_aws_identity_center_integration"></a>

A funcionalidade gerenciada do Argo CD integra-se diretamente ao Centro de Identidade da AWS (anteriormente AWS SSO), possibilitando o uso do provedor de identidade atual para autenticação.

Ao configurar a integração com o Centro de Identidade da AWS:

1. Os usuários acessam a interface do usuário do Argo CD por meio do console do EKS

1. A autenticação é realizada por meio do Centro de Identidade da AWS (que pode ser federado ao seu provedor de identidades corporativo)

1.  O Centro de Identidade da AWS fornece informações de usuários e grupos ao Argo CD

1. O Argo CD mapeia usuários e grupos para perfis de RBAC com base na sua configuração

1. Os usuários visualizam somente as aplicações e os recursos aos quais têm permissão de acessar

### Simplificação do acesso com conjuntos de permissões do Centro de Identidade
<a name="_simplifying_access_with_identity_center_permission_sets"></a>

 O Centro de Identidade da AWS fornece dois caminhos distintos de autenticação ao trabalhar com o Argo CD:

 **Autenticação da API do Argo CD**: o Centro de Identidade fornece autenticação de SSO para a interface do usuário do Argo CD e para a API. Essa configuração é realizada por meio dos mapeamentos de perfis de RBAC da funcionalidade do Argo CD.

 **Acesso ao cluster de EKS**: a funcionalidade do Argo CD usa o perfil do IAM fornecido pelo cliente para se autenticar com clusters de EKS por meio de entradas de acesso. Essas entradas de acesso podem ser configuradas manualmente para conceder ou revogar permissões.

É possível usar [conjuntos de permissões do Centro de Identidade](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtocreatepermissionset.html) para simplificar o gerenciamento de identidades, ao permitir que uma única identidade tenha acesso ao Argo CD e aos clusters de EKS. Isso reduz o esforço operacional, pois você precisa gerenciar apenas uma identidade nos dois sistemas, em vez de manter credenciais distintas para o acesso ao Argo CD e ao cluster.

### Mapeamentos de perfis de RBAC
<a name="_rbac_role_mappings"></a>

O Argo CD tem perfis integrados que você pode mapear para usuários e grupos do Centro de Identidade da AWS:

 **ADMIN**: acesso total a todas as aplicações e configurações. Pode criar, atualizar e excluir aplicações. Pode gerenciar a configuração do Argo CD.

 **EDITOR**: pode criar e modificar aplicações. Não pode alterar as configurações do Argo CD nem excluir aplicações.

 **VIEWER**: acesso somente leitura às aplicações. Pode visualizar o status e o histórico das aplicações. Não pode fazer alterações.

**nota**  
Os nomes dos perfis diferenciam maiúsculas de minúsculas e devem estar em letras maiúsculas (ADMIN, EDITOR e VIEWER).

**Importante**  
A integração das funcionalidades do EKS com o Centro de Identidade da AWS fornece suporte para até mil identidades por funcionalidade do Argo CD. Uma identidade pode ser um usuário ou um grupo.

## Implantações em vários clusters
<a name="_multi_cluster_deployments"></a>

A funcionalidade gerenciada do Argo CD fornece suporte a implantações em vários clusters, possibilitando o gerenciamento de aplicações em clusters de desenvolvimento, preparação e produção usando uma única instância do Argo CD.

### Funcionamento da estratégia de vários clusters
<a name="_how_multi_cluster_works"></a>

Ao registrar clusters adicionais com o Argo CD:

1. Você cria segredos de cluster que fazem referência aos clusters de destino do EKS pelo ARN

1. Você cria Applications ou ApplicationSets direcionados a diferentes clusters

1. O Argo CD estabelece conexão com cada cluster para implantar e monitorar os recursos

1. Você visualiza e gerencia todos os clusters usando uma única interface do usuário do Argo CD

### Pré-requisitos para a estratégia de vários clusters
<a name="_prerequisites_for_multi_cluster"></a>

Antes de registrar clusters adicionais:
+ Crie uma entrada de acesso no cluster de destino para o perfil da funcionalidade para o Argo CD
+ Garanta a conectividade de rede entre a funcionalidade do Argo CD e os clusters de destino
+ Verifique as permissões do IAM para acessar os clusters de destino

### Registro de um cluster
<a name="_register_a_cluster"></a>

Registre clusters usando o Kubernetes Secrets no namespace `argocd`.

Obtenha o ARN do cluster de destino. Substitua *region-code* pela região da AWS em que seu cluster de destino está e substitua *target-cluster* pelo nome do cluster de destino.

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

Crie um segredo de cluster usando o ARN do cluster:

```
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 o ARN do cluster de EKS no campo `server`, e não o URL do servidor da API do Kubernetes. A funcionalidade gerenciada requer ARNs para identificar os clusters de destino.

Execute a aplicação do segredo:

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

### Configuração de uma entrada de acesso no cluster de destino
<a name="_configure_access_entry_on_target_cluster"></a>

O cluster de destino deve ter uma entrada de acesso que conceda ao perfil da funcionalidade para o Argo CD permissão para implantar aplicações. Substitua *region-code* pela região da AWS em que seu cluster de destino está, substitua *target-cluster* pelo nome do cluster de destino e substitua o ARN pelo ARN do perfil da funcionalidade para o 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 uso em ambientes de produção, considere usar grupos do Kubernetes mais restritivos em vez de `system:masters`.

### Acesso a clusters privados
<a name="_private_cluster_access"></a>

A funcionalidade gerenciada do Argo CD pode ser implantada em clusters de EKS totalmente privados, sem exigir emparelhamento da VPC ou configurações de rede especializadas. A AWS gerencia automaticamente a conectividade entre a funcionalidade do Argo CD e os clusters remotos privados. Certifique-se de que seus controles de acesso ao repositório e as políticas RBAC do Argo CD estejam configurados corretamente.

### Implantação entre contas
<a name="_cross_account_deployments"></a>

Para implantações entre contas, adicione o perfil da funcionalidade do IAM para o Argo CD proveniente da conta de origem à entrada de acesso do cluster de EKS da conta de destino:

1. Na conta de destino, crie uma entrada de acesso no cluster de destino do EKS

1. Use o ARN do perfil da funcionalidade do IAM para o Argo CD da conta de origem como a entidade principal

1. Configure as permissões apropriadas de RBAC do Kubernetes para a entrada de acesso

1. Registre o cluster de destino no Argo CD usando o ARN do cluster de EKS

Não é necessária a criação de perfis do IAM adicionais nem a configuração de política de confiança. As entradas de acesso do EKS gerenciam o acesso entre contas.

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

 **Use fontes declarativas como a fonte da verdade**: armazene todos os manifestos das suas aplicações em fontes declarativas (repositórios do Git, registros do Helm ou imagens OCI), permitindo controle de versão, trilhas de auditoria e colaboração.

 **Implemente o RBAC adequado**: use a integração com o Centro de Identidade da AWS para definir quem tem permissão para acessar e gerenciar aplicações no Argo CD. O Argo CD oferece controle de acesso detalhado para recursos dentro das Applications (Deployments, Pods, ConfigMaps e Secrets).

 **Use ApplicationSets para realizar implantações em diversos ambientes**: use ApplicationSets para implantar aplicações em vários clusters ou namespaces com configurações diferentes.

## Gerenciamento de ciclo de vida
<a name="_lifecycle_management"></a>

### Políticas de sincronização de aplicações
<a name="_application_sync_policies"></a>

Defina como o Argo CD deve sincronizar as aplicações:

 **Sincronização manual**: as aplicações exigem aprovação manual para sincronizar alterações. Recomendado para ambientes de **produção**.

 **Sincronização automática**: as aplicações são sincronizadas automaticamente quando alterações no Git são detectadas. Comum em ambientes de desenvolvimento e de preparação.

 **Autorreparação**: reverte automaticamente alterações manuais feitas no cluster. Garante que o estado do cluster corresponda ao do Git.

 **Supressão**: exclui automaticamente recursos removidos do Git. Use com cautela, pois isso pode excluir recursos.

### Integridade da aplicação
<a name="_application_health"></a>

O Argo CD monitora continuamente a integridade das aplicações:
+  **Íntegro**: todos os recursos estão funcionando conforme esperado
+  **Em progresso**: os recursos estão sendo criados ou atualizados
+  **Degradado**: alguns recursos não são íntegros
+  **Suspenso**: a aplicação está pausada
+  **Ausente**: os recursos estão ausentes no cluster

### Janelas de sincronização
<a name="_sync_windows"></a>

Configure as janelas de sincronização para gerenciar os períodos em que as aplicações podem ser sincronizadas:
+ Permitir sincronizações apenas durante janelas de manutenção
+ Bloquear sincronizações durante o horário comercial
+ Agendar sincronizações automáticas para horários específicos
+ Use janelas de sincronização em situações em que você precise fazer alterações e interromper qualquer sincronização (cenários de quebra de vidro)

## Configuração de webhooks para sincronizações mais ágeis
<a name="_webhook_configuration_for_faster_sync"></a>

Por padrão, o Argo CD consulta os repositórios do Git a cada seis minutos para detectar alterações. Para tornar as implantações mais responsivas, configure webhooks do Git que acionam sincronizações imediatamente quando houver alterações.

Os webhooks oferecem vários benefícios, como:
+ Resposta imediata de sincronização quando o código é enviado (segundos em vez de minutos)
+ Redução da sobrecarga da sondagem e melhor performance do sistema
+ Uso mais eficiente dos limites de taxa da API
+ Melhoria na experiência do usuário com feedback mais rápido

### Endpoint do webhook
<a name="_webhook_endpoint"></a>

O URL do webhook segue o padrão `${serverUrl}/api/webhook`, onde `serverUrl` é o URL do seu servidor de Argo CD.

Por exemplo, se o URL do seu servidor de Argo CD é `https://abc123.eks-capabilities.us-west-2.amazonaws.com`, o URL de webhook será:

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

### Configuração de webhooks por provedor do Git
<a name="_configure_webhooks_by_git_provider"></a>

 **GitHub**: nas configurações do repositório, adicione um webhook com o URL do webhook do Argo CD. Defina o tipo de conteúdo como `application/json` e selecione “Just the push event”.

 **GitLab**: nas configurações do projeto, adicione um webhook com o URL do webhook do Argo CD. Ative “Push events” e, opcionalmente, “Tag push events”.

 **Bitbucket**: nas configurações do repositório, adicione um webhook com o URL do webhook do Argo CD. Selecione “Repository push” como o acionador.

 **CodeCommit**: crie uma regra do Amazon EventBridge que seja acionada por alterações no estado do repositório do CodeCommit e envie notificações para o endpoint do webhook do Argo CD.

Para obter instruções detalhadas de configuração do webhook, consulte [Argo CD Webhook Configuration](https://argo-cd.readthedocs.io/en/stable/operator-manual/webhook/).

**nota**  
Webhooks funcionam como complemento para a sondagem, mas não a substituem. O Argo CD continua a consultar os repositórios como mecanismo de fallback, caso as notificações do webhook não sejam recebidas.

## Próximas etapas
<a name="_next_steps"></a>
+  [Como trabalhar com o Argo CD](working-with-argocd.md): aprenda a criar e gerenciar Applications do Argo CD
+  [Solução de problemas em funcionalidades do Argo CD](argocd-troubleshooting.md): realize a solução de problemas relacionados ao Argo CD
+  [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md): gerencie os recursos da funcionalidade do Argo CD

# Solução de problemas em funcionalidades do Argo CD
<a name="argocd-troubleshooting"></a>

Este tópico fornece orientações de solução de problemas para a funcionalidade do EKS destinada ao Argo CD, incluindo verificações de integridade da funcionalidade, problemas de sincronização de aplicações, autenticação de repositórios e implantações em vários clusters.

**nota**  
As funcionalidades do EKS são totalmente gerenciadas e executadas de forma externa ao cluster. Você não tem acesso aos logs do servidor do Argo CD nem ao namespace `argocd`. A solução de problemas se concentra na integridade da funcionalidade, no status das aplicações e na configuração.

## Funcionalidade está com o status ACTIVE, mas as aplicações não estão sincronizando
<a name="_capability_is_active_but_applications_arent_syncing"></a>

Se a funcionalidade do Argo CD apresentar o status `ACTIVE`, mas as aplicações não estiverem sincronizando, verifique a integridade da funcionalidade e o status das aplicações.

 **Verifique a integridade da funcionalidade**:

Você pode visualizar problemas de integridade e de status da funcionalidade no console do EKS ou usando a AWS CLI.

 **Console do**:

1. Abra o console do Amazon EKS em https://console.aws.amazon.com/eks/home\$1/clusters.

1. Selecione o nome do seu cluster.

1. Escolha a guia **Observabilidade**.

1. Escolha **Monitorar cluster**.

1. Escolha a guia **Funcionalidades** para visualizar a integridade e o status de todas as funcionalidades.

 ** 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 comuns**:
+  **Repositório não configurado**: o repositório do Git não foi adicionado ao Argo CD
+  **Falha na autenticação**: a chave SSH, o token ou as credenciais do CodeCommit estão inválidos
+  **Aplicação não criada**: não existem recursos de Application no cluster
+  **Política de sincronização**: a sincronização manual é necessária (sincronização automática não habilitada)
+  **Permissões do IAM**: as permissões estão ausentes para o CodeCommit ou o Secrets Manager

 **Verifique o status da aplicação**:

```
# 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}'
```

 **Verifique as condições da aplicação**:

```
# 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}'
```

## Aplicações travadas no estado “Progressing”
<a name="_applications_stuck_in_progressing_state"></a>

Se uma aplicação estiver em `Progressing` mas nunca atingir `Healthy`, verifique o status dos recursos da aplicação e os eventos.

 **Verifique a integridade do recurso**:

```
# 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 comuns**:
+  **Implantação não está pronta**: os pods não conseguem iniciar ou as sondagens de prontidão apresentam falhas
+  **Dependências entre recursos**: existem recursos esperando que outros recursos fiquem prontos
+  **Erros ao obter imagens**: as imagens de contêiner não estão acessíveis
+  **Recursos insuficientes**: o cluster não tem CPU ou memória suficiente para os pods

 **Verifique a configuração do cluster de destino** (para configurações com vários clusters):

```
# 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
```

## Falhas na autenticação do repositório
<a name="_repository_authentication_failures"></a>

Se o Argo CD não conseguir acessar seus repositórios do Git, verifique a configuração de autenticação.

 **Para repositórios do CodeCommit**:

Verifique se o perfil da funcionalidade do IAM tem as permissões necessárias para o 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
```

É necessário que o perfil conte com a permissão `codecommit:GitPull` para os repositórios.

 **Para repositórios do Git privados**:

Verifique se as credenciais do repositório estão configuradas corretamente:

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

Certifique-se de que o segredo contenha as credenciais de autenticação adequadas (por exemplo, chave SSH, token ou usuário/senha).

 **Para repositórios que usam o 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 relacionados à implantação em vários clusters
<a name="_multi_cluster_deployment_issues"></a>

Se as aplicações não estiverem sendo implantadas em clusters remotos, verifique o registro do cluster e a configuração de acesso.

 **Verifique o registro do cluster**:

```
# 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
```

Certifique-se de que o campo `server` contenha o ARN do cluster EKS, e não o URL da API do Kubernetes.

 **Verifique a entrada de acesso do cluster de destino**:

No cluster de destino, confirme que o perfil da funcionalidade do IAM destinado ao Argo CD conta com uma entrada de acesso:

```
# 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
```

 **Verifique as permissões do IAM para várias contas**:

Para implantações entre contas, confirme que o perfil da funcionalidade do IAM destinado ao Argo CD conta com uma entrada de acesso no cluster de destino. A funcionalidade gerenciada emprega entradas de acesso do EKS para o acesso entre contas, e não a suposição do perfil do IAM.

Para obter mais informações sobre configuração de vários clusters, consulte [Registro de clusters de destino](argocd-register-clusters.md).

## Próximas etapas
<a name="_next_steps"></a>
+  [Considerações sobre o Argo CD](argocd-considerations.md): acesse considerações e práticas recomendadas do Argo CD
+  [Como trabalhar com o Argo CD](working-with-argocd.md): crie e gerencie Applications do Argo CD
+  [Registro de clusters de destino](argocd-register-clusters.md): configure implantações em vários clusters
+  [Solução de problemas das funcionalidades do EKS](capabilities-troubleshooting.md): acesse orientações gerais para solução de problemas de funcionalidades

# Comparação da funcionalidade do EKS para o Argo CD em relação ao Argo CD autogerenciado
<a name="argocd-comparison"></a>

A funcionalidade do EKS para o Argo CD fornece uma experiência do Argo CD totalmente gerenciada e executada no EKS. Para obter uma comparação geral das funcionalidades do EKS em relação às soluções autogerenciadas, consulte [Considerações sobre as funcionalidades do EKS](capabilities-considerations.md). Este tópico aborda as diferenças específicas do Argo CD, incluindo autenticação, gerenciamento de diversos clusters e suporte aos recursos da versão original.

## Diferenças em relação à versão original do Argo CD
<a name="_differences_from_upstream_argo_cd"></a>

A funcionalidade do EKS para o Argo CD se baseia na versão original do Argo CD, porém apresenta diferenças na maneira de acesso, configuração e integração com os serviços da AWS.

 **RBAC e autenticação**: a funcionalidade inclui três funções de RBAC (administrador, editor e visualizador) e usa o Centro de Identidade da AWS para autenticação, em vez do sistema de autenticação interno do Argo CD. Configure os mapeamentos de perfis por meio do parâmetro `rbacRoleMapping` da funcionalidade a fim de mapear os grupos do Centro de Identidade para os perfis do Argo CD, e não por meio do ConfigMap `argocd-rbac-cm` do Argo CD. A interface do usuário do Argo CD é hospedada usando um URL direto próprio (que pode ser localizado no console do EKS, na guia Funcionalidades do seu cluster), e o acesso à API usa autenticação e autorização da AWS por meio do IAM.

 **Configuração do cluster**: a funcionalidade não configura automaticamente clusters locais nem topologias do tipo “hub-and-spoke”. É necessário configurar os clusters de destino da sua implantação e as entradas de acesso ao EKS. A funcionalidade é compatível somente com clusters do Amazon EKS como destinos de implantação, usando ARNs de cluster de EKS (não URLs do servidor da API do Kubernetes). A funcionalidade não adiciona automaticamente o cluster local (`kubernetes.default.svc`) como destino de implantação. Para realizar a implantação no mesmo cluster em que a funcionalidade foi criada, registre explicitamente esse cluster usando seu ARN.

 **Acesso simplificado a clusters remotos:**: a funcionalidade simplifica implantações em vários clusters ao usar entradas de acesso do EKS para conceder ao Argo CD o acesso a clusters remotos, eliminando a necessidade de configurar perfis do IAM para contas de serviço (IRSA, na sigla em inglês) ou estabelecer suposições de perfis do IAM entre contas. A funcionalidade também fornece acesso transparente a clusters de EKS totalmente privados, sem exigir emparelhamento da VPC ou configurações de rede especializadas. A AWS gerencia automaticamente a conectividade entre a funcionalidade do Argo CD e os clusters remotos privados.

 **Integração direta com serviços da AWS**: a funcionalidade oferece integração direta com serviços da AWS por meio das permissões do IAM do perfil da funcionalidade. É possível referenciar repositórios do CodeCommit, charts do Helm do ECR e CodeConnections diretamente nos recursos da Application, sem a necessidade de criar configurações de Repository. Isso simplifica a autenticação e elimina a necessidade de gerenciar credenciais separadas para os serviços da AWS. Para mais detalhes, consulte [Configuração do acesso ao repositório](argocd-configure-repositories.md).

 **Suporte para namespace**: o recurso exige que você especifique um único namespace no qual os recursos personalizados do Argo CD Application, ApplicationSet e AppProject devem ser criados.

**nota**  
Essa restrição de namespace só se aplica aos recursos personalizados do Argo CD (Application, ApplicationSet, AppProject). As workloads da sua aplicação podem ser implantadas em qualquer namespace em qualquer cluster de destino. Por exemplo, se você criar a funcionalidade com o namespace `argocd`, todos os CRs da Application deverão ser criados no namespace `argocd`, mas essas Applications podem implantar workloads em `default`, `production`, `staging` ou em qualquer outro namespace.

**nota**  
O recurso gerenciado tem requisitos específicos para o uso da CLI e configuração do AppProject:  
Ao usar a CLI do Argo CD, especifique as aplicações com o prefixo do namespace: `argocd app sync namespace/appname` 
Os recursos do AppProject devem especificar `.spec.sourceNamespaces` para definir quais namespaces o projeto pode observar para Applications (normalmente definidos como o namespace que você especificou ao criar o recurso)
As anotações de rastreamento de recursos usam o formato: `namespace_appname:group/kind:namespace/name` 

 **Recursos não suportados**: os seguintes recursos não estão disponíveis na funcionalidade gerenciada:
+ Plug-ins de gerenciamento de configuração (CMPs, na sigla em inglês) para geração de manifestos personalizados
+ Scripts Lua personalizados para avaliação da integridade de recursos (as verificações de integridade nativas para recursos padrão são suportadas)
+ O controlador de notificações
+ Provedores de SSO personalizados (somente o Centro de Identidade da AWS é compatível, abrangendo também identidades federadas de terceiros por meio do Centro de Identidade da AWS)
+ Extensões da interface do usuário e banners personalizados
+ Acesso direto aos ConfigMaps de configuração `argocd-cm`, `argocd-params` e outros
+ Modificação do tempo limite de sincronização (fixado em 120 segundos)

 **Compatibilidade**: as Applications e os ApplicationSets funcionam de forma idêntica à versão original do Argo CD, sem alterações nos seus manifestos. A funcionalidade usa as mesmas APIs do Kubernetes e CRDs, portanto, ferramentas como o `kubectl` funcionam de maneira semelhante. A funcionalidade oferece suporte completo às Applications e aos ApplicationSets, bem como a fluxos de trabalho de GitOps com sincronização automática, implantações em vários clusters, políticas de sincronização (automatizada, de supressão e de autorreparação), ciclos de sincronização e hooks, avaliação da integridade de recursos padrão do Kubernetes, funcionalidades de reversão, fontes de repositórios do Git (HTTPS e SSH), Helm, Kustomize e manifestos em YAML sem formatação, credenciais de aplicativo do GitHub, projetos para multilocação, além de exclusões e inclusões de recursos.

## Uso da CLI do Argo CD com a funcionalidade gerenciada
<a name="argocd-cli-configuration"></a>

Para a maioria das operações, a CLI do Argo CD se comporta de maneira idêntica à versão original do Argo CD, mas há diferenças na autenticação e no registro de clusters.

### Pré-requisitos
<a name="_prerequisites"></a>

Instale a CLI do Argo CD conforme as [instruções de instalação da versão original](https://argo-cd.readthedocs.io/en/stable/cli_installation/).

### Configuração
<a name="_configuration"></a>

Configure a CLI usando variáveis de ambiente:

1. Obtenha o URL do servidor do Argo CD no console do EKS (na guia **Funcionalidades** do seu cluster) ou por meio da AWS CLI. O prefixo `https://` deve ser removido:

   ```
   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. Gere um token de conta na interface do usuário do Argo CD (**Settings** → **Accounts** → **admin** → **Generate New Token**) e, em seguida, defina-o como uma variável de ambiente:

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

**Importante**  
Essa configuração usa o token da conta de administrador para a configuração inicial e os fluxos de trabalho de desenvolvimento. Para casos de uso em ambientes de produção, empregue perfis e tokens com escopo de projeto, seguindo o princípio de privilégio mínimo. Para obter mais informações sobre a configuração de perfis de projeto e RBAC, consulte [Configuração das permissões do Argo CD](argocd-permissions.md).

1. Defina a opção gRPC obrigatória:

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

Com essas variáveis de ambiente configuradas, é possível utilizar a CLI do Argo CD sem a necessidade de executar o comando `argocd login`.

### Principais diferenças
<a name="_key_differences"></a>

A funcionalidade gerenciada apresenta as seguintes limitações da CLI:
+  Os comandos `argocd admin` não são suportados (pois exigem acesso direto ao pod)
+  O comando `argocd login` não é suportado (utilize tokens de conta ou de projeto)
+  O comando `argocd cluster add` requer o sinalizador `--aws-cluster-name` com o ARN do cluster de EKS

### Exemplo: registro de um cluster
<a name="_example_register_a_cluster"></a>

Registre um cluster de EKS para a implantação de aplicações:

```
# 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 obter a documentação completa da CLI do Argo CD, consulte a [referência da CLI do Argo CD](https://argo-cd.readthedocs.io/en/stable/user-guide/commands/argocd/).

## Caminho de migração
<a name="_migration_path"></a>

É possível migrar de um Argo CD autogerenciado para a funcionalidade gerenciada:

1. Analise a configuração atual do Argo CD quanto a recursos sem suporte (por exemplo, controle de notificações, CMPs, verificações de integridade personalizadas, extensões de IU)

1. Reduza a escala dos controladores do Argo CD autogerenciados para zero réplicas para evitar conflitos

1. Crie um recurso de funcionalidade do Argo CD no cluster

1. Exporte Applications, ApplicationSets e AppProjects existentes

1. Migre as credenciais de repositório, os segredos do cluster e os modelos de credenciais do repositório (repocreds)

1. Se estiver usando chaves GPG, certificados TLS ou hosts conhecidos de SSH, migre também essas configurações

1. Atualize os campos `destination.server` para usar nomes de cluster ou ARNs de clusters de EKS

1. Aplique essas configurações na instância gerenciada do Argo CD

1. Verifique se as aplicações estão sendo sincronizadas corretamente

1. Desative sua instalação autogerenciada do Argo CD

A funcionalidade gerenciada usa as mesmas APIs e definições de recursos do Argo CD, portanto, seus manifestos existentes funcionam com modificações mínimas.

## Próximas etapas
<a name="_next_steps"></a>
+  [Criar um recurso Argo CD](create-argocd-capability.md): crie um recurso de funcionalidade do Argo CD
+  [Como trabalhar com o Argo CD](working-with-argocd.md): implante sua primeira aplicação
+  [Considerações sobre o Argo CD](argocd-considerations.md): configure a integração com o Centro de Identidade da AWS