Criação de Usuário do IAM na AWS para Utilização do CodeCommit — Passo-a-Passo
Neste post, vamos apresentar o passo-a-passo de como criar e configurar um Usuário do IAM no ambiente AWS, utilizado para interagir com o repositório do CodeCommit diretamente, assim como para replicação de código de repositórios externos (como Bitbucket e Github) para o AWS CodeCommit.
Autores
Criação da IAM Policy
O primeiro passo é definir as permissões que o usuário terá para interagir com os recursos dentro do ambiente AWS. Poderíamos utilizar a Política do IAM gerenciada pela AWS, chamada AWSCodeCommitPowerUser
. Contudo, essa política é muito abrangente, fornecendo muito mais permissões do que precisamos e para qualquer repositório criado no ambiente AWS. Portanto, use-a com cautela.
No nosso cenário, vamos criar uma política customizada para controlar melhor que tipo de interação poderá ser feita e em quais repositórios.
Console AWS — Nova IAM Policy
Para criar uma Política do IAM, vá para a página do IAM na console AWS, em seguida:
- Navegue no painel lateral e clique na opção
Políticas
. - Em seguida, clique no botão
Criar Política
.
Especificação de Permissões
Nesta seção, vamos especificar as permissões da nova Política do IAM que está sendo criada. Para isso:
- Selecione a aba
JSON
. - Aqui, vamos definir as especificações das permissões do usuário ao ambiente. Apresentaremos na sequência alguns documentos JSON de referência, sendo necessário apenas substituir os seguintes elementos:
— <AWS Region> → utilizar a mesma região na qual o repositório do CodeCommit foi criado.
— <AWS Account ID> → utilizar o ID da conta AWS na qual está trabalhando (representada por 12 dígitos numéricos)
— <Repository Name> → utilizar o nome dos repositório do CodeCommit que deseja liberar o acesso. Para liberar acesso à múltiplos repositórios, basta adicionar mais itens na lista deResource
.
— <Repository Name Prefix/Suffix> → Outra alternativa de liberar o acesso à múltiplos repositórios é através da utilização de wildcards. Por exemplo, no campoResource
, você pode especificar um conjunto de repositórios a partir de algum padrão de prefixo e/ou sufixo no nome dos mesmos, utilizando o wildcard*
. - Clique no botão
Próximo: Tags
para seguir para a próxima etapa.
Também é possível especificar as permissões através do Editor visual
, que é basicamente uma interface para auxiliar na construção do JSON.
Seguem 4 exemplos de variações de documentos JSON para contextos diferentes:
- Liberando acesso total à um repositório específico:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CodeCommitPermissions",
"Effect": "Allow",
"Action": [
"codecommit:*"
],
"Resource": [
"arn:aws:codecommit:<AWS Region>:<AWS Account ID>:<Repository Name>"
]
}
]
}
- Liberando acesso apenas de GitPush para um repositório específico. No cenário de replicação de código de ferramentas externas para o CodeCommit, apenas o GitPush é necessário.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CodeCommitPermissions",
"Effect": "Allow",
"Action": [
"codecommit:GitPush"
],
"Resource": [
"arn:aws:codecommit:<AWS Region>:<AWS Account ID>:<Repository Name>"
]
}
]
}
- Liberando acesso total à um conjunto de repositórios com um sufixo e prefixo específico:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CodeCommitPermissions",
"Effect": "Allow",
"Action": [
"codecommit:*"
],
"Resource": [
"arn:aws:codecommit:<AWS Region>:<AWS Account ID>:<Repository Name Prefix>*<Repository Name Suffix>"
]
}
]
}
- Liberando acessos específicos para um conjunto fechado de repositórios:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CodeCommitPermissions",
"Effect": "Allow",
"Action": [
"codecommit:GitPull",
"codecommit:ListBranches"
],
"Resource": [
"arn:aws:codecommit:<AWS Region>:<AWS Account ID>:<Repository Name 1>",
"arn:aws:codecommit:<AWS Region>:<AWS Account ID>:<Repository Name 2>"
]
}
]
}
Para mais detalhes, confira a documentação da AWS sobre as ações referentes ao AWS CodeCommit:
Atribuição de Tags (opcional)
Esta é uma etapa opcional, onde pode-se atribuir Tags à Política do IAM para auxiliar na organização dos recursos AWS. Para isso:
- Clique no botão
Adicionar tag
. Irá aparecer dois campos logo acima do botão. - Preencha os campos de
Chave
eValor
(opcional) referentes a tag desejada. Neste exemplo, estamos atribuindo uma tag referente ao projeto na qual a policy será utilizada, com a chave BRLinkProject e valor SimpleApplication. - Clique no botão
Próximo: Revisar
para seguir para a próxima etapa.
Revisão e Confirmação de Criação da Política do IAM
Por fim:
- Defina o nome da Política do IAM que está sendo criada.
- Defina a descrição da Política do IAM. A descrição é opcional, mas é altamente recomendável que seja definida ao menos uma descrição simples da utilização da Política, por questões de organização e gerenciamento.
- Revise as configurações da Política e clique no botão
Criar política
para confirmar.
Criação do IAM User
Console AWS — Novo IAM User
Tendo criado a política, vamos agora criar o Usuário do IAM. Na página do IAM no console AWS:
- Navegue no painel lateral e clique na opção
Usuários
. - Clique no botão
Adicionar usuário
.
Detalhamento do Usuário
A seguir:
- Defina o nome do usuário que será criado.
É recomendável utilizar nomes que ajudem a identificar qual é a utilidade no seu ambiente e quem é a pessoa (ou qual é a aplicação) que fará uso deste usuário. - No tipo de acesso, marque a checkbox de acesso programático.
- Clique no botão
Próximo: Permissões
para seguir para a próxima etapa.
O tipo de aceso só foi definido por se tratar de um campo obrigatório para a criação de Usuários do IAM. Entretanto, não vamos utilizar este acesso, pois a comunicação com o repositório ocorrerá via SSH. Por isso, deletaremos as chaves de acesso programático logo após a criação do usuário (será descrito nas etapas posteriores)
Definição de Permissões do Usuário
Para definir as permissões:
- Selecione a opção
Anexar políticas existentes de forma direta
. - Busque pela Policy criada anteriormente na lista e marque a sua respectiva checkbox.
- Clique em
Próximo: Tags
para seguir para a próxima etapa.
Atribuição de Tags (opcional)
De forma semelhante às Políticas do IAM, também podemos atribuir tags aos usuários para auxiliar na organização e gerenciamento dos mesmos. Para adicionar tags:
- Preencha os campos de
Chave
eValor
(opcional) referentes a tag desejada. Neste exemplo, estamos atribuindo uma tag referente ao projeto na qual a policy será utilizada, com a chave BRLinkProject e valor SimpleApplication. - Clique em
Próximo: Revisar
para seguir para a próxima etapa.
Revisão e Confirmação de Criação do IAM User
Por fim, revise as informações e clique no botão Criar usuário
para confirmar a criação da usuário.
Configurações de Credenciais de Segurança do Usuário
Console AWS — Busca por IAM User
Com o usuário criado, precisamos ajustar as credenciais de acesso do mesmo para permitir a interação do usuário única e exclusivamente com o repositório do CodeCommit através de SSH. Para isso:
- Navegue no painel lateral e clique na opção
Usuários
. - Use o campo de busca para encontrar o usuário criado nas etapas anteriores.
- Clique no link do nome do usuário para ser direcionado para a sua tela de configurações.
Exclusão de Access Keys
Neste etapa, vamos inativar e depois deletar as Chaves de Acesso que foram criadas automaticamente para o usuário recém criado. Vamos realizar esta exclusão pois este usuário não deve ser capaz de interagir programaticamente com o ambiente AWS em questão. Para isso, execute as passos descritos a seguir:
Aba de Credenciais de Segurança
- Estando na tela de configurações do usuário, clique na aba
Credenciais de segurança
. - Na área de Chaves de Acesso clique na opção
Tornar inativa
para ser redirecionado para a tela de confirmação de desativação da mesma (demonstrada na sequência). - Após a desativação, clique no botão em formato de
x
(xis) para ser redirecionado para a tela de confirmação de exclusão das Chaves de Acesso (demonstrada na sequência).
Tela de Confirmação de Desativação de Chaves de Acesso
- Após conferir as informações apresentadas, clique no botão
Desativar
para confirmar a desativação das Chaves de Acesso.
Tela de Confirmação de Exclusão de Chaves de Acesso
- Após conferir as informações apresentadas, digite o código das Chaves de Acesso no campo indicado para desbloquear a exclusão.
- Após digitar o código corretamente, clique no botão
Excluir
para confirmar a exclusão das Chaves de Acesso.
Criando Chaves SSH
Nesse exemplo as chaves SSH foram gerada pelo Bitbucket. Entretanto, você pode também criar o seu próprio par de chaves SSH em diferentes sistemas operacionais com o seguinte comando (Shell):
ssh-keygen -t rsa -b 4096 -C "your@email.com"
Aqui, estamos utilizando o algoritmo RSA para criptografia (-t rsa
) com um tamanho de chave de 4096 bits (-b 4096
). Se for utilizar as chaves para configurar a comunicação do seu ambiente local com o repositório, pode utilizar o parâmetro -C
substituindo o "your@email.com”
pelo email sua sua conta na plataforma de versionamento utilizada. No caso do AWS CodeCommit, não há um e-mail vinculado ao usuário do repositório, por isso, pode deixar a informação de email vazia (-C ""
).
Segue um print exemplificando a criação do par de chaves em um ambiente WSL Ubuntu e uma explicação dos comandos executados:
- Primeiramente, foi criada uma pasta no home usuário no sistema para armazenar essas chaves de exemplo. Neste caso, chamada
ssh_example
. - Ao executar o comando
ssh-keygen
, opcionalmente você pode customizar o caminho no qual as chaves serão geradas (que por padrão são criadas no caminho~/.ssh/
com o nomeid_rsa
). Neste exemplo, as chaves foram criadas na pasta/home/mhorvath/ssh_example/
com o nomeexample_rsa
. - Em seguida, o fluxo solicita que seja criada uma passphrase, que serve para proteger a chave SSH privada para que, mesmo que alguém tenha acesso à chave SSH privada de forma indevida, essa pessoa não consiga utilizar a mesma sem a passphrase.
— Caso você tenha a intenção de utilizar as chaves criadas para interagir com o AWS CodeCommit diretamente via SSH, é recomendado que você utilize sim uma passphrase.
— Entretanto, para o fluxo de replicar código de repositórios de outras plataformas (como o Github) para o AWS CodeCommit, normalmente o fluxo automatizado dessas plataformas não é capaz de utilizar a chave SSH privada com passphrase. Neste caso, deverá manter o passphrase em branco. - Para verificar os arquivos criados, foi executado o comando
ls -la
para a pasta criada, e dois arquivos foram gerados, oexample_rsa
e oexample_rsa.pub
, que são a chave SSH privada e pública, respectivamente. - Por fim, foi utilizado o comando
cat
para exibir a chave pública gerada para fins de ilustração.
A chave privada é utilizada no local de origem do código (seja no seu ambiente local de desenvolvimento, seja na plataforma de origem da replicação do código) e a chave pública é utilizada no destino, para que apenas quem tiver acesso à chave privada seja capaz de fazer alterações no destino.
No geral, chaves SSH são utilizadas como credenciais de acesso para sistemas e servidores. Tenha sempre cuidado redobrado com as suas chaves, pois expor esse tipo de informação de forma pública pode ter consequências severas, como exposição de informações sensíveis, modificação e acesso indevido aos sistemas, etc.
As chaves chaves geradas nesse exemplo foram excluídas e não estão sendo utilizadas. (Obviamente 😬)
Upload de Chave Pública SSH
Para finalizar a configuração de permissões do usuário, precisamos fazer o upload da chave pública SSH.
Console AWS — Iniciar Processo de Upload
Para iniciar o processo de upload:
- Estando na tela de configurações do usuário, ainda na aba Credenciais de segurança, clique no botão
Fazer upload da chave pública SSH
para ser redirecionado para a tela de upload.
Colar Chave Pública SSH
- Copie a sua chave pública SSH e cole no campo de texto indicado.
- Clique no botão
Fazer upload da chave pública SSH
para confirmar o upload.
ID da Chave do SSH
Após a conclusão do upload da chave pública, será gerado um ID desta chave para este usuário.
- Guarde este ID, pois ele será utilizado como User na configuração do SSH no ambiente de origem que irá interagir com o repositório no AWS CodeCommit.
Conclusão
Pronto, agora está configurado o seu acesso à AWS via SSH para que possa interagir diretamente com o seu repositório do CodeCommit ou integrar o seu repositório com outras ferramentas. Um exemplo de utilização deste acesso é a integração do CodeCommit com outros serviços de versionamento de código (como o Bitbucket e o GitHub), como mostrado no artigo a seguir: