<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Faris Durrani</title>
    <description>The latest articles on DEV Community by Faris Durrani (@farisdurrani).</description>
    <link>https://dev.to/farisdurrani</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F744488%2F636560fa-cbfc-4d2c-b456-75fff50883eb.png</url>
      <title>DEV Community: Faris Durrani</title>
      <link>https://dev.to/farisdurrani</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/farisdurrani"/>
    <language>en</language>
    <item>
      <title>How to use OCI Terraform Provider without a config file path</title>
      <dc:creator>Faris Durrani</dc:creator>
      <pubDate>Tue, 07 Oct 2025 16:06:25 +0000</pubDate>
      <link>https://dev.to/farisdurrani/how-to-use-oci-terraform-provider-without-a-file-path-fgn</link>
      <guid>https://dev.to/farisdurrani/how-to-use-oci-terraform-provider-without-a-file-path-fgn</guid>
      <description>&lt;p&gt;&lt;em&gt;How to use the OCI Terraform Provider without an OCI config file path&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Recall that traditionally, we declare in Terraform to use the OCI provider using this code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform &lt;span class="o"&gt;{&lt;/span&gt;
  required_providers &lt;span class="o"&gt;{&lt;/span&gt;
    oci &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="nb"&gt;source&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"oracle/oci"&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

provider &lt;span class="s2"&gt;"oci"&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  config_file_profile &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"DEFAULT"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This requires you to already have an OCI config file set up in &lt;code&gt;~/.oci/config&lt;/code&gt; with a path that leads to the private key, as talked more in &lt;a href="https://dev.to/farisdurrani/setting-up-the-oci-configuration-file-using-api-keys-96c"&gt;Setting up the OCI Configuration File using API Keys&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This leads to issues when using CI/CD or other automation tools which don't make it easy to add or modify internal files. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;Instead, we can hardcode the full config file details and the full API key within the provider block as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform &lt;span class="o"&gt;{&lt;/span&gt;
  required_providers &lt;span class="o"&gt;{&lt;/span&gt;
    oci &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="nb"&gt;source&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"oracle/oci"&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

provider &lt;span class="s2"&gt;"oci"&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  region           &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"us-ashburn-1"&lt;/span&gt;
  tenancy_ocid     &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"ocid1.tenancy.oc1..aaaaaaaavjzemxptyyi8w49b4itxn2asgvhuamsptyyi8w49b4itxn2asgvhuams"&lt;/span&gt;
  user_ocid        &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"ocid1.user.oc1..aaaaaaaavjzemxgpcvptyyi8w49b4itxn2aszyy7m4gtv76ruzu36rk2p2o6j"&lt;/span&gt;
  private_key &lt;span class="o"&gt;=&lt;/span&gt; base64decode&lt;span class="o"&gt;(&lt;/span&gt;var.ssh_private_key_in_base64&lt;span class="o"&gt;)&lt;/span&gt;
  fingerprint      &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"00:34:63:27:c8:33:46:51:92:a0:23:6e:fb:9b:4a:48"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As an added option, you may also replace &lt;code&gt;private_key&lt;/code&gt; with &lt;code&gt;private_key_path&lt;/code&gt; with the full path of the private key as its value.&lt;/p&gt;

&lt;p&gt;See full configuration options in the reference below.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/en-us/iaas/Content/dev/terraform/configuring.htm" rel="noopener noreferrer"&gt;Oracle Docs: Configuring the Provider&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Safe harbor statement
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The information provided on this channel/article/story is solely intended for informational purposes and cannot be used as a part of any contractual agreement. The content does not guarantee the delivery of any material, code, or functionality, and should not be the sole basis for making purchasing decisions. The postings on this site are my own and do not necessarily reflect the views or work of Oracle or Mythics, LLC.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/4.0" rel="noopener noreferrer"&gt;Creative Commons Attribution 4.0 International License&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>oci</category>
      <category>cicd</category>
      <category>terraform</category>
    </item>
    <item>
      <title>How to create an OCI bucket using Terraform</title>
      <dc:creator>Faris Durrani</dc:creator>
      <pubDate>Tue, 30 Sep 2025 18:15:44 +0000</pubDate>
      <link>https://dev.to/farisdurrani/how-to-create-an-oci-bucket-using-terraform-4mil</link>
      <guid>https://dev.to/farisdurrani/how-to-create-an-oci-bucket-using-terraform-4mil</guid>
      <description>&lt;p&gt;&lt;em&gt;A simple tutorial to create a bucket in Oracle Cloud using Terraform&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Set up the OCI Configuration using API Keys
&lt;/h2&gt;

&lt;p&gt;Follow the steps in &lt;a href="https://dev.to/farisdurrani/setting-up-the-oci-configuration-file-using-api-keys-96c"&gt;Setting up the OCI Configuration File using API Keys&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Install Terraform CLI
&lt;/h2&gt;

&lt;p&gt;On Mac, you can install the CLI using Homebrew: &lt;code&gt;brew install oci-cli&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Verify installation using &lt;code&gt;oci -v&lt;/code&gt; in the terminal. For other OSes, see &lt;a href="https://developer.hashicorp.com/terraform/install" rel="noopener noreferrer"&gt;Install Terraform&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Write the following Terraform code
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;terraform {
  required_providers {
    oci = {
      source  = "oracle/oci"
      version = "&amp;gt;= 7.0.0"
    }
  }
  required_version = "&amp;gt;=1.12"
}

provider "oci" {
  region              = "us-ashburn-1"
  config_file_profile = "DEFAULT"
}

resource "oci_objectstorage_bucket" "test_bucket" {
  #Required
  compartment_id = "ocid1.tenancy.oc1..aaaaaaaanwazgsy3nui2mz8wttfh26k7ra6xiazgsy3nui2mz8wttfh26k7ra6"
  name           = "test-bucket"
  namespace      = "idpugazgsy3"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;More info about the Terraform resource: &lt;a href="https://registry.terraform.io/providers/oracle/oci/latest/docs/resources/objectstorage_bucket" rel="noopener noreferrer"&gt;oci_objectstorage_bucket&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We create the OCI bucket in the root tenancy compartment ID. You may get your tenancy ID and the Object storage namespace under your &lt;strong&gt;Tenancy details&lt;/strong&gt; under &lt;strong&gt;Profile&lt;/strong&gt; once logged into cloud.oracle.com.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr3bs2fzbrnx5ktzrwx1r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr3bs2fzbrnx5ktzrwx1r.png" alt="Get tenancy details" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Apply the terraform plan
&lt;/h2&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform init &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; terraform apply
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr6t4ukns2szep675qgpw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr6t4ukns2szep675qgpw.png" alt="Apply terraform plan" width="654" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm41vypuaol53l1kcjzlf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm41vypuaol53l1kcjzlf.png" alt="new bucket" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Safe harbor statement
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The information provided on this channel/article/story is solely intended for informational purposes and cannot be used as a part of any contractual agreement. The content does not guarantee the delivery of any material, code, or functionality, and should not be the sole basis for making purchasing decisions. The postings on this site are my own and do not necessarily reflect the views or work of Oracle or Mythics, LLC.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/4.0" rel="noopener noreferrer"&gt;Creative Commons Attribution 4.0 International License&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>terraform</category>
      <category>devops</category>
      <category>tutorial</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Deploying Vanity URLs for Oracle APEX on OCI</title>
      <dc:creator>Faris Durrani</dc:creator>
      <pubDate>Wed, 24 Sep 2025 03:19:03 +0000</pubDate>
      <link>https://dev.to/farisdurrani/deploying-vanity-urls-for-oracle-apex-on-oci-100l</link>
      <guid>https://dev.to/farisdurrani/deploying-vanity-urls-for-oracle-apex-on-oci-100l</guid>
      <description>&lt;p&gt;&lt;em&gt;How to deploy an Oracle APEX instance publicly through a custom URL domain using Oracle Cloud (OCI) load balancers&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;So, you've created your own Oracle APEX application instance on OCI using its Autonomous Database service. You can access and share the application using OCI's default URL that looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://kfawejskfefk-rwesjdjnweidfjwe.adb.us-ashburn-1.oraclecloudapps.com/ords/r/apex/workspace-sign-in/administration-sign-in?session=32492384908239
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3j1eu9fbsh6vt58peg7e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3j1eu9fbsh6vt58peg7e.png" alt="Ugly apex url" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Can we change this so that our users can access the APEX application on a custom vanity URL like: &lt;code&gt;my-apex.farisdurrani.com&lt;/code&gt;?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Key Solution: Load Balancer
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Yes!&lt;/strong&gt; The key is using a public application load balancer (LB) with a DNS that points our custom URL to the load balancer's public IP address.&lt;/p&gt;

&lt;p&gt;We'll follow the steps mentioned in Oracle's &lt;a href="https://blogs.oracle.com/apex/post/introducing-vanity-urls-on-adb" rel="noopener noreferrer"&gt;blog post&lt;/a&gt; about this topic and additionally demonstrate the access on a real URL, show how to deploy the DNS records, create a self-signed certificate, and showcase a private URL access to the instance from a private OCI network.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2iez0qqi78xi1ga36nfr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2iez0qqi78xi1ga36nfr.png" alt="Network diagram" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Create a VCN
&lt;/h2&gt;

&lt;p&gt;In OCI (cloud.oracle.com), create a VCN with Internet Connectivity. Using the VCN Wizard is the easiest way to do this. This will create a public subnet and a private subnet for us to use.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Few8roax24vwupxiis8wb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Few8roax24vwupxiis8wb.png" alt="Create a VCN" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Create a public load balancer
&lt;/h2&gt;

&lt;p&gt;Internet traffic should hit our public application load balancer (LB) before reaching our APEX instance. &lt;/p&gt;

&lt;p&gt;In addition to providing a public IP address, the LB also serves to balance the traffic load across multiple instances and to secure the traffic against Layer 7 attacks using the Web Application Firewall if included (not in current scope).&lt;/p&gt;

&lt;p&gt;Choose public access:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwyba6pfkyka3q4iv9vkj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwyba6pfkyka3q4iv9vkj.png" alt="Choose public" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choose public subnet:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb7br33d87uyl4tfz3gi4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb7br33d87uyl4tfz3gi4.png" alt="Public subnet" width="800" height="715"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let the backend servers be empty as default:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq5s0uzu3rij0vrh64zdy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq5s0uzu3rij0vrh64zdy.png" alt="No backends" width="800" height="606"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Modify the health check policy to use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Protocol: HTTP&lt;/li&gt;
&lt;li&gt;Port: 443&lt;/li&gt;
&lt;li&gt;Status Code: 302&lt;/li&gt;
&lt;li&gt;URI &lt;code&gt;/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2axx09qkkgodkjrjstes.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2axx09qkkgodkjrjstes.png" alt="Status code" width="800" height="788"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;ℹ️ Troubleshoot: You should leave "Use SSL" as disabled on the backend set. However, if the health check fails, try enabling "Use SSL"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Modify the listener to use non-SSL HTTP 80 for now:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2u3oge7xq0advfoq4nrg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2u3oge7xq0advfoq4nrg.png" alt="Listener using 80" width="800" height="594"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Leave the rest as default and create. Now we have a public load balancer with a non-HTTPS listener. We'll fix that soon.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frkf7o0imgfaomii3svui.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frkf7o0imgfaomii3svui.png" alt="Public LB" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 3: Create new Network Security Groups
&lt;/h2&gt;

&lt;p&gt;We need to create two new Network Security Groups (NSG)--one for the load balancer (LB) and another for the autonomous database (ADB)--to allow the internet to access the load balancer, which in turn accesses the ADB.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Optionally, you can instead opt to modify the security lists instead.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0bsdwbdck2z25actwhqy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0bsdwbdck2z25actwhqy.png" alt="Allow list for NSG" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  NSG for LB
&lt;/h3&gt;

&lt;p&gt;One simple NSG to allow access from everywhere on the internet to port 443.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6i5quaus8ro9cdnv3od8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6i5quaus8ro9cdnv3od8.png" alt="NSG LB" width="800" height="612"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  NSG for ADB
&lt;/h3&gt;

&lt;p&gt;One simple NSG to allow access from the public subnet CIDR range (&lt;code&gt;10.0.0.0/24&lt;/code&gt; in my case) to port 443.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fihfubtw6muejrezvzdqw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fihfubtw6muejrezvzdqw.png" alt="NSG ADB" width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 3: Create an APEX or APEX-included autonomous database
&lt;/h2&gt;

&lt;p&gt;We create a new APEX autonomous database in OCI and select the APEX option as its &lt;strong&gt;Workload type&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;It is possible to later upgrade the workload type to a &lt;strong&gt;Transaction Processing&lt;/strong&gt; database without affecting the APEX instance.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk7rssrv4ekn9z7z2fv84.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk7rssrv4ekn9z7z2fv84.png" alt="Choose APEX" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's not important, but we'll use 23ai as our version and using the minimum storage amount of 20 GB to save costs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fctuqusje4re65oe2xnyd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fctuqusje4re65oe2xnyd.png" alt="Use 23ai" width="800" height="673"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Importantly, select &lt;strong&gt;Private endpoint access only&lt;/strong&gt; as the Network Access type so we can have a private IP address to use.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvaenpy6mg70azosenn4s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvaenpy6mg70azosenn4s.png" alt="Select Private endpoint access only" width="800" height="607"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alternatively, if you've already provisioned your autonomous database with &lt;strong&gt;Secure access from everywhere&lt;/strong&gt; option, you can change the network type in the &lt;strong&gt;More actions&lt;/strong&gt; menu.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc5l4s97fu0hy4s7mw26v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc5l4s97fu0hy4s7mw26v.png" alt="Change network type" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add the NSG created for this ADB. In the ADB page, under &lt;strong&gt;Autonomous Database information&lt;/strong&gt; tab,  go to &lt;strong&gt;Network&lt;/strong&gt; &amp;gt; &lt;strong&gt;Network security groups&lt;/strong&gt;. Click &lt;strong&gt;Edit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frro107s716smds7a43au.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frro107s716smds7a43au.png" alt="Edit NSG" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add the NSG for the ADB:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhes38q19yzus1adrcwtn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhes38q19yzus1adrcwtn.png" alt="Add NSG" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, we copy the database's private IP address:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fflg643h000w1j8o1q28m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fflg643h000w1j8o1q28m.png" alt="Private IP" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 4: Add IP address to LB
&lt;/h2&gt;

&lt;p&gt;Now, we add that private IP address to the LB we created. Back to the load balancer's details page, go to the &lt;strong&gt;Backend sets&lt;/strong&gt; tab and click on the sole backend set.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7irufbyqdzp19u26z0cj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7irufbyqdzp19u26z0cj.png" alt="Backend set" width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We add a backend by selecting &lt;strong&gt;Add backends&lt;/strong&gt; and putting in the database's private IP address (&lt;code&gt;10.0.1.67&lt;/code&gt; in my case) and port &lt;code&gt;443&lt;/code&gt;. Click &lt;strong&gt;Add&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fscolusm3ncif0ixkvknl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fscolusm3ncif0ixkvknl.png" alt="Create backend" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wait for the backend to finish updating and then wait a minute or two for the backend health to turn to &lt;strong&gt;Ok&lt;/strong&gt;. This confirms the backend is able to connect to our database. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Troubleshoot: If this fails, check the health check of the backend set and the NSG settings.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fejs7wuxaqmf3dbq5j6rs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fejs7wuxaqmf3dbq5j6rs.png" alt="Backend health ok" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 5: Add NSG to LB
&lt;/h2&gt;

&lt;p&gt;Now, we'll add the NSG we created to the load balancer to allow the internet to connect to the load balancer.&lt;/p&gt;

&lt;p&gt;In the LB page, under &lt;strong&gt;Details&lt;/strong&gt; &amp;gt; &lt;strong&gt;Load balancer information&lt;/strong&gt; &amp;gt; &lt;strong&gt;Network security groups&lt;/strong&gt;, click &lt;strong&gt;Edit&lt;/strong&gt;. Add the NSG we created for the LB.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fntfj07o26rmtwg8liyzh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fntfj07o26rmtwg8liyzh.png" alt="Add NSG" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 6: Create a self-signed SSL certificate
&lt;/h2&gt;

&lt;p&gt;Now, we will create a self-signed SSL certificate to add to the load balancer and subsequently modify the listener to be an HTTPS listener.&lt;/p&gt;

&lt;p&gt;Use the following command to create a temporary self-signed certificate. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Of course, users will see a warning that this certificate is not trusted but we assume you'll eventually get a trusted certificate.&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openssl req &lt;span class="nt"&gt;-x509&lt;/span&gt; &lt;span class="nt"&gt;-nodes&lt;/span&gt; &lt;span class="nt"&gt;-newkey&lt;/span&gt; rsa:2048 &lt;span class="nt"&gt;-keyout&lt;/span&gt; private.key &lt;span class="nt"&gt;-out&lt;/span&gt; certificate.crt &lt;span class="nt"&gt;-days&lt;/span&gt; 7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You may skip (press &lt;code&gt;Enter&lt;/code&gt;) on all options to leave them as default.&lt;/p&gt;

&lt;p&gt;This will create a temporary self-signed SSL certificate valid for 7 days in the form of two files: &lt;code&gt;certificate.crt&lt;/code&gt; and &lt;code&gt;private.key&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In the load balancer page, go to the &lt;strong&gt;Certificates and ciphers&lt;/strong&gt; tab and under &lt;strong&gt;Load balancer managed certificates&lt;/strong&gt;, click &lt;strong&gt;Add certificate&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgkih6toc8ftz513tr78d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgkih6toc8ftz513tr78d.png" alt="Add certificate" width="800" height="596"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Upload the following files to the following fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SSL certificate: &lt;code&gt;certificate.crt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;CA certificate: &lt;code&gt;certificate.crt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Private key: &lt;code&gt;private.key&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Leave the private key passphrase as empty. Give a name and click &lt;strong&gt;Add certificate&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Modify the listener to be an HTTPS listener
&lt;/h2&gt;

&lt;p&gt;At the load balancer page, go to the &lt;strong&gt;Listeners&lt;/strong&gt; tab and &lt;strong&gt;Edit&lt;/strong&gt; the sole listener.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwtbtu19jplsifuzzx904.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwtbtu19jplsifuzzx904.png" alt="Edit listener" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Update the following fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Protocol: HTTPS&lt;/li&gt;
&lt;li&gt;Port: 443&lt;/li&gt;
&lt;li&gt;Use SSL: &lt;em&gt;Yes&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Certificate resource: Load balancer managed certificate&lt;/li&gt;
&lt;li&gt;Certificate name: &lt;em&gt;the certificate you created&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Leave the rest as default. Click &lt;strong&gt;Save changes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh0951w56k9pi7wfx4dgk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh0951w56k9pi7wfx4dgk.png" alt="Modify listener" width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, you are able to go to the IP address (&lt;code&gt;https://129.153.150.95&lt;/code&gt; for me, make sure to add the &lt;code&gt;https&lt;/code&gt;) and access the APEX instance through the LB. Note that there may be a warning due to our use of a self-signed SSL certificate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6xbx68046gw427a4umfu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6xbx68046gw427a4umfu.png" alt="IP access" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 8: Add to DNS record
&lt;/h2&gt;

&lt;p&gt;Finally, we'll add the load balancer's public IP address to our DNS records as an A record to give it a vanity custom URL. I have my own domain to test that I use in CloudFlare, so I'll add it here.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frtdp9qnu9x9d3vwmfh05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frtdp9qnu9x9d3vwmfh05.png" alt="Add DNS" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And voilà! I'm able to go to &lt;code&gt;https://my-apex.farisdurrani.com&lt;/code&gt; and access the APEX instance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fofnmxhxf83cqva531vv8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fofnmxhxf83cqva531vv8.png" alt="full url" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Advanced: Private DNS and Load Balancer
&lt;/h2&gt;

&lt;p&gt;Alternatively, if you want to set up a private DNS zone where only the internal network can access the LB through a private DNS record, you can use an OCI Private Load Balancer and an OCI DNS Private Zone. &lt;/p&gt;

&lt;p&gt;Create a private LB in the same public subnet (the LB must be in a distinct subnet than the ADB subnet). Add the appropriate NSG, backend, and listener. The LB will only have a private IP address, copy that IP address. &lt;/p&gt;

&lt;p&gt;Head over to &lt;strong&gt;Networking&lt;/strong&gt; &amp;gt; &lt;strong&gt;DNS management&lt;/strong&gt; &amp;gt; &lt;strong&gt;Private zones&lt;/strong&gt; and create a new private zone (I choose &lt;code&gt;my-apex-instance.com&lt;/code&gt;). Add the IP address as an A record to the zone. I choose the domain &lt;code&gt;www.my-apex-instance.com&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F76ukuzkwq80fvemb61c3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F76ukuzkwq80fvemb61c3.png" alt="private zone" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open a Cloud Shell instance, change the Network to the public subnet, and run &lt;code&gt;curl -k https://www.my-apex-instance.com&lt;/code&gt; to verify connectivity to the APEX instance. Note that we need to add the insecure &lt;code&gt;-k&lt;/code&gt; flag since we are using a self-signed certificate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6qhfudirdmhpzbczly47.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6qhfudirdmhpzbczly47.png" alt="cloud shell" width="696" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://blogs.oracle.com/apex/post/introducing-vanity-urls-on-adb" rel="noopener noreferrer"&gt;Oracle Blogs: Introducing Vanity URLs for APEX and ORDS on Oracle Autonomous Database&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Safe harbor statement
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The information provided on this channel/article/story is solely intended for informational purposes and cannot be used as a part of any contractual agreement. The content does not guarantee the delivery of any material, code, or functionality, and should not be the sole basis for making purchasing decisions. The postings on this site are my own and do not necessarily reflect the views or work of Oracle or Mythics, LLC.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/4.0" rel="noopener noreferrer"&gt;Creative Commons Attribution 4.0 International License&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>apex</category>
      <category>database</category>
      <category>oci</category>
      <category>dns</category>
    </item>
    <item>
      <title>How to set up Interconnect / FastConnect between GCP and OCI</title>
      <dc:creator>Faris Durrani</dc:creator>
      <pubDate>Tue, 23 Sep 2025 02:44:41 +0000</pubDate>
      <link>https://dev.to/farisdurrani/how-to-set-up-interconnect-fastconnect-between-gcp-and-oci-4813</link>
      <guid>https://dev.to/farisdurrani/how-to-set-up-interconnect-fastconnect-between-gcp-and-oci-4813</guid>
      <description>&lt;p&gt;&lt;em&gt;How to set up an Oracle Cloud (OCI) Partner Interconnect / FastConnect connection with Google Cloud (GCP)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuenif6p4lz2pw3019g6x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuenif6p4lz2pw3019g6x.png" alt="Arch diagram" width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You have an Oracle Cloud tenancy and you want to set a private, high-speed connection between OCI and GCP. Fortunately, OCI and GCP has collaborated on a new partner connection between those two tenancies. &lt;/p&gt;

&lt;p&gt;This tutorial will largely follow the official &lt;a href="https://mylearn.oracle.com/ou/course/oracle-cloud-infrastructure-multicloud-architect-professional-2025-/144474/236071" rel="noopener noreferrer"&gt;demo tutorial&lt;/a&gt; to illustrate the steps to establish and confirm connectivity between an OCI VM instance and a GCP VM instance from scratch, located in the Ashburn / us-east4 region respectively. We provide screenshots and more thorough details.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Create an OCI VCN
&lt;/h2&gt;

&lt;p&gt;Log in to Oracle Cloud (cloud.oracle.com) and create a standard internet-enabled virtual cloud network through the VCN wizard.&lt;/p&gt;

&lt;p&gt;Go to &lt;strong&gt;☰ Menu&lt;/strong&gt; &amp;gt; &lt;strong&gt;Networking&lt;/strong&gt; &amp;gt; &lt;strong&gt;Virtual Cloud Networks&lt;/strong&gt; &amp;gt; &lt;strong&gt;Actions&lt;/strong&gt; &amp;gt; &lt;strong&gt;Start VCN Wizard&lt;/strong&gt; &amp;gt; &lt;strong&gt;Create VCN with Internet Connectivity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3l3d1o6p7qp3q5xqn8ry.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3l3d1o6p7qp3q5xqn8ry.png" alt="Create VCN" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using the default settings will do. Our VCN name is &lt;code&gt;ellipse4543-vcn&lt;/code&gt;. Click &lt;strong&gt;Next&lt;/strong&gt; and &lt;strong&gt;Create&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv8nsq502p9wrmlqt2o7v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv8nsq502p9wrmlqt2o7v.png" alt="VCN details" width="800" height="626"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After creating the VCN, we'll need to modify the subnet's security control list to allow for external pings. We assume we'll be using the public subnet to host our test VM instance simply to make SSH login into it easier.&lt;/p&gt;

&lt;p&gt;Head to the public subnet's &lt;strong&gt;Security&lt;/strong&gt; tab and modify the security list to allow for ICMP type 8 (Echo) ingress connections from &lt;code&gt;0.0.0.0/0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1binhoi9tb1i6z1xxmd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1binhoi9tb1i6z1xxmd.png" alt="Choose SL" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhxgr1brxpgkdajifvmi4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhxgr1brxpgkdajifvmi4.png" alt="ICMP 8 ingress" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Create an OCI DRG
&lt;/h2&gt;

&lt;p&gt;Next, we'll create an OCI Dynamic Routing Gateway (DRG). Go to &lt;strong&gt;☰ Menu&lt;/strong&gt; &amp;gt; &lt;strong&gt;Networking&lt;/strong&gt; &amp;gt; &lt;strong&gt;Customer connectivity&lt;/strong&gt; &amp;gt; &lt;strong&gt;Dynamic routing gateway&lt;/strong&gt;. Create a new DRG. Give it a name, in my case, &lt;code&gt;ellipse4543-drg&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvmhwvavmxo6acax0pjsa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvmhwvavmxo6acax0pjsa.png" alt="Create DRG" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Set up DRG routing
&lt;/h2&gt;

&lt;p&gt;First, we'll need to attach the DRG to the VCN. &lt;/p&gt;

&lt;p&gt;Go to the DRG you created, head to the &lt;strong&gt;Attachments&lt;/strong&gt; tab and click &lt;strong&gt;Create virtual cloud network attachment&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frap0wzui1phiiq5l8th4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frap0wzui1phiiq5l8th4.png" alt="Click create virtual attachment" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Give the attachment a name and click &lt;strong&gt;Create VCN attachment&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmz03fv7c2qowt6hrjuid.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmz03fv7c2qowt6hrjuid.png" alt="Create attachment" width="800" height="719"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, we'll need to modify the route table on the VCN subnet to route any GCP-bound traffic to the DRG.&lt;/p&gt;

&lt;p&gt;Go to the VCN you created and head to the &lt;strong&gt;Subnets&lt;/strong&gt; tab. Click the public subnet and click on its route table.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbxi1fvggpdqoiv7kcgxi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbxi1fvggpdqoiv7kcgxi.png" alt="Click route table" width="800" height="925"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Add Route Rules&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1wvx6t2veedhgpmf6std.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1wvx6t2veedhgpmf6std.png" alt="Add route rule" width="800" height="517"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Assuming the GCP subnet CIDR range is &lt;code&gt;192.168.0.0/16&lt;/code&gt;, we input that as our &lt;strong&gt;Destination CIDR Block&lt;/strong&gt;. Click &lt;strong&gt;Add Route Rules.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkl68hvjkzf2bghkcgnjw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkl68hvjkzf2bghkcgnjw.png" alt="Add CIDR" width="800" height="567"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, we have the DRG route rule established. Make sure the Internet Gateway route rule to destination &lt;code&gt;0.0.0.0.0&lt;/code&gt; has been created as well (should have been automatically provisioned).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhzxi4r9kvzf086uemyjq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhzxi4r9kvzf086uemyjq.png" alt="DRG and IG route" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Create a GCP VPC
&lt;/h2&gt;

&lt;p&gt;Head over to Google Cloud (console.cloud.google.com) and head over to &lt;strong&gt;VPC network&lt;/strong&gt; &amp;gt; &lt;strong&gt;VPC networks&lt;/strong&gt; &amp;gt; &lt;strong&gt;Create VPC network&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Give it a name (&lt;code&gt;ellipse4543-vpc&lt;/code&gt;). Set the MTU to &lt;strong&gt;1500&lt;/strong&gt; to match the future OCI FastConnect value.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foex3b7rkshmh46swnk56.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foex3b7rkshmh46swnk56.png" alt="Create VPC name" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;ℹ️ &lt;strong&gt;Note:&lt;/strong&gt; it may be possible to optionally use the default MTU of 1460 but presumably, you would need to configure firewall rules to enable and response of detection of ICMP “Fragmentation Needed” (Type 3, Code 4) message.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Name the virtual private cloud (VPC) subnet. Set the region to us-east4, and add the IPv4 range (&lt;code&gt;192.168.0.0/16&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi2h6j9pe0fbfrxtgoreu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi2h6j9pe0fbfrxtgoreu.png" alt="Create subnet" width="800" height="723"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Allow firewall rules to enable the OCI VM to ping any instances created in this subnet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2vdvzn7dj3kxjvmar3tt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2vdvzn7dj3kxjvmar3tt.png" alt="Firewall in subnet" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Leave the rest as default. Click &lt;strong&gt;Create&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foubvibdytlwfbjhfmn2f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foubvibdytlwfbjhfmn2f.png" alt="Click Create" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Create a GCP Partner Interconnect
&lt;/h2&gt;

&lt;p&gt;In GCP, head to &lt;strong&gt;Network Connectivity&lt;/strong&gt; &amp;gt; &lt;strong&gt;Interconnect&lt;/strong&gt; &amp;gt; &lt;strong&gt;Create VLAN attachments&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwgvvr0mk7wnx1p2nrxka.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwgvvr0mk7wnx1p2nrxka.png" alt="Create VLAN attachment" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select &lt;strong&gt;Partner Interconnect connection&lt;/strong&gt;. Click &lt;strong&gt;Continue&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl6h1cveff8n7cka8d3fw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl6h1cveff8n7cka8d3fw.png" alt="Partner interconnect" width="800" height="1017"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the next page, click &lt;strong&gt;I already have a service provider&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fekjpg6uaa0bvo3und4u5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fekjpg6uaa0bvo3und4u5.png" alt="Already have provider" width="800" height="242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select the option &lt;strong&gt;Create a single VLAN (no redundancy)&lt;/strong&gt;. Select the created VPC and the region as &lt;strong&gt;us-east4 (Northern Virginia)&lt;/strong&gt;. Create a new router with a new name.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7vh432cp6l5mmopff3k2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7vh432cp6l5mmopff3k2.png" alt="Select vpc, router" width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Give VLAN A an attachment name and select an MTU value of &lt;strong&gt;1500&lt;/strong&gt; to match the future OCI FastConnect value. Click &lt;strong&gt;Create&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3kpm7q0noyidirms9idy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3kpm7q0noyidirms9idy.png" alt="Create attachment" width="800" height="779"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy the pairing key. Select the &lt;strong&gt;Enable&lt;/strong&gt; button to pre-activate the VLAN attachment. You may also optionally enable it later.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ele9b8ergpn1rlwgvq5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ele9b8ergpn1rlwgvq5.png" alt="Pairing key" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Create an OCI FastConnect
&lt;/h2&gt;

&lt;p&gt;With the pairing key, head to the OCI console. Go to &lt;strong&gt;☰ Menu&lt;/strong&gt; &amp;gt; &lt;strong&gt;Networking&lt;/strong&gt; &amp;gt; &lt;strong&gt;Customer connectivity&lt;/strong&gt; &amp;gt; &lt;strong&gt;FastConnect&lt;/strong&gt; &amp;gt; &lt;strong&gt;Create FastConnect&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy73pi27h307xiwdtevl2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy73pi27h307xiwdtevl2.png" alt="Create FC" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ensure the connection type is &lt;strong&gt;FastConnect partner&lt;/strong&gt;. Click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1b86zfx88me6xy84ywff.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1b86zfx88me6xy84ywff.png" alt="FC Partner" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Partner&lt;/strong&gt;: Google Cloud: OCI Interconnect&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic routing gateway&lt;/strong&gt;: &lt;em&gt;the DRG you created&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proposed bandwidth&lt;/strong&gt;: 1 Gbps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Partner service key&lt;/strong&gt;: &lt;em&gt;the copied pairing key&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MTU&lt;/strong&gt;: 1500&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click &lt;strong&gt;Create&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6r4p6r9l4x4jq4xq7m3p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6r4p6r9l4x4jq4xq7m3p.png" alt="Create connection" width="800" height="551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wait until the &lt;strong&gt;Lifecycle State&lt;/strong&gt; is &lt;strong&gt;Provisioned&lt;/strong&gt; and the &lt;strong&gt;IPv4 BGP state&lt;/strong&gt; is &lt;strong&gt;Up&lt;/strong&gt; (5 mins).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzt03hbzmm60uxmgg64b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzt03hbzmm60uxmgg64b.png" alt="State is Up" width="800" height="235"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations, we established connection. Now, let's test it.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Create an OCI VM instance
&lt;/h2&gt;

&lt;p&gt;We'll need to create a new OCI virtual machine (VM) instance so we can test connectivity between the two cloud providers. Go to &lt;strong&gt;☰ Menu&lt;/strong&gt; &amp;gt; &lt;strong&gt;Compute&lt;/strong&gt; &amp;gt; &lt;strong&gt;Instances&lt;/strong&gt; &amp;gt; &lt;strong&gt;Create instance&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvjl9rz2joct1ghmi7mbt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvjl9rz2joct1ghmi7mbt.png" alt="Create instance" width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm creating the instance in a public subnet so I can SSH login into it easily.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpfalv5dx8mp3ine3cv2y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpfalv5dx8mp3ine3cv2y.png" alt="Create public instance" width="800" height="584"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Make sure to download the SSH private key under &lt;strong&gt;3. Networking&lt;/strong&gt; &amp;gt; &lt;strong&gt;Add SSH keys&lt;/strong&gt; so you can SSH into the instance. Other settings can be kept to their default. Go through the creation steps until you create the instance.&lt;/p&gt;

&lt;p&gt;Wait until it is provisioned. Get the public IP address and login using SSH into the instance using the command &lt;code&gt;ssh -i your_ssh_key.pem opc@the_ip_addr&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9q8s5i85qojthbkf7rh1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9q8s5i85qojthbkf7rh1.png" alt="public ip" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbct3p9w9zvv7g5qz88rb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbct3p9w9zvv7g5qz88rb.png" alt="successful ssh" width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Create a GCP VM instance
&lt;/h2&gt;

&lt;p&gt;Back in GCP, head over to &lt;strong&gt;Compute Engine&lt;/strong&gt; &amp;gt; &lt;strong&gt;VM instances&lt;/strong&gt; and click &lt;strong&gt;Create instance&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fer4dzgxl1cbd1parvz9c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fer4dzgxl1cbd1parvz9c.png" alt="Create instance" width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choose the &lt;code&gt;us-east4&lt;/code&gt; region. Don't click &lt;strong&gt;Create&lt;/strong&gt; yet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fssjwpqu5xhp6rjneaxzc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fssjwpqu5xhp6rjneaxzc.png" alt="Region" width="800" height="632"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go to the &lt;strong&gt;Networking&lt;/strong&gt; tab and select the subnet we created. Choose &lt;strong&gt;VirtIO&lt;/strong&gt; as the Network interface card. Click &lt;strong&gt;Create&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3j0cag15t66w3rjnbzdk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3j0cag15t66w3rjnbzdk.png" alt="Network" width="800" height="933"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Test pings
&lt;/h2&gt;

&lt;p&gt;Once created, click on the instance and click &lt;strong&gt;SSH&lt;/strong&gt; to log in. Get the private (not public) IP address of the OCI instance you created and try pinging that OCI instance from the GCP VM. In my case, that is &lt;code&gt;ping 10.0.0.100&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Received ping responses indicate successful connection to the OCI  instance from GCP on the private network.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1wxpd0kug5vw50x66hvl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1wxpd0kug5vw50x66hvl.png" alt="Successful ping" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And on the OCI VM's SSH instance, we try the same thing. Retrieve the GCP instance's private IP address (&lt;code&gt;192.168.0.2&lt;/code&gt; in my case) and ping that address from the OCI instance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fes95y6icjczsu33lnl76.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fes95y6icjczsu33lnl76.png" alt="private ip" width="800" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Received ping responses indicate successful connection to the GCP  instance from OCI on the private network.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhdx4kdvypasjh5cb8mbr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhdx4kdvypasjh5cb8mbr.png" alt="received ping" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This confirms successful interconnection pairing between the GCP and OCI virtual private clouds.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://mylearn.oracle.com/ou/course/oracle-cloud-infrastructure-multicloud-architect-professional-2025-/144474/236071" rel="noopener noreferrer"&gt;Oracle University: Demo: Setting up Oracle Interconnect for Google Cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blogs.oracle.com/cloud-infrastructure/post/interconnecting-oci-google-cloud" rel="noopener noreferrer"&gt;Oracle Blogs: https://blogs.oracle.com/cloud-infrastructure/post/interconnecting-oci-google-cloud&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Safe harbor statement
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The information provided on this channel/article/story is solely intended for informational purposes and cannot be used as a part of any contractual agreement. The content does not guarantee the delivery of any material, code, or functionality, and should not be the sole basis for making purchasing decisions. The postings on this site are my own and do not necessarily reflect the views or work of Oracle or Mythics, LLC.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/4.0" rel="noopener noreferrer"&gt;Creative Commons Attribution 4.0 International License&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>gcp</category>
      <category>oci</category>
      <category>networking</category>
      <category>cloud</category>
    </item>
    <item>
      <title>How to set up Identity Federation between Google Cloud and Oracle Cloud</title>
      <dc:creator>Faris Durrani</dc:creator>
      <pubDate>Fri, 12 Sep 2025 21:38:51 +0000</pubDate>
      <link>https://dev.to/farisdurrani/how-to-set-up-identity-federation-between-google-cloud-and-oracle-cloud-1a43</link>
      <guid>https://dev.to/farisdurrani/how-to-set-up-identity-federation-between-google-cloud-and-oracle-cloud-1a43</guid>
      <description>&lt;p&gt;&lt;em&gt;How to set up Identity SAML Federation between Google Cloud Platform (GCP) and Oracle Cloud Infrastructure (OCI)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Setting up Identity Federation will allow users to log into OCI using their GCP IAM organization credentials, rather than logging in using a new username-password in OCI. This can improve credential management and security by having a central place to store all user logins.&lt;/p&gt;

&lt;p&gt;We will replicate the steps in &lt;a href="https://docs.oracle.com/en-us/iaas/Content/database-at-gcp/oagcp-task-6-federation.htm" rel="noopener noreferrer"&gt;Oracle Docs: Task 6: Set Up Identity Federation (Optional)&lt;/a&gt; with some UI updates. This is an optional succession to the &lt;a href="https://dev.to/farisdurrani/how-to-create-an-oracle-autonomous-databasegoogle-cloud-380o"&gt;How to create an Oracle Autonomous Database@Google Cloud&lt;/a&gt; article we wrote.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Have an OCI account&lt;/li&gt;
&lt;li&gt;Have a GCP account and an associating GCP Workspace IAM Admin console at &lt;a href="https://admin.google.com" rel="noopener noreferrer"&gt;https://admin.google.com&lt;/a&gt;. Note that this requires you having and associating a private  DNS domain (e.g. example.com) to the Google Cloud Admin console&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  1. Create groups in GCP Admin Console
&lt;/h2&gt;

&lt;p&gt;While not strictly necessary, this helps to confirm the JIT (Just-in-time) provisioning works as intended. You can create any group but we recommend at least one group name already present in OCI and GCP ("odbg-db-family-administrators") and one other only present in GCP ("example-group415") for POC purposes.&lt;/p&gt;

&lt;p&gt;We create a number of groups in the GCP Admin console: &lt;a href="https://admin.google.com/u/1/ac/groups" rel="noopener noreferrer"&gt;https://admin.google.com/u/1/ac/groups&lt;/a&gt;. If you came from the Oracle Database@Google Cloud article, we created the groups for Autonomous Database access based on &lt;a href="https://docs.oracle.com/en-us/iaas/Content/database-at-gcp/oagcp-task-5-rbac.htm" rel="noopener noreferrer"&gt;Oracle Docs: Task 5: Set Up Role Based Access Control&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34rdzmk31skq3uy1rkci.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34rdzmk31skq3uy1rkci.png" alt="GCP groups" width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Create a new custom SAML app in GCP
&lt;/h2&gt;

&lt;p&gt;Go to &lt;a href="https://admin.google.com/u/1/ac/apps/unified" rel="noopener noreferrer"&gt;https://admin.google.com/u/1/ac/apps/unified&lt;/a&gt; and click on &lt;strong&gt;Add app&lt;/strong&gt; &amp;gt; &lt;strong&gt;Add custom SAML app&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fte5fsky9lcgef411ngv9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fte5fsky9lcgef411ngv9.png" alt="Add custom SAML app" width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We added the following app details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;App name:&lt;/strong&gt; OracleCloudFederation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Configures identity federation between Google Cloud and Oracle Cloud for Oracle Database@Google Cloud use.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6c2z8ej8d60hvx6jakea.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6c2z8ej8d60hvx6jakea.png" alt="App name" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click CONTINUE.&lt;/p&gt;

&lt;p&gt;In the next page, &lt;strong&gt;Download Metadata&lt;/strong&gt;. Leave this page open for now.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbkgvn6qzox4di99otnnz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbkgvn6qzox4di99otnnz.png" alt="Download metadata" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Add SAML IdP in OCI
&lt;/h2&gt;

&lt;p&gt;Log into your OCI account. Go to &lt;strong&gt;☰ Menu&lt;/strong&gt; &amp;gt; &lt;strong&gt;Identity &amp;amp; Security&lt;/strong&gt; &amp;gt; &lt;strong&gt;Domains&lt;/strong&gt; &amp;gt; &lt;strong&gt;Default&lt;/strong&gt; (or another domain) &amp;gt; &lt;strong&gt;Federation&lt;/strong&gt; &amp;gt; &lt;strong&gt;Actions&lt;/strong&gt; &amp;gt; &lt;strong&gt;Add SAML IdP&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foqonbg4khykar2t4wf8g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foqonbg4khykar2t4wf8g.png" alt="Add SAML IdP" width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We give the SAML identity provider a random name:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fix1nr5jobsho5iq50jin.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fix1nr5jobsho5iq50jin.png" alt="SAML name" width="800" height="629"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Import the downloaded IdP metadata from GCP:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxdq6knljjfb8lbbgmyhd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxdq6knljjfb8lbbgmyhd.png" alt="Import IdP metadata" width="800" height="723"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Leave this page open. &lt;/p&gt;

&lt;h2&gt;
  
  
  4. Add SAML IdP in GCP
&lt;/h2&gt;

&lt;p&gt;Click on &lt;strong&gt;Export SAML metadata&lt;/strong&gt; to export the OCI SAML metadata details.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh6ibq8bxf4zno1nin6ec.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh6ibq8bxf4zno1nin6ec.png" alt="OCI SAML metadata" width="800" height="671"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Switch view from &lt;strong&gt;Metadata file&lt;/strong&gt; to &lt;strong&gt;Manual export&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flehy5girtp2pi3r0z8u1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flehy5girtp2pi3r0z8u1.png" alt="Manual export" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go back to the GCP Admin page. Click CONTINUE.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4y6y1md14ni45ye84xep.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4y6y1md14ni45ye84xep.png" alt="Continue GCP Admin" width="800" height="471"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy paste the OCI values into GCP like so:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;GCP&lt;/th&gt;
&lt;th&gt;OCI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ACS URL&lt;/td&gt;
&lt;td&gt;Assertion consumer service URL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entity ID&lt;/td&gt;
&lt;td&gt;Provider ID&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fan2q1p9r1yvztz2i0p7l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fan2q1p9r1yvztz2i0p7l.png" alt="SAML Metadata direction" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Leave the &lt;strong&gt;Name ID&lt;/strong&gt; details as their default.&lt;/p&gt;

&lt;p&gt;Click CONTINUE.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Add attribute mapping in GCP
&lt;/h2&gt;

&lt;p&gt;In the next page, add the following attribute &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First name → FirstName&lt;/li&gt;
&lt;li&gt;Last name → LastName&lt;/li&gt;
&lt;li&gt;Primary email → PrimaryEmail&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Under the &lt;strong&gt;Group membership&lt;/strong&gt; section, add all the groups of the users you want to be sent to OCI. Enter the &lt;strong&gt;App attribute&lt;/strong&gt; &lt;code&gt;MemberOf&lt;/code&gt;. Click FINISH.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fydwejhhz0vjpral7a2qf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fydwejhhz0vjpral7a2qf.png" alt="Attribute mapping" width="800" height="595"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Turn on User access in GCP
&lt;/h2&gt;

&lt;p&gt;In the next page showing the SAML app details, click on &lt;strong&gt;User access&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz4ih33675183a6xss5hk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz4ih33675183a6xss5hk.png" alt="Click User access" width="800" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Switch to &lt;strong&gt;ON for everyone&lt;/strong&gt;. Click SAVE.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvgj6g5ess6daonn7a6px.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvgj6g5ess6daonn7a6px.png" alt="Switch on" width="800" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Finish SAML app creation in OCI
&lt;/h2&gt;

&lt;p&gt;Go back to the OCI page. We finished importing GCP's IdP metadata file. Click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvonw7hdbgilcehyhr1vn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvonw7hdbgilcehyhr1vn.png" alt="Next" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Change &lt;strong&gt;Requested Name ID format&lt;/strong&gt; to &lt;strong&gt;Email address&lt;/strong&gt;. Click &lt;strong&gt;Next&lt;/strong&gt; and &lt;strong&gt;Create IdP&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpdo424gvkvty2g61817g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpdo424gvkvty2g61817g.png" alt="Email ID format" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Activate and add to IdP policy
&lt;/h2&gt;

&lt;p&gt;Now we want to activate our newly-created IdP app and add it as an option to the login policy. Click the app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgqge1028vbeeufn7zg8h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgqge1028vbeeufn7zg8h.png" alt="Click app" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on the &lt;strong&gt;Activate IdP&lt;/strong&gt; button (under Actions or in the banner).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcia8x7dsfj4bit1tn40s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcia8x7dsfj4bit1tn40s.png" alt="Activate IdP" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, we need to add the IdP app to the IdP policy. Go back to the &lt;strong&gt;Federation&lt;/strong&gt; page and click on the &lt;strong&gt;Default Identity Provider Policy&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2mbrx6nao8r7dzcabz56.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2mbrx6nao8r7dzcabz56.png" alt="Click Default Identity Provider Policy" width="800" height="817"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Under the &lt;strong&gt;Identity provider rules&lt;/strong&gt;, edit the first IdP rule.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk6n24b3ecq8j51gf1l76.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk6n24b3ecq8j51gf1l76.png" alt="Edit rule" width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add the newly-created IdP app to the list of &lt;strong&gt;Assign identity providers&lt;/strong&gt;. Click &lt;strong&gt;Save changes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53fvv10og59qkv2b9901.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53fvv10og59qkv2b9901.png" alt="Add app" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you can login but without any groups.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Set up JIT
&lt;/h2&gt;

&lt;p&gt;To enable the user's groups in GCP to appear in OCI and sync the user's group membership, we need to enable Just-in-time (JIT) provisioning so the group membership info can be shared from GCP to OCI.&lt;/p&gt;

&lt;p&gt;Go back to the &lt;strong&gt;Federation&lt;/strong&gt; page and click on the IdP app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb51ewlf69e7c74tfatvc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb51ewlf69e7c74tfatvc.png" alt="Click app" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Actions&lt;/strong&gt; &amp;gt; &lt;strong&gt;Configure JIT&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2f4deep3qftrr1s4r9tg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2f4deep3qftrr1s4r9tg.png" alt="Configure JIT" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enable these settings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable Just-In-Time (JIT) provisioning&lt;/li&gt;
&lt;li&gt;Create a new identity domain user&lt;/li&gt;
&lt;li&gt;Update the existing identity domain user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff4ysqg57kg9ka5r7z8cm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff4ysqg57kg9ka5r7z8cm.png" alt="Enable settings" width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add these &lt;strong&gt;Map user attributes info&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;IdP user attribute type&lt;/th&gt;
&lt;th&gt;IdP user attribute name&lt;/th&gt;
&lt;th&gt;Maps to&lt;/th&gt;
&lt;th&gt;Identity domain user attributes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;NameID&lt;/td&gt;
&lt;td&gt;NameID value&lt;/td&gt;
&lt;td&gt;→&lt;/td&gt;
&lt;td&gt;User Name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Attribute&lt;/td&gt;
&lt;td&gt;LastName&lt;/td&gt;
&lt;td&gt;→&lt;/td&gt;
&lt;td&gt;Last name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Attribute&lt;/td&gt;
&lt;td&gt;PrimaryEmail&lt;/td&gt;
&lt;td&gt;→&lt;/td&gt;
&lt;td&gt;Primary Work Email&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Attribute&lt;/td&gt;
&lt;td&gt;FirstName&lt;/td&gt;
&lt;td&gt;→&lt;/td&gt;
&lt;td&gt;First name&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3mbp2jx0q3r9ukecy8vq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3mbp2jx0q3r9ukecy8vq.png" alt="Map user attributes info" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, we assign group mappings. Enter the following values:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Group membership attribute name:&lt;/strong&gt; &lt;code&gt;MemberOf&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assign implicit group membership:&lt;/strong&gt; Select this&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When assigning group membership...:&lt;/strong&gt; Merge with existing group memberships&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When a group is not found...:&lt;/strong&gt; Ignore the missing group&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxh3we99bwa3jbi49b929.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxh3we99bwa3jbi49b929.png" alt="Group mappings" width="800" height="575"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Update&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Verify Federated login
&lt;/h2&gt;

&lt;p&gt;We are done! Now, we need to test the OCI login using GCP credentials.&lt;/p&gt;

&lt;p&gt;Log out of OCI as necessary. Log in to your OCI account at &lt;a href="https://cloud.oracle.com" rel="noopener noreferrer"&gt;https://cloud.oracle.com&lt;/a&gt;. You should see your GCP login option here.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fga3wfm19i099oh0qh1dk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fga3wfm19i099oh0qh1dk.png" alt="GCP Login option" width="800" height="906"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Log in using that button, which should lead you to your GCP login, and your successful OCI login.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwanwmj3hb3vw7m1hj1z1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwanwmj3hb3vw7m1hj1z1.png" alt="OCI login" width="800" height="765"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;ℹ Troubleshoot: if the login is unsuccessful, check back the OCI JIT settings are correct.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We'll log out and log back in as the OCI admin so we can see all the groups and users added.&lt;/p&gt;

&lt;p&gt;Here, we can see my GCP user added to the OCI list of users.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6xzv61am2s51r041ke45.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6xzv61am2s51r041ke45.png" alt="New user" width="800" height="677"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And I can see that new user is a member of the "odbg-db-family-administrators" group, which that user is in GCP. Note that while the user is also in the GCP group "example-group415", this group did not get transferred into OCI because that group was never created in OCI in the first place. The JIT only matches groups present in both OCI and GCP.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ru4hi9tj22y82irugba.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ru4hi9tj22y82irugba.png" alt="Groups" width="800" height="923"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You now have successfully created an identity federation from GCP to OCI.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/en-us/iaas/Content/database-at-gcp/oagcp-task-6-federation.htm" rel="noopener noreferrer"&gt;Oracle Docs: Task 6: Set Up Identity Federation (Optional)&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Safe harbor statement
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The information provided on this channel/article/story is solely intended for informational purposes and cannot be used as a part of any contractual agreement. The content does not guarantee the delivery of any material, code, or functionality, and should not be the sole basis for making purchasing decisions. The postings on this site are my own and do not necessarily reflect the views or work of Oracle or Mythics, LLC.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/4.0" rel="noopener noreferrer"&gt;Creative Commons Attribution 4.0 International License&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>cloud</category>
      <category>gcp</category>
      <category>iam</category>
    </item>
    <item>
      <title>How to create an Oracle Autonomous Database@Google Cloud</title>
      <dc:creator>Faris Durrani</dc:creator>
      <pubDate>Thu, 11 Sep 2025 20:46:54 +0000</pubDate>
      <link>https://dev.to/farisdurrani/how-to-create-an-oracle-autonomous-databasegoogle-cloud-380o</link>
      <guid>https://dev.to/farisdurrani/how-to-create-an-oracle-autonomous-databasegoogle-cloud-380o</guid>
      <description>&lt;p&gt;&lt;em&gt;Steps to provision a simple Oracle Autonomous Database@Google Cloud using a public offer&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Oracle Cloud Infrastructure (OCI) and Google Cloud Platform (GCP) recently released a joint offering--a provisioning of an Oracle Cloud Database infrastructure (Autonomous Database and Exadata Infrastructure) in Google Cloud while leveraging OCI's database services and features. In this tutorial, we follow a limited deployment of an Oracle Autonomous Database (ADB) in GCP through a public marketplace offering, also known as Pay As You Go.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Have a Google Cloud account
&lt;/h2&gt;

&lt;p&gt;Be an editor to the current GCP project with billing rights. See &lt;a href="https://docs.oracle.com/en-us/iaas/Content/database-at-gcp/oagcp-prerequisites.htm" rel="noopener noreferrer"&gt;Oracle Docs: Task 1: Prerequisites for Oracle Database@Google Cloud&lt;/a&gt; for full permissions.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Purchase an Oracle Database offer on GCP
&lt;/h2&gt;

&lt;p&gt;In GCP &amp;gt; Marketplace, search for &lt;strong&gt;Oracle Database@Google Cloud&lt;/strong&gt;. Click on it, choose the &lt;strong&gt;Pay as You Go&lt;/strong&gt; option, and &lt;strong&gt;Subscribe&lt;/strong&gt;. This process does not cost anything, but since Oracle has to manually approve of the order, the marketplace purchase process will take time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3d0exmbb37st6x1wxiz5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3d0exmbb37st6x1wxiz5.png" alt="Find ODB@GCP" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyo653yeisyjavcmt1lho.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyo653yeisyjavcmt1lho.png" alt="Purchased" width="800" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Create a new OCI account through the Oracle Database offer
&lt;/h2&gt;

&lt;p&gt;Once the offer has been successfully processed, GCP's &lt;strong&gt;Oracle Database@Google Cloud&lt;/strong&gt; resource page will show an option to link the GCP project to an OCI tenancy account. Note that since we opted to purchase a public offering, we can only link the project to a new OCI account and not link to an existing one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsv8qrpsp8hbc16hmld3m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsv8qrpsp8hbc16hmld3m.png" alt="Create new OCI" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Oracle Database@Google Cloud resource page. A banner will show up to connect to an OCI account if you haven't done so already:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkveykze4o13jqwop1edy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkveykze4o13jqwop1edy.png" alt="ODB@GCP page" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Create an ODB network
&lt;/h2&gt;

&lt;p&gt;An ODB network in GCP is an virtual network that provides connectivity between Oracle Database@Google Cloud resources in the OCI child site within the GCP data center and your Google Cloud VPC network. It allows the Oracle Virtual Cloud Network (VCN) used to host the Oracle Databases to map back to the Google Cloud VPC. You will not find the ODB network listed in Google Cloud VPCs.&lt;/p&gt;

&lt;p&gt;In GCP's Oracle Database@Google Cloud resource page, go to ODB network on the left menu and create an ODB network.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx7wntlxdguc4gqu1f6dt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx7wntlxdguc4gqu1f6dt.png" alt="ODB Network" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While you can use the &lt;code&gt;default&lt;/code&gt; network, I chose to optionally opt to use my own VPC equipped with automatically-created subnets:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3su886fdh5w1pnibxnf2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3su886fdh5w1pnibxnf2.png" alt="Create ODB Network" width="800" height="711"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Create the client and backup ODB network subnets
&lt;/h2&gt;

&lt;p&gt;After creating the ODB network, create the backup and client subnets for the database. An Autonomous Database needs a minimum of /27 CIDR size. See &lt;a href="https://docs.oracle.com/en-us/iaas/Content/database-at-gcp/oagcp-ip.htm" rel="noopener noreferrer"&gt;Oracle Docs: Plan for IP Address Space in Oracle Database@Google Cloud&lt;/a&gt; for more IP Address Space considerations.&lt;/p&gt;

&lt;p&gt;Here, I simply opted to use 10.0.1.0/24 and 10.0.2.0/24 for the client and backup subnets respectively. Again, provisioning will take time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhpsh8e9ozi52fzirqomx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhpsh8e9ozi52fzirqomx.png" alt="Create subnet" width="800" height="582"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Create Autonomous Database
&lt;/h2&gt;

&lt;p&gt;Hooray! You're near the end! 🎉&lt;/p&gt;

&lt;p&gt;Go to the &lt;strong&gt;Autonomous Database&lt;/strong&gt; menu selection and begin &lt;strong&gt;Create&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmgbta5kbw984azolefs3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmgbta5kbw984azolefs3.png" alt="Click Create" width="800" height="523"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fill out the details for the Autonomous Database. Note that only select regions are supported. See &lt;a href="https://docs.oracle.com/en-us/iaas/Content/database-at-gcp/oagcp-regions.htm" rel="noopener noreferrer"&gt;Oracle Docs: Regional Availability for Oracle Database@Google Cloud&lt;/a&gt; for supported regions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fflmm9ahaawcp596b8rln.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fflmm9ahaawcp596b8rln.png" alt="Create ADB" width="800" height="765"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also make sure to include my personal IP so I can connect publicly to this POC database to prove it's working. Require mutual TLS is also nice to enable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr54z9q0urrwojhkzlb3w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr54z9q0urrwojhkzlb3w.png" alt="Add personal IP" width="800" height="850"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Verify database connection
&lt;/h2&gt;

&lt;p&gt;Once done creating the database, you should be able to select that database and manage it in OCI by clicking on the &lt;strong&gt;Manage in OCI&lt;/strong&gt; button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkgv0qidxfr3hqwfj82o2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkgv0qidxfr3hqwfj82o2.png" alt="Manage in OCI" width="800" height="523"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once clicked, you will log into your new OCI account and see the ADB details. Let us try to connect to it by clicking on the &lt;strong&gt;Database connection&lt;/strong&gt; button and download the wallet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fty77ht6n8in5d7qjrqqu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fty77ht6n8in5d7qjrqqu.png" alt="ADB details" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Download connection wallet:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhyvyrp3ztu11m09ggq42.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhyvyrp3ztu11m09ggq42.png" alt="Download connection wallet" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We will attempt to publicly connect to the ADB using &lt;a href="https://www.oracle.com/database/sqldeveloper/" rel="noopener noreferrer"&gt;Oracle SQL Developer&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Input your password for &lt;code&gt;admin&lt;/code&gt; that you put during the creation process in GCP&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Cloud Wallet&lt;/strong&gt; as your &lt;strong&gt;Connection Type&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Choose the downloaded wallet as your &lt;strong&gt;Configuration File&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Important:&lt;/strong&gt; Select one of the public connection type services instead of the default private high type&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F40405ixc8lu29f9bz1vq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F40405ixc8lu29f9bz1vq.png" alt="Connect to ADB" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Test&lt;/strong&gt; and &lt;strong&gt;Connect&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Verify any SQL commands:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmqeck8u23byg4vltnp3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmqeck8u23byg4vltnp3.png" alt="Checking for sql version" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Next steps: RBAC IAM permissions
&lt;/h2&gt;

&lt;p&gt;To maintain a strict user access management, we need groups and policy permissions. OCI automatically created some groups and policies to help you manage access to the database resources upon provisioning of the new tenancy. Assign users appropriately to the groups. See below for groups created:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F76srstgr1fszaticvfqe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F76srstgr1fszaticvfqe.png" alt="Groups created" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These groups--except for some like &lt;code&gt;odbaa-db-family-readers&lt;/code&gt;, &lt;code&gt;odbg-exa-infra-readers&lt;/code&gt; for unclear reasons--align with the groups described here: &lt;a href="https://docs.oracle.com/en-us/iaas/Content/database-at-gcp/oagcp-task-5-rbac.htm" rel="noopener noreferrer"&gt;Oracle Docs: Task 5: Set Up Role Based Access Control&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you want to set up Identity Federation between GCP and OCI to enable GCP users to log into OCI using their GCP credentials, hop on to &lt;a href="https://dev.to/farisdurrani/how-to-set-up-identity-federation-between-google-cloud-and-oracle-cloud-1a43"&gt;Dev.to: How to set up Identity Federation between Google Cloud and Oracle Cloud &lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;Now, obviously this tutorial is meant to give a high-level overview to a limited database service with easy permission levels. Feel free to look over the resources to learn more. Make sure to stop the ADB in GCP if you're not using it to save costs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/en-us/iaas/Content/database-at-gcp/oagcp-getting-started.htm" rel="noopener noreferrer"&gt;Oracle Docs: Getting Started with Autonomous Database@Google Cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/oracle/database/docs/setup-oracle-database-environment" rel="noopener noreferrer"&gt;Google Cloud Docs: Set up Oracle Database@Google Cloud environment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mylearn.oracle.com/ou/course/oracle-cloud-infrastructure-multicloud-architect-professional-2025-/144474/236065" rel="noopener noreferrer"&gt;Oracle University: Oracle Database@Google Cloud - Onboarding video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blogs.oracle.com/database/post/getting-started-with-oracle-autonomous-database-on-oracle-database-google-cloud" rel="noopener noreferrer"&gt;Oracle Blogs: How to get started with Oracle Autonomous Database on Oracle Database@Google Cloud&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Safe harbor statement
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The information provided on this channel/article/story is solely intended for informational purposes and cannot be used as a part of any contractual agreement. The content does not guarantee the delivery of any material, code, or functionality, and should not be the sole basis for making purchasing decisions. The postings on this site are my own and do not necessarily reflect the views or work of Oracle or Mythics, LLC.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/4.0" rel="noopener noreferrer"&gt;Creative Commons Attribution 4.0 International License&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>cloud</category>
      <category>database</category>
      <category>gcp</category>
    </item>
    <item>
      <title>How to write Hello World in Oracle SQL</title>
      <dc:creator>Faris Durrani</dc:creator>
      <pubDate>Thu, 11 Sep 2025 13:41:01 +0000</pubDate>
      <link>https://dev.to/farisdurrani/how-to-write-hello-world-in-oracle-sql-1f7a</link>
      <guid>https://dev.to/farisdurrani/how-to-write-hello-world-in-oracle-sql-1f7a</guid>
      <description>&lt;p&gt;The below query returns a simple 'hello world' message in Oracle SQL (application used in Oracle SQL Developer):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="s1"&gt;'hello world'&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;dual&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr796dgfsetpcph1ot16k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr796dgfsetpcph1ot16k.png" alt="hello world command" width="513" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can &lt;/p&gt;

&lt;h2&gt;
  
  
  Safe harbor statement
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The information provided on this channel/article/story is solely intended for informational purposes and cannot be used as a part of any contractual agreement. The content does not guarantee the delivery of any material, code, or functionality, and should not be the sole basis for making purchasing decisions. The postings on this site are my own and do not necessarily reflect the views or work of Oracle or Mythics, LLC.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/4.0" rel="noopener noreferrer"&gt;Creative Commons Attribution 4.0 International License&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>sql</category>
    </item>
    <item>
      <title>How to deploy Apache site behind OCI Load Balancer with self-signed certificates and URL</title>
      <dc:creator>Faris Durrani</dc:creator>
      <pubDate>Thu, 07 Aug 2025 20:41:04 +0000</pubDate>
      <link>https://dev.to/farisdurrani/how-to-add-a-self-signed-ssl-certificate-to-oci-load-balancer-for-an-apache-web-site-3o1g</link>
      <guid>https://dev.to/farisdurrani/how-to-add-a-self-signed-ssl-certificate-to-oci-load-balancer-for-an-apache-web-site-3o1g</guid>
      <description>&lt;p&gt;&lt;em&gt;How to create and add a self-signed SSL certificate to your Oracle Cloud Infrastructure (OCI) Load Balancer to access your deployed Apache web site using https, as well as to deploy your Apache site behind a URL&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1️⃣ Create an internet-enabled VCN
&lt;/h2&gt;

&lt;p&gt;Log in to cloud.oracle.com. Go to the &lt;strong&gt;Virtual Cloud Networks&lt;/strong&gt; page.&lt;/p&gt;

&lt;p&gt;Create an internet-enabled Virtual Cloud Network using the &lt;strong&gt;Start VCN Wizard&lt;/strong&gt; &amp;gt; &lt;strong&gt;Create VCN with Internet Connectivity&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Give a random name for your VCN. Leave all other options as default. This will create a VCN with a public and private subnet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe0uu2ha8801608e48wpw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe0uu2ha8801608e48wpw.png" alt="Start VCN Wizard" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffjvcbmci4apazmkeqvq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffjvcbmci4apazmkeqvq.png" alt="Create VCN with Internet Connectivity" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F80t0s01hp57r9m2zu970.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F80t0s01hp57r9m2zu970.png" alt="Give a name to the VCN" width="800" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2️⃣ Create a VM instance in the private subnet
&lt;/h2&gt;

&lt;p&gt;Go to the &lt;strong&gt;Instances&lt;/strong&gt; page and click &lt;strong&gt;Create instance&lt;/strong&gt; to create a new instance in the private subnet. We'll be using Oracle Linux 9.&lt;/p&gt;

&lt;p&gt;You may leave all other options as the default. Make sure to download the private SSH key so you can login into the instance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7hriohrv0u8x5vka6j9g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7hriohrv0u8x5vka6j9g.png" alt="Create instance" width="800" height="590"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswaultxouofiwmwzklv0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswaultxouofiwmwzklv0.png" alt="Choose private subnet" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F62nqjy5va1obunvx4oxq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F62nqjy5va1obunvx4oxq.png" alt="Download private SSH key" width="800" height="637"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3️⃣ Set up the Apache web site
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;We will be doing the steps mentioned in &lt;a href="https://dev.to/farisdurrani/how-to-deploy-an-apache-web-app-using-oracle-cloud-1lm5"&gt;How to deploy an Apache web app using Oracle Cloud &lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A simple Apache web site is easy to set up. But first, we need to log in using SSH into the VM instance.&lt;/p&gt;

&lt;p&gt;🔹 1. Create a new Cloud Shell session and create a new private network definition of your private subnet. This is to enable us to be in the same network subnet as our VM instance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpstsepa39r7f79hhs3dk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpstsepa39r7f79hhs3dk.png" alt="Connect to Cloud Shell" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔹 2. Upload the private SSH .key file&lt;/p&gt;

&lt;p&gt;Once we've connected to the new private network definition, we can upload our private SSH .key file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3x777nc3wsqo35mzo1u1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3x777nc3wsqo35mzo1u1.png" alt="Upload private SSH key file" width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔹 3. Change permission level of SSH key&lt;/p&gt;

&lt;p&gt;Change the permission level of the private SSH key first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;400 ssh-key-2025-08-07.key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7rnjlqn2712x31l18zz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7rnjlqn2712x31l18zz.png" alt="Change permission level" width="800" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔹 4. Log in to the VM&lt;/p&gt;

&lt;p&gt;Make sure to update the IP address to the private IP address of your VM instance.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-i&lt;/span&gt; ssh-key-2025-08-07.key opc@10.0.1.87
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdvryvs8id94jlhf7600d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdvryvs8id94jlhf7600d.png" alt="SSH in" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔹 5. Install Apache site&lt;/p&gt;

&lt;p&gt;Run these Oracle Linux commands to install a simple Apache HTML site on your instance and to open the firewall rule for incoming port 80 HTTP requests.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;httpd &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apachectl start
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;httpd
&lt;span class="nb"&gt;sudo &lt;/span&gt;apachectl configtest
&lt;span class="nb"&gt;sudo &lt;/span&gt;firewall-cmd &lt;span class="nt"&gt;--permanent&lt;/span&gt; &lt;span class="nt"&gt;--zone&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;public &lt;span class="nt"&gt;--add-service&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http
&lt;span class="nb"&gt;sudo &lt;/span&gt;firewall-cmd &lt;span class="nt"&gt;--reload&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'echo "This is APP server 1 running on Oracle Cloud Infrastructure | Hostname: $(hostname) | Date: $(date)" &amp;gt; /var/www/html/index.html'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2p8einb0xzmmslqx5gkm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2p8einb0xzmmslqx5gkm.png" alt="Install Apache" width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔹 6. Verify Apache site is up&lt;/p&gt;

&lt;p&gt;Do a&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl localhost:80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to verify the Apache site and connectable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faytq9watlyee73zbbtiq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faytq9watlyee73zbbtiq.png" alt="Connecting to Apache" width="800" height="101"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations, you have set up your Apache site.&lt;/p&gt;

&lt;h2&gt;
  
  
  4️⃣ Create a self-signed SSL certificate
&lt;/h2&gt;

&lt;p&gt;A self-signed certificate allows you to connect to the HTTPS version of your deployed site in an untrusted manner. You will still need to download an authenticated SSL certificate from a trusted partner like DigiCert, Let's Encrypt, or Google Trust Services in a production environment.&lt;/p&gt;

&lt;p&gt;Run this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openssl req &lt;span class="nt"&gt;-x509&lt;/span&gt; &lt;span class="nt"&gt;-nodes&lt;/span&gt; &lt;span class="nt"&gt;-newkey&lt;/span&gt; rsa:2048 &lt;span class="nt"&gt;-keyout&lt;/span&gt; private.key &lt;span class="nt"&gt;-out&lt;/span&gt; certificate.crt &lt;span class="nt"&gt;-days&lt;/span&gt; 7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Felmsdmfs26rnaxng1eta.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Felmsdmfs26rnaxng1eta.png" alt="Create SSL cert" width="800" height="113"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You may skip (press Enter) on all options to leave them as default.&lt;/p&gt;

&lt;p&gt;This will create a temporary self-signed SSL certificate valid for 7 days in the form of two files: &lt;code&gt;certificate.crt&lt;/code&gt; and &lt;code&gt;private.key&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  5️⃣ Create a Load Balancer with the SSL certificate
&lt;/h2&gt;

&lt;p&gt;🔹 1. Select a public application Load Balancer&lt;/p&gt;

&lt;p&gt;Go to the OCI &lt;strong&gt;Load Balancers&lt;/strong&gt; page and create a new load balancer. Select the &lt;strong&gt;Public&lt;/strong&gt; option.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvcow34mmauz6fl2ld9uw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvcow34mmauz6fl2ld9uw.png" alt="Select Public" width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔹 2. Select the public subnet option&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbyhiotpjfk3zyjyemewm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbyhiotpjfk3zyjyemewm.png" alt="Public subnet" width="800" height="623"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We'll add a network security group later.&lt;/p&gt;

&lt;p&gt;🔹 3. Add the instance as our backend&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxnde39wv5arl5qlzcapd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxnde39wv5arl5qlzcapd.png" alt="Add instance to backend" width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Leave the health check as the default (HTTP port 80 with status code 200).&lt;/p&gt;

&lt;p&gt;Turning on &lt;strong&gt;Use SSL&lt;/strong&gt; for the backend set is optional. We will keep this turned off.&lt;/p&gt;

&lt;p&gt;🔹 4. Leave automatic security rule changes as the default&lt;/p&gt;

&lt;p&gt;No changes needed here.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fomfp6152c6avaajnwckx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fomfp6152c6avaajnwckx.png" alt="security rule changes" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔹 5. Add SSL certificate&lt;/p&gt;

&lt;p&gt;As we're moving into the listener creation step, we'll choose the &lt;strong&gt;Load balancer managed certificate&lt;/strong&gt; option for &lt;strong&gt;Certificate resource&lt;/strong&gt; and begin adding the two files we created before.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbtve132ucqytejv1p5sm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbtve132ucqytejv1p5sm.png" alt="Choose Load balancer managed certificate option" width="800" height="664"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Make sure that you upload the two files to the correct spots:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SSL certificate &amp;lt;- &lt;code&gt;certificate.crt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;CA certificate &amp;lt;- &lt;code&gt;certificate.crt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Private key &amp;lt;- &lt;code&gt;private.key&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Private key passphrase &amp;lt;- &lt;em&gt;leave empty&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7mpx3b8tnae298ebaw7w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7mpx3b8tnae298ebaw7w.png" alt="Add certificate" width="800" height="697"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Leave the SSL policy settings as the default.&lt;/p&gt;

&lt;p&gt;🔹 6. Create the load balancer&lt;/p&gt;

&lt;p&gt;You may turn off the &lt;strong&gt;Error logs&lt;/strong&gt;. We'll proceed to clicking &lt;strong&gt;Submit&lt;/strong&gt; to create the application load balancer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk5b7kv8ybdn5mlgt9ab8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk5b7kv8ybdn5mlgt9ab8.png" alt="Submit LB" width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6️⃣ Allow incoming https requests to load balancer
&lt;/h2&gt;

&lt;p&gt;Go back to the &lt;strong&gt;Virtual Cloud Networks&lt;/strong&gt; page and go to the VCN you created. Go under &lt;strong&gt;Security&lt;/strong&gt; and select the default security list, which should be the security list that is used by the public subnet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2dej7ysei117ijj4q15d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2dej7ysei117ijj4q15d.png" alt="Choose public security list" width="800" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Add Ingress Rules&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fme3h40be1khdlp9ybysu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fme3h40be1khdlp9ybysu.png" alt="Click Add Ingress Rules" width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add a port 443 for https requests from all sources (0.0.0.0/0)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk2he8mgeuqp8pwrtjafg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk2he8mgeuqp8pwrtjafg.png" alt="Add port 443 inbound" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7️⃣ Test connection
&lt;/h2&gt;

&lt;p&gt;Go back to the load balancer you created. Copy the public IP address of the load balancer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flolb84pj8n1h0xojdbjq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flolb84pj8n1h0xojdbjq.png" alt="Copy the load balancer IP" width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy paste the IP address to your web browser, prefixing a &lt;code&gt;https://&lt;/code&gt; at the beginning.&lt;/p&gt;

&lt;p&gt;There might be a privacy warning shown. This is expected since you are using an untrusted SSL certificate that you created on your own.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjp1ektjgtzkvmb44aljz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjp1ektjgtzkvmb44aljz.png" alt="HTTPS connection" width="800" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💠 BONUS: Deploy on a URL
&lt;/h2&gt;

&lt;p&gt;You can also add the public IP address to your DNS provider with an A record to get to the site on a normal URL. I use CloudFlare for example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1kfir9voawisgqe1lb1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1kfir9voawisgqe1lb1.png" alt="Add A record" width="800" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Futds86pih6dkp0vjalp1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Futds86pih6dkp0vjalp1.png" alt="Chrome site" width="800" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, since I am using CloudFlare, CloudFlare already gives me free trusted SSL certificates to use. So I'll: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Remove the self-signed SSL certificate from the load balancer; &lt;/li&gt;
&lt;li&gt;Change the listener port to 80 on HTTP; &lt;/li&gt;
&lt;li&gt;Add an ingress 80 rule to my public subnet's security list; and&lt;/li&gt;
&lt;li&gt;Turn on Proxy status on my CloudFlare page.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj1lyecdxtpf5e07gdfve.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj1lyecdxtpf5e07gdfve.png" alt="Remove SSL certificate from LB" width="800" height="581"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flpmvul0lmyacy5yr2rnf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flpmvul0lmyacy5yr2rnf.png" alt="Add ingress 80 rule" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fls8ridmzi17qo50wjy50.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fls8ridmzi17qo50wjy50.png" alt="Enable proxy on CloudFlare" width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feilv275qhd8xpps45ey3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feilv275qhd8xpps45ey3.png" alt="HTTPS site without warning" width="800" height="243"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Safe harbor statement
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The information provided on this channel/article/story is solely intended for informational purposes and cannot be used as a part of any contractual agreement. The content does not guarantee the delivery of any material, code, or functionality, and should not be the sole basis for making purchasing decisions. The postings on this site are my own and do not necessarily reflect the views or work of Oracle or Mythics, LLC.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/4.0" rel="noopener noreferrer"&gt;Creative Commons Attribution 4.0 International License&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>cloud</category>
      <category>ssl</category>
      <category>apache</category>
    </item>
    <item>
      <title>How to schedule Functions using OCI Resource Scheduler</title>
      <dc:creator>Faris Durrani</dc:creator>
      <pubDate>Tue, 08 Jul 2025 13:59:54 +0000</pubDate>
      <link>https://dev.to/farisdurrani/how-to-scheduler-functions-using-oci-resource-scheduler-5923</link>
      <guid>https://dev.to/farisdurrani/how-to-scheduler-functions-using-oci-resource-scheduler-5923</guid>
      <description>&lt;p&gt;&lt;em&gt;How to use the OCI Resource Scheduler to schedule serverless Functions in Oracle Cloud&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This post references &lt;a href="https://dev.to/farisdurrani/how-to-use-functions-in-oci-python-4chb"&gt;How to use Functions in OCI (Python)&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You can schedule the Function to run periodically based on a Cron schedule using OCI's Resource Scheduler.&lt;/p&gt;

&lt;h2&gt;
  
  
  Policies needed
&lt;/h2&gt;

&lt;p&gt;First, you need to give the Resource Scheduler permission to use the Function with the OCI IAM Policies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;allow any-user to use fn-function in compartment compA where all {request.principal.type='resourceschedule', request.principal.id='ocid1.resourceschedule.oc1.iad.aaaaaxxxxxxxxxxx'}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Of course, filtering by ID is optional if you want to allow the Resource Scheduler to invoke all Functions in the tenancy.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Include as well any policies the Function may need to read or access your OCI resources like below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;allow dynamic-group 'lb-fn-dynamic-grp' to inspect load-balancers in tenancy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;where &lt;code&gt;lb-fn-dynamic-grp&lt;/code&gt; is a Dynamic Group defined as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;resource.id = 'ocid1.fnfunc.oc1.iad.aaaaaxxxxxxxx'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Create the Schedule
&lt;/h2&gt;

&lt;p&gt;Then, create a Schedule to Start the Function. In Basic mode, you can easily use the buttons to set the schedule, or use Cron mode.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj1dzyur3m6sdh8mvjkt7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj1dzyur3m6sdh8mvjkt7.png" alt="Start Function" width="800" height="596"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Safe harbor statement
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The information provided on this channel/article/story is solely intended for informational purposes and cannot be used as a part of any contractual agreement. The content does not guarantee the delivery of any material, code, or functionality, and should not be the sole basis for making purchasing decisions. The postings on this site are my own and do not necessarily reflect the views or work of Oracle or Mythics, LLC.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/4.0" rel="noopener noreferrer"&gt;Creative Commons Attribution 4.0 International License&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to update user's details using OCI CLI on Identity Domains</title>
      <dc:creator>Faris Durrani</dc:creator>
      <pubDate>Wed, 02 Jul 2025 15:21:39 +0000</pubDate>
      <link>https://dev.to/farisdurrani/how-to-update-users-details-using-oci-cli-on-identity-domains-113h</link>
      <guid>https://dev.to/farisdurrani/how-to-update-users-details-using-oci-cli-on-identity-domains-113h</guid>
      <description>&lt;p&gt;&lt;em&gt;How to update a user's details through Identity Domains on Oracle Cloud CLI&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Identity Domains
&lt;/h2&gt;

&lt;p&gt;Identity Domains (&lt;code&gt;identity-domains&lt;/code&gt;) in OCI is an upgrade to IAM (&lt;code&gt;iam&lt;/code&gt;), which offers multiple identity domains and more specific change possibilities and conformity to the SCIM user provisioning protocol. Specific details like timezone can only be updated through &lt;code&gt;identity-domains&lt;/code&gt; and this post aims to show you how to do that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Updating user details
&lt;/h2&gt;

&lt;p&gt;As an example, here is the way to update your timezone of your user using the Identity Domains API to US Eastern time. No IAM policy needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;oci identity-domains user patch &lt;span class="nt"&gt;--user-id&lt;/span&gt; &amp;lt;YOUR_USER_OCID&amp;gt; &lt;span class="nt"&gt;--operations&lt;/span&gt; &lt;span class="s1"&gt;'[{"op": "REPLACE","value": {"timezone": "America/New_York"}}]'&lt;/span&gt; &lt;span class="nt"&gt;--schemas&lt;/span&gt; &lt;span class="s1"&gt;'["urn:ietf:params:scim:api:messages:2.0:PatchOp"]'&lt;/span&gt; &lt;span class="nt"&gt;--endpoint&lt;/span&gt; &amp;lt;IDENTITY_DOMAIN_ENDPOINT_URL&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;oci identity-domains user patch &lt;span class="nt"&gt;--user-id&lt;/span&gt; ocid1.user.oc1..aaaaaaaaaxxxxxxxxxxx &lt;span class="nt"&gt;--operations&lt;/span&gt; &lt;span class="s1"&gt;'[{"op": "REPLACE","value": {"timezone": "America/New_York"}}]'&lt;/span&gt; &lt;span class="nt"&gt;--schemas&lt;/span&gt; &lt;span class="s1"&gt;'["urn:ietf:params:scim:api:messages:2.0:PatchOp"]'&lt;/span&gt; &lt;span class="nt"&gt;--endpoint&lt;/span&gt; https://idcs-ive7a985hyeakc4wzhrtzvygn.identity.oraclecloud.com:443
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvurcdb8si0vd5kne7k1v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvurcdb8si0vd5kne7k1v.png" alt="User details" width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; Changing your user timezone will have little impact on your view of the OCI tenancy. The vast majority of services will always use UTC as its displayed timezone and as of now, you cannot change that. Some services like Base DB Systems may allow you to use your local browser-detected timezone but that is not related to your user timezone.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to find list of posible patch keys
&lt;/h2&gt;

&lt;p&gt;OCI Identity Domains follows &lt;a href="https://datatracker.ietf.org/doc/html/draft-ietf-scim-api-19#section-3.5.2" rel="noopener noreferrer"&gt;Section 3.5.2 of the draft-ietf-scim-api-19 RFC preprint&lt;/a&gt;&lt;a href="https://docs.oracle.com/en-us/iaas/tools/python/2.154.3/api/identity_domains/models/oci.identity_domains.models.Operations.html#oci.identity_domains.models.Operations" rel="noopener noreferrer"&gt;³&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can find the list of possible keys to update for &lt;code&gt;--operations&lt;/code&gt; by retrieving the info of your user using &lt;code&gt;oci identity-domains user patch --user-id &amp;lt;USER_OCID&amp;gt; --endpoint &amp;lt;DOMAIN_ENDPOINT_URL&amp;gt;&lt;/code&gt;. The same info is also outputted after you did your PATCH update operation, hence the similar screenshot:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvurcdb8si0vd5kne7k1v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvurcdb8si0vd5kne7k1v.png" alt="User details" width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alternatively, the &lt;a href="https://registry.terraform.io/providers/oracle/oci/latest/docs/resources/identity_domains_user" rel="noopener noreferrer"&gt;&lt;code&gt;oci_identity_domains_user&lt;/code&gt;&lt;/a&gt; Terraform resource page can also give you that list:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqxdqe0la5lakaek9cf9d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqxdqe0la5lakaek9cf9d.png" alt="oci_identity_domains_user Terraform" width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/en-us/iaas/tools/python/2.154.3/api/identity_domains/client/oci.identity_domains.IdentityDomainsClient.html#oci.identity_domains.IdentityDomainsClient.patch_me" rel="noopener noreferrer"&gt;OCI Python SDK for patch_me&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/en/cloud/paas/iam-domains-rest-api/op-admin-v1-users-id-patch.html" rel="noopener noreferrer"&gt;OCI Patch User Identity Domains API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/en-us/iaas/tools/python/2.154.3/api/identity_domains/models/oci.identity_domains.models.Operations.html#oci.identity_domains.models.Operations" rel="noopener noreferrer"&gt;OCI Python SDK Identity Domains Operations Model&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Safe harbor statement
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The information provided on this channel/article/story is solely intended for informational purposes and cannot be used as a part of any contractual agreement. The content does not guarantee the delivery of any material, code, or functionality, and should not be the sole basis for making purchasing decisions. The postings on this site are my own and do not necessarily reflect the views or work of Oracle or Mythics, LLC.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/4.0" rel="noopener noreferrer"&gt;Creative Commons Attribution 4.0 International License&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to encrypt OCI Bucket using customer-managed-keys</title>
      <dc:creator>Faris Durrani</dc:creator>
      <pubDate>Mon, 30 Jun 2025 20:28:20 +0000</pubDate>
      <link>https://dev.to/farisdurrani/how-to-encrypt-oci-bucket-using-customer-managed-keys-13cl</link>
      <guid>https://dev.to/farisdurrani/how-to-encrypt-oci-bucket-using-customer-managed-keys-13cl</guid>
      <description>&lt;p&gt;&lt;em&gt;How to encrypt an Oracle Cloud bucket using customer-managed keys stored in OCI Vault&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Create a key in the vault
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4bszg9jvi4jpkkex2aq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4bszg9jvi4jpkkex2aq.png" alt="Vault key" width="800" height="734"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Add policy
&lt;/h2&gt;

&lt;p&gt;We'll need a new IAM policy to allow the buckets to use the Vault keys:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;allow service objectstorage-us-ashburn-1 to use keys in tenancy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Info: you can swap the &lt;code&gt;objectstorage-us-ashburn-1&lt;/code&gt; with &lt;code&gt;blockstorage&lt;/code&gt; to enable encryption using customer-managed keys on block volumes&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Create a bucket with customer-managed keys encryption
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fel3wyxfn7pqaaswslb11.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fel3wyxfn7pqaaswslb11.png" alt="Create bucket" width="800" height="809"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3f6u4aksfeu8eiyqzmgw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3f6u4aksfeu8eiyqzmgw.png" alt="Bucket contents" width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also edit a current bucket to use the customer-managed key instead of the default OCI key.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvm11fkk63ch4mm9os5lm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvm11fkk63ch4mm9os5lm.png" alt="Reassign key" width="800" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Safe harbor statement
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The information provided on this channel/article/story is solely intended for informational purposes and cannot be used as a part of any contractual agreement. The content does not guarantee the delivery of any material, code, or functionality, and should not be the sole basis for making purchasing decisions. The postings on this site are my own and do not necessarily reflect the views or work of Oracle or Mythics, LLC.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/4.0" rel="noopener noreferrer"&gt;Creative Commons Attribution 4.0 International License&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>cloud</category>
      <category>encrypt</category>
    </item>
    <item>
      <title>How to retrieve the OCI instance ID from within itself</title>
      <dc:creator>Faris Durrani</dc:creator>
      <pubDate>Wed, 25 Jun 2025 14:33:27 +0000</pubDate>
      <link>https://dev.to/farisdurrani/how-to-retrieve-an-oci-instance-id-from-within-itself-37ia</link>
      <guid>https://dev.to/farisdurrani/how-to-retrieve-an-oci-instance-id-from-within-itself-37ia</guid>
      <description>&lt;p&gt;&lt;em&gt;How to retrieve the OCID of a compute instance in Oracle Cloud from within itself using Instance Metadata (Bash and Python)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Using Bash
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;INSTANCE_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer Oracle"&lt;/span&gt; http://169.254.169.254/opc/v2/instance/ | jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.id'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Using Python
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;instance_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://169.254.169.254/opc/v2/instance/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer Oracle&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/en-us/iaas/Content/Compute/Tasks/gettingmetadata.htm" rel="noopener noreferrer"&gt;Oracle: Getting Instance Metadata&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Safe harbor statement
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The information provided on this channel/article/story is solely intended for informational purposes and cannot be used as a part of any contractual agreement. The content does not guarantee the delivery of any material, code, or functionality, and should not be the sole basis for making purchasing decisions. The postings on this site are my own and do not necessarily reflect the views or work of Oracle or Mythics, LLC.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/4.0" rel="noopener noreferrer"&gt;Creative Commons Attribution 4.0 International License&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>cloud</category>
      <category>metadata</category>
    </item>
  </channel>
</rss>
