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. |