Como Criar uma Conexão Segura AWS Transfer Family SFTP com um Bucket S3 Privativo para Dados Sensíveis

Passo 1: Criar um Bucket S3 Privado
Primeiramente, crie um bucket S3 com as configurações padrão, garantindo que ele seja privado. Isso é essencial para proteger seus dados e garantir que apenas usuários autorizados possam acessá-los.
Passo 2: Criar uma Policy para Conectar o AWS Transfer SFTP ao S3
A próxima etapa é criar uma policy para permitir que o AWS Transfer SFTP acesse o bucket S3. A policy a seguir concede permissões para listar e acessar o conteúdo do bucket e de suas pastas.
Passo 3: Criar um IAM Role para o AWS Transfer
Agora, crie um IAM Role para o serviço de AWS Transfer. Durante a criação do role, selecione a policy criada no passo anterior para associá-la ao role.
Após criar o IAM Role, avance para o próximo passo.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::nome-do-seu-bucket"
},
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "arn:aws:s3:::nome-do-seu-bucket/*"
}
]
}
Essa policy permite ao AWS Transfer SFTP acessar as pastas específicas do bucket e interagir com os objetos dentro delas.
Na próxima etapa adicione a policy no Usuário “IAM” do SFTP.

Selecione o Service or use case: Transfer:

Passo 4: Criar o AWS Transfer SFTP
Na criação do AWS Transfer SFTP, você será solicitado a fornecer um nome de domínio. Se você já utiliza o Amazon Route 53, selecione Amazon Route 53 DNS Alias. Caso contrário, escolha a opção Other e insira o nome do seu provedor de DNS.
Step by step:


Nessa opção caso tenha um domínio dentro da AWS selecione Amazon Route53 DNS Alias, se não tiver basta colocar Other e apontar para seu provedor DNS

Armazenamento S3
Durante a configuração do AWS Transfer, selecione o Bucket S3 criado anteriormente para armazenamento. Você pode continuar nas etapas seguintes sem alterações até concluir a configuração.

Nas próximas etapas, pode avançar sem alterações até a conclusão
Passo 5: Criar a Conta SFTP
Agora, crie a conta de usuário para o SFTP no AWS Transfer. Ao criar a conta, selecione o IAM Role criado anteriormente. Se você quiser que o usuário tenha acesso a uma pasta específica dentro do bucket, configure isso também.

Selecionar role de acesso criada anteriormente

Caso tenha uma pasta especifica para esse usuário

Gerando Chave SSH LINUX
Para autenticação via SSH, será necessário gerar uma chave SSH para o usuário. Para isso, siga os passos abaixo:

Abra o terminal.
Execute o comando abaixo:

ssh-keygen -t rsa -b 2048 -f ~/.ssh/nome_da_chave
-t rsa: Especifica o tipo de chave (RSA).
-b 2048: Define o tamanho da chave em bits (2048 bits é uma escolha comum).
-f ~/.ssh/nome_da_chave: Define o nome e o local onde a chave será salva. Você pode alterar o nome conforme desejado.
Gerou 2 arquivos um nome_da_chave / nome_da_chave.pub

Vai digitar no terminal:
cat nome_da_chave.pub e vai copiar tudo que está dentro e colar no "SSH public keys"
No console
lembrando que no seu "cat" não virá esse 1. somente de ssh-rsa em diante.

Agora, precisamos adicionar tags no usuário que você está criando no Transfer. ficará assim.

Passo 6: Conectar ao Bucket S3 via WinSCP
Após configurar a conta, você pode conectar-se ao SFTP usando o WinSCP.
Faça o download do WinSCP: Download WinSCP.
Após a instalação, abra o WinSCP e configure a conexão, selecionando a chave privada gerada anteriormente.

Avançado \ Autenticação \ … \ selecione a chave privada (lembra a “nome_da_chave”)


Passo 7: Adicionar a Policy de Privacidade no Bucket
Para garantir que apenas usuários autorizados possam acessar o conteúdo do bucket, adicione a seguinte policy de privacidade ao bucket S3. A política abaixo garante que apenas o usuário especificado e o serviço AWS Transfer com a tag sftp-user: true possam acessar o bucket.
{
"Version": "2012-10-17",
"Id": "RestrictAdminAccess",
"Statement": [
{
"Sid": "AllowAccessToSpecificUsers",
"Effect": "Allow",
"Principal": {
"AWS": "" (arn do usuario)
},
"Action": "s3:*",
"Resource": [
"SEU BUCKET", (ARN DO BUCKET)
"SEU BUCKET"(ARN DO BUCKET+/*)
],
"Condition": {
"StringEquals": {
"aws:PrincipalTag/sftp-user": "true" (tags você quiser alterar)
}
}
},
{
"Sid": "AllowTransferFamilySFTPUsers",
"Effect": "Allow",
"Principal": {
"Service": "transfer.amazonaws.com" (Não alterar)
},
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:ListBucket"
],
"Resource": [
"SEU BUCKET",(ARN DO BUCKET)
"SEU BUCKET"(ARN DO BUCKET+/*)
],
"Condition": {
"StringEquals": {
"aws:PrincipalTag/sftp-user": "true" (Não alterar)
}
}
},
{
"Sid": "DenyAccessIfTagIsNotTrue",
"Effect": "Deny",
"Principal": {
"AWS": ""(arn do usuario)
},
"Action": "s3:*",
"Resource": [
"SEU BUCKET", (ARN DO BUCKET)
"SEU BUCKET" (ARN DO BUCKET+/*)
],
"Condition": {
"StringNotEquals": {
"aws:PrincipalTag/sftp-user": "true"
}
}
}
]
}

Explicação da Policy:
- AllowAccessToSpecificUsers: Permite o acesso ao bucket apenas se o usuário IAM tiver a tag sftp-user: true.
- AllowTransferFamilySFTPUsers: Permite que o serviço AWS Transfer Family acesse o bucket, desde que tenha a tag sftp-user: true.
- DenyAccessIfTagIsNotTrue: Nega o acesso caso a tag sftp-user não seja true para o usuário IAM especificado.


Passo 8: Testar a Conexão
Seguindo essas etapas, você cria uma configuração segura para o AWS Transfer Family SFTP, permitindo que apenas usuários específicos com a tag correta acessem os dados sensíveis armazenados em um bucket S3 privado. As políticas de segurança, como o uso de tags e negação de acesso, são essenciais para proteger os dados e garantir conformidade.
Se precisar de mais detalhes ou ajustes, consulte a documentação oficial da AWS ou entre em contato para mais informações.
Ajuda na Implementação da Política de Privacidade no Bucket S3
Neste projeto, Vinicius Viana contou com minha ajuda para a implementação de uma política de privacidade no bucket S3, garantindo que nem mesmo os administradores possam visualizar os objetos. A configuração foi feita para que apenas os usuários autorizados ou o root tivessem acesso aos dados, aumentando a segurança e privacidade no gerenciamento dos objetos no S3.