Gerencie suas service connections de maneira mais eficiente

Service Connections são um recurso poderoso do Azure Pipelines. Com elas, é possível criar e manter conexões seguras a serviços externos que serão usados durante a implantação da sua aplicação. Mas se você usa múltiplos team projects, elas tendem a se proliferar e sair de controle.

Quer saber como resolver isso? Entâo continue lendo!

O Azure Pipelines usa service connections para acessar recursos dos quais você depende para a implantação do seu sistema, tais como servidores, clusters Kubernetes, registries Docker, resource groups do Azure e por aí vai.

Com seu uso, você garante a segurança das credenciais usadas para acessar esses serviços, além de poder determinar quem pode usar cada service connection. Você consegue, por exemplo, controlar quem tem permissão de fazer um deployment num dado namespace de um cluster Kubernetes.

Entretanto, service connections são um recurso em nível de team project. Isso significa que cada team project mantém seu próprio conjunto de service connections. E isso pode ser um problema.

Proliferação de service connections

Considere o seguinte cenário: você tem dois team projects no seu Azure DevOps (“Projeto1” e “Projeto2”). Por uma dessas coincidências da vida, esses dois team projects contêm sistemas que precisam acessar um mesmo recurso - no caso, um Azure Container Registry (ACR) e um Azure Kubernetes Service (AKS).

Exemplo de um team project("Projeto1") com duas service connections
Exemplo de um team project("Projeto1") com duas service connections (clique para ampliar)

Se não bastasse a inconveniência de ter que criar as mesmas conexões duas vezes, temos um problema de manutenção: se você precisar, por exemplo, atualizar as credenciais de acesso a um desses serviços, você terá que fazer isso em dois lugares diferentes.

Para evitar isso, vamos usar um recurso que é ao mesmo tempo muito útil e pouco conhecido: o compartilhamento de service connections.

Compartilhando service connections

O compartilhamento de service connections é uma funcionalidade que permite que você crie uma service connection em um team project e a use em outro team project.

Para fazer isso, você precisa ter permissão de administrador no team project que contém a service connection que você quer compartilhar. Uma sugestão é criar um team project apenas com a finalidade de armazenar as conexões compartilhadas. No meu exemplo, criei um chamado SharedConnections:

Para iniciar o processo, você deve:

  1. Acesse o team project que contém a service connection que você quer compartilhar, e vá em Project Settings;
  2. Clique no menu Pipelines e, em seguida, em Service connections;
  3. Clique no nome da service connection que você quer compartilhar (no nosso exemplo, “k8s-cluster-dev)”;
  4. Clique no botão de menu - o botão com os três pontinhos (1) e vá em Security (2).

Tela de edição da service connection, que aparece logo após clicar no nome da conexão, destacando o menu e a opção Security
Tela de edição da service connection, que aparece logo após clicar no nome da conexão, destacando o menu e a opção Security (clique para ampliar)

Agora, role até a parte de baixo da página de configuração de segurança da service connection. Repare na seção “Projeto permissions”:

Página de configuração de segurança da service connection, com a seção "Project permissions" destacada. O botão [+] (1) permite adicionar um compartilhamento
Página de configuração de segurança da service connection, com a seção "Project permissions" destacada. O botão [+] (1) permite adicionar um compartilhamento (clique para ampliar)

Clique no botão [+] (1) para adicionar um compartilhamento. Você verá uma lista de team projects em que você tem permissão de administrador. Selecione o team project com o qual você quer compartilhar a service connection e clique em OK. Para o nosso exemplo iremos adicionar os team projects Projeto1 e Projeto2:

Seção Project permissions exibindo os dois teams projects com os quais a conexão foi compartilhada
Seção Project permissions exibindo os dois teams projects com os quais a conexão foi compartilhada (clique para ampliar)

Pronto! Agora você pode usar a service connection em qualquer um dos team projects com os quais você a compartilhou.

Um ponto importante diz respeito à segurança dessas conexões compartilhadas. Você pode controlar quem pode usar cada service connection compartilhada, definindo permissões de acesso para usuários e grupos que poderão acessar e/ou administrar a service connection.

Por padrão, o usuário criador da conexão e o grupo Endpoint Administrators do team project de origem (“SharedConnections” em nosso exemplo) têm permissão de administrador. Você pode adicionar outros usuários e grupos, além de alterar as permissões de acesso.

Ao adicionar outros usuários e/ou grupos, você pode definir um dos três níveis de acesso:

  1. Reader: permite que o usuário ou grupo veja a service connection;
  2. User: permite que o usuário ou grupo use a service connection em pipelines - por exemplo, autorizando a service connection para ser usada num dado pipeline;
  3. Administrator: permite que o usuário ou grupo tenha controle total sobre a service connection - isso inclui definir suas permissões de segurança.

Imagine que você queira permitir que qualquer pessoa com o perfil de Contributor nos projetos Projeto1 e Projeto2 possam incluir a service connection em seus pipelines. Para fazer isso, você pode adicionar o grupo Contributors do team project de destino (Projeto1 e Projeto2) como User da service connection:

Seção "User permissions", com os grupos Contributors dos projetos Projeto1 e Projeto2 definidos como Users
Seção "User permissions", com os grupos Contributors dos projetos Projeto1 e Projeto2 definidos como Users (clique para ampliar)

Opcionalmente você pode compartilhar a administração dessa service connection, adicionando outros usuários/grupos como Administrators. Por exemplo, você poderia adicionar o grupo Project Administrators dos team project de destino (Projeto1 e Projeto2) como Administrator da service connection.

Conclusão

Compartilhar service connections é uma ótima maneira de manter suas conexões seguras e evitar a proliferação de service connections desnecessárias. Além disso, você pode controlar quem pode usar cada conexão compartilhada, definindo permissões de acesso para usuários e grupos que poderão acessar e/ou administrar as suas conexões.

Sempre que você precisar criar e/ou alterar uma conexão, basta fazê-lo no team project de origem (“SharedConnections”) e os demais team projects receberão as alterações automaticamente.

E aí o que achou? Você já usou essa funcionalidade? Tem alguma dúvida ou sugestão? Deixe um comentário!

Para saber mais

Um abraço e até a próxima!



12/04/2023 | Por Igor Abade V. Leite | Em Técnico | Tempo de leitura: 5 mins.

Postagens relacionadas