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
- Acesse o painel do AWS IAM.
- No menu lateral, clique em Users e, em seguida, clique em Add user.
- Escolha a opção Programmatic access para criar um usuário com acesso via chave de acesso.
- 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.
- 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.
- Acesse o painel do AWS Secrets Manager.
- Clique em Store a new secret.
- 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
eDB_PASSWORD
. - Escolha um nome para o segredo. Por exemplo: my-app-secret.
- 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
eAWS_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.