Integrar o AWS S3 ao Google SecOps

Neste documento, descrevemos como integrar o AWS S3 ao Google Security Operations.

Casos de uso

  1. Gerenciar buckets
  2. Fazer o download de arquivos de buckets
  3. Enviar arquivos para os buckets

Antes de começar

Antes de configurar a integração do AWS S3 no Google SecOps, verifique se o ambiente de rede e as credenciais da AWS atendem a todos os pré-requisitos operacionais.

Para preparar o ambiente para integração, conclua o seguinte:

  1. Verifique a linha de visão da rede entre o Google SecOps e os endpoints de serviço regionais do AWS S3.

  2. Consiga credenciais de API programática da AWS (um ID de chave de acesso e uma chave de acesso secreta) com as permissões do IAM adequadas.

  3. Configure e teste a instância de integração no Google SecOps.

Requisitos de rede

O Google SecOps se comunica diretamente com o serviço AWS S3 usando APIs REST HTTPS e o SDK do Python da AWS (boto3).

Verifique se o ambiente de rede atende às seguintes regras de conectividade:

  • Acesso HTTPS de saída: ative a comunicação HTTPS de saída da sua instância do Google SecOps ou do agente remoto para o endpoint regional do AWS S3 (s3.<region>.amazonaws.com ou s3.amazonaws.com) pela porta 443/TCP.

    Para mais informações, consulte Endpoints de serviço da AWS na documentação da AWS.

  • Configuração de proxy: se a organização rotear o tráfego de saída por um proxy HTTP/HTTPS, configure as variáveis de proxy de ambiente padrão (HTTP_PROXY, HTTPS_PROXY, NO_PROXY) no servidor do Google SecOps ou no host do agente remoto.

Autenticação e credenciais

A integração do AWS S3 requer credenciais de API programáticas para autenticar solicitações usando o AWS Signature versão 4.

Verifique se o ambiente da AWS atende aos seguintes requisitos de autenticação:

  • Credenciais programáticas: consiga um ID de chave de acesso da AWS e uma chave secreta da AWS válidos associados a um usuário ou papel do IAM da AWS.

    Para informações sobre como criar identidades do IAM e gerar credenciais, consulte Como gerenciar chaves de acesso para usuários do IAM e Identidades do IAM na documentação da AWS.

  • Privilégio mínimo: restrinja as permissões apenas às ações e aos recursos de bucket necessários para seus fluxos de trabalho automatizados e alterne as credenciais periodicamente.

    Para detalhes sobre as recomendações de segurança, consulte Práticas recomendadas de segurança no IAM na documentação da AWS.

Configurar permissões de ação

Conceda à identidade de autenticação do AWS IAM as permissões específicas necessárias para as ações que os playbooks do Google SecOps executam.

Consulte as permissões mínimas para ações do AWS S3 na tabela a seguir:

Nome da ação Permissão do IAM da AWS obrigatória (ActionName:Permission) Permissão de pré-requisito Descrição / Escopo do recurso
Fazer o download do arquivo de um bucket s3:GetObject s3:ListAllMyBuckets Faz o download de um objeto de um bucket do S3. Recurso: arn:aws:s3:::<bucket-name>/*.
Get Bucket Policy s3:GetBucketPolicy s3:ListAllMyBuckets Recupera a política de acesso do bucket. Recurso: arn:aws:s3:::<bucket-name>.
Listar objetos do bucket s3:ListBucket s3:ListAllMyBuckets Lista objetos em um bucket do S3. Recurso: arn:aws:s3:::<bucket-name>.
Listar buckets s3:ListAllMyBuckets — Lista todos os buckets do S3 que pertencem à conta. Recurso: *.
Ping s3:ListAllMyBuckets — Valida a conectividade da integração. Recurso: *.
Definir política de bucket s3:PutBucketPolicy s3:ListAllMyBuckets Define ou modifica uma política de bucket do S3. Recurso: arn:aws:s3:::<bucket-name>.
Fazer upload de um arquivo para um bucket s3:PutObject s3:ListAllMyBuckets Faz upload de um objeto em um bucket do S3. Recurso: arn:aws:s3:::<bucket-name>/*.

Referência rápida (ActionName:Permission)

Use a seguinte referência rápida para analisar as permissões necessárias para cada ação:

Ping: s3:ListAllMyBuckets
Download File From Bucket: s3:GetObject, s3:ListAllMyBuckets
Get Bucket Policy: s3:GetBucketPolicy, s3:ListAllMyBuckets
List Bucket Objects: s3:ListBucket, s3:ListAllMyBuckets
List Buckets: s3:ListAllMyBuckets
Set Bucket Policy: s3:PutBucketPolicy, s3:ListAllMyBuckets
Upload File To Bucket: s3:PutObject, s3:ListAllMyBuckets

Exemplo de política do IAM (privilégio mínimo)

O exemplo de política a seguir demonstra as permissões necessárias para executar todas as ações do AWS S3 no Google SecOps.

Para instruções sobre como criar e anexar políticas do IAM, consulte Como criar políticas do IAM na documentação da AWS.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "SecOpsS3Discovery",
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets"
      ],
      "Resource": "*"
    },
    {
      "Sid": "SecOpsS3BucketOperations",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketPolicy",
        "s3:PutBucketPolicy"
      ],
      "Resource": "arn:aws:s3:::*"
    },
    {
      "Sid": "SecOpsS3ObjectOperations",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::*/*"
    }
  ]
}

Parâmetros de integração

Use os seguintes parâmetros para configurar a integração:

Nome de exibição do parâmetro Tipo Valor padrão É obrigatório Descrição
ID da chave de acesso da AWS String N/A Sim ID da chave de acesso da AWS a ser usado na integração.
Chave secreta da AWS Senha N/A Sim Chave secreta da AWS para usar na integração.
Região padrão da AWS String N/A Sim Região padrão da AWS a ser usada na integração, por exemplo, us-west-2.
Executar remotamente Caixa de seleção Desmarcado Não Marque o campo para executar a integração configurada remotamente. Depois de marcada, a opção de selecionar o usuário remoto (agente) aparece.

Para instruções sobre como configurar uma integração no Google SecOps, consulte Configurar integrações.

Se necessário, você pode fazer mudanças depois. Depois de configurar uma instância de integração, é possível usá-la em playbooks. Para mais informações sobre como configurar e oferecer suporte a várias instâncias, consulte Como oferecer suporte a várias instâncias.

Ações

Para mais informações sobre ações, consulte Responder a ações pendentes na sua mesa de trabalho e Executar uma ação manual no seu caso.

Fazer o download do arquivo do bucket

Fazer o download do arquivo do bucket no AWS S3.

Parâmetros

Nome de exibição do parâmetro Tipo Valor padrão É obrigatório Descrição
Caminho do arquivo do bucket String s3://{bucket_name}/{file_name} Sim Especifique o caminho para o arquivo no bucket. Exemplo: s3://siemplify/syslog/log.txt
Caminho de download String N/A Sim Especifique o caminho para o download do arquivo.

Corrida

Essa ação não é executada em entidades.

Resultados da ação

Resultado do script
Nome do resultado do script Opções de valor Exemplo
is_success Verdadeiro/falso is_success:False
Resultado do JSON
{
"bucket_file_path": "s3://testsiemplify/test/123.txt"
"download_path": "/usr/bin/share/download.txt"
}

Painel de casos

Tipo de resultado Valor / Descrição Tipo
Mensagem de saída*

A ação não pode falhar nem interromper a execução de um playbook:

Se o código de status for igual a 200 (is_success = true) "Successfully downloaded '{0}' from AWS S3".format(bucket_file_path)

Se outro código de status (is_success=false): "A ação não conseguiu baixar '{0}' do AWS S3. Motivo: já existe um arquivo com esse caminho de download."

A ação deve falhar e interromper a execução de um playbook:

Se houver um erro fatal, como credenciais incorretas, falta de conexão com o servidor, erros do SDK, entre outros: "Erro ao executar a ação 'Fazer o download do arquivo do bucket'. Motivo: {0}''.format(error.Stacktrace)

Geral

Acessar política de bucket

Recupere informações sobre a política de bucket do AWS S3.

Parâmetros

Nome de exibição do parâmetro Tipo Valor padrão É obrigatório Descrição
Nome do bucket String N/A Sim Especifique o nome do bucket de onde as informações da política serão recuperadas.

Corrida

Essa ação não é executada em entidades.

Resultados da ação

Resultado do script
Nome do resultado do script Opções de valor Exemplo
is_success Verdadeiro/falso is_success:False
Resultado do JSON
{
    "Policy": {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "AddPerm",
                "Effect": "Allow",
                "Principal": "*",
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::testsiemplify/*"
            }
        ]
    }
Painel de casos
Tipo de resultado Valor / Descrição Tipo
Mensagem de saída*

A ação não pode falhar nem interromper a execução de um playbook:

Se o código de status for 200 (is_success = true) "Successfully retrieved information about the policy of the "{0}" bucket in AWS S3".format(bucket_name)

Se outro código de status (is_success=false): "Action wasn't able to return information about the policy of the '{0}' bucket in AWS S3".format(bucket_name)

A ação deve falhar e interromper a execução de um playbook:

Se houver um erro fatal, como credenciais incorretas, falta de conexão com o servidor, entre outros: "Erro ao executar a ação 'Get Bucket Policy'. Motivo: {0}''.format(error.Stacktrace)

Geral

Listar objetos do bucket

Permite que o usuário desative uma conta de usuário. O corpo da solicitação contém o usuário a ser desativado. A propriedade de ativação da conta precisa ser definida como falsa.

Parâmetros

Nome de exibição do parâmetro Tipo Valor padrão É obrigatório Descrição
Nome do bucket String N/A Sim Especifique o nome do bucket de onde os objetos serão recuperados.
Número máximo de objetos a serem retornados Inteiro N/A Não Especifique quantos objetos serão retornados.

Corrida

Essa ação não é executada em entidades.

Resultados da ação

Resultado do script
Nome do resultado do script Opções de valor Exemplo
is_success Verdadeiro/falso is_success:False
Resultado do JSON
"Contents": [
        {
            "Key": "text.txt",
            "LastModified": %Y-%m-%dT%H:%M:%S,
            "ETag": "d41d8cd98f00b204e9800998ecf8427e",
            "Size": 0,
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "lab_aws",
                "ID": "935dc3fed0e1d2c5b12242cf9927370824f2438681a2d3c0523f254dbde41aba"
            }
        },
        {
            "Key": "text_1.txt",
            "LastModified": %Y-%m-%dT%H:%M:%S,
            "ETag": "d41d8cd98f00b204e9800998ecf8427e",
            "Size": 0,
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "lab_aws",
                "ID": "935dc3fed0e1d2c5b12242cf9927370824f2438681a2d3c0523f254dbde41aba"
            }
        }
    ]
Painel de casos
Tipo de resultado Valor / Descrição Tipo
Mensagem de saída*

A ação não pode falhar nem interromper a execução de um playbook:

Se o código de status for igual a 200 (is_success = true) "Successfully returned objects of the "{0}" bucket in AWS S3".format(bucket_name)

Se outro código de status (is_success=false): "Action wasn't able to return objects of the '{0}' bucket in AWS S3".format(bucket_name)

A ação deve falhar e interromper a execução de um playbook:

Se houver um erro fatal, como credenciais incorretas, falta de conexão com o servidor, entre outros: "Erro ao executar a ação 'Listar objetos do bucket'. Motivo: {0}''.format(error.Stacktrace)

Geral
Tabela do painel de casos

Nome da tabela: objetos do bucket '{0}'

Colunas:

  • Chave (mapeada como chave)
  • Última modificação (mapeada como LastModified)
  • Tamanho (bytes) (mapeado como tamanho)
  • Proprietário (mapeado como Proprietário/Nome de exibição)
  • Classe de armazenamento (mapeada como classe de armazenamento)
Geral

Listar buckets

Recuperar uma lista de buckets do AWS S3.

Corrida

Essa ação não é executada em entidades.

Resultados da ação

Resultado do script
Nome do resultado do script Opções de valor Exemplo
is_success Verdadeiro/falso is_success:False
Resultado do JSON
{
    "Buckets": [
        {
            "CreationDate": %Y-%m-%dT%H:%M:%S,
            "Name": "testsiemplify"
        }
    ],
    "Owner": {
        "DisplayName": "lab_aws",
        "ID": "935dc3fed0e1d2c5b12242cf9927370824f2438681a2d3c0523f254dbde41aba"
    },
Painel de casos
Tipo de resultado Valor / Descrição Tipo
Mensagem de saída*

A ação não pode falhar nem interromper a execução de um playbook:

Se o código de status for igual a 200 (is_success = true), "Successfully listed available buckets in AWS S3".

Se outro código de status (is_success=false): "A ação não conseguiu listar os buckets disponíveis no AWS S3.

A ação deve falhar e interromper a execução de um playbook:

Se houver um erro fatal, como credenciais incorretas, falta de conexão com o servidor, entre outros: "Erro ao executar a ação 'Listar buckets'. Motivo: {0}''.format(error.Stacktrace)

Geral

Ping

Teste a conectividade com o AWS S3 usando os parâmetros fornecidos na página de configuração da integração na página do Google SecOps Content Hub.

Casos de uso

Teste a conectividade.

Corrida

Essa ação não é executada em entidades.

Resultados da ação

Resultado do script
Nome do resultado do script Opções de valor Exemplo
is_success Verdadeiro/falso is_success:False
Painel de casos
Tipo de resultado Valor / Descrição Tipo
Mensagem de saída*

A ação não pode falhar nem interromper a execução de um playbook:

Se a operação for bem-sucedida:

"A conexão com o servidor do AWS S3 foi estabelecida usando os parâmetros fornecidos."

A ação deve falhar e interromper a execução de um playbook:

Caso não seja concluída, vai acontecer o seguinte:

"Falha ao se conectar ao servidor AWS S3! O erro é {0}".format(exception.stacktrace)

Geral

Definir política de bucket

Defina uma política no bucket do AWS S3.

Parâmetros

Nome de exibição do parâmetro Tipo Valor padrão É obrigatório Descrição
Nome do bucket String N/A Sim Especifique o nome do bucket em que você quer atualizar a política.
Objeto JSON de política String N/A Sim Especifique o objeto JSON da política que você quer definir para o bucket. Confira alguns exemplos aqui: https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html.

Corrida

Essa ação não é executada em entidades.

Resultados da ação

Resultado do script
Nome do resultado do script Opções de valor Exemplo
is_success Verdadeiro/falso is_success:False
Resultado do JSON
bucket_policy = {
    'Version': '2012-10-17',
    'Statement': [{
        'Sid': 'AddPerm',
        'Effect': 'Allow',
        'Principal': '*',
        'Action': ['s3:GetObject'],
        'Resource': f'arn:aws:s3:::{bucket_name}/*'
    }]
}
Painel de casos
Tipo de resultado Valor / Descrição Tipo
Mensagem de saída*

A ação não pode falhar nem interromper a execução de um playbook:

Se o código de status == 204 (is_success = true) "A política do bucket "{0}" no AWS S3 foi atualizada".format(bucket_name)

Se outro código de status (is_success=false): "Action wasn't able to update the policy of the '{0}' bucket in AWS S3".format(bucket_name)

A ação deve falhar e interromper a execução de um playbook:

Se houver um erro fatal, como credenciais incorretas, falta de conexão com o servidor, entre outros: "Erro ao executar a ação 'Definir política de bucket'. Motivo: {0}''.format(error.Stacktrace)

Fazer upload de arquivo para o bucket

Fazer upload de um arquivo para o bucket no AWS S3.

Parâmetros

Nome de exibição do parâmetro Tipo Valor padrão É obrigatório Descrição
Caminho do arquivo String N/A Sim Especifique o caminho para o arquivo que precisa ser enviado.
Caminho de upload do bucket String s3://{bucket_name}/{file_name} Sim Especifique o caminho no bucket para onde o caminho deve ser enviado. Exemplo: s3://siemplify/syslog/log.txt

Corrida

Essa ação não é executada em entidades.

Resultados da ação

Resultado do script
Nome do resultado do script Opções de valor Exemplo
is_success Verdadeiro/falso is_success:False
Resultado do JSON
{
"bucket_upload_path": "s3://testsiemplify/test/123.txt"
"file_path": "/usr/bin/share/download.txt"
}
Painel de casos
Tipo de resultado Valor / Descrição Tipo
Mensagem de saída*

A ação não pode falhar nem interromper a execução de um playbook:

Se o código de status for == 200 (is_success = true) "Successfully uploaded '{0}' to AWS S3 {1} bucket".format(file_path, bucket name aka first string after s3://)

Se o arquivo não existir (is_success = false): "A ação não conseguiu fazer upload de '{0}' para o AWS S3. Motivo: o arquivo com esse caminho de upload não existe."

A ação deve falhar e interromper a execução de um playbook:

Se houver um erro fatal, como credenciais incorretas, falta de conexão com o servidor, erros do SDK, entre outros: "Erro ao executar a ação 'Fazer upload do arquivo para o bucket'. Motivo: {0}''.format(error.Stacktrace)

Geral

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.