DEV Community

Rodrigo Fernandes
Rodrigo Fernandes

Posted on

AWS S3

Anotações sobre o AWS S3 para ajudar na preparação das certificações AWS.

Até o momento as anotações são para as certificações abaixo:

Image description

Anotações gerais

  • S3 Notification pode enviar para Lambda, SQS e SNS
  • Habilitar versionamento NÃO melhora a segurança do Bucket.
  • Se perder a KMS Key que criptografou o o objetivo você perde acesso ao objeto.
  • Amazon S3-Managed Keys (SSE-S3) usa a criptografia AES-256

Police a nível de Bucket e Objeto

  • Bucket Level - arn:aws:s3:::demo
  • Object Level - arn:aws:s3:::demo/*
  • Bucket e Object Level - arn:aws:s3:::demo* - Não recomendado

Exemplo de Policy a nível de Bucket

{
  "Version": "2012-10-17",
  "Statement":
    {
      "Effect": "Allow",
      "Action": ["s3:*"],
      "Resource": ["arn:aws:s3:::nomedobucket"]
    }
}
Enter fullscreen mode Exit fullscreen mode

*Exemplo de Policy a nível de Objeto

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:*"],
      "Resource": ["arn:aws:s3:::nomedobucket"]
    },
    {
      "Effect": "Allow",
      "Action": ["s3:*"],
      "Resource": ["arn:aws:s3:::nomedobucket/*"]
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

*Exemplo de Policy a nível de Bucket e Objeto -- Não recomendado

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:*"],
      "Resource": ["arn:aws:s3:::nomedobucket*"]
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Logging requests using server access logging

Documentação oficial

  • Habilitar server access log no bucket

Controlling access from VPC endpoints with bucket policies

Documentação oficial

  • Libere o acesso no bucket policy

Amazon S3 Event Notifications

Documentação oficial

  • Não vem habilitado por padrão
  • Você pode usar o recurso Notificações de eventos do Amazon S3 para receber notificações quando determinados eventos ocorrerem em seu bucket do S3.
  • Para habilitar notificações, adicione uma configuração de notificação que identifique os eventos que você deseja que o Amazon S3 publique.

Destination

  • Amazon Simple Notification Service (Amazon SNS) topics
  • Amazon Simple Queue Service (Amazon SQS) queues
  • AWS Lambda
  • Amazon EventBridge

Visão geral das notificações de eventos do Amazon S3

  • New object created events
  • Object removal events
  • Restore object events
  • Reduced Redundancy Storage (RRS) object lost events
  • Replication events
  • S3 Lifecycle expiration events
  • S3 Lifecycle transition events
  • S3 Intelligent-Tiering automatic archival events
  • Object tagging events
  • Object ACL PUT events

Problema de acesso a objetos após upload entre contas

  • No comando aws s3api put-object, inserir --acl "bucket-owner-full-control para conceder permissões aos objetos

Como usar um ID externo ao conceder acesso aos seus recursos da AWS a terceiros

Documentação oficial

  • o ID externo permite que o usuário que está assumindo a função assegure as circunstâncias nas quais elas operam.
  • IAM Role + ExternalID + ARN -> Acesso cross-account

Concessão da permissão s3:PutObject com uma condição que exige que o proprietário do bucket obtenha controle total

Documentação oficial

  • Você pode exigir o cabeçalho x-amz-full-control na solicitação com permissão de controle total do proprietário do bucket. 
  • A policy de bucket a seguir concede ao usuário Dave a permissão s3:PutObject com uma condição de uso da chave de condição s3:x-amz-grant-full-control, que exige que a solicitação inclua o cabeçalho x-amz-full-control.

Image description


Cross Account S3 Access

Documentação oficial

  • IAM Role + External-ID + Fornecer ARN da Role para conta destino -> Acesso Cross-Account
  • Cria o Bucket Policy na conta principal liberando acesso das contas de destino
  • Na Bucket Policy coloca no Principala conta de destino
  • Na conta de destino deve-se criar uma Policy/Role que permite acessar o bucket na conta principal
  • Utiliza ACL para permissões a nível de Objeto

Exemplo bucket policy conta principal

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                **"AWS": "arn:aws:iam::ACCOUNT-B-NUMBER:root"**
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::mykplabs-central/*"
            ]
        }
    ]
}
Enter fullscreen mode Exit fullscreen mode

Exemplo Policy Conta destino

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::mykplabs-central/*"

        }
    ]
}
Enter fullscreen mode Exit fullscreen mode

Referências


S3 ACL

Documentação oficial

As ACLs são usadas para conceder permissões básicas de leitura/gravação em recursos para outras contas da AWS.

  • ACL suporta conjunto de permissões limitadas e
  • não pode conceder permissões condicionais, nem pode negar permissões explicitamente
  • não pode ser usado para conceder permissões para sub-recursos de bucket
  • Utilizando com Cross-Account
  • Aplicado a nível de arquivos (objetos)
  • Specified in the request using x-amz-acl
  • Não veem habilitado por padrão, tem que habilitar manualmente
  • Permissão s3getobjectdeve estar na policy

Permissões

Image description

Image description

Commands
Command to verify the ACL information of a specific object:
aws s3api get-object-acl --bucket bucket --key file.txt

Command to upload object with specific ACL
aws s3 cp file.txt s3://bucket/ --acl bucket-owner-full-control

Referências


MFA

Documentação oficial

  • A AIM Policy precisa ter a Condition abaixo: "Bool": {"aws:MultiFactorAuthPresent": true}

Este exemplo mostra como você pode criar uma política baseada em identidade que usa várias condições, que são avaliadas usando um arquivo AND. Ele permite acesso total ao serviço chamado SERVICE-NAME-1, e acesso às ações ACTION-NAME-A e ACTION-NAME-Bno serviço chamado SERVICE-NAME-2. Essas ações são permitidas somente quando o usuário é autenticado usando a autenticação multifator (MFA) .

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": [
            "service-prefix-1:*",
            "service-prefix-2:action-name-a",
            "service-prefix-2:action-name-b"
        ],
        "Resource": "*",
        "Condition": {
           ** "Bool": {"aws:MultiFactorAuthPresent": true},**
            "DateGreaterThan": {"aws:CurrentTime": "2017-07-01T00:00:00Z"},
            "DateLessThan": {"aws:CurrentTime": "2017-12-31T23:59:59Z"}
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

MFA CLI
Documentação oficial

  • aws ec2 describe-instances --profile mfa
  • aws ec2 stop-instances --instance-ids instance-id --profile mfa --region region
  • aws sts get-session-token --serial-number arn:aws:iam::accountid:mfa/user _--token-code _code

S3 Versioning

Documentação oficial

  • Você habilita e suspende o versionamento no nível do bucket. 
  • Depois que um bucket é habilitado para versionamento, ele nunca pode voltar a um estado sem versionamento. 
  • Mas você pode suspender o versionamento nesse bucket

Os buckets podem estar em um dos três estados:

  • Não versionado (Padrão)
  • Habilitado para versão
  • Com versionamento suspenso

Referências



Pre-signed URL´s

Documentação oficial

Por padrão, todos os objetos do S3 são privados. Somente o proprietário do objeto tem permissão para acessá-lo. Contudo, o proprietário do objeto pode compartilhar objetos com os outros criando um pre-signed URL, usando suas próprias credenciais de segurança para conceder permissão de prazo limitado para download de objetos.

  • Todos os buckets e objetos são privados por padrão.
  • Os pre-signed URL permitem que o usuário faça download ou upload de um objeto específico sem exigir credenciais ou permissões de segurança da AWS.
  • A pre-signed URL permite que qualquer pessoa acesse o objeto identificado na URL, desde que o criador da URL tenha permissão para acessar esse objeto.
  • A criação de pre-signed URL exige que o criador forneça credenciais de segurança, um nome de bucket, uma chave de objeto, um método HTTP (GET para objeto de download e PUT para objetos de upload) e data e hora de expiração
  • Os pre-signed URL são válidos apenas até a data e hora de expiração.
  • --expires-in (integer) Number of seconds until the pre-signed URL expires.
  • Default is 3600 seconds. Maximum is 604800 seconds.

Comandos
Ex: aws s3 presign s3://DOC-EXAMPLE-BUCKET/test2.txt \
 - expires-in 604800

Após executar o comando é gerado a URL pré assinada

Referências
Pre-Signed URLs


Cross Region Replication

Documentação oficial

O Amazon S3 replica somente itens específicos nos buckets que estão configurados para replicação.

  • Por default usa SSL
  • Replica em uma direção
  • Uma vez replicado o objeto não é replicado novamante
  • Usa Amazon S3 managed keys (SSE-S3) ou AWS KMS managed keys (SSE-KMS), mas não é habilitado por padrão
  • aws:SecureTransport é default no CRR
  • Delete markers é replicado, mas não é habilitado por padrão
  • Versões deletadas dos arquivos não
  • Versionamento deve estar habilitado
  • Ambas as contas devem ter o IAM Role configurado

Quando usar a replicação entre regiões

  • A replicação entre regiões (CRR) do S3 é usada para copiar objetos entre buckets do Amazon S3 em Regiões da AWS diferentes.
  • As tags podem ajudar a fazer o seguinte:
  • Atender aos requisitos de conformidade: embora o Amazon S3, por padrão, armazene seus dados em diversas zonas de disponibilidade geograficamente distantes, requisitos de conformidade podem exigir que você armazene os dados a distâncias ainda maiores.
  • Para atender a esses requisitos, use a Cross-Region Replication para replicar dados entre Regiões da AWS distantes.
  • **Minimizar a latência: **se seus clientes estiverem em duas localizações geográficas diferentes, é possível minimizar a latência no acesso a objetos mantendo cópias dos objetos nas Regiões da AWS geograficamente mais próximas dos usuários.
  • Aumentar a eficiência operacional: se tiver clusters de computação em duas Regiões da AWS diferentes que analisam o mesmo conjunto de objetos, talvez você prefira manter cópias dos objetos nessas regiões.

Quando usar Replicação na mesma região

  • A replicação para a mesma região (SRR) é usada para copiar objetos entre buckets do Amazon S3 na mesma Região da AWS. A SRR pode ajudar a fazer o seguinte:
  • Agregar logs em um único bucket: se você armazenar os logs em vários buckets ou em várias contas, será possível replicar facilmente os logs em um único bucket na região.
  • Isso permite processar os logs em um único local, o que é mais simples.
  • Configurar replicação em tempo real entre contas de produção e teste: se você ou seus clientes tiverem contas de produção e de teste que usam os mesmos dados, será possível replicar objetos entre essas várias contas, mantendo os metadados dos objetos.
  • Cumprir as leis de soberania de dados: pode ser necessário armazenar várias cópias dos dados em Contas da AWS separadas em uma determinada região.
  • A replicação na mesma região pode ajudar a replicar automaticamente dados vitais quando os regulamentos de conformidade não permitirem que os dados saiam do país.

Referências


Lockout Bucket S3

  • Conecta com root user, para deletar/alterar a bucket policy

Referências
What can I do if I am locked out of my bucket?

Top comments (0)