Integrando AWS Secrets Manager e IAM com Laravel para gerenciamento seguro de credenciais

Aumente a segurança das suas aplicações com o uso de um moderno cofre de senhas.

Publicado em

Quando estamos desenvolvendo uma aplicação, a segurança das credenciais é um dos aspectos mais importantes. A AWS (Amazon Web Services) oferece ferramentas poderosas para garantir que suas credenciais sejam armazenadas de forma segura e acessíveis apenas para quem tem permissão. Neste artigo, vamos explorar como integrar a AWS IAM (Identity and Access Management) e o AWS Secrets Manager com um projeto Laravel.

Ao final do artigo, você será capaz de configurar a AWS IAM para gerenciar as permissões de acesso, armazenar segredos no AWS Secrets Manager e integrar tudo isso com sua aplicação Laravel de maneira segura.

Criando um usuário no AWS IAM e concedendo permissões

O primeiro passo para integrar sua aplicação Laravel com a AWS é configurar o IAM (Identity and Access Management), que permite que você crie e gerencie usuários e permissões dentro da AWS.

O que é o IAM?

O AWS IAM é um serviço que permite gerenciar o acesso a serviços e recursos da AWS de maneira controlada. Usando o IAM, podemos criar usuários específicos, conceder permissões de acesso e garantir que apenas as pessoas ou sistemas autorizados possam acessar nossos recursos.

Criando um novo usuário IAM

  1. Acesse o painel do AWS IAM.
  2. No menu lateral, clique em Users e, em seguida, clique em Add user.
  3. Escolha a opção Programmatic access para criar um usuário com acesso via chave de acesso.
  4. Na tela de permissões, você pode adicionar permissões diretamente ou adicionar o usuário a um grupo com permissões predefinidas. Para o nosso caso, adicione a política SecretsManagerReadWrite, que permite acesso ao Secrets Manager.
  5. Conclua o processo e anote a Access Key ID e Secret Access Key geradas. Esses valores serão usados para configurar o acesso ao Secrets Manager na aplicação Laravel.

Criando um segredo no AWS Secrets Manager

Agora que o IAM está configurado e temos um usuário com permissões adequadas, vamos criar um segredo no AWS Secrets Manager. O Secrets Manager é um serviço da AWS que permite armazenar e gerenciar credenciais de forma segura.

O que é o Secrets Manager?

O AWS Secrets Manager é projetado para armazenar segredos, como senhas, chaves API e outras informações sensíveis, de forma segura. Ele permite que você recupere esses segredos de maneira programática, evitando a exposição de informações sensíveis no código-fonte da aplicação.

  1. Acesse o painel do AWS Secrets Manager.
  2. Clique em Store a new secret.
  3. Selecione o tipo de segredo que você deseja armazenar. Por exemplo, para armazenar credenciais de banco de dados, selecione Other type of secret e adicione chaves como DB_USERNAME e DB_PASSWORD.
  4. Escolha um nome para o segredo. Por exemplo: my-app-secret.
  5. Finalize a criação do segredo e anote o nome dele. Você precisará desse nome ao configurar o Laravel para acessar o segredo.

Criando um Novo Projeto Laravel

Agora que temos tudo configurado na AWS, vamos para o Laravel. O primeiro passo é criar um novo projeto Laravel.

Abra o terminal em uma pasta do seu sistema e execute o seguinte comando para criar um novo projeto Laravel:

composer create-project laravel/laravel nome-do-projeto

Esse comando criará um diretório com a estrutura básica do Laravel e todas as dependências necessárias.

Instalando o SDK da AWS no Laravel

Com o projeto Laravel criado, o próximo passo é instalar o SDK da AWS para que possamos interagir com o Secrets Manager.

No terminal, dentro da pasta do projeto Laravel, execute o comando:

composer require aws/aws-sdk-php

O SDK da AWS fornece uma maneira fácil de interagir com todos os serviços da AWS, incluindo o Secrets Manager, diretamente de dentro do seu projeto Laravel.

Configurando o .env

Antes de prosseguir para o código, precisamos definir as credenciais da AWS no arquivo .env do Laravel. Esse arquivo é onde armazenamos as variáveis de ambiente, como as chaves de acesso e o nome do segredo.

No arquivo .env, adicione as seguintes variáveis para configurar o acesso à AWS:

AWS_ACCESS_KEY_ID=seu_access_key_id
AWS_SECRET_ACCESS_KEY=seu_secret_access_key
AWS_DEFAULT_REGION=us-east-1
AWS_SECRET_MANAGER_SECRET=my-app-secret
  • AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY: As credenciais que você obteve ao criar o usuário IAM.
  • AWS_DEFAULT_REGION: A região onde seu segredo está armazenado (por exemplo, us-east-1).
  • AWS_SECRET_MANAGER_SECRET: O nome do segredo que você criou no Secrets Manager.

Criando o Provider no Laravel

Agora, vamos criar um provider no Laravel que será responsável por acessar o segredo armazenado no AWS Secrets Manager e configurar as variáveis de ambiente automaticamente.

No terminal, execute o seguinte comando para criar um novo provider:

php artisan make:provider SecretsServiceProvider

Abra o arquivo app/Providers/SecretsServiceProvider.php e insira o seguinte código:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
use Illuminate\Support\Facades\Log;

class SecretsServiceProvider extends ServiceProvider
{
    public function register()
    {
        // Cliente do Secrets Manager
        $client = new SecretsManagerClient([
            'region' => env('AWS_DEFAULT_REGION'),
            'version' => 'latest',
        ]);

        // Recupera o nome do segredo do .env
        $secretName = env('AWS_SECRET_MANAGER_SECRET');

        try {
            // Obtém o segredo do Secrets Manager
            $result = $client->getSecretValue([
                'SecretId' => $secretName,
            ]);

            // O segredo será retornado em formato JSON
            $secret = json_decode($result['SecretString'], true);

            // Define os valores das variáveis de ambiente com base nas chaves do segredo
            foreach ($secret as $key => $value) {
                // Usa o método env() para configurar o valor no ambiente
                putenv("{$key}={$value}");
            }
        } catch (AwsException $e) {
            Log::error("Erro ao acessar o Secrets Manager: " . $e->getMessage());

            dd($e->getMessage());
        }
    }

    public function boot() {}
}

Esse código cria um cliente do AWS Secrets Manager, recupera o segredo e define as variáveis de ambiente com base nas chaves do segredo.

Registrando o Provider no Laravel

Agora que o provider está pronto, precisamos registrá-lo no Laravel para que ele seja carregado corretamente.

Abra o arquivo bootstrap/app.php e adicione o seguinte código ao array de providers:

<?php

return [
    App\Providers\AppServiceProvider::class,
    App\Providers\SecretsServiceProvider::class,
    App\Providers\SecretsServiceProvider::class //Adicione o seu provider
];

Limpando Cache e refazendo Autoload

Para garantir que o Laravel carregue corretamente o provider e as variáveis de ambiente, execute os seguintes comandos:

php artisan config:clear
php artisan cache:clear
php artisan config:cache


composer dump-autoload

Acessando as variáveis de ambiente no Laravel

Agora que tudo está configurado, você pode acessar suas variáveis de ambiente no Laravel de qualquer lugar. Por exemplo, para acessar o nome do segredo, basta usar o comando:

$secretName = env('AWS_SECRET_MANAGER_SECRET');

Conclusão

Você agora configurou com sucesso a integração entre a AWS e o Laravel usando o IAM e o Secrets Manager. Isso permitirá que sua aplicação Laravel acesse segredos de maneira segura, sem a necessidade de armazenar credenciais diretamente no código.

Quer aprender mais? Assista à nossa videoaula completa sobre como integrar o AWS IAM e o Secrets Manager com Laravel. No vídeo, mostramos o passo a passo de forma prática, com exemplos detalhados para que você consiga implementar tudo isso no seu projeto sem dificuldades.

 

Gunnar Correa
Gunnar Correa

Autodidata, Graduado em Desenvolvimento Web, Especialista em Tecnologias na Educação e Pós-graduando em Segurança da Informação. Começou seus estudos na área de programação quando era criança, e atualmente, está estudando desenvolvimento de jogos. Fundador da SatellaSoft, criado em 2009 com o intuito de compartilhar conhecimento de forma gratuita e inédita.

Todos os nossos cursos em promoção
Todos os nossos cursos em promoção

Webstories

Todos os nossos cursos em promoção

Todos os nossos cursos em promoção

Deixe um comentário
Aguarde...
Todos os nossos cursos em promoção