Logo
Cloud SecurityExpert32 min read

Securing Oracle Cloud: OCI Infrastructure + Fusion Applications — The Complete Blueprint

A deep-dive into OCI IaaS security, Fusion SaaS controls, OIC integration security, and business object auditing — with real CLI commands and architecture diagrams.

OracleOCIFusionOICIDCSCloud GuardBusiness ObjectsERP Security
Last updated: 2026-02-17

Why Oracle Cloud Security Matters#

While AWS and Azure dominate the market share conversation, Oracle Cloud Infrastructure (OCI) runs some of the most critical enterprise workloads on the planet. When your ERP, financials, HR, and supply chain all run on Oracle Fusion — a misconfiguration isn't just a security finding, it's a business-stopping event.

Yet Oracle Cloud security expertise is rare. Most cloud security teams know AWS IAM inside out but couldn't explain an OCI compartment policy to save their lives. This guide fixes that.

OCI Security Architecture#

Compartment Design

OCI's compartment model is its greatest security feature — and its most misunderstood. Think of compartments as AWS accounts within an organization, but with policy inheritance:

bash
# Create a security compartment
oci iam compartment create \
  --compartment-id ocid1.tenancy.oc1..root \
  --name "Security" \
  --description "Security tools and audit resources"

# Create network compartment
oci iam compartment create \
  --compartment-id ocid1.tenancy.oc1..root \
  --name "Network" \
  --description "VCNs, DRG, load balancers"

# Policy: Only network admins manage VCNs
oci iam policy create \
  --compartment-id ocid1.tenancy.oc1..root \
  --name "NetworkAdminPolicy" \
  --statements '["Allow group NetworkAdmins to manage virtual-network-family in compartment Network", "Allow group NetworkAdmins to manage load-balancers in compartment Network"]'

# Policy: Security team reads everything, manages security tools
oci iam policy create \
  --compartment-id ocid1.tenancy.oc1..root \
  --name "SecurityTeamPolicy" \
  --statements '["Allow group SecurityTeam to read all-resources in tenancy", "Allow group SecurityTeam to manage cloud-guard-family in compartment Security", "Allow group SecurityTeam to manage vss-family in compartment Security"]'

Cloud Guard — OCI's Native CSPM

Cloud Guard is OCI's built-in security monitoring. It uses detector recipes (what to look for) and responder recipes (what to do about it):

bash
# Enable Cloud Guard
oci cloud-guard configuration update \
  --reporting-region us-ashburn-1 \
  --status ENABLED

# List available detector recipes
oci cloud-guard detector-recipe list \
  --compartment-id ocid1.tenancy.oc1..root \
  --display-name "OCI Configuration Detector Recipe"

# Clone and customize a detector recipe
oci cloud-guard detector-recipe create \
  --compartment-id ocid1.compartment.oc1..security \
  --display-name "Custom-Security-Detector" \
  --source-detector-recipe-id ocid1.cloudguarddetectorrecipe.oc1..default \
  --detector-rules '[{
    "detectorRuleId": "BUCKET_IS_PUBLIC",
    "details": {
      "isEnabled": true,
      "riskLevel": "CRITICAL",
      "condition": {}
    }
  }]'

# Create a responder recipe (auto-remediate public buckets)
oci cloud-guard responder-recipe create \
  --compartment-id ocid1.compartment.oc1..security \
  --display-name "Auto-Remediate-Public-Resources" \
  --source-responder-recipe-id ocid1.cloudguardresponderrecipe.oc1..default \
  --responder-rules '[{
    "responderRuleId": "MAKE_BUCKET_PRIVATE",
    "details": {
      "isEnabled": true
    }
  }]'

Key Cloud Guard detectors to enable:

DetectorRisk LevelWhat It Catches
BUCKET_IS_PUBLICCriticalPublic Object Storage buckets
VCN_SECURITY_LIST_ALLOWS_ALLHighOverly permissive security lists
INSTANCE_HAS_PUBLIC_IPMediumCompute instances with public IPs
DB_SYSTEM_NOT_IN_PRIVATE_SUBNETHighDatabases in public subnets
USER_HAS_API_KEYSMediumAPI keys on user accounts (use instance principals instead)
MFA_NOT_ENABLEDCriticalUsers without MFA

Vulnerability Scanning Service (VSS)

bash
# Create a host scan recipe
oci vulnerability-scanning host scan-recipe create \
  --compartment-id ocid1.compartment.oc1..security \
  --display-name "Weekly-Host-Scan" \
  --port-settings '{"scanLevel": "STANDARD"}' \
  --agent-settings '{"scanLevel": "STANDARD", "scanTriggerType": "SCHEDULED"}'

# Create scan target for all compute in app compartment
oci vulnerability-scanning host scan-target create \
  --compartment-id ocid1.compartment.oc1..application \
  --display-name "App-Tier-Scan" \
  --host-scan-recipe-id ocid1.vssrecipe.oc1..xxx \
  --target-compartment-id ocid1.compartment.oc1..application

OCI Bastion Service

Never SSH directly to instances. Use Bastion for audited, time-limited sessions:

bash
# Create a bastion
oci bastion bastion create \
  --bastion-type STANDARD \
  --compartment-id ocid1.compartment.oc1..security \
  --target-subnet-id ocid1.subnet.oc1..private \
  --name "secure-bastion"

# Create a managed SSH session (time-limited)
oci bastion session create-managed-ssh \
  --bastion-id ocid1.bastion.oc1..xxx \
  --target-resource-id ocid1.instance.oc1..xxx \
  --target-os-username opc \
  --session-ttl-in-seconds 1800 \
  --key-type PUB \
  --ssh-public-key-file ~/.ssh/id_rsa.pub

Fusion SaaS Security#

The Fusion Security Model

Role Design Best Practices

Fusion uses a role hierarchy: Job Roles → Duty Roles → Privileges. Never assign privileges directly to users.

Role TypePurposeExample
**Job Role**Maps to actual job functionAccounts Payable Manager
**Abstract Role**Cross-functional accessEmployee, Line Manager
**Duty Role**Specific business functionProcess AP Invoices
**Data Role**Controls data visibilityView Own Business Unit Only

Segregation of Duties (SoD) Controls

Critical SoD conflicts to monitor in Fusion Financials:

  • Create Supplier + Approve Payment — Classic fraud vector
  • Create Journal Entry + Post Journal — Financial statement manipulation
  • Create Purchase Order + Receive Goods — Procurement fraud
  • Manage User Access + All Business Functions — Super-user risk
bash
# Use Fusion Security Console to check SoD
# Navigation: Setup and Maintenance > Security Console > Roles
# Run: Segregation of Duties Analysis Report
# Or via REST API:
curl -u admin:password \
  "https://your-fusion.fa.us2.oraclecloud.com/hcmRestApi/resources/latest/roles?q=RoleName%20like%20'%25Payable%25'" \
  -H "Content-Type: application/json"

Business Object Auditing — Step by Step

This is where most organizations fail. Fusion generates millions of transactions — you need selective, targeted auditing.

Step 1: Enable Audit at Application Level

Navigate to: Setup and Maintenance → Manage Audit Policies

Enable auditing for these critical business objects:

Business ObjectEvents to AuditWhy
SuppliersCreate, Update, DeleteVendor fraud detection
InvoicesCreate, Approve, Cancel, VoidPayment fraud
Journal EntriesCreate, Post, ReverseFinancial manipulation
Purchase OrdersCreate, Approve, CloseProcurement fraud
User Role AssignmentGrant, RevokeAccess control changes
Bank AccountsCreate, UpdatePayment routing changes
Customer RecordsCreate, UpdateRevenue recognition

Step 2: Configure Granular Audit Attributes

For each business object, select which attributes to audit (don't audit everything — performance impact):

  • Supplier: Name, Tax ID, Payment Method, Bank Account, Status
  • Invoice: Amount, Supplier, Approval Status, Payment Terms
  • Journal: Amount, Account, Period, Source, Category

Step 3: Access Audit Reports

bash
# Fusion Audit Report via BI Publisher
# Navigation: Tools > Reports and Analytics > Shared Folders > Financials
# Report: "Audit Report" or create custom using:
# View: FND_AUDIT_CHANGES_V (contains all audited changes)

# Via REST API — query audit events
curl -u admin:password \
  "https://your-fusion.fa.us2.oraclecloud.com/fndAuditRestApi/audit/records?finder=AuditFinder;EventType=UPDATE,BusinessObjectName=Suppliers&limit=100" \
  -H "Content-Type: application/json"

Step 4: Stream Audit to External SIEM

Export Fusion audit data to your SIEM (Splunk, Sentinel, Chronicle):

bash
# Use OIC to extract audit logs and push to SIEM
# OIC Integration Flow:
# 1. Schedule trigger (every 15 min)
# 2. Invoke Fusion Audit REST API
# 3. Transform to CEF/JSON format
# 4. Push to SIEM webhook/HEC endpoint

OIC Integration Security#

Oracle Integration Cloud (OIC) is the bridge between OCI IaaS and Fusion SaaS. It's also a massive attack surface if misconfigured.

OIC Security Best Practices

bash
# 1. Use service accounts, not personal accounts for integrations
# Create a dedicated integration user in IDCS
oci iam user create \
  --compartment-id ocid1.tenancy.oc1..root \
  --name "svc-oic-fusion" \
  --description "Service account for OIC-Fusion integrations"

# 2. Apply least-privilege: only needed Fusion roles
# Grant only: Integration Specialist, specific REST API roles

# 3. Enable OIC audit logging
# Navigate: OIC Console > Settings > Audit
# Enable: Connection audit, Integration audit, Agent audit

# 4. Restrict OIC agent connectivity
# Use private agents — never expose OIC endpoints publicly
# Deploy agents in private subnets with no internet access

Integration Flow Security Checklist

ControlStatusPriority
All connections use OAuth 2.0 (not basic auth)RequiredCritical
Sensitive data mapped through OIC is not loggedRequiredHigh
Private agents deployed in private subnetsRequiredHigh
Integration error notifications go to security teamRecommendedMedium
Connection credentials rotated every 90 daysRequiredHigh
IP allowlisting on Fusion for OIC source IPsRecommendedMedium
Data encryption in-flight (TLS 1.2+)RequiredCritical

IDCS / OCI IAM Federation#

bash
# Configure SAML federation with corporate IdP
# Step 1: Create Identity Provider in OCI IAM
oci iam identity-provider create-saml2 \
  --compartment-id ocid1.tenancy.oc1..root \
  --name "Corporate-ADFS" \
  --description "Federation with on-premises Active Directory" \
  --metadata-url "https://adfs.company.com/FederationMetadata/2007-06/FederationMetadata.xml" \
  --product-type ADFS

# Step 2: Map IdP groups to OCI groups
oci iam idp-group-mapping create \
  --identity-provider-id ocid1.saml2idp.oc1..xxx \
  --idp-group-name "Cloud-Admins" \
  --group-id ocid1.group.oc1..cloudadmins

# Step 3: Enforce MFA via IDCS Sign-On Policy
# IDCS Console > Security > Sign-On Policies > Add
# Condition: All users accessing Fusion
# Action: Require MFA (TOTP or FIDO2)

Compliance Mapping#

OCI/Fusion ControlISO 27001SOC 2NIST 800-53
Compartment isolationA.8.31CC6.1AC-4
Cloud Guard monitoringA.8.16CC7.2SI-4
Business object auditingA.8.15CC4.1AU-2, AU-3
IDCS MFA enforcementA.8.5CC6.1IA-2
Bastion session recordingA.8.15CC6.2AC-17
Fusion SoD controlsA.5.3CC6.3AC-5
OIC connection encryptionA.8.24CC6.7SC-8
VSS vulnerability scanningA.8.8CC7.1RA-5

Security Hardening Checklist#

#ControlLayerPriority
1Enable Cloud Guard on all compartmentsOCICritical
2No public subnets for databasesOCICritical
3Enable MFA for all IDCS usersIdentityCritical
4Configure SoD policies in FusionApplicationHigh
5Enable business object auditingApplicationHigh
6Deploy OIC agents in private subnetsIntegrationHigh
7Rotate all API keys every 90 daysIdentityHigh
8Enable VSS scanning weeklyOCIMedium
9Use Bastion for all SSH accessOCIMedium
10Configure WAF for public-facing appsOCIMedium
11Stream all audit logs to SIEMMonitoringMedium
12Review Fusion role assignments quarterlyApplicationMedium

Elastyx monitors OCI posture alongside AWS, Azure, and GCP — giving you unified visibility into compartment policies, Cloud Guard findings, and Fusion security configurations through a single dashboard.

Elastyx Platform

Skip the manual work. Let Elastyx do this continuously.

Everything in this guide — and 1,400+ more checks — running 24/7 across your entire cloud estate.

See Elastyx in Action