An open API service indexing awesome lists of open source software.

https://github.com/lpsm-dev/terraform-opsgenie-security-hub

🛠️ Sets up Opsgenie + Amazon Security Hub integration using Terraform
https://github.com/lpsm-dev/terraform-opsgenie-security-hub

aws iac integration opsgenie opsgenie-setup security-hub terraform tofu

Last synced: about 2 months ago
JSON representation

🛠️ Sets up Opsgenie + Amazon Security Hub integration using Terraform

Awesome Lists containing this project

README

          

gif-header

**Terraform Opsgenie Security Hub**

[![Semantic Release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://semantic-release.gitbook.io/semantic-release/usage/configuration)
[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](https://www.conventionalcommits.org/en/v1.0.0/)
[![Built with Devbox](https://jetpack.io/img/devbox/shield_galaxy.svg)](https://jetpack.io/devbox/docs/contributor-quickstart/)

Integração do [Opsgenie](https://www.atlassian.com/software/opsgenie) + [Amazon Security Hub](https://aws.amazon.com/security-hub/) utilizando [Terraform](https://www.terraform.io/).

## Arquitetura


architecture-0

No final do dia, teremos todas essas contas gerando findings de segurança e enviando para o Security Hub da conta de segurança, que é delegada para administrar os seviços de segurança a partir de um permissionamento feito na conta payer (root). A partir disso, queremos que esses findings sejam enviados para o Opsgenie para que possamos abrir um alerta e tomar as ações necessárias.

Com o alerta aberto no Opsgenie, podemos a partir dele integrar com outros serviços, como o [Jira](https://www.atlassian.com/br/software/jira), [Slack](https://slack.com/), [Teams](https://www.microsoft.com/pt-br/microsoft-teams/log-in) e etc.

(back to top)

## Ferramentas

- O [AWS EventBridge](https://aws.amazon.com/pt/eventbridge/) é um serviço de integração de eventos. Ele permite que você capture eventos de várias fontes, incluindo serviços da AWS como o Security Hub, e os direcione para diferentes destinos, como o AWS SNS. Com o EventBridge, você pode criar regras que definem quais eventos devem ser capturados e para onde eles devem ser enviados.
- O [AWS SNS](https://aws.amazon.com/pt/sns/) é um serviço de mensagens e notificações que facilita a comunicação entre sistemas distribuídos. Ele permite que você publique mensagens para tópicos e que os assinantes desses tópicos recebam essas mensagens.
- O [Amazon Security Hub](https://aws.amazon.com/security-hub/) é um serviço que centraliza e automatiza a segurança de múltiplas contas AWS e ajuda a identificar e corrigir problemas de segurança a partir de uma interface única. Ele conecta findings de segurança de outros produtos de segurança da AWS, como Inpsector, Macie e GardDuty.
- O [Opsgenie](https://www.atlassian.com/br/software/opsgenie) é um serviço de gerenciamento de alertas que permite que você gerencie, responda e resolva incidentes de TI de forma eficiente. Ele fornece alertas em tempo real e notificações para ajudar a garantir que você esteja ciente de problemas críticos em seu ambiente.

(back to top)

## Fluxo

### Manual Trigger

Time de segurança manualmente trigga uma custom action na interface web do Amazon Security Hub para que o finding seja enviado para o Opsgenie e um alerta seja aberto.


architecture-1

### Automatic Trigger:

O Security Hub detecta um finding e envia um evento para o EventBridge, que faz uma primeira filtragem para validar se o seu evento será enviado para o SNS. Se for, o SNS envia o evento para o Opsgenie, que cria um alerta com base no evento recebido. Agora, o time de segurança acompanha e é escalado automaticamente sempre que uma nova vulnerabilidade for descoberta.


architecture-2

(back to top)

## Requirements

| Name | Version |
|------|---------|
| [terraform](#requirement\_terraform) | >= 1.8 |
| [aws](#requirement\_aws) | ~> 5.70 |
| [opsgenie](#requirement\_opsgenie) | ~> 0.6 |
| [time](#requirement\_time) | ~> 0.12 |

## Providers

| Name | Version |
|------|---------|
| [aws](#provider\_aws) | 5.70.0 |
| [opsgenie](#provider\_opsgenie) | 0.6.37 |
| [time](#provider\_time) | 0.12.1 |

## Modules

| Name | Source | Version |
|------|--------|---------|
| [cw\_opsgenie\_sh\_custom\_action](#module\_cw\_opsgenie\_sh\_custom\_action) | terraform-aws-modules/cloudwatch/aws//modules/log-group | ~> 5.6 |
| [eventbridge](#module\_eventbridge) | terraform-aws-modules/eventbridge/aws | ~> 3.11 |

## Resources

| Name | Type |
|------|------|
| [aws_iam_policy.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_policy) | resource |
| [aws_iam_role.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |
| [aws_iam_role_policy_attachment.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
| [aws_securityhub_action_target.opsgenie](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/securityhub_action_target) | resource |
| [aws_sns_topic.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sns_topic) | resource |
| [aws_sns_topic_policy.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sns_topic_policy) | resource |
| [aws_sns_topic_subscription.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sns_topic_subscription) | resource |
| [opsgenie_api_integration.this](https://registry.terraform.io/providers/opsgenie/opsgenie/latest/docs/resources/api_integration) | resource |
| [opsgenie_escalation.this](https://registry.terraform.io/providers/opsgenie/opsgenie/latest/docs/resources/escalation) | resource |
| [opsgenie_team.this](https://registry.terraform.io/providers/opsgenie/opsgenie/latest/docs/resources/team) | resource |
| [time_static.creation](https://registry.terraform.io/providers/hashicorp/time/latest/docs/resources/static) | resource |
| [aws_caller_identity.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/caller_identity) | data source |
| [aws_region.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/region) | data source |
| [opsgenie_user.users](https://registry.terraform.io/providers/opsgenie/opsgenie/latest/docs/data-sources/user) | data source |

## Inputs

| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| [aws\_environment](#input\_aws\_environment) | The environment to deploy the resources | `string` | `"production"` | no |
| [aws\_region](#input\_aws\_region) | AWS region to deploy the resources | `string` | `"us-east-1"` | no |
| [opsgenie\_api\_key](#input\_opsgenie\_api\_key) | API Key of Opsgenie | `string` | n/a | yes |
| [opsgenie\_team\_description](#input\_opsgenie\_team\_description) | Team description of Opsgenie | `string` | n/a | yes |
| [opsgenie\_team\_name](#input\_opsgenie\_team\_name) | Team name of Opsgenie | `string` | n/a | yes |
| [opsgenie\_users](#input\_opsgenie\_users) | Opsgenie list users and roles | `list(map(string))` | n/a | yes |

## Outputs

| Name | Description |
|------|-------------|
| [aws\_account\_id](#output\_aws\_account\_id) | Selected AWS Account ID |
| [aws\_region](#output\_aws\_region) | Details about selected AWS region |
| [opsgenie\_security\_hub\_role\_arn](#output\_opsgenie\_security\_hub\_role\_arn) | ARN of the IAM Role created for Opsgenie Security Hub Integration |
| [opsgenie\_security\_hub\_role\_name](#output\_opsgenie\_security\_hub\_role\_name) | Name of the IAM Role created for Opsgenie Security Hub Integration |

## Extras

Informações adicionais para que você possa configurar e utilizar a integração.

### Opsgenie Integration

> [!WARNING]
> Após a execução do projeto Terraform, você terá que finalizar a configuração do Opsgenie pela interface web. Para isso, siga os passos abaixo.

**Step 1:**

Acesse sua integração no Opsgenie e clique no botão de "Editar".


step-1

**Step 2:**

Selecione a opção de se autenticar com a conta do Amazon Security Hub.


step-2

**Step 3:**

Coloque a role criada pelo Terraform no campo de "Role ARN", selecione a região do Amazon Security Hub e clique em "Salvar".


step-3

Ao final desse processo você estará apto para receber os findings do Security Hub no Opsgenie.

### Opsgenie Alerts Rules

Para customizar seus alertas, você deverá editar a regra de "Incoming" da sua integração.


alert-rule

Na imagem acima é exemplificado como você pode customizar suas regras de alerta. Nesse caso, temos:

- Criar alerta para severidade **CRITICAL**.
- Criar alerta para severidade **HIGH**.

Cada regra de alerta permite personalizar vários elementos, como:

- **Mensagem**
- **Prioridade**
- **Tags**
- **Alias**
- **Descrição**
- **Entidade**
- **Notas**

Ao criar uma regra, você poderar editar esses campos para que o alerta seja mais informativo e relevante para sua equipe.

Além disso, o Opsgenie possui uma feature chamada [Dynamic fields](https://support.atlassian.com/opsgenie/docs/dynamic-fields-in-opsgenie-integrations/). Esses campos são usados para:

- Personalizar propriedades (elementos) do alerta.
- Ajustar condições do alerta com base em informações atualizadas.

Usando Dynamic fields você pode criar alertas que se adaptam automaticamente às mudanças em seu ambiente.

(back to top)

## Contributing

Gostaria de contribuir? Isso é ótimo! Temos um guia de contribuição para te ajudar. Clique [aqui](CONTRIBUTING.md) para lê-lo.

(back to top)

## Versioning

Para verificar o histórico de mudanças do projeto, acesse o arquivo [**CHANGELOG.md**](CHANGELOG.md).

(back to top)

## Troubleshooting

Se você tiver algum problema, [abra uma issue nesse projeto](https://github.com/lpsm-dev/terraform-opsgenie-security-hub/issues).

Dê uma ⭐️ para esse projeto se ele te ajudou!

gif-footer




Feito com 💜 por [mim](https://github.com/lpsm-dev) :wave: inspirado no [readme-md-generator](https://github.com/kefranabg/readme-md-generator)

(back to top)