

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

# Configuração das permissões do ACK
<a name="ack-permissions"></a>

O ACK precisa de permissões do IAM para realizar a criação e o gerenciamento de recursos da AWS em seu nome. Este tópico explica como o IAM funciona com o ACK e fornece orientações sobre como configurar permissões para diferentes casos de uso.

## Funcionamento do IAM com o ACK
<a name="_how_iam_works_with_ack"></a>

O ACK usa perfis do IAM para se autenticar na AWS e executar ações em seus recursos. Existem duas maneiras de fornecer permissões ao ACK:

 **Perfil da funcionalidade**: consiste no perfil do IAM que você fornece ao criar a funcionalidade do ACK. Este perfil é usado por padrão para todas as operações do ACK.

 **Seletores de perfil do IAM**: consistem em perfis adicionais do IAM que podem ser mapeados para namespaces ou recursos específicos. Esses perfis substituem o perfil da funcionalidade para recursos dentro de seu escopo.

Quando o ACK precisa criar ou gerenciar um recurso, ele determina qual perfil do IAM deve usar:

1. Verifica se um “IAMRoleSelector” corresponde ao namespace do recurso

1. Se uma correspondência for encontrada, assume esse perfil do IAM

1. Caso contrário, usa o perfil da funcionalidade

Esta abordagem possibilita um gerenciamento de permissões flexível, desde configurações simples de perfil único até configurações complexas de diversas contas e várias equipes.

## Conceitos básicos: configuração simples de permissões
<a name="_getting_started_simple_permission_setup"></a>

Para ambientes de desenvolvimento, testes ou casos de uso simples, você pode adicionar todas as permissões de serviço necessárias diretamente ao perfil da funcionalidade.

Essa abordagem é ideal quando:
+ Você está começando a usar o ACK
+ Todos os recursos estão na mesma conta da AWS
+ Uma única equipe gerencia todos os recursos do ACK
+ Você confia que todos os usuários do ACK tenham as mesmas permissões

## Prática recomendada para ambientes de produção: seletores de perfil do IAM
<a name="_production_best_practice_iam_role_selectors"></a>

Para ambientes de produção, use os seletores de perfil do IAM para implementar o acesso de privilégio mínimo e o isolamento em nível de namespace.

Ao usar seletores de perfil do IAM, o perfil da funcionalidade precisa apenas das permissões `sts:AssumeRole` e `sts:TagSession` para assumir os perfis específicos de cada serviço. Não é necessário adicionar nenhuma permissão de serviço da AWS (como S3 ou RDS) ao perfil da funcionalidade em si, pois essas permissões são concedidas aos perfis individuais do IAM que o perfil da funcionalidade assume.

 **Escolha do modelo de permissões**:

Use **permissões diretas**, com a adição de permissões de serviço ao perfil da funcionalidade, quando:
+ Você está começando a usar o serviço e deseja a configuração mais simples
+ Todos os recursos estão na mesma conta que o cluster
+ Você tem requisitos de permissão administrativos para todo o cluster
+ Todas as equipes podem compartilhar as mesmas permissões

Use **seletores de perfil do IAM** quando:
+ Gerenciar recursos em várias contas da AWS
+ Diferentes equipes ou namespaces precisarem de permissões distintas
+ Você precisar de controle de acesso granular por namespace
+ Você desejar seguir as práticas de segurança de privilégio mínimo

É possível começar com permissões diretas e migrar para os seletores de perfil do IAM posteriormente, conforme suas necessidades evoluem.

 **Vantagens de usar seletores de perfil do IAM em ambientes produção:** 
+  **Privilégio mínimo**: cada namespace recebe apenas as permissões de que necessita
+  **Isolamento de equipes**: a Equipe A não pode usar as permissões da Equipe B por engano
+  **Auditoria facilitada**: mapeamento claro de qual namespace usa cada perfil
+  **Suporte entre contas**: necessário para gerenciar recursos em várias contas
+  **Separação de responsabilidades**: diferentes serviços ou ambientes usam perfis distintos

### Configuração básica do seletor de perfil do IAM
<a name="_basic_iam_role_selector_setup"></a>

 **Etapa 1: criação de um perfil do IAM específico para o serviço** 

Crie um perfil do IAM com permissões para serviços específicos da AWS:

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

Configure a política de confiança para permitir que o perfil da funcionalidade o assuma:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/ACKCapabilityRole"
      },
      "Action": ["sts:AssumeRole", "sts:TagSession"]
    }
  ]
}
```

 **Etapa 2: concessão da permissão AssumeRole ao perfil da funcionalidade** 

Adicione permissão ao perfil da funcionalidade para assumir o perfil específico do serviço:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["sts:AssumeRole", "sts:TagSession"],
      "Resource": "arn:aws:iam::111122223333:role/ACK-S3-Role"
    }
  ]
}
```

 **Etapa 3: criação do IAMRoleSelector** 

Mapeie o perfil do IAM para um namespace:

```
apiVersion: services.k8s.aws/v1alpha1
kind: IAMRoleSelector
metadata:
  name: s3-namespace-config
spec:
  arn: arn:aws:iam::111122223333:role/ACK-S3-Role
  namespaceSelector:
    names:
      - s3-resources
```

 **Etapa 4: criação de recursos no namespace mapeado** 

Os recursos no namespace `s3-resources` usam automaticamente o perfil especificado:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-bucket
  namespace: s3-resources
spec:
  name: my-production-bucket
```

## Gerenciamento de várias contas
<a name="_multi_account_management"></a>

Use seletores de perfil do IAM para gerenciar recursos em várias contas da AWS.

 **Etapa 1: criação do perfil do IAM entre contas** 

Na conta de destino (444455556666), crie um perfil que confie no perfil da funcionalidade da conta de origem:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/ACKCapabilityRole"
      },
      "Action": ["sts:AssumeRole", "sts:TagSession"]
    }
  ]
}
```

Anexe permissões específicas de serviço a este perfil.

 **Etapa 2: concessão da permissão AssumeRole** 

Na conta de origem (111122223333), permita que o perfil da funcionalidade assuma o perfil da conta de destino:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["sts:AssumeRole", "sts:TagSession"],
      "Resource": "arn:aws:iam::444455556666:role/ACKTargetAccountRole"
    }
  ]
}
```

 **Etapa 3: criação do IAMRoleSelector** 

Mapeie o perfil entre contas para um namespace:

```
apiVersion: services.k8s.aws/v1alpha1
kind: IAMRoleSelector
metadata:
  name: production-account-config
spec:
  arn: arn:aws:iam::444455556666:role/ACKTargetAccountRole
  namespaceSelector:
    names:
      - production
```

 **Etapa 4: criação de recursos** 

Os recursos no namespace `production` são criados na conta de destino:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-bucket
  namespace: production
spec:
  name: my-cross-account-bucket
```

## Tags de sessão
<a name="_session_tags"></a>

A funcionalidade ACK do EKS define automaticamente as tags de sessão em todas as solicitações de API da AWS. Essas tags permitem ter controle de acesso e auditoria, identificando a origem de cada solicitação.

### Tags de sessão disponíveis
<a name="_available_session_tags"></a>

As tags de sessão a seguir estão incluídas em todas as chamadas de API da AWS feitas pelo ACK:


| Chave de tag | Descrição | 
| --- | --- | 
|   `eks:eks-capability-arn`   |  O ARN da funcionalidade EKS que faz a solicitação  | 
|   `eks:kubernetes-namespace`   |  O namespace do Kubernetes do recurso gerenciado  | 
|   `eks:kubernetes-api-group`   |  O grupo do recurso de API do Kubernetes (por exemplo, `s3.services.k8s.aws`)  | 

### Uso de tags de sessão para controle de acesso
<a name="_using_session_tags_for_access_control"></a>

É possível usar essas tags de sessão nas condições da política do IAM para restringir quais recursos o ACK pode gerenciar. Isso fornecerá uma camada adicional de segurança além dos seletores de perfil do IAM baseados em namespace.

 **Exemplo: restringir por namespace** 

Permitir que o ACK crie buckets do S3 somente quando a solicitação for originada do namespace `production`:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:CreateBucket",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalTag/eks:kubernetes-namespace": "production"
        }
      }
    }
  ]
}
```

 **Exemplo: restringir por funcionalidade** 

Permitir ações somente a partir de um recurso do ACK específico:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalTag/eks:eks-capability-arn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/ack/my-ack"
        }
      }
    }
  ]
}
```

**nota**  
As tags de sessão são uma diferença do ACK autogerenciado, que não define essas tags por padrão. Isso permite um controle de acesso mais granular com o recurso gerenciado.

## Padrões avançados de seletores de perfil do IAM
<a name="_advanced_iam_role_selector_patterns"></a>

Para obter configurações avançadas, incluindo selecionadores de rótulos, mapeamento de perfis específicos para recursos e exemplos adicionais, consulte a [documentação relacionada ao IRSA para o ACK](https://aws-controllers-k8s.github.io/community/docs/user-docs/irsa/).

## Próximas etapas
<a name="_next_steps"></a>
+  [Conceitos do ACK](ack-concepts.md): compreenda os conceitos do ACK e o ciclo de vida dos recursos
+  [Conceitos do ACK](ack-concepts.md): saiba mais sobre as políticas de adoção e exclusão de recursos
+  [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md): compreenda as práticas recomendadas de segurança para as funcionalidades