Activación de compatibilidad de FIPS
Mantenga el cumplimiento de FIPS al utilizar el proveedor de Terraform de Oracle Cloud Infrastructure.
En esta página se describen los requisitos y las mejores prácticas para utilizar Terraform con una versión compatible con FIPS del proveedor de Terraform de OCI.
Cifrado de FIPS
Para garantizar los más altos estándares de seguridad, mueve el tráfico de Terraform a los puntos finales de OCI a través de una conexión TLS establecida con un cliente HTTP utilizando un cifrado certificado por el FIPS.
El Proveedor de Terraform de OCI estándar se implementa en Go. Las implementaciones de criptografía nativas de Go, aunque son totalmente capaces de establecer conexiones TLS seguras con puntos finales de OCI, no cuentan con la certificación de FIPS.
Para que el tráfico de Terraform transite a los puntos finales de OCI a través de conexiones compatibles con FIPS, debe utilizar una versión especial del proveedor de de Terraform que aproveche el criptografía certificada por FIPS. Esta versión del proveedor de OCI Terraform utiliza la certificada por la FIPS 140-2 Oracle Cloud Infrastructure para BoringCrypto en lugar de la implementación de criptografía nativa de Go. Obtenga más información sobre Oracle Cloud Infrastructure para BoringCrypto aquí.
Instalación del proveedor de Terraform compatible con FIPS
El proveedor de Terraform de OCI compatible con FIPS solo está disponible para Oracle Linux. Puede instalar el proveedor a través de yum.
Antes de instalar el proveedor de Terraform de OCI, descargue e instale Terraform de HashiCorp.
Si ya se han instalado paquetes del proveedor de Terraform de OCI en la máquina con Oracle Linux, elimínelos primero:
yum remove terraform-provider-ociInstale el proveedor de Terraform de OCI compatible con FIPS ejecutando el siguiente comando de yum desde una máquina con Oracle Linux:
yum install terraform-provider-oci-fipsConfiguración del proveedor de Terraform
-
Agregue una variable de entorno para definir la región de destino para Terraform:
echo "export TF_VAR_region='<your_region>'" >> ${HOME}/.bash_profile -
Agregue una variable de entorno para desactivar el cifrado del tráfico interproceso entre Terraform y el proveedor de Terraform de OCI:
echo "export TF_DISABLE_PLUGIN_TLS=1" >> ${HOME}/.bash_profile -
Agregue una variable de entorno para evitar que Terraform pueda acceder al servicio Checkpoint de HashiCorp:
echo "export CHECKPOINT_DISABLE=1" >> ${HOME}/.bash_profile - Configure el método de autenticación para el proveedor de Terraform. Consulte Autenticación para obtener más información.
Operación de Terraform en una sola región
Para garantizar que el tráfico entre Terraform y los servicios de OCI no transite por la infraestructura de Internet pública, le recomendamos que ejecute Terraform y el proveedor de Terraform de OCI desde una instancia de Compute alojada en la misma región que los recursos que crean y gestionan.
Creación de una instancia informática
Después de instalar Terraform y el proveedor de Terraform de OCI en una máquina con Oracle Linux, puede utilizar Terraform y el siguiente archivo de configuración de ejemplo de Terraform para:
- Crear una instancia informática designada que pueda utilizar para aprovisionar más infraestructura dentro de la misma región.
- Instalar Terraform y el proveedor de Terraform de OCI compatible con FIPS más reciente en la nueva instancia.
- Restricción de la comunicación con la instancia a los puntos finales de OCI y HTTPS mediante un gateway de servicio.
- Activar la autenticación de principal de instancia.
Consulte Creación de configuraciones para obtener más información.
Para crear la instancia de Compute:
- Copie el archivo
main.tfen un equipo con Oracle Linux. - Recopile la información necesaria para rellenar las variables del archivo de configuración de Terraform.
-
Cambie el valor
oel-imagedel archivo de configuración de Terraform al valor de OCID de imagen de Oracle Linux para la región.Para buscar el valor de OCID de imagen de Oracle Linux para una región, consulte Imágenes de plataforma.
-
Inicialice Terraform en el directorio que contiene el archivo de configuración de Terraform:
terraform init -
Aplique la configuración de Terraform:
terraform planterraform apply
La variable de salida instance-ip proporciona la dirección IP que necesita utilizar para conectarse a la nueva instancia informática.
main.tf
variable "tenancy_ocid" {
}
variable "user_ocid" {
}
variable "fingerprint" {
}
variable "private_key_path" {
}
variable "region" {
}
variable "compartment_ocid" {
}
variable "ssh_public_key" {
}
variable "ssh_private_key" {
}
locals {
prefix = "terraform"
oel-image = "<Oracle_Linux_image_OCID>"
vm-shape = "<shape_name>"
user-data = <<EOF
#!/bin/bash -x
echo "export TF_VAR_auth='InstancePrincipal'" >> ~/.bash_profile
echo "export TF_VAR_region='${var.region}'" >> ~/.bash_profile
yum install -y terraform terraform-provider-oci-fips
EOF
}
provider "oci" {
tenancy_ocid = var.tenancy_ocid
user_ocid = var.user_ocid
fingerprint = var.fingerprint
private_key_path = var.private_key_path
region = var.region
}
resource "oci_core_vcn" "vcn1" {
compartment_id = var.compartment_ocid
display_name = "${local.prefix}Vcn"
cidr_block = "10.0.0.0/16"
}
resource "oci_core_subnet" "subnet1" {
compartment_id = var.compartment_ocid
vcn_id = oci_core_vcn.vcn1.id
cidr_block = "10.0.0.0/24"
display_name = "${local.prefix}Subnet"
security_list_ids = [oci_core_vcn.vcn1.default_security_list_id]
route_table_id = oci_core_vcn.vcn1.default_route_table_id
dhcp_options_id = oci_core_vcn.vcn1.default_dhcp_options_id
}
resource "oci_core_internet_gateway" "internet-gateway1" {
compartment_id = var.compartment_ocid
vcn_id = oci_core_vcn.vcn1.id
display_name = "${local.prefix}InternetGateway"
}
resource "oci_core_default_route_table" "route-table1" {
manage_default_resource_id = oci_core_vcn.vcn1.default_route_table_id
display_name = "${local.prefix}RouteTable"
route_rules {
destination = "0.0.0.0/0"
destination_type = "CIDR_BLOCK"
network_entity_id = oci_core_internet_gateway.internet-gateway1.id
}
}
data "oci_core_services" "service-gateway-services" {
filter {
name = "name"
values = ["All .* Services In Oracle Services Network"]
regex = true
}
}
resource "oci_core_service_gateway" "service-gateway1" {
compartment_id = var.compartment_ocid
vcn_id = oci_core_vcn.vcn1.id
display_name = "${local.prefix}ServiceGateway"
services {
service_id = data.oci_core_services.service-gateway-services.services[0]["id"]
}
}
resource "oci_core_default_security_list" "security-list1" {
manage_default_resource_id = oci_core_vcn.vcn1.default_security_list_id
display_name = "${local.prefix}SecurityList"
// inbound ssh traffic
ingress_security_rules {
protocol = "6" // tcp
source = "0.0.0.0/0"
stateless = false
tcp_options {
min = 22
max = 22
}
}
// outbound traffic to OCI services
egress_security_rules {
destination = data.oci_core_services.service-gateway-services.services[0]["cidr_block"]
destination_type = "SERVICE_CIDR_BLOCK"
protocol = "6"
tcp_options {
max = "443"
min = "443"
}
}
// outbound tcp traffic on all ports
egress_security_rules {
destination = "0.0.0.0/0"
protocol = "6"
}
}
data "oci_identity_compartment" "compartment1" {
id = var.compartment_ocid
}
resource "oci_identity_dynamic_group" "dynamic-group1" {
compartment_id = var.tenancy_ocid
name = "${local.prefix}DynamicGroup"
description = "Dynamic Group for executing Terraform with Instance Principal authentication"
matching_rule = "ANY {instance.compartment.id = '${var.compartment_ocid}'}"
}
resource "oci_identity_policy" "instance-principal-policy1" {
compartment_id = var.compartment_ocid
name = "${local.prefix}Policy"
description = "Policy to allow Instance Principal Terraform execution"
statements = ["ALLOW dynamic-group ${oci_identity_dynamic_group.dynamic-group1.name} to manage all-resources IN compartment ${data.oci_identity_compartment.compartment1.name}"]
}
data "oci_identity_availability_domain" "ad" {
compartment_id = var.tenancy_ocid
ad_number = 1
}
resource "oci_core_instance" "instance1" {
availability_domain = data.oci_identity_availability_domain.ad.name
compartment_id = var.compartment_ocid
display_name = "${local.prefix}Instance"
shape = local.vm-shape
source_details {
source_type = "image"
source_id = local.oel-image
}
metadata = {
ssh_authorized_keys = var.ssh_public_key
user_data = base64encode(local.user-data)
tenancy_ocid = var.tenancy_ocid
}
create_vnic_details {
subnet_id = oci_core_subnet.subnet1.id
assign_public_ip = true
}
}
output "instance-ip" {
value = [oci_core_instance.instance1.public_ip]
}Conexión a la instancia
Utilice el siguiente comando SSH para acceder a la instancia:
$ ssh –i <private_key_path> <username>@<instance_ip_address><private_key_path> es la ruta completa y el nombre del archivo que contiene la clave privada asociada a la instancia a la que desea acceder.
<username> es el nombre de usuario por defecto de la instancia. Para las imágenes de Oracle Linux, el nombre de usuario por defecto es opc.
<instance_ip_address> es la dirección IP de la instancia que fue la salida de los comandos de Terraform.
Instalación y configuración de Terraform en la instancia
-
Utilice yum para instalar Terraform y el proveedor de Terraform de OCI compatible con FIPS en la instancia:
yum install -y terraform terraform-provider-oci-fips -
Agregue una variable de entorno para activar la autenticación de principal de instancia en el perfil bash:
echo "export TF_VAR_auth='InstancePrincipal'" >> ${HOME}/.bash_profile -
Agregue una variable de entorno para definir la región de destino para Terraform:
echo "export TF_VAR_region='<your_region>'" >> ${HOME}/.bash_profile -
Agregue una variable de entorno para desactivar el cifrado del tráfico interproceso entre Terraform y el proveedor de Terraform de OCI:
echo "export TF_DISABLE_PLUGIN_TLS=1" >> ${HOME}/.bash_profile -
Agregue una variable de entorno para evitar que Terraform pueda acceder al servicio Checkpoint de HashiCorp:
echo "export CHECKPOINT_DISABLE=1" >> ${HOME}/.bash_profile -
Salga de la instancia:
exit
Implementación de reglas de seguridad
Antes de utilizar la nueva instancia para ejecutar Terraform, actualice las reglas de seguridad para evitar el tráfico de salida a cualquier punto final de terceros distinto de los servicios de OCI. Puede realizar esta actualización eliminando la siguiente regla de salida del recurso security-list1 del archivo de configuración de Terraform y ejecutando terraform apply desde la máquina con Oracle Linux:
// outbound tcp traffic on all ports
// remove this rule or comment it out to prevent egress traffic to third-party endpoints
#egress_security_rules {
# destination = "0.0.0.0/0"
# protocol = "6"
#}
También puede utilizar la consola de OCI para actualizar las reglas de seguridad en la nueva instancia.
Ejecución de Terraform desde la instancia
Después de crear la instancia, instalar y configurar Terraform en la instancia y actualizar las reglas de seguridad, puede utilizar Terraform para aprovisionar más infraestructura de OCI en la misma región. Copiar otros archivos de configuración de Terraform en una instancia, conectarse a la instancia y ejecutar comandos de Terraform como con cualquier otro proveedor de Terraform:
ssh -i <private_key_path> opc@<instance_ip_address>
terraform init
terraform apply