

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

# Limite os envios e fusões às ramificações em AWS CodeCommit
<a name="how-to-conditional-branch"></a>

Por padrão, qualquer usuário do CodeCommit repositório que tenha permissões suficientes para enviar código para o repositório pode contribuir com qualquer ramificação desse repositório. Isso é válido independentemente de você adicionar uma ramificação ao repositório usando o console, a linha de comando ou o Git. No entanto, você pode desejar configurar uma ramificação para que apenas alguns usuários do repositório possam enviar por push ou mesclar o código para essa ramificação. Por exemplo, você pode desejar configurar uma ramificação usada para o código de produção para que apenas um subconjunto de desenvolvedores sênior possam enviar por push ou mesclar as alterações para essa ramificação. Outros desenvolvedores ainda podem acionar essa ramificação, fazer suas próprias ramificações e criar solicitações de pull, mas não podem enviar por push ou mesclar as alterações para essa ramificação. Você pode configurar esse acesso criando uma política condicional que usa uma chave de contexto para uma ou mais ramificações no IAM. 

**nota**  
Para concluir alguns dos procedimentos deste tópico, você deve fazer login com um usuário administrativo que tenha permissões suficientes para configurar e aplicar as políticas do IAM. Para obter mais informações, consulte [Criação de um usuário administrador e grupo do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html). 

**Topics**
+ [Configure uma política do IAM para limitar envios por push e mesclagens para ramificações](#how-to-conditional-branch-create-policy)
+ [Aplicar a política do IAM a um grupo ou perfil do IAM](#how-to-conditional-branch-apply-policy)
+ [Teste a política](#how-to-conditional-branch-test)

## Configure uma política do IAM para limitar envios por push e mesclagens para ramificações
<a name="how-to-conditional-branch-create-policy"></a>

Você pode criar uma política no IAM que impede os usuários de atualizar uma ramificação, incluindo confirmações de push e mesclagens de solicitações pull para ramificações. Para fazer isso, a sua política usa uma instrução condicional, de modo que o efeito da instrução `Deny` se aplica somente se a condição for atendida. O APIs que você inclui na `Deny` declaração determina quais ações não são permitidas. Você pode configurar essa política para aplicar a apenas uma ramificação em um repositório, a uma série de ramificações em um repositório ou a todas as ramificações que correspondem aos critérios em todos os repositórios em uma conta da Amazon Web Services. <a name="how-to-conditional-branch-create-policy-procedure"></a>

**Criar uma política condicional para ramificações**

1. Faça login no Console de gerenciamento da AWS e abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. No painel de navegação, selecione **Políticas**. 

1. Selecione **Criar política**.

1. Escolha **JSON** e, em seguida, cole o seguinte exemplo de política. Substitua o valor do `Resource` pelo ARN do repositório que contém a ramificação à qual você deseja restringir o acesso. Substitua o valor de `codecommit:References` por uma referência à ramificação ou ramificações às quais você deseja restringir o acesso. Por exemplo, essa política nega o envio de confirmações, mesclagem e exclusão de ramificações, exclusão de arquivos, mesclagem de solicitações pull e a inclusão de arquivos a uma ramificação chamada *`main`* e uma ramificação chamada `prod` em um repositório chamado `MyDemoRepo`:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Deny",
               "Action": [
                   "codecommit:GitPush",
                   "codecommit:DeleteBranch",
                   "codecommit:DeleteFile",
                   "codecommit:PutFile",
                   "codecommit:MergeBranchesByFastForward",
                   "codecommit:MergeBranchesBySquash",
                   "codecommit:MergeBranchesByThreeWay",
                   "codecommit:MergePullRequestByFastForward",
                   "codecommit:MergePullRequestBySquash",
                   "codecommit:MergePullRequestByThreeWay"
               ],
               "Resource": "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo",
               "Condition": {
                   "StringEqualsIfExists": {
                       "codecommit:References": [
                           "refs/heads/main", 
                           "refs/heads/prod"
                        ]
                   },
                   "Null": {
                       "codecommit:References": "false"
                   }
               }
           }
       ]
   }
   ```

------

   Ramificações no Git são meros ponteiros (referências) ao valor SHA-1 da confirmação head, e é por isso que a condição usa `References`. A instrução `Null` é necessária em qualquer política cujo efeito seja `Deny` e na qual `GitPush` seja uma das ações. Isso é necessário devido à forma como o Git e `git-receive-pack` funcionam ao enviar alterações por push de um repositório local ao CodeCommit.
**dica**  
Para criar uma política que se aplica a todas as ramificações chamadas de principal em todos os repositórios em uma conta da Amazon Web Services, altere o valor de `Resource` de um ARN de repositório para um asterisco (`*`). 

1. Selecione **Revisar política**. Corrija todos os erros na sua declaração de política e, em seguida, continue a **Create policy** (Criar política).

1. Quando o JSON é validado, a página **Create policy** (Criar política) é exibida. Um aviso é exibido na seção **Summary (Resumo)**, informando que essa política não concede permissões. Isso é esperado. 
   + Em **Name (Nome)**, insira um nome para essa política, como **DenyChangesToMain**.
   + Em **Description (Descrição)**, insira uma descrição da finalidade da política. Isso é opcional, mas recomendado.
   + Selecione **Criar política**.

## Aplicar a política do IAM a um grupo ou perfil do IAM
<a name="how-to-conditional-branch-apply-policy"></a>

Você criou uma política que limita envios via push e mesclagens para ramificações, mas a política não terá efeito até você aplicá-la a um grupo, perfil ou usuário do IAM. Como prática recomendada, considere aplicar a política a um grupo ou perfil do IAM. Aplicar políticas a usuários do IAM individuais não escala bem.<a name="how-to-conditional-branch-apply-policy-procedure"></a>

**Aplicar a política condicional a um grupo ou função**

1. Faça login no Console de gerenciamento da AWS e abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. No painel de navegação, se você quer aplicar a política a um grupo do IAM, selecione **Grupos**. Se você quer aplicar a política a um perfil que os usuários assumirão, escolha **Perfil**. Escolha o nome do grupo ou função.

1. Na guia **Permissions**, escolha **Attach Policy**.

1. Selecione a política condicional que você criou na lista de políticas e, em seguida, escolha **Attach policy** (Anexar política).

Para obter mais informações, consulte [Anexar e desanexar políticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html).

## Teste a política
<a name="how-to-conditional-branch-test"></a>

Você deve testar os efeitos da política que aplicou no grupo ou função para garantir que ela funcione como esperado. Há muitas maneiras de fazer isso. Por exemplo, para testar uma política semelhante à exibida acima, você pode:
+ Faça login no CodeCommit console com um usuário do IAM que seja membro de um grupo do IAM que tenha a política aplicada ou assuma uma função que tenha a política aplicada. No console, adicione um arquivo na ramificação em que as restrições se aplicam. Você verá uma mensagem de erro ao tentar salvar um arquivo ou fazer upload dele para essa ramificação. Adicionar um arquivo a uma ramificação diferente. A operação deve ser bem-sucedida.
+ Faça login no CodeCommit console com um usuário do IAM que seja membro de um grupo do IAM que tenha a política aplicada ou assuma uma função que tenha a política aplicada. Crie uma solicitação pull que seja mesclada com a ramificação na qual as restrições se aplicam. Você deve ser capaz de criar a solicitação pull, mas obterá um erro se tentar mesclar essa solicitação. 
+ No terminal ou na linha de comando, crie uma confirmação na ramificação em que as restrições se aplicam e, em seguida, envie essa confirmação para o CodeCommit repositório. Você verá uma mensagem de erro. Confirmações e envios por push feitas de outras ramificações devem funcionar normalmente.