

A versão 4 (V4) do AWS SDK para .NET foi lançada\$1

Para obter informações sobre mudanças significativas e migrar seus aplicativos, consulte o [tópico de migração](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html).

 [https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html)

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Segurança para este AWS produto ou serviço
<a name="security"></a>

A segurança da nuvem na Amazon Web Services (AWS) é a nossa maior prioridade. Como cliente da AWS , você contará com um data center e uma arquitetura de rede criados para atender aos requisitos das organizações com as maiores exigências de segurança. A segurança é uma responsabilidade compartilhada entre você AWS e você. O [modelo de responsabilidade compartilhada](https://aws.amazon.com/compliance/shared-responsibility-model/) descreve isso como a Segurança da nuvem e a Segurança na nuvem.

**Segurança da nuvem** — AWS é responsável por proteger a infraestrutura que executa todos os serviços oferecidos na AWS nuvem e fornecer serviços que você possa usar com segurança. Nossa responsabilidade de segurança é a maior prioridade em AWS, e a eficácia de nossa segurança é regularmente testada e verificada por auditores terceirizados como parte dos [Programas de AWS Conformidade](https://aws.amazon.com/compliance/programs/).

**Segurança na nuvem** — Sua responsabilidade é determinada pelo AWS serviço que você está usando e por outros fatores, incluindo a sensibilidade de seus dados, os requisitos da sua organização e as leis e regulamentos aplicáveis.

Esse AWS produto ou serviço segue o [modelo de responsabilidade compartilhada](https://aws.amazon.com/compliance/shared-responsibility-model/) por meio dos serviços específicos da Amazon Web Services (AWS) que ele suporta. Para AWS obter informações sobre segurança do [AWS serviço, consulte a página de documentação de segurança](https://docs.aws.amazon.com/security/?id=docs_gateway#aws-security) do serviço e os [AWS serviços que estão no escopo dos esforços de AWS conformidade do programa de conformidade](https://aws.amazon.com/compliance/services-in-scope/).

**Topics**
+ [Proteção de dados](data-protection.md)
+ [Gerenciamento de Identidade e Acesso](security-iam.md)
+ [Validação de conformidade](compliance-validation.md)
+ [Resiliência](disaster-recovery-resiliency.md)
+ [Segurança da infraestrutura](infrastructure-security.md)
+ [Aplicar uma versão mínima do TLS](enforcing-tls.md)
+ [Migração do cliente de criptografia S3 (V1 para V2)](s3-encryption-migration-v1-v2.md)
+ [Migração do cliente de criptografia S3 (V2 para V4)](s3-encryption-migration-v2-v4.md)

# Proteção de dados neste AWS produto ou serviço
<a name="data-protection"></a>

O [modelo de responsabilidade AWS compartilhada](https://aws.amazon.com/compliance/shared-responsibility-model/) de se aplica à proteção de dados neste AWS produto ou serviço. Conforme descrito neste modelo, AWS é responsável por proteger a infraestrutura global que executa todos os Nuvem AWS. Você é responsável por manter o controle sobre o conteúdo hospedado nessa infraestrutura. Você também é responsável pelas tarefas de configuração e gerenciamento de segurança dos Serviços da AWS que usa. Para saber mais sobre a privacidade de dados, consulte as [Data Privacy FAQ](https://aws.amazon.com/compliance/data-privacy-faq/). Para saber mais sobre a proteção de dados na Europa, consulte a postagem do blog [AWS Shared Responsibility Model and RGPD](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) no *Blog de segurança da AWS *.

Para fins de proteção de dados, recomendamos que você proteja Conta da AWS as credenciais e configure usuários individuais com Centro de Identidade do AWS IAM ou AWS Identity and Access Management (IAM). Dessa maneira, cada usuário receberá apenas as permissões necessárias para cumprir suas obrigações de trabalho. Recomendamos também que você proteja seus dados das seguintes formas:
+ Use uma autenticação multifator (MFA) com cada conta.
+ Use SSL/TLS para se comunicar com AWS os recursos. Exigimos TLS 1.2 e recomendamos TLS 1.3.
+ Configure a API e o registro de atividades do usuário com AWS CloudTrail. Para obter informações sobre o uso de CloudTrail trilhas para capturar AWS atividades, consulte Como [trabalhar com CloudTrail trilhas](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html) no *Guia AWS CloudTrail do usuário*.
+ Use soluções de AWS criptografia, juntamente com todos os controles de segurança padrão Serviços da AWS.
+ Use serviços gerenciados de segurança avançada, como o Amazon Macie, que ajuda a localizar e proteger dados sensíveis armazenados no Amazon S3.
+ Se você precisar de módulos criptográficos validados pelo FIPS 140-3 ao acessar AWS por meio de uma interface de linha de comando ou de uma API, use um endpoint FIPS. Para saber mais sobre os endpoints FIPS disponíveis, consulte [Federal Information Processing Standard (FIPS) 140-3](https://aws.amazon.com/compliance/fips/).

É altamente recomendável que nunca sejam colocadas informações confidenciais ou sensíveis, como endereços de e-mail de clientes, em tags ou campos de formato livre, como um campo **Nome**. Isso inclui quando você trabalha com este AWS produto, serviço ou outro Serviços da AWS usando o console, a API ou AWS SDKs. AWS CLI Quaisquer dados inseridos em tags ou em campos de texto de formato livre usados para nomes podem ser usados para logs de faturamento ou de diagnóstico. Se você fornecer um URL para um servidor externo, é fortemente recomendável que não sejam incluídas informações de credenciais no URL para validar a solicitação nesse servidor.

# Gerenciamento de Identidade e Acesso
<a name="security-iam"></a>

AWS Identity and Access Management (IAM) é uma ferramenta AWS service (Serviço da AWS) que ajuda o administrador a controlar com segurança o acesso aos AWS recursos. Os administradores do IAM controlam quem pode ser *autenticado* (conectado) e *autorizado* (tem permissões) a usar AWS os recursos. O IAM é um AWS service (Serviço da AWS) que você pode usar sem custo adicional.

**Topics**
+ [Público](#security_iam_audience)
+ [Autenticação com identidades](#security_iam_authentication)
+ [Gerenciar o acesso usando políticas](#security_iam_access-manage)
+ [Como Serviços da AWS trabalhar com o IAM](#security_iam_service-with-iam)
+ [Solução de problemas AWS de identidade e acesso](#security_iam_troubleshoot)

## Público
<a name="security_iam_audience"></a>

A forma como você usa AWS Identity and Access Management (IAM) difere, dependendo do trabalho que você faz AWS.

**Usuário do serviço** — Se você Serviços da AWS costuma fazer seu trabalho, seu administrador fornece as credenciais e as permissões de que você precisa. À medida que você usa mais AWS recursos para fazer seu trabalho, talvez precise de permissões adicionais. Entender como o acesso é gerenciado pode ajudar a solicitar as permissões corretas ao administrador. Se você não conseguir acessar um recurso no AWS, consulte [Solução de problemas AWS de identidade e acesso](#security_iam_troubleshoot) ou o guia do usuário do AWS service (Serviço da AWS) que você está usando.

**Administrador de serviços** — Se você é responsável pelos AWS recursos da sua empresa, provavelmente tem acesso total AWS a. É seu trabalho determinar quais AWS recursos e recursos seus usuários do serviço devem acessar. Envie as solicitações ao administrador do IAM para alterar as permissões dos usuários de serviço. Revise as informações nesta página para compreender os conceitos básicos do IAM. Para saber mais sobre como sua empresa pode usar o IAM com AWS, consulte o guia do usuário do AWS service (Serviço da AWS) que você está usando.

**Administrador do IAM**: se você for um administrador do IAM, talvez queira saber detalhes sobre como pode gravar políticas para gerenciar o acesso ao AWS. Para ver exemplos de políticas AWS baseadas em identidade que você pode usar no IAM, consulte o guia do usuário do AWS service (Serviço da AWS) que você está usando.

## Autenticação com identidades
<a name="security_iam_authentication"></a>

A autenticação é a forma como você faz login AWS usando suas credenciais de identidade. Você deve estar autenticado como usuário do IAM ou assumindo uma função do IAM. Usuário raiz da conta da AWS

Você pode fazer login como uma identidade federada usando credenciais de uma fonte de identidade como Centro de Identidade do AWS IAM (IAM Identity Center), autenticação de login único ou credenciais. Google/Facebook Para ter mais informações sobre como fazer login, consulte [Como fazer login em sua Conta da AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html) no *Guia do usuário do Início de Sessão da AWS *.

Para acesso programático, AWS fornece um SDK e uma CLI para assinar solicitações criptograficamente. Para ter mais informações, consulte [AWS Signature Version 4 para solicitações de API](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) no *Guia do usuário do IAM*.

### Conta da AWS usuário root
<a name="security_iam_authentication-rootuser"></a>

 Ao criar um Conta da AWS, você começa com uma identidade de login chamada *usuário Conta da AWS raiz* que tem acesso completo a todos Serviços da AWS os recursos. É altamente recomendável não usar o usuário-raiz em tarefas diárias. Consulte as tarefas que exigem credenciais de usuário-raiz em [Tarefas que exigem credenciais de usuário-raiz](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks) no *Guia do usuário do IAM*. 

### Identidade federada
<a name="security_iam_authentication-federated"></a>

Como prática recomendada, exija que os usuários humanos usem a federação com um provedor de identidade para acessar Serviços da AWS usando credenciais temporárias.

Uma *identidade federada* é um usuário do seu diretório corporativo, provedor de identidade da web ou Directory Service que acessa Serviços da AWS usando credenciais de uma fonte de identidade. As identidades federadas assumem funções que oferecem credenciais temporárias.

Para o gerenciamento de acesso centralizado, recomendamos Centro de Identidade do AWS IAM. Para saber mais, consulte [O que é o IAM Identity Center?](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) no *Guia do usuário do Centro de Identidade do AWS IAM *.

### Usuários e grupos do IAM
<a name="security_iam_authentication-iamuser"></a>

Um *[usuário do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)* é uma identidade com permissões específicas para uma única pessoa ou aplicação. É recomendável usar credenciais temporárias, em vez de usuários do IAM com credenciais de longo prazo. Para obter mais informações, consulte [Exigir que usuários humanos usem a federação com um provedor de identidade para acessar AWS usando credenciais temporárias](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp) no *Guia do usuário do IAM*.

Um [https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) especifica um conjunto de usuários do IAM e facilita o gerenciamento de permissões para grandes conjuntos de usuários. Para ter mais informações, consulte [Casos de uso de usuários do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html) no *Guia do usuário do IAM*.

### Perfis do IAM
<a name="security_iam_authentication-iamrole"></a>

Uma *[perfil do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)* é uma identidade com permissões específicas que oferece credenciais temporárias. Você pode assumir uma função [mudando de um usuário para uma função do IAM (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html) ou chamando uma operação de AWS API AWS CLI ou. Para saber mais, consulte [Métodos para assumir um perfil](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html) no *Manual do usuário do IAM*.

Os perfis do IAM são úteis para acesso de usuário federado, permissões de usuário do IAM temporárias, acesso entre contas, acesso entre serviços e aplicações em execução no Amazon EC2. Consulte mais informações em [Acesso a recursos entre contas no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) no *Guia do usuário do IAM*.

## Gerenciar o acesso usando políticas
<a name="security_iam_access-manage"></a>

Você controla o acesso AWS criando políticas e anexando-as a AWS identidades ou recursos. Uma política define permissões quando associada a uma identidade ou recurso. AWS avalia essas políticas quando um diretor faz uma solicitação. A maioria das políticas é armazenada AWS como documentos JSON. Para ter mais informações sobre documentos de política JSON, consulte [Visão geral das políticas JSON](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json) no *Guia do usuário do IAM*.

Por meio de políticas, os administradores especificam quem tem acesso a que, definindo qual **entidade principal** pode realizar **ações** em quais **recursos** e sob quais **condições**.

Por padrão, usuários e perfis não têm permissões. Um administrador do IAM cria políticas do IAM e as adiciona aos perfis, os quais os usuários podem então assumir. As políticas do IAM definem permissões, independentemente do método usado para realizar a operação.

### Políticas baseadas em identidade
<a name="security_iam_access-manage-id-based-policies"></a>

As políticas baseadas em identidade são documentos de políticas de permissão JSON que você anexa a uma identidade (usuário, grupo ou perfil). Essas políticas controlam quais ações as identidades podem realizar, em quais recursos e sob quais condições. Para saber como criar uma política baseada em identidade, consulte [Definir permissões personalizadas do IAM com as políticas gerenciadas pelo cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) no *Guia do Usuário do IAM*.

As políticas baseadas em identidade podem ser políticas *em linha* (incorporadas diretamente em uma única identidade) ou *políticas gerenciadas* (políticas autônomas anexadas a várias identidades). Para saber como escolher entre uma política gerenciada e políticas em linha, consulte [Escolher entre políticas gerenciadas e políticas em linha](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html) no *Guia do usuário do IAM*.

### Políticas baseadas em recursos
<a name="security_iam_access-manage-resource-based-policies"></a>

Políticas baseadas em recursos são documentos de políticas JSON que você anexa a um recurso. Entre os exemplos estão *políticas de confiança de perfil* do IAM e *políticas de bucket* do Amazon S3. Em serviços compatíveis com políticas baseadas em recursos, os administradores de serviço podem usá-las para controlar o acesso a um recurso específico. É necessário [especificar uma entidade principal](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html) em uma política baseada em recursos.

Políticas baseadas em recursos são políticas em linha localizadas nesse serviço. Você não pode usar políticas AWS gerenciadas do IAM em uma política baseada em recursos.

### Listas de controle de acesso (ACLs)
<a name="security_iam_access-manage-acl"></a>

As listas de controle de acesso (ACLs) controlam quais diretores (membros da conta, usuários ou funções) têm permissões para acessar um recurso. ACLs são semelhantes às políticas baseadas em recursos, embora não usem o formato de documento de política JSON.

O Amazon S3 e o AWS WAF Amazon VPC são exemplos de serviços que oferecem suporte. ACLs Para saber mais ACLs, consulte a [visão geral da lista de controle de acesso (ACL)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html) no *Guia do desenvolvedor do Amazon Simple Storage Service*.

### Outros tipos de política
<a name="security_iam_access-manage-other-policies"></a>

AWS oferece suporte a tipos de políticas adicionais que podem definir o máximo de permissões concedidas por tipos de políticas mais comuns:
+ **Limites de permissões**: definem o número máximo de permissões que uma política baseada em identidade pode conceder a uma entidade do IAM. Para saber mais sobre limites de permissões, consulte [Limites de permissões para identidades do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html) no *Guia do usuário do IAM*.
+ **Políticas de controle de serviço (SCPs)** — Especifique as permissões máximas para uma organização ou unidade organizacional em AWS Organizations. Para saber mais, consulte [Políticas de controle de serviço](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) no *Guia do usuário do AWS Organizations *.
+ **Políticas de controle de recursos (RCPs)** — Defina o máximo de permissões disponíveis para recursos em suas contas. Para obter mais informações, consulte [Políticas de controle de recursos (RCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) no *Guia AWS Organizations do usuário*.
+ **Políticas de sessão**: políticas avançadas transmitidas como um parâmetro durante a criação de uma sessão temporária para um perfil ou um usuário federado. Para saber mais, consulte [Políticas de sessão](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) no *Guia do usuário do IAM*.

### Vários tipos de política
<a name="security_iam_access-manage-multiple-policies."></a>

Quando vários tipos de política são aplicáveis a uma solicitação, é mais complicado compreender as permissões resultantes. Para saber como AWS determinar se uma solicitação deve ser permitida quando vários tipos de políticas estão envolvidos, consulte [Lógica de avaliação de políticas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html) no *Guia do usuário do IAM*.

## Como Serviços da AWS trabalhar com o IAM
<a name="security_iam_service-with-iam"></a>

Para ter uma visão de alto nível de como Serviços da AWS funciona com a maioria dos recursos do IAM, consulte [AWS os serviços que funcionam com o IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) no *Guia do usuário do IAM*.

Para saber como usar um específico AWS service (Serviço da AWS) com o IAM, consulte a seção de segurança do Guia do usuário do serviço relevante.

## Solução de problemas AWS de identidade e acesso
<a name="security_iam_troubleshoot"></a>

Use as informações a seguir para ajudá-lo a diagnosticar e corrigir problemas comuns que você pode encontrar ao trabalhar com AWS um IAM.

**Topics**
+ [Não estou autorizado a realizar uma ação em AWS](#security_iam_troubleshoot-no-permissions)
+ [Não estou autorizado a realizar iam: PassRole](#security_iam_troubleshoot-passrole)
+ [Quero permitir que pessoas fora da minha Conta da AWS acessem meus AWS recursos](#security_iam_troubleshoot-cross-account-access)

### Não estou autorizado a realizar uma ação em AWS
<a name="security_iam_troubleshoot-no-permissions"></a>

Se você receber uma mensagem de erro informando que não tem autorização para executar uma ação, suas políticas deverão ser atualizadas para permitir que você realize a ação.

O erro do exemplo a seguir ocorre quando o usuário do IAM `mateojackson` tenta usar o console para visualizar detalhes sobre um atributo `my-example-widget` fictício, mas não tem as permissões `awes:GetWidget` fictícias.

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: awes:GetWidget on resource: my-example-widget
```

Nesse caso, a política do usuário `mateojackson` deve ser atualizada para permitir o acesso ao recurso `my-example-widget` usando a ação `awes:GetWidget`.

Se precisar de ajuda, entre em contato com seu AWS administrador. Seu administrador é a pessoa que forneceu suas credenciais de login.

### Não estou autorizado a realizar iam: PassRole
<a name="security_iam_troubleshoot-passrole"></a>

Se você receber uma mensagem de erro informando que não está autorizado a executar a ação `iam:PassRole`, as suas políticas devem ser atualizadas para permitir que você passe uma função para o AWS.

Alguns Serviços da AWS permitem que você passe uma função existente para esse serviço em vez de criar uma nova função de serviço ou uma função vinculada ao serviço. Para fazê-lo, você deve ter permissões para passar o perfil para o serviço.

O exemplo de erro a seguir ocorre quando uma usuária do IAM chamada `marymajor` tenta utilizar o console para executar uma ação no AWS. No entanto, a ação exige que o serviço tenha permissões concedidas por um perfil de serviço. Mary não tem permissões para passar o perfil para o serviço.

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

Nesse caso, as políticas de Mary devem ser atualizadas para permitir que ela realize a ação `iam:PassRole`.

Se precisar de ajuda, entre em contato com seu AWS administrador. Seu administrador é a pessoa que forneceu suas credenciais de login.

### Quero permitir que pessoas fora da minha Conta da AWS acessem meus AWS recursos
<a name="security_iam_troubleshoot-cross-account-access"></a>

É possível criar um perfil que os usuários de outras contas ou pessoas fora da organização podem usar para acessar seus recursos. É possível especificar quem é confiável para assumir o perfil. Para serviços que oferecem suporte a políticas baseadas em recursos ou listas de controle de acesso (ACLs), você pode usar essas políticas para conceder às pessoas acesso aos seus recursos.

Para saber mais, consulte:
+ Para saber se é AWS compatível com esses recursos, consulte[Como Serviços da AWS trabalhar com o IAM](#security_iam_service-with-iam).
+ Para saber como fornecer acesso aos seus recursos em todos os Contas da AWS que você possui, consulte Como [fornecer acesso a um usuário do IAM em outro Conta da AWS que você possui](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html) no *Guia do usuário do IAM*.
+ Para saber como fornecer acesso aos seus recursos a terceiros Contas da AWS, consulte Como [fornecer acesso Contas da AWS a terceiros](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html) no *Guia do usuário do IAM*.
+ Para saber como conceder acesso por meio da federação de identidades, consulte [Conceder acesso a usuários autenticados externamente (federação de identidades)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html) no *Guia do usuário do IAM*.
+ Para saber a diferença entre perfis e políticas baseadas em recurso para acesso entre contas, consulte [Acesso a recursos entre contas no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) no *Guia do usuário do IAM*.

# Validação de conformidade para este AWS produto ou serviço
<a name="compliance-validation"></a>

Para saber se um AWS service (Serviço da AWS) está dentro do escopo de programas de conformidade específicos, consulte [Serviços da AWS Escopo por Programa de Conformidade Serviços da AWS](https://aws.amazon.com/compliance/services-in-scope/) e escolha o programa de conformidade em que você está interessado. Para obter informações gerais, consulte Programas de [AWS conformidade Programas AWS](https://aws.amazon.com/compliance/programs/) de .

Você pode baixar relatórios de auditoria de terceiros usando AWS Artifact. Para obter mais informações, consulte [Baixar relatórios em AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html) .

Sua responsabilidade de conformidade ao usar Serviços da AWS é determinada pela confidencialidade de seus dados, pelos objetivos de conformidade de sua empresa e pelas leis e regulamentações aplicáveis. Para obter mais informações sobre sua responsabilidade de conformidade ao usar Serviços da AWS, consulte a [documentação AWS de segurança](https://docs.aws.amazon.com/security/).

Esse AWS produto ou serviço segue o [modelo de responsabilidade compartilhada](https://aws.amazon.com/compliance/shared-responsibility-model/) por meio dos serviços específicos da Amazon Web Services (AWS) que ele suporta. Para AWS obter informações sobre segurança do [AWS serviço, consulte a página de documentação de segurança](https://docs.aws.amazon.com/security/?id=docs_gateway#aws-security) do serviço e os [AWS serviços que estão no escopo dos esforços de AWS conformidade do programa de conformidade](https://aws.amazon.com/compliance/services-in-scope/).

# Resiliência para este AWS produto ou serviço
<a name="disaster-recovery-resiliency"></a>

A infraestrutura AWS global é construída em torno Regiões da AWS de zonas de disponibilidade. 

Regiões da AWS fornecem várias zonas de disponibilidade fisicamente separadas e isoladas, conectadas a redes de baixa latência, alta taxa de transferência e alta redundância. 

Com as zonas de disponibilidade, é possível projetar e operar aplicações e bancos de dados que automaticamente executam o failover entre as zonas sem interrupção. As zonas de disponibilidade são altamente disponíveis, tolerantes a falhas e escaláveis que uma ou várias infraestruturas de data center tradicionais. 

Para obter mais informações sobre AWS regiões e zonas de disponibilidade, consulte [Infraestrutura AWS global](https://aws.amazon.com/about-aws/global-infrastructure/).

Esse AWS produto ou serviço segue o [modelo de responsabilidade compartilhada](https://aws.amazon.com/compliance/shared-responsibility-model/) por meio dos serviços específicos da Amazon Web Services (AWS) que ele suporta. Para AWS obter informações sobre segurança do [AWS serviço, consulte a página de documentação de segurança](https://docs.aws.amazon.com/security/?id=docs_gateway#aws-security) do serviço e os [AWS serviços que estão no escopo dos esforços de AWS conformidade do programa de conformidade](https://aws.amazon.com/compliance/services-in-scope/).

# Segurança da infraestrutura para este AWS produto ou serviço
<a name="infrastructure-security"></a>

Esse AWS produto ou serviço usa serviços gerenciados e, portanto, é protegido pela segurança de rede AWS global. Para obter informações sobre serviços AWS de segurança e como AWS proteger a infraestrutura, consulte [AWS Cloud Security](https://aws.amazon.com/security/). Para projetar seu AWS ambiente usando as melhores práticas de segurança de infraestrutura, consulte [Proteção](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html) de infraestrutura no *Security Pillar AWS Well‐Architected* Framework.

Você usa chamadas de API AWS publicadas para acessar este AWS Produto ou Serviço pela rede. Os clientes devem oferecer compatibilidade com:
+ Transport Layer Security (TLS). Exigimos TLS 1.2 e recomendamos TLS 1.3.
+ Conjuntos de criptografia com perfect forward secrecy (PFS) como DHE (Ephemeral Diffie-Hellman) ou ECDHE (Ephemeral Elliptic Curve Diffie-Hellman). A maioria dos sistemas modernos, como Java 7 e versões posteriores, comporta esses modos.

Além disso, as solicitações devem ser assinadas usando um ID da chave de acesso e uma chave de acesso secreta associada a uma entidade principal do IAM. Ou é possível usar o [AWS Security Token Service](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html) (AWS STS) para gerar credenciais de segurança temporárias para assinar solicitações.

Esse AWS produto ou serviço segue o [modelo de responsabilidade compartilhada](https://aws.amazon.com/compliance/shared-responsibility-model/) por meio dos serviços específicos da Amazon Web Services (AWS) que ele suporta. Para AWS obter informações sobre segurança do [AWS serviço, consulte a página de documentação de segurança](https://docs.aws.amazon.com/security/?id=docs_gateway#aws-security) do serviço e os [AWS serviços que estão no escopo dos esforços de AWS conformidade do programa de conformidade](https://aws.amazon.com/compliance/services-in-scope/).

# Aplicando uma versão mínima do TLS no AWS SDK para .NET
<a name="enforcing-tls"></a>

Para aumentar a segurança ao se comunicar com AWS serviços, você deve configurar o AWS SDK para .NET para usar o TLS 1.2 ou posterior.

O AWS SDK para .NET usa o tempo de execução do.NET subjacente para determinar qual protocolo de segurança usar. Por padrão, as versões atuais do .NET usam o protocolo configurado mais recentemente que for compatível com o sistema operacional. Seu aplicativo pode substituir esse comportamento do SDK, mas *não é recomendado* fazê-lo.

## .NET Core
<a name="enforcing-tls-dotnet-core"></a>

Por padrão, o .NET Core usa o protocolo configurado mais recentemente que for compatível com o sistema operacional. O AWS SDK para .NET não fornece um mecanismo para substituir isso.

Se você estiver usando uma versão do .NET Core anterior à 2.1, recomendamos *veementemente* que atualize sua versão do .NET Core.

Consulte os itens a seguir para obter informações específicas sobre cada sistema operacional.

**Windows**

As distribuições modernas do Windows têm o suporte para TLS 1.2 [habilitado por padrão](https://learn.microsoft.com/en-us/windows/win32/secauthn/protocols-in-tls-ssl--schannel-ssp-). Se você estiver executando o Windows 7 SP1 ou o Windows Server 2008 R2 SP1, precisará garantir que o suporte ao TLS 1.2 esteja habilitado no registro, conforme descrito em [https://learn.microsoft.com/en-us/windows- server/security/tls/tls -registry-settings \$1tls -12](https://learn.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings#tls-12). Se estiver executando uma distribuição anterior, você deverá atualizar seu sistema operacional. Para obter informações sobre o suporte ao TLS 1.3 no Windows, consulte a documentação mais recente da Microsoft para ver as versões mínimas exigidas de cliente ou servidor.

**macOS**

Se estiver executando o .NET Core 2.1 ou posterior, o TLS 1.2 estará habilitado por padrão. O TLS 1.2 é compatível com o [OS X Mavericks v10.9 ou posterior](https://support.apple.com/en-us/103373). [.NET Core versão 2.1 e versões posteriores exigem versões mais recentes do macOS, conforme descrito em? https://learn.microsoft.com/en-us/ dotnet/core/install/windows tabs=net80&pivots=os-macos](https://learn.microsoft.com/en-us/dotnet/core/install/windows?tabs=net80&pivots=os-macos).

Caso você esteja usando o .NET Core 1.0, o .NET Core [usa OpenSSL no macOS](https://github.com/dotnet/announcements/issues/21), uma dependência que deve ser instalada separadamente. O OpenSSL adicionou suporte para TLS 1.2 na versão 1.0.1 e adicionou suporte para TLS 1.3 na versão 1.1.1.

**Linux**

O .NET Core no Linux requer OpenSSL, que é fornecido junto com muitas distribuições Linux. Mas também pode ser instalado separadamente. O OpenSSL adicionou suporte para TLS 1.2 na versão 1.0.1 e adicionou suporte para TLS 1.3 na versão 1.1.1. Caso você esteja usando uma versão moderna do .NET Core (2.1 ou posterior) e tenha instalado um gerenciador de pacotes, é provável que uma versão mais moderna do OpenSSL tenha sido instalada para você.

Para ter certeza, você pode executar o **`openssl version`** em um terminal e verificar se a versão é posterior à 1.0.1.

## NET Framework
<a name="enforcing-tls-dotnet-framework"></a>

Se você estiver executando uma versão moderna do .NET Framework (4.7 ou posterior) e uma versão moderna do Windows (pelo menos o Windows 8 para clientes, o Windows Server 2012 ou posterior para servidores), o TLS 1.2 será habilitado e usado por padrão.

Se você estiver usando um runtime do.NET Framework que não usa as configurações do sistema operacional (.NET Framework 3.5 a 4.5.2), eles AWS SDK para .NET tentarão [adicionar suporte para TLS 1.1 e TLS 1.2](https://github.com/aws/aws-sdk-net/blob/main/sdk/src/Core/Amazon.Runtime/Pipeline/HttpHandler/AmazonSecurityProtocolManager.cs) aos protocolos suportados. Se você estiver usando o .NET Framework 3.5, esse processo só será bem-sucedido se o hot patch apropriado estiver instalado, da seguinte forma:
+ Windows 10 versão 1511 e Windows Server 2016 — [KB3156421](https://support.microsoft.com/kb/3156421)
+ Windows 8.1 e Windows Server 2012 R2 — [KB3154520](https://support.microsoft.com/kb/3154520)
+ Windows Server 2012 — [KB3154519](https://support.microsoft.com/kb/3154519)
+ Windows 7 SP1 e Server 2008 R2 SP1 — [KB3154518](https://support.microsoft.com/kb/3154518)

**Atenção**  
Em 15 de agosto de 2024, o suporte para o.NET Framework 3.5 AWS SDK para .NET foi encerrado e a versão mínima do.NET Framework foi alterada para 4.7.2. Para acessar mais informações, consulte a postagem no blog [Important changes coming for .NET Framework 3.5 and 4.5 targets of the AWS SDK para .NET](https://aws.amazon.com/blogs/developer/important-changes-coming-for-net-framework-3-5-and-4-5-targets-of-the-aws-sdk-for-net/).

Se seu aplicativo estiver sendo executado em um novo.NET Framework no Windows 7 SP1 ou no Windows Server 2008 R2 SP1, você precisará garantir que o suporte ao TLS 1.2 esteja habilitado no registro, conforme descrito em [https://learn.microsoft.com/en-us/windows- server/security/tls/tls -registry-settings \$1tls -12](https://learn.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings#tls-12). Nas versões mais recentes do Windows, ele está [habilitado por padrão](https://learn.microsoft.com/en-us/windows/win32/secauthn/protocols-in-tls-ssl--schannel-ssp-).

Para obter as melhores práticas detalhadas para usar o TLS com o.NET Framework, consulte o artigo da Microsoft em [https://learn.microsoft.com/en-us/dotnet/framework/network-programming/tls](https://learn.microsoft.com/en-us/dotnet/framework/network-programming/tls).

## Ferramentas da AWS para PowerShell
<a name="enforcing-tls-ps"></a>

[Ferramentas da AWS para PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/)use o AWS SDK para .NET para todas as chamadas para AWS serviços. O comportamento do seu ambiente depende da versão do Windows PowerShell que você está executando, da seguinte forma.

**Windows PowerShell 2.0 a 5.x**

O Windows PowerShell 2.0 a 5.x é executado no.NET Framework. Você pode verificar qual runtime do.NET (2.0 ou 4.0) está sendo usado PowerShell usando o comando a seguir.

```
$PSVersionTable.CLRVersion
```
+ Ao usar o .NET Runtime 2.0, siga as instruções fornecidas anteriormente em relação ao AWS SDK para .NET e ao .NET Framework 3.5.
**Atenção**  
Em 15 de agosto de 2024, o suporte para o.NET Framework 3.5 AWS SDK para .NET foi encerrado e a versão mínima do.NET Framework foi alterada para 4.7.2. Para acessar mais informações, consulte a postagem no blog [Important changes coming for .NET Framework 3.5 and 4.5 targets of the AWS SDK para .NET](https://aws.amazon.com/blogs/developer/important-changes-coming-for-net-framework-3-5-and-4-5-targets-of-the-aws-sdk-for-net/).
+ Ao usar o .NET Runtime 4.0, siga as instruções fornecidas anteriormente em relação ao AWS SDK para .NET e ao .NET Framework 4\$1.

**Windows PowerShell 6.0**

O Windows PowerShell 6.0 e versões mais recentes são executados no.NET Core. Você pode verificar qual versão do .NET Core está sendo usada executando o comando a seguir.

```
[System.Reflection.Assembly]::GetEntryAssembly().GetCustomAttributes([System.Runtime.Versioning.TargetFrameworkAttribute], $true).FrameworkName
```

Siga as instruções fornecidas anteriormente em relação à versão relevante do.NET Core AWS SDK para .NET e à respectiva.

## Xamarin
<a name="enforcing-tls-xamarin"></a>

[Para o Xamarin, veja as instruções em -layer-security. https://learn.microsoft.com/en-us/ xamarin/cross-platform/app-fundamentals/transport](https://learn.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/transport-layer-security) Em resumo:

**Para Android**
+ Requer o Android 5.0 ou posterior.
+ **Propriedades do projeto**, **opções do Android**: a HttpClient implementação deve ser definida como **Android** e a SSL/TLS implementação definida como **TLS 1.2\$1 nativo**.

**Para iOS**
+ Requer o iOS 7 ou posterior.
+ **Propriedades do projeto**, **versão iOS**: HttpClient a implementação deve ser definida como **NSUrlSessão**.

**No macOS**
+ Requer o macOS 10.9 ou posterior.
+ **Opções do projeto**, **compilação**, **compilação do Mac**: HttpClient a implementação deve ser definida como **NSUrlSessão**.

## Unity
<a name="enforcing-tls-unity"></a>

Você deve usar o Unity 2018.2 ou posterior e usar o tempo de execução de scripts equivalente ao .NET 4.x. Você pode definir isso em **Configurações do projeto**, **Configuração**, **Player**, conforme descrito em [https://docs.unity3d.com/2019.1/Documentation/Manual/ScriptingRuntimeUpgrade.html.](https://docs.unity3d.com/2019.1/Documentation/Manual/ScriptingRuntimeUpgrade.html) O tempo de execução de script equivalente do.NET 4.x permite o suporte ao TLS 1.2 em todas as plataformas Unity que executam Mono ou CPP. IL2 

## Navegador (para Blazor) WebAssembly
<a name="enforcing-tls-browser"></a>

WebAssembly é executado no navegador em vez de no servidor e usa o navegador para lidar com o tráfego HTTP. Portanto, o suporte a TLS é determinado pelo suporte do navegador.

[O Blazor WebAssembly, na versão prévia do ASP.NET Core 3.1, é suportado somente em navegadores que oferecem suporte WebAssembly, conforme descrito em -platforms. https://learn.microsoft.com/en-us/ aspnet/core/blazor/supported](https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms) Todos os principais navegadores eram compatíveis com o TLS 1.2 antes do suporte. WebAssembly Se esse for o caso do seu navegador, se o seu aplicativo for executado, ele poderá se comunicar por TLS 1.2.

Consulte a documentação do seu navegador para obter mais informações e verificação.

# Migração do cliente de criptografia S3 (V1 para V2)
<a name="s3-encryption-migration-v1-v2"></a>

**nota**  
Se você estiver usando a V2 e quiser migrar para a V4, consulte. [Migração do cliente de criptografia S3 (V2 para V4)](s3-encryption-migration-v2-v4.md)

Este tópico mostra como migrar seus aplicativos da versão 1 (V1) do cliente de criptografia Amazon Simple Storage Service (S3) para a versão 2 (V2) e garantir a disponibilidade dos aplicativos durante todo o processo de migração.

Objetos criptografados com o cliente V2 não podem ser descriptografados com o cliente V1. Para facilitar a migração para o novo cliente sem precisar recriptografar todos os objetos de uma vez, foi fornecido um cliente “V1 de transição”. Esse cliente pode *descriptografar* objetos criptografados com a V1 e V2, mas *criptografa* somente objetos em formato compatível com a V1. O cliente V2 pode *descriptografar* objetos criptografados em V1 e V2 (quando habilitado para objetos V1), mas *criptografa* objetos somente em formato compatível com V2.

## Visão geral da migração
<a name="s3-encryption-migration-v1-v2-overview"></a>

Essa migração acontece em três fases: Essas fases são apresentadas aqui e serão descritas em detalhes posteriormente. Cada fase deve ser concluída para *todos* os clientes que usam objetos compartilhados antes que a próxima fase seja iniciada.

1. **Atualize os clientes existentes para clientes V1 de transição para ler novos formatos.** Primeiro, atualize seus aplicativos para que dependam do cliente V1 de transição em vez do cliente V1. O cliente V1 de transição permite que seu código existente descriptografe objetos escritos pelos novos clientes V2 e objetos escritos em formato compatível com a V1.
**nota**  
O cliente V1 de transição é fornecido somente para fins de migração. Prossiga com a atualização para o cliente V2 depois de passar para o cliente de transição V1.

1. **Migre clientes V1 de transição para clientes V2 para escrever novos formatos.** Em seguida, substitua todos os clientes V1 de transição em seus aplicativos por clientes V2 e defina o perfil de segurança como `V2AndLegacy`. Definir esse perfil de segurança em clientes V2 permite que esses clientes descriptografem objetos que foram criptografados em formato compatível com V1.

1. **Atualize os clientes V2 para que não leiam mais os formatos V1.** Por fim, depois que todos os clientes tiverem migrado para a V2 e todos os objetos tiverem sido criptografados ou recriptografados em um formato compatível com a V2, defina o perfil de segurança da V2 como `V2` em vez de `V2AndLegacy`. Isso evita a descriptografia de objetos que estão no formato compatível com V1.

## Atualize os clientes existentes para clientes V1 de transição para ler novos formatos.
<a name="s3-encryption-migration-v1-v2-to-v1n"></a>

O cliente de criptografia V2 usa algoritmos de criptografia incompatíveis com as versões mais antigas do cliente. A primeira etapa da migração é atualizar seus clientes de descriptografia V1 para que eles possam ler o novo formato.

O cliente V1 de transição permite que seus aplicativos descriptografem objetos criptografados na V1 e V2. Esse cliente faz parte do pacote [ NuGet Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption). Execute as etapas a seguir em cada um dos seus aplicativos para usar o cliente V1 de transição.

1. Adquira uma nova dependência do pacote [Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption). **Se o seu projeto depende diretamente do **AWSSDK.S3 ou.** AWSSDK KeyManagementService**pacotes, você deve atualizar essas dependências ou removê-las para que suas versões atualizadas sejam inseridas com esse novo pacote.

1. Altere a declaração `using` apropriada de `Amazon.S3.Encryption` para `Amazon.Extensions.S3.Encryption`, da seguinte forma: 

   ```
   // using Amazon.S3.Encryption;
     using Amazon.Extensions.S3.Encryption;
   ```

1. Reconstrua e reimplante o aplicativo.

O cliente V1 de transição é totalmente compatível com a API do cliente V1, portanto, nenhuma outra alteração de código é necessária.

## Migre clientes V1 de transição para clientes V2 para escrever novos formatos.
<a name="s3-encryption-migration-v1-v2-v1n-to-v2"></a>

O cliente V2 faz parte do pacote [ NuGet Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption). Ele permite que seus aplicativos descriptografem objetos criptografados na V1 e V2 (se configurados para fazer isso), mas criptografa objetos somente em formato compatível com V2.

Depois de atualizar seus clientes existentes para ler o novo formato de criptografia, você poderá prosseguir com a atualização segura de seus aplicativos para os clientes de criptografia e descriptografia V2. Execute as etapas a seguir em cada um dos seus aplicativos para usar o cliente V2.

1. Fazer `EncryptionMaterials` alteração `EncryptionMaterialsV2`.

   1. Ao usar o KMS:

      1. Forneça um ID da chave do KMS.

      1. Declare o método de criptografia que você está usando; ou seja, `KmsType.KmsContext`.

      1. Forneça um contexto de criptografia ao KMS para associar a essa chave de dados. Você pode enviar um dicionário vazio (o contexto de criptografia da Amazon ainda será mesclado), mas é recomendável fornecer contexto adicional.

   1. Ao usar métodos de wrapping da chave fornecidos pelo usuário (criptografia simétrica ou assimétrica):

      1. Forneça uma instância `AES` ou `RSA` que contenha os materiais de criptografia.

      1. Declare qual algoritmo de criptografia usar; ou seja, `SymmetricAlgorithmType.AesGcm` ou `AsymmetricAlgorithmType.RsaOaepSha1`.

1. Altere `AmazonS3CryptoConfiguration` para `AmazonS3CryptoConfigurationV2` com a propriedade `SecurityProfile` definida como `SecurityProfile.V2AndLegacy`.

1. Fazer `AmazonS3EncryptionClient` alteração `AmazonS3EncryptionClientV2`. Esse cliente pega os objetos `AmazonS3CryptoConfigurationV2` e `EncryptionMaterialsV2` recém-convertidos das etapas anteriores.

### Exemplo: KMS para KMS\$1Context
<a name="s3-encryption-migration-v1-v2-ex-kms"></a>

**Pré-migração**

```
using System.Security.Cryptography;
using Amazon.S3.Encryption;

var encryptionMaterial = new EncryptionMaterials("1234abcd-12ab-34cd-56ef-1234567890ab");
var configuration = new AmazonS3CryptoConfiguration()
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
```

**Pós-migração**

```
using System.Security.Cryptography;
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV2("1234abcd-12ab-34cd-56ef-1234567890ab", KmsType.KmsContext, encryptionContext);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
```

### Exemplo: Algoritmo simétrico (AES-CBC para AES-GCM Key Wrap)
<a name="s3-encryption-migration-v1-v2-ex-aes"></a>

`StorageMode` pode ser `ObjectMetadata` ou `InstructionFile`.

**Pré-migração**

```
using System.Security.Cryptography;
using Amazon.S3.Encryption;

var symmetricAlgorithm = Aes.Create();
var encryptionMaterial = new EncryptionMaterials(symmetricAlgorithm);
var configuration = new AmazonS3CryptoConfiguration()
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
```

**Pós-migração**

```
using System.Security.Cryptography;
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

var symmetricAlgorithm = Aes.Create();
var encryptionMaterial = new EncryptionMaterialsV2(symmetricAlgorithm, SymmetricAlgorithmType.AesGcm);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
```

**nota**  
Ao descriptografar com o AES-GCM, leia o objeto inteiro até o fim antes de começar a usar os dados descriptografados. Isso é para verificar se o objeto não foi modificado desde que foi criptografado.

### Exemplo: Algoritmo assimétrico (RSA para RSA-OAEP-SHA 1 quebra de chave)
<a name="s3-encryption-migration-v1-v2-ex-rsa"></a>

`StorageMode` pode ser `ObjectMetadata` ou `InstructionFile`.

**Pré-migração**

```
using System.Security.Cryptography;
using Amazon.S3.Encryption;

var asymmetricAlgorithm = RSA.Create();
var encryptionMaterial = new EncryptionMaterials(asymmetricAlgorithm);
var configuration = new AmazonS3CryptoConfiguration()
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
```

**Pós-migração**

```
using System.Security.Cryptography;
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

var asymmetricAlgorithm = RSA.Create();
var encryptionMaterial = new EncryptionMaterialsV2(asymmetricAlgorithm, AsymmetricAlgorithmType.RsaOaepSha1);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
```

## Atualize os clientes V2 para que não leiam mais os formatos V1.
<a name="s3-encryption-migration-v1-v2-v2-cleanup"></a>

Eventualmente, todos os objetos terão sido criptografados ou recriptografados usando um cliente V2. *Depois que essa conversão for concluída*, você poderá desativar a compatibilidade com a V1 nos clientes V2 definindo a propriedade `SecurityProfile` como `SecurityProfile.V2`, conforme mostrado no trecho a seguir.

```
//var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2);
```

# Migração do cliente de criptografia S3 (V2 para V4)
<a name="s3-encryption-migration-v2-v4"></a>

**nota**  
Se você estiver usando a V1 e quiser migrar para a V4, primeiro deverá migrar para a V2. Consulte [Migração do cliente de criptografia S3 (V1 para V2)](s3-encryption-migration-v1-v2.md).

Este tópico mostra como migrar seus aplicativos da versão 2 (V2) do cliente de criptografia Amazon Simple Storage Service (S3) para a versão 4 (V4) e garantir a disponibilidade dos aplicativos durante todo o processo de migração. A V4 usa o AES-GCM com o compromisso principal de criptografia de conteúdo e apresenta políticas de compromisso para aumentar a segurança contra ataques de substituição de chaves.

O cliente V4 está disponível no pacote [ NuGet Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption).

**Importante**  
**Alterações importantes:** clientes V4 configurados com `RequireEncryptRequireDecrypt` política não podem descriptografar objetos criptografados com clientes V1 ou V2. Somente os clientes V2 mais recentes podem descriptografar objetos criptografados em V4 com comprometimento de chave. Antes de passar para a `RequireEncryptRequireDecrypt` política, você deve criptografar novamente todos os seus dados existentes usando clientes V4 com o compromisso de chave ativado.

## Compreendendo os conceitos da V4
<a name="s3-encryption-migration-v2-v4-concepts"></a>

A V4 usa o AES-GCM com o compromisso fundamental de criptografia de conteúdo e apresenta os principais conceitos de segurança que aprimoram a proteção de seus dados criptografados:

### Política de compromisso
<a name="s3-encryption-migration-v2-v4-concepts-policy"></a>

A Política de Compromisso controla como o cliente de criptografia lida com o comprometimento da chave durante as operações de criptografia e descriptografia. A V4 oferece suporte a três políticas de compromisso:

`ForbidEncryptAllowDecrypt`  
*Criptografia:* sem compromisso  
*Descriptografia:* permite que objetos não confirmem  
*Segurança:* não impõe o compromisso e pode permitir a adulteração  
*Compatibilidade:* todas as implementações V2 e V4 podem ler objetos criptografados com esta política

`RequireEncryptAllowDecrypt`  
*Criptografia:* com compromisso fundamental  
*Descriptografia:* permite que objetos confirmados e não confirmados  
*Segurança:* novos objetos são protegidos contra ataques de substituição de chaves, objetos antigos ainda podem ser lidos  
*Compatibilidade:* somente a V4 oferece suporte a essa política

`RequireEncryptRequireDecrypt`(Padrão para V4)  
*Criptografia:* com compromisso fundamental  
*Descriptografia:* somente confirmando objetos  
*Segurança:* cumprimento total do compromisso para máxima segurança  
*Compatibilidade:* somente a V4 oferece suporte a essa política

### AES GCM com compromisso fundamental
<a name="s3-encryption-migration-v2-v4-concepts-aesgcm"></a>

A V4 usa o AES-GCM com o compromisso fundamental de criptografia de conteúdo, o que fornece segurança aprimorada:
+ *Proteção contra adulteração:* protege contra ataques de substituição de chave vinculando criptograficamente a chave aos dados criptografados.
+ *Compatibilidade de versão:* objetos criptografados com comprometimento de chave só podem ser descriptografados por clientes V4 e versões mais recentes.

**Atenção**  
Antes de ativar a criptografia de comprometimento de chave na produção, certifique-se de que todos os aplicativos que precisam descriptografar seus objetos tenham sido atualizados para a V4 ou mais recente, pois o cliente V2 está se tornando obsoleto.

## Atualize os clientes existentes para ler os formatos V4
<a name="s3-encryption-migration-v2-v4-update-clients"></a>

O cliente de criptografia V4 usa algoritmos de criptografia que as versões mais antigas do cliente não suportam. A primeira etapa da migração é atualizar seus clientes V2 para que eles possam ler o novo formato V4.

### Atualizar dependências NuGet do Package
<a name="s3-encryption-migration-v2-v4-update-nuget"></a>

Atualize seus aplicativos para usar a versão mais recente do pacote [ NuGet Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) que inclui suporte à V4. Execute as seguintes etapas em cada um dos seus aplicativos:

1. Atualize para o pacote [Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) mais recente. **Se o seu projeto depende diretamente do **AWSSDK.S3 ou.** AWSSDK KeyManagementService**pacotes, você deve atualizar essas dependências ou removê-las para que suas versões atualizadas sejam inseridas com esse novo pacote.

1. Certifique-se de que suas `using` declarações façam referência ao namespace correto:

   ```
   using Amazon.Extensions.S3.Encryption;
   using Amazon.Extensions.S3.Encryption.Primitives;
   ```

1. Reconstrua e reimplante o aplicativo.

Seus clientes V2 existentes continuarão trabalhando com o pacote atualizado e poderão descriptografar objetos criptografados por clientes V4 (dependendo da política de compromisso usada).

### Crie e implante aplicativos
<a name="s3-encryption-migration-v2-v4-build-deploy"></a>

Depois de atualizar as dependências NuGet do pacote:

1. Crie seu aplicativo para garantir que todas as dependências sejam resolvidas corretamente.

1. Teste seu aplicativo em um ambiente de desenvolvimento para verificar se a funcionalidade existente continua funcionando.

1. Implante o aplicativo atualizado em seu ambiente de produção.

Essa atualização permite que seus clientes V2 existentes descriptografem objetos que serão criptografados por clientes V4, garantindo compatibilidade durante o processo de migração.

## Migre para clientes V4
<a name="s3-encryption-migration-v2-v4-migrate"></a>

Depois de atualizar seus clientes existentes para ler o novo formato de criptografia, você pode continuar atualizando seus aplicativos com segurança para usar clientes de criptografia e descriptografia V4. O cliente V4 fornece segurança aprimorada por meio do comprometimento de chaves, mantendo a compatibilidade com objetos criptografados existentes.

### Processo de migração em 4 etapas
<a name="s3-encryption-migration-v2-v4-migrate-steps"></a>

A migração da V2 para a V4 segue um processo estruturado de 4 etapas para garantir compatibilidade e segurança. Cada etapa representa uma configuração específica que deve ser implantada em todos os seus aplicativos antes de prosseguir para a próxima etapa.

1. **Etapa 0: Cliente V2 (ponto de partida)** - Sua implementação V2 existente

1. **Etapa 1: V4 com compatibilidade V2** - Migre para o cliente V4 enquanto mantém o comportamento de criptografia compatível com V2

1. **Etapa 2: V4 com gravações de compromisso de chave** - Comece a criptografar com compromisso de chave enquanto permite a decodificação de objetos legados

1. **Etapa 3: V4 com aplicação total** - Exigir comprometimento de chave para criptografia e decodificação

### Etapa 0: Cliente V2 (ponto de partida)
<a name="s3-encryption-migration-v2-v4-step0"></a>

Isso representa sua configuração de cliente V2 existente. Essa etapa demonstra o estado inicial antes da migração.

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;
using Amazon.S3.Model;

// Step 0: V2 Client - Starting configuration
var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV2(kmsKeyId, KmsType.KmsContext, encryptionContext);

#pragma warning disable 0618
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2);
#pragma warning enable 0618

var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);

// Use the client for PutObject and GetObject operations
await encryptionClient.PutObjectAsync(new PutObjectRequest
{
    BucketName = bucket,
    Key = objectKey,
    ContentBody = content
});
```

### Etapa 1: V4 com compatibilidade com V2
<a name="s3-encryption-migration-v2-v4-step1"></a>

Migre para o cliente V4 enquanto mantém um comportamento idêntico ao V2. Essa etapa usa a `ForbidEncryptAllowDecrypt` política para criptografar sem compromisso e permitir a descriptografia de todos os objetos.

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;
using Amazon.S3.Model;

// Step 1: V4 Client with V2 compatibility
var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV4(kmsKeyId, KmsType.KmsContext, encryptionContext);

var configuration = new AmazonS3CryptoConfigurationV4(
    SecurityProfile.V4, 
    CommitmentPolicy.ForbidEncryptAllowDecrypt, 
    ContentEncryptionAlgorithm.AesGcm);

var encryptionClient = new AmazonS3EncryptionClientV4(configuration, encryptionMaterial);

// Use the client for PutObject and GetObject operations
await encryptionClient.PutObjectAsync(new PutObjectRequest
{
    BucketName = bucket,
    Key = objectKey,
    ContentBody = content
});
```

**Comportamento:** criptografa sem compromisso, pode descriptografar objetos comprometidos e não comprometidos. Idêntico ao comportamento da V2.

### Etapa 2: V4 com gravações de compromisso importantes
<a name="s3-encryption-migration-v2-v4-step2"></a>

Comece a criptografar com o compromisso de chave e, ao mesmo tempo, mantenha a compatibilidade com versões anteriores para decodificação. Essa etapa usa a `RequireEncryptAllowDecrypt` política.

**Atenção**  
Antes de implantar a Etapa 2, certifique-se de que todos os leitores tenham sido atualizados para a Etapa 1 ou posterior para lidar com a criptografia de compromisso de chave.

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;
using Amazon.S3.Model;

// Step 2: V4 Client with key commitment writes
var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV4(kmsKeyId, KmsType.KmsContext, encryptionContext);

var configuration = new AmazonS3CryptoConfigurationV4(
    SecurityProfile.V4, 
    CommitmentPolicy.RequireEncryptAllowDecrypt, 
    ContentEncryptionAlgorithm.AesGcmWithCommitment);

var encryptionClient = new AmazonS3EncryptionClientV4(configuration, encryptionMaterial);

// Use the client for PutObject and GetObject operations
await encryptionClient.PutObjectAsync(new PutObjectRequest
{
    BucketName = bucket,
    Key = objectKey,
    ContentBody = content
});
```

**Comportamento:** criptografa com comprometimento, pode descriptografar objetos comprometidos e não comprometidos. Novos objetos são protegidos contra ataques de substituição de chaves.

### Etapa 3: V4 com aplicação total
<a name="s3-encryption-migration-v2-v4-step3"></a>

Exija o comprometimento da chave tanto para criptografia quanto para decodificação. Essa etapa usa a `RequireEncryptRequireDecrypt` política para máxima segurança.

**Atenção**  
Antes de implantar a Etapa 3, certifique-se de que todos os objetos em seu sistema tenham sido criptografados novamente com o comprometimento da chave (Etapa 2). Essa etapa falhará ao descriptografar objetos criptografados sem compromisso.

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;
using Amazon.S3.Model;

// Step 3: V4 Client with full key commitment enforcement
var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV4(kmsKeyId, KmsType.KmsContext, encryptionContext);

var configuration = new AmazonS3CryptoConfigurationV4(
    SecurityProfile.V4, 
    CommitmentPolicy.RequireEncryptRequireDecrypt, 
    ContentEncryptionAlgorithm.AesGcmWithCommitment);

var encryptionClient = new AmazonS3EncryptionClientV4(configuration, encryptionMaterial);

// Use the client for PutObject and GetObject operations
await encryptionClient.PutObjectAsync(new PutObjectRequest
{
    BucketName = bucket,
    Key = objectKey,
    ContentBody = content
});
```

**Comportamento:** criptografa com compromisso, somente descriptografa objetos criptografados com compromisso. Segurança máxima contra ataques de substituição de chaves.

## Exemplos adicionais de configuração
<a name="s3-encryption-migration-v2-v4-examples"></a>

Esta seção fornece exemplos adicionais para configurar clientes V4 com opções diferentes durante a migração.

### Habilitando o Legacy Support
<a name="s3-encryption-migration-v2-v4-examples-legacy"></a>

Para permitir que clientes V4 leiam objetos criptografados por clientes V1 e V2, configure o cliente com uma política de compromisso que permita a descriptografia legada:

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

// Configure V4 client to read V1/V2 objects
var configuration = new AmazonS3CryptoConfigurationV4(SecurityProfile.V4AndLegacy, CommitmentPolicy.RequireEncryptAllowDecrypt)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};

// This configuration allows:
// - Encryption: With commitment (secure)
// - Decryption: Both V2 (non-committing) and V4 (committing) objects
```

Use essa configuração durante a migração quando precisar descriptografar objetos criptografados por clientes mais antigos e, ao mesmo tempo, garantir que novos objetos sejam criptografados com segurança aprimorada.

### Configurando o método de armazenamento
<a name="s3-encryption-migration-v2-v4-examples-storage"></a>

A V4 oferece suporte a dois métodos de armazenamento para metadados de criptografia. Escolha o método mais adequado ao seu caso de uso:

**Metadados do objeto (padrão)**

```
var configuration = new AmazonS3CryptoConfigurationV4(SecurityProfile.V4, CommitmentPolicy.RequireEncryptAllowDecrypt)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
// Encryption metadata is stored in S3 object metadata
```

**Arquivo de instruções**

```
var configuration = new AmazonS3CryptoConfigurationV4(SecurityProfile.V4, CommitmentPolicy.RequireEncryptAllowDecrypt)
{
    StorageMode = CryptoStorageMode.InstructionFile
};
// Encryption metadata is stored in a separate S3 object (instruction file)
```

Use `InstructionFile` quando precisar preservar os metadados do objeto para outras finalidades ou ao trabalhar com objetos que tenham limitações de tamanho de metadados.

### Configurando a política de compromisso
<a name="s3-encryption-migration-v2-v4-examples-policy"></a>

Escolha a política de compromisso apropriada com base em seus requisitos de segurança e fase de migração:

**Fase de migração (compatibilidade V2)**

```
// For migration: encrypt without commitment, allow all decryption
var migrationConfig = new AmazonS3CryptoConfigurationV4(SecurityProfile.V4, CommitmentPolicy.ForbidEncryptAllowDecrypt);
```

**Fase de transição (recomendada)**

```
// For transition: encrypt with commitment, allow legacy decryption
var transitionConfig = new AmazonS3CryptoConfigurationV4(SecurityProfile.V4, CommitmentPolicy.RequireEncryptAllowDecrypt);
```

**Fase de segurança completa**

```
// For maximum security: require commitment for both encryption and decryption
var secureConfig = new AmazonS3CryptoConfigurationV4(SecurityProfile.V4, CommitmentPolicy.RequireEncryptRequireDecrypt);
```

Comece `ForbidEncryptAllowDecrypt` durante a migração inicial, passe `RequireEncryptAllowDecrypt` para a fase de transição e, finalmente, use `RequireEncryptRequireDecrypt` quando todos os clientes tiverem sido atualizados e todos os objetos tiverem sido criptografados novamente com compromisso.