Carga inicial
This commit is contained in:
210
README.md
210
README.md
@@ -1,3 +1,209 @@
|
||||
# iac-sei
|
||||
# Documentacao repositório iac-sei
|
||||
|
||||
Repositório para armazenamento do código terraform para o SEI
|
||||
|
||||
## Introducao geral
|
||||
|
||||
Este conjunto de arquivos Terraform provisiona uma arquitetura OCI para o ambiente SEI. A stack cria recursos de computacao, rede, balanceamento de carga, armazenamento compartilhado, logging, backup, WAF e seguranca por Vault. O desenho geral usa uma rede em camadas: um load balancer publico recebe o trafego HTTP/HTTPS/SOLR, encaminha as requisicoes para instancias privadas SEI, SIP e SOLR, e os servidores de aplicacao acessam servicos internos como banco MySQL, Memcached, JodServer e File Storage.
|
||||
|
||||
As instancias sao criadas com Oracle Linux 9, sem IP publico, distribuidas entre fault domains e inicializadas por arquivos `cloud-init` especificos por papel. O codigo tambem gera uma chave SSH master e uma senha administrativa MySQL, armazenando esses segredos no OCI Vault protegido por chave KMS criada no proprio Terraform.
|
||||
|
||||
## Visao geral dos componentes
|
||||
|
||||
| Componente | Arquivos principais | O que e provisionado |
|
||||
| --- | --- | --- |
|
||||
| Provider e data sources | `providers.tf`, `data_sources.tf` | Provider OCI, imagem Oracle Linux 9 mais recente, availability domain, fault domains e configuracoes MySQL. |
|
||||
| Compute | `server_instances_*.tf` | Instancias SEI, SIP, SOLR, Memcached e JodServer. |
|
||||
| Rede e NSGs | `nsg-*.tf` | Network Security Groups e regras para load balancer, aplicacao, SOLR, Memcached, JodServer e banco. |
|
||||
| Load balancer | `sei_public_load_balancer.tf` | Load balancer publico flexivel, backend sets, backends, listeners, hostnames e logs. |
|
||||
| File Storage | `fss_server.tf`, `variables_sei_nfs.tf` | File system SEI, mount target, export set, export `/dados` e snapshot policy opcional. |
|
||||
| Vault e senhas | `vault.tf`, `generation_keys.tf` | Vault, KMS key, chave SSH master, senha MySQL e secrets no OCI Vault. |
|
||||
| Backup | `boot_volume_backups.tf` | Politica opcional de backup e volume group com boot volumes das instancias. |
|
||||
| WAF | `sei_waf.tf` | Politica WAF opcional, Web App Firewall vinculado ao load balancer e log WAF. |
|
||||
| Logging | `logging_group.tf`, `sei_public_load_balancer.tf`, `sei_waf.tf` | Grupo de logs e logs de acesso/erro do load balancer e do WAF. |
|
||||
|
||||
## Armazenamento de senhas e segredos no Vault
|
||||
|
||||
O codigo evidencia uma estrategia de centralizacao de segredos no OCI Vault:
|
||||
|
||||
| Recurso | Arquivo | Funcao |
|
||||
| --- | --- | --- |
|
||||
| `oci_kms_vault.vault-sei` | `vault.tf` | Cria o Vault `sei-vault-${environment}` no compartimento de seguranca. |
|
||||
| `oci_kms_key.sei-vault-keys` | `vault.tf` | Cria uma chave KMS AES de 32 bytes usada para criptografar os secrets. |
|
||||
| `tls_private_key.master_ssh_key` | `generation_keys.tf` | Gera uma chave SSH RSA 4096 bits usada como chave autorizada das instancias. |
|
||||
| `random_password.password_mysql_admin` | `generation_keys.tf` | Gera senha MySQL de 16 caracteres com numero, maiuscula, minuscula e caractere especial. |
|
||||
| `oci_vault_secret.sei_oci_vault_secret_private_key` | `generation_keys.tf` | Armazena a chave SSH privada como secret `master-private-ssh-key`. |
|
||||
| `oci_vault_secret.sei_oci_vault_secret_pulbic_key` | `generation_keys.tf` | Armazena a chave SSH publica como secret `master-public-ssh-key`. |
|
||||
| `oci_vault_secret.sei_oci_vault_secret_mysql` | `generation_keys.tf` | Armazena a senha MySQL gerada como secret `master-mysql-password`. |
|
||||
|
||||
Todos os secrets gravados em `oci_vault_secret` usam `content_type = "BASE64"` e o conteudo e enviado por `base64encode(...)`. A chave SSH publica tambem e usada diretamente no `metadata.ssh_authorized_keys` das instancias de compute.
|
||||
|
||||
Ponto de atencao: embora os secrets sejam armazenados no OCI Vault, valores gerados por recursos Terraform podem ficar registrados no Terraform state. O state deve ser protegido com controle de acesso, criptografia e backend adequado.
|
||||
|
||||
## Arquivos Terraform
|
||||
|
||||
| Arquivo | Descricao |
|
||||
| --- | --- |
|
||||
| `providers.tf` | Configura o provider OCI com tenancy, usuario, fingerprint, chave privada e regiao. |
|
||||
| `variables.tf` | Declara as variaveis principais da stack. |
|
||||
| `variables_sei_nfs.tf` | Declara variaveis especificas de NFS/FSS. |
|
||||
| `terraform.tfvars` | Define valores de exemplo/ambiente para as variaveis. |
|
||||
| `data_sources.tf` | Consulta imagem Oracle Linux 9, ADs, FDs e configuracoes MySQL. |
|
||||
| `server_instances_sei.tf` | Cria instancias SEI com `cloud-init-sei.yaml`. |
|
||||
| `server_instances_sip.tf` | Cria instancias SIP com `cloud-init-sip.yaml`. |
|
||||
| `server_instances_solr.tf` | Cria instancias SOLR com disco de boot customizado e `cloud-init-solr.yaml`. |
|
||||
| `server_instances_memcached.tf` | Cria instancias Memcached com `cloud-init-memcached.yaml`. |
|
||||
| `server_instances_jod.tf` | Cria instancias JodServer com `cloud-init-jod.yaml`. |
|
||||
| `sei_public_load_balancer.tf` | Cria load balancer publico, backends, listeners, hostnames e logs. |
|
||||
| `nsg-sei-lbs-nsg.tf` | Cria NSG do load balancer publico. |
|
||||
| `nsg-sei-servers-nsg.tf` | Cria NSG dos servidores SEI. |
|
||||
| `nsg-sip-servers-nsg.tf` | Cria NSG dos servidores SIP. |
|
||||
| `nsg-solr-servers-nsg.tf` | Cria NSG dos servidores SOLR. |
|
||||
| `nsg-memcached-servers-nsg.tf` | Cria NSG dos servidores Memcached. |
|
||||
| `nsg-jod-servers-nsg.tf` | Cria NSG dos servidores JodServer. |
|
||||
| `nsg-database-nsg.tf` | Cria NSG de banco de dados. |
|
||||
| `fss_server.tf` | Cria File Storage, mount target, export e snapshot policy opcional. |
|
||||
| `vault.tf` | Cria Vault e chave KMS. |
|
||||
| `generation_keys.tf` | Gera chave SSH e senha MySQL, salvando os valores em secrets no Vault. |
|
||||
| `boot_volume_backups.tf` | Cria politica opcional de backup dos boot volumes. |
|
||||
| `logging_group.tf` | Cria grupo de logs. |
|
||||
| `sei_waf.tf` | Cria WAF opcional e log de WAF. |
|
||||
|
||||
## Variaveis
|
||||
|
||||
### Autenticacao e provider
|
||||
|
||||
| Variavel | Tipo declarado | Valor em `terraform.tfvars` / default | Descricao |
|
||||
| --- | --- | --- | --- |
|
||||
| `tenancy_ocid` | Nao declarado | `""` | OCID da tenancy OCI. Usado pelo provider e pelos data sources de identity. |
|
||||
| `user_ocid` | Nao declarado | `""` | OCID do usuario OCI usado para autenticar o provider. |
|
||||
| `fingerprint` | Nao declarado | `""` | Fingerprint da API key OCI. |
|
||||
| `private_key_path` | Nao declarado | `/home/opc/.oci/terraform_key.pem` | Caminho local da chave privada da API OCI. |
|
||||
| `region` | Nao declarado | `sa-saopaulo-1` | Regiao OCI onde os recursos serao criados. |
|
||||
|
||||
### Ambiente
|
||||
|
||||
| Variavel | Tipo declarado | Valor em `terraform.tfvars` / default | Descricao |
|
||||
| --- | --- | --- | --- |
|
||||
| `environment` | `string` | `hml` | Identificador do ambiente. E usado em nomes de instancias, vault, FSS, backup, WAF, logs e load balancer. |
|
||||
|
||||
### Compartimentos
|
||||
|
||||
| Variavel | Tipo declarado | Valor em `terraform.tfvars` / default | Descricao |
|
||||
| --- | --- | --- | --- |
|
||||
| `ocid_compartment_app` | Nao declarado | `""` | Compartimento para instancias, FSS, logging group, data source de imagens e backups. |
|
||||
| `ocid_compartment_database` | Nao declarado | `""` | Compartimento previsto para banco de dados. Foi declarado, mas nao ha uso direto nos arquivos raiz atuais. |
|
||||
| `ocid_compartment_security` | Nao declarado | `""` | Compartimento de seguranca usado para Vault, KMS key, secrets e logs do WAF. |
|
||||
| `ocid_compartment_networking` | Nao declarado | `""` | Compartimento de rede usado por NSGs, load balancer, logs do load balancer e WAF. |
|
||||
|
||||
### Rede
|
||||
|
||||
| Variavel | Tipo declarado | Valor em `terraform.tfvars` / default | Descricao |
|
||||
| --- | --- | --- | --- |
|
||||
| `ocid_vcn_3_tier` | Nao declarado | `""` | OCID da VCN onde os NSGs sao criados. |
|
||||
| `ocid_subnet_app` | Nao declarado | `""` | OCID da subnet privada de aplicacao usada pelas instancias e pelo mount target do FSS. |
|
||||
| `ocid_subnet_database` | Nao declarado | `""` | OCID da subnet de banco. Foi declarado, mas as regras usam o CIDR `cidr_subnet_database`; nao ha uso direto deste OCID nos arquivos raiz atuais. |
|
||||
| `ocid_subnet_public` | Nao declarado | `""` | OCID da subnet publica onde o load balancer e criado. |
|
||||
|
||||
### CIDRs
|
||||
|
||||
| Variavel | Tipo declarado | Valor em `terraform.tfvars` / default | Descricao |
|
||||
| --- | --- | --- | --- |
|
||||
| `cidr_subnet_app` | Nao declarado | `172.20.2.64/26` | CIDR da subnet de aplicacao. Usado em regras NSG para acesso interno entre aplicacao, SOLR, Memcached, JodServer e banco. |
|
||||
| `cidr_subnet_database` | Nao declarado | `172.20.2.128/26` | CIDR da subnet de banco. Usado como destino para MySQL `3306` e MySQL HeatWave `33060`. |
|
||||
| `cidr_subnet_web` | Nao declarado | `172.20.2.0/26` | CIDR da camada web/load balancer. Usado como origem para entrada em SEI, SIP e SOLR. |
|
||||
| `cidr_anywhere` | Nao declarado | `0.0.0.0/0` | CIDR aberto para internet. Usado no NSG do load balancer para HTTP `80` e HTTPS `443`. |
|
||||
|
||||
### Instancias SEI
|
||||
|
||||
| Variavel | Tipo declarado | Valor em `terraform.tfvars` / default | Descricao |
|
||||
| --- | --- | --- | --- |
|
||||
| `sei_amount_instances` | Nao declarado | `1` | Quantidade de instancias SEI criadas por `oci_core_instance.sei-instance`. |
|
||||
| `sei_prefix_hostname` | Nao declarado | `sei-server` | Prefixo do nome das instancias SEI. |
|
||||
| `sei_shape` | Nao declarado | `VM.Standard.E4.Flex` | Shape das instancias SEI. Tambem e usado para buscar a imagem Oracle Linux 9 mais recente. |
|
||||
| `sei_amount_memory` | Nao declarado | `4` | Memoria em GB das instancias SEI. |
|
||||
| `sei_amount_ocpus` | Nao declarado | `1` | OCPUs das instancias SEI. |
|
||||
| `sei_fqdn` | Nao declarado | `""` | FQDN/hostname do SEI no load balancer. |
|
||||
|
||||
### Instancias SIP
|
||||
|
||||
| Variavel | Tipo declarado | Valor em `terraform.tfvars` / default | Descricao |
|
||||
| --- | --- | --- | --- |
|
||||
| `sip_amount_instances` | Nao declarado | `1` | Quantidade de instancias SIP criadas por `oci_core_instance.sip-instance`. |
|
||||
| `sip_prefix_hostname` | Nao declarado | `sip-server` | Prefixo do nome das instancias SIP. |
|
||||
| `sip_shape` | Nao declarado | `VM.Standard.E4.Flex` | Shape das instancias SIP. |
|
||||
| `sip_amount_memory` | Nao declarado | `4` | Memoria em GB das instancias SIP. |
|
||||
| `sip_amount_ocpus` | Nao declarado | `1` | OCPUs das instancias SIP. |
|
||||
| `sip_fqdn` | Nao declarado | `""` | FQDN/hostname do SIP no load balancer. |
|
||||
|
||||
### Instancias SOLR
|
||||
|
||||
| Variavel | Tipo declarado | Valor em `terraform.tfvars` / default | Descricao |
|
||||
| --- | --- | --- | --- |
|
||||
| `solr_amount_instances` | Nao declarado | `2` | Quantidade de instancias SOLR criadas por `oci_core_instance.solr-instance`. |
|
||||
| `solr_prefix_hostname` | Nao declarado | `solr-server` | Prefixo do nome das instancias SOLR. |
|
||||
| `solr_shape` | Nao declarado | `VM.Standard.E4.Flex` | Shape das instancias SOLR. |
|
||||
| `solr_amount_memory` | Nao declarado | `8` | Memoria em GB das instancias SOLR. |
|
||||
| `solr_amount_ocpus` | Nao declarado | `1` | OCPUs das instancias SOLR. |
|
||||
| `solr_boot_disk_size` | Nao declarado | `200` | Tamanho do boot volume das instancias SOLR, em GB. |
|
||||
| `solr_fqdn` | Nao declarado | `""` | FQDN/hostname do SOLR no load balancer. |
|
||||
|
||||
### Instancias Memcached
|
||||
|
||||
| Variavel | Tipo declarado | Valor em `terraform.tfvars` / default | Descricao |
|
||||
| --- | --- | --- | --- |
|
||||
| `memcached_amount_instances` | Nao declarado | `1` | Quantidade de instancias Memcached criadas por `oci_core_instance.memcached-instance`. |
|
||||
| `memcached_prefix_hostname` | Nao declarado | `memcached-server` | Prefixo do nome das instancias Memcached. |
|
||||
| `memcached_shape` | Nao declarado | `VM.Standard.E4.Flex` | Shape das instancias Memcached. |
|
||||
| `memcached_amount_memory` | Nao declarado | `2` | Memoria em GB das instancias Memcached. |
|
||||
| `memcached_amount_ocpus` | Nao declarado | `1` | OCPUs das instancias Memcached. |
|
||||
|
||||
### Instancias JodServer
|
||||
|
||||
| Variavel | Tipo declarado | Valor em `terraform.tfvars` / default | Descricao |
|
||||
| --- | --- | --- | --- |
|
||||
| `jod_amount_instances` | Nao declarado | `1` | Quantidade de instancias JodServer criadas por `oci_core_instance.jod-instance`. |
|
||||
| `jod_prefix_hostname` | Nao declarado | `jod-server` | Prefixo do nome das instancias JodServer. |
|
||||
| `jod_shape` | Nao declarado | `VM.Standard.E4.Flex` | Shape das instancias JodServer. |
|
||||
| `jod_amount_memory` | Nao declarado | `2` | Memoria em GB das instancias JodServer. |
|
||||
| `jod_amount_ocpus` | Nao declarado | `1` | OCPUs das instancias JodServer. |
|
||||
|
||||
### Load balancer
|
||||
|
||||
| Variavel | Tipo declarado | Valor em `terraform.tfvars` / default | Descricao |
|
||||
| --- | --- | --- | --- |
|
||||
| `load_balancer_prefix_hostname` | Nao declarado | `sei-load-balancer` | Prefixo do nome do load balancer publico. |
|
||||
| `load_balancer_maximum_bandwidth_in_mbps` | Nao declarado | `100` | Banda maxima do load balancer flexivel, em Mbps. |
|
||||
| `load_balancer_minimum_bandwidth_in_mbps` | Nao declarado | `10` | Banda minima do load balancer flexivel, em Mbps. |
|
||||
|
||||
### FSS / NFS
|
||||
|
||||
| Variavel | Tipo declarado | Valor em `terraform.tfvars` / default | Descricao |
|
||||
| --- | --- | --- | --- |
|
||||
| `fss_backup` | Nao declarado | `false` em `terraform.tfvars` | Habilita a politica de snapshot diario do File Storage. No codigo raiz e usado como booleano em `var.fss_backup ? ... : ...`. |
|
||||
| `sei_nfs_name` | `string` | `nfs-sei` | Nome do FSS/NFS para o SEI. Declarado em `variables_sei_nfs.tf`; nao ha uso direto identificado nos arquivos raiz atuais. |
|
||||
| `sei_mount_target_ip_address` | `string` | `10.191.228.100` | IP planejado para o mount target. Declarado em `variables_sei_nfs.tf`; nao ha uso direto identificado nos arquivos raiz atuais. |
|
||||
|
||||
### WAF e backups
|
||||
|
||||
| Variavel | Tipo declarado | Valor em `terraform.tfvars` / default | Descricao |
|
||||
| --- | --- | --- | --- |
|
||||
| `enable_waf` | Nao declarado | `false` | Habilita a criacao da politica WAF, Web App Firewall, associacao ao load balancer e log WAF. No codigo e usado como booleano. |
|
||||
| `enable_boot_volume_backup` | Nao declarado | `false` | Habilita a politica de backup dos boot volumes. No codigo e comparado como string: `var.enable_boot_volume_backup == "true"`. |
|
||||
|
||||
## Regras de rede resumidas
|
||||
|
||||
| NSG | Direcao | Origem/Destino | Portas | Objetivo |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| Load balancer publico | Ingress | `cidr_anywhere` | 80, 443 | Entrada publica HTTP/HTTPS. |
|
||||
| Load balancer publico | Ingress | `cidr_subnet_app` | 8983 | Entrada SOLR a partir da subnet de aplicacao. |
|
||||
| SEI servers | Ingress | `cidr_subnet_web` | 80, 443, 8983 | Entrada vinda da camada web/load balancer. |
|
||||
| SEI servers | Egress | `cidr_subnet_database` | 3306, 33060 | Acesso MySQL/MySQL HeatWave. |
|
||||
| SEI servers | Egress | `cidr_subnet_app` | 8983, 11211, 8080 | Acesso a SOLR, Memcached e JodServer. |
|
||||
| SIP servers | Ingress | `cidr_subnet_web` | 80, 443, 8983 | Entrada vinda da camada web/load balancer. |
|
||||
| SIP servers | Egress | `cidr_subnet_database` | 3306, 33060 | Acesso MySQL/MySQL HeatWave. |
|
||||
| SIP servers | Egress | `cidr_subnet_app` | 8983, 11211 | Acesso a SOLR e Memcached. |
|
||||
| SOLR servers | Ingress | `cidr_subnet_web`, `cidr_subnet_app` | 8983 | Trafego SOLR. |
|
||||
| SOLR servers | Egress | `cidr_subnet_app` | 11211 | Acesso Memcached. |
|
||||
| Memcached servers | Ingress | `cidr_subnet_app` | 11211 | Trafego Memcached. |
|
||||
| JodServer | Ingress | `cidr_subnet_app` | 8080 | Trafego JodServer. |
|
||||
| Database | Ingress | `cidr_subnet_app` | 3306, 33060 | Trafego MySQL/MySQL HeatWave. |
|
||||
|
||||
Reference in New Issue
Block a user