# Documentacao repositório iac-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. |