<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Oracle Cloud（OCI） on Tarragon</title><link>https://tarrragon.github.io/blog/devops/infra/cloud-providers/oracle-cloud/</link><description>Recent content in Oracle Cloud（OCI） on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Sat, 24 Oct 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/devops/infra/cloud-providers/oracle-cloud/index.xml" rel="self" type="application/rss+xml"/><item><title>Oracle Cloud 主控台導覽：頂端列、導覽選單的分類、清單頁的 compartment 篩選器與常用頁面的路徑</title><link>https://tarrragon.github.io/blog/devops/infra/cloud-providers/oracle-cloud/console-navigation/</link><pubDate>Sat, 24 Oct 2026 00:00:00 +0800</pubDate><guid>https://tarrragon.github.io/blog/devops/infra/cloud-providers/oracle-cloud/console-navigation/</guid><description>&lt;p>這篇是 Oracle Cloud Infrastructure 主控台的導覽：哪個功能在選單的哪裡。選單內容取自 2026-10-24 一個 Free Tier 帳號的主控台英文介面，介面語言可以從人像選單切換，切成中文時選單名稱會跟著翻譯。每個管理領域在做什麼、各家的對照見 &lt;a href="https://tarrragon.github.io/blog/devops/infra/cloud-providers/console-areas/" data-link-title="雲端主控台的管理領域：身分、資源分組、運算、網路、儲存、費用、監控、稽核、安全服務與配額" data-link-desc="雲端業者的主控台依管理需求分成幾個領域：每個領域管什麼、日常在那裡做哪些事、新帳號開好之後先去哪幾個領域看設定，以及 Oracle Cloud、Google Cloud、AWS 各自把它放在選單的哪個名稱底下">雲端主控台的管理領域&lt;/a>。&lt;/p>
&lt;h2 id="頂端列">頂端列&lt;/h2>
&lt;p>登入後畫面最上面那一列，由左到右是：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>☰（導覽選單）&lt;/strong>：所有服務的入口，內容見〈導覽選單的分類〉。選單上方有一個搜尋框，打服務名稱就列出它所在的分類，例如打 &lt;code>Bastion&lt;/code> 會列出「Bastion · Identity &amp;amp; Security」。&lt;/li>
&lt;li>&lt;strong>搜尋（放大鏡）&lt;/strong>：搜尋資源與服務，也能用資源名稱找到某一台主機或某一個 VCN。&lt;/li>
&lt;li>&lt;strong>區域選擇器&lt;/strong>：目前選定的區域，例如「Indonesia North (Batam)」。清單頁只顯示這個區域的資源。&lt;/li>
&lt;li>&lt;strong>Developer tools&lt;/strong>：兩個項目，Cloud Shell（瀏覽器裡的終端機，已經裝好 OCI CLI 並以目前登入的身分驗證，不必在本機安裝 CLI 或設定金鑰）與 Code Editor。&lt;/li>
&lt;li>&lt;strong>通知（鈴鐺）&lt;/strong>：Oracle 的公告，包括排定的硬體維護。&lt;/li>
&lt;li>&lt;strong>說明（問號）&lt;/strong>：文件與支援的入口。&lt;/li>
&lt;li>&lt;strong>人像選單&lt;/strong>：從上到下是目前的使用者名稱、identity domain（tenancy 裡存放使用者與群組的分區，新帳號只有 &lt;code>Default&lt;/code> 一個）、tenancy 名稱（tenancy 是 Oracle Cloud 的帳號，一個客戶一個）、介面語言、User settings（個人的密碼、多因素驗證、API 簽章金鑰與其他憑證）、Console settings、Sign out。點 tenancy 名稱進入 Tenancy Details 頁，那裡看得到 home region 與 tenancy 的 OCID（Oracle Cloud ID：Oracle Cloud 給每個資源的唯一識別碼，以 &lt;code>ocid1.&lt;/code> 開頭，CLI 與 API 用它指定要操作的對象）。&lt;/li>
&lt;/ul>
&lt;p>Free Tier 帳號在試用期間，頂端列上方另有一條「Free Tier account」的橫幅，說明試用結束後只剩 Always Free 資源，並附 Upgrade 連結。&lt;/p>
&lt;h2 id="導覽選單的分類">導覽選單的分類&lt;/h2>
&lt;p>選單左欄是分類，點一個分類，右側展開它底下的服務與頁面。實測的分類依序是：Home、Compute、Storage、Networking、Oracle AI Database、Databases、Analytics &amp;amp; AI、Developer Services、Identity &amp;amp; Security、Observability &amp;amp; Management、Hybrid &amp;amp; Multicloud、Migration &amp;amp; Recovery、Billing &amp;amp; Cost Management、Governance &amp;amp; Administration、Marketplace。管理一台主機會用到的是下面這幾類：&lt;/p>
&lt;p>&lt;strong>Compute&lt;/strong>：Overview、Instances、Instance Maintenance、Dedicated Virtual Machine Hosts、Instance Configurations、Instance Pools、Cluster Networks、Autoscaling Configurations、Capacity Reservations、Custom Images。建立與管理主機都從 Instances 進去。&lt;/p>
&lt;p>&lt;strong>Storage&lt;/strong>：Block Storage（Block Volumes、Block Volume Backups、Block Volume Replicas、Volume Groups 與它們的備份與複本、Backup Policies）、File Storage（File Systems、Mount Targets）、Object Storage &amp;amp; Archive Storage（Buckets、Private Endpoints）。開機磁碟不列在導覽選單上：進入任一個 Block Storage 頁面（例如 Block Volumes）之後，頁面頂端的「Storage」那一列可以展開，子選單裡有 Boot Volumes、Boot Volume Backups 等項目，刪除主機後留下的開機磁碟從這裡找。進入服務頁面之後，頁面頂端都有這樣一列可以展開的服務子選單，在同一個服務的各頁面之間切換用它比回導覽選單快。&lt;/p>
&lt;p>&lt;strong>Networking&lt;/strong>：Overview、Virtual cloud networks、Load balancers（Load balancer、Network load balancer）、DNS management（Public zones、Private zones 等）、IP management（Reserved public IPs、BYOIP、Public IP pools 等）、Network Command Center（Network visualizer、Network Path Analyzer 等）。VCN、subnet、security list、NSG、閘道都從 Virtual cloud networks 進入某一個 VCN 之後設定。&lt;/p>
&lt;p>&lt;strong>Identity &amp;amp; Security&lt;/strong>：Identity（Overview、Domains、Network Sources、Policies、Compartments）、Cloud Guard、Security Zones、Security Advisor、Certificates、Scanning（Vulnerability Reports 等）、Key Management（Vault 等）、Secret Management、Zero Trust Packet Routing，以及 Bastion。使用者與群組在 Domains 裡的 &lt;code>Default&lt;/code> domain 底下管理。&lt;/p>
&lt;p>&lt;strong>Observability &amp;amp; Management&lt;/strong>：Application Performance Monitoring、Logging（Logs、Audit 等）、Monitoring（Metrics Explorer、Alarm Definitions 等）、Log Analytics、Events Service、Management Agent 等。主機的 CPU 與記憶體圖表在主機頁面上就看得到；跨主機的指標與告警從 Monitoring 進去。&lt;/p></description><content:encoded><![CDATA[<p>這篇是 Oracle Cloud Infrastructure 主控台的導覽：哪個功能在選單的哪裡。選單內容取自 2026-10-24 一個 Free Tier 帳號的主控台英文介面，介面語言可以從人像選單切換，切成中文時選單名稱會跟著翻譯。每個管理領域在做什麼、各家的對照見 <a href="/blog/devops/infra/cloud-providers/console-areas/" data-link-title="雲端主控台的管理領域：身分、資源分組、運算、網路、儲存、費用、監控、稽核、安全服務與配額" data-link-desc="雲端業者的主控台依管理需求分成幾個領域：每個領域管什麼、日常在那裡做哪些事、新帳號開好之後先去哪幾個領域看設定，以及 Oracle Cloud、Google Cloud、AWS 各自把它放在選單的哪個名稱底下">雲端主控台的管理領域</a>。</p>
<h2 id="頂端列">頂端列</h2>
<p>登入後畫面最上面那一列，由左到右是：</p>
<ul>
<li><strong>☰（導覽選單）</strong>：所有服務的入口，內容見〈導覽選單的分類〉。選單上方有一個搜尋框，打服務名稱就列出它所在的分類，例如打 <code>Bastion</code> 會列出「Bastion · Identity &amp; Security」。</li>
<li><strong>搜尋（放大鏡）</strong>：搜尋資源與服務，也能用資源名稱找到某一台主機或某一個 VCN。</li>
<li><strong>區域選擇器</strong>：目前選定的區域，例如「Indonesia North (Batam)」。清單頁只顯示這個區域的資源。</li>
<li><strong>Developer tools</strong>：兩個項目，Cloud Shell（瀏覽器裡的終端機，已經裝好 OCI CLI 並以目前登入的身分驗證，不必在本機安裝 CLI 或設定金鑰）與 Code Editor。</li>
<li><strong>通知（鈴鐺）</strong>：Oracle 的公告，包括排定的硬體維護。</li>
<li><strong>說明（問號）</strong>：文件與支援的入口。</li>
<li><strong>人像選單</strong>：從上到下是目前的使用者名稱、identity domain（tenancy 裡存放使用者與群組的分區，新帳號只有 <code>Default</code> 一個）、tenancy 名稱（tenancy 是 Oracle Cloud 的帳號，一個客戶一個）、介面語言、User settings（個人的密碼、多因素驗證、API 簽章金鑰與其他憑證）、Console settings、Sign out。點 tenancy 名稱進入 Tenancy Details 頁，那裡看得到 home region 與 tenancy 的 OCID（Oracle Cloud ID：Oracle Cloud 給每個資源的唯一識別碼，以 <code>ocid1.</code> 開頭，CLI 與 API 用它指定要操作的對象）。</li>
</ul>
<p>Free Tier 帳號在試用期間，頂端列上方另有一條「Free Tier account」的橫幅，說明試用結束後只剩 Always Free 資源，並附 Upgrade 連結。</p>
<h2 id="導覽選單的分類">導覽選單的分類</h2>
<p>選單左欄是分類，點一個分類，右側展開它底下的服務與頁面。實測的分類依序是：Home、Compute、Storage、Networking、Oracle AI Database、Databases、Analytics &amp; AI、Developer Services、Identity &amp; Security、Observability &amp; Management、Hybrid &amp; Multicloud、Migration &amp; Recovery、Billing &amp; Cost Management、Governance &amp; Administration、Marketplace。管理一台主機會用到的是下面這幾類：</p>
<p><strong>Compute</strong>：Overview、Instances、Instance Maintenance、Dedicated Virtual Machine Hosts、Instance Configurations、Instance Pools、Cluster Networks、Autoscaling Configurations、Capacity Reservations、Custom Images。建立與管理主機都從 Instances 進去。</p>
<p><strong>Storage</strong>：Block Storage（Block Volumes、Block Volume Backups、Block Volume Replicas、Volume Groups 與它們的備份與複本、Backup Policies）、File Storage（File Systems、Mount Targets）、Object Storage &amp; Archive Storage（Buckets、Private Endpoints）。開機磁碟不列在導覽選單上：進入任一個 Block Storage 頁面（例如 Block Volumes）之後，頁面頂端的「Storage」那一列可以展開，子選單裡有 Boot Volumes、Boot Volume Backups 等項目，刪除主機後留下的開機磁碟從這裡找。進入服務頁面之後，頁面頂端都有這樣一列可以展開的服務子選單，在同一個服務的各頁面之間切換用它比回導覽選單快。</p>
<p><strong>Networking</strong>：Overview、Virtual cloud networks、Load balancers（Load balancer、Network load balancer）、DNS management（Public zones、Private zones 等）、IP management（Reserved public IPs、BYOIP、Public IP pools 等）、Network Command Center（Network visualizer、Network Path Analyzer 等）。VCN、subnet、security list、NSG、閘道都從 Virtual cloud networks 進入某一個 VCN 之後設定。</p>
<p><strong>Identity &amp; Security</strong>：Identity（Overview、Domains、Network Sources、Policies、Compartments）、Cloud Guard、Security Zones、Security Advisor、Certificates、Scanning（Vulnerability Reports 等）、Key Management（Vault 等）、Secret Management、Zero Trust Packet Routing，以及 Bastion。使用者與群組在 Domains 裡的 <code>Default</code> domain 底下管理。</p>
<p><strong>Observability &amp; Management</strong>：Application Performance Monitoring、Logging（Logs、Audit 等）、Monitoring（Metrics Explorer、Alarm Definitions 等）、Log Analytics、Events Service、Management Agent 等。主機的 CPU 與記憶體圖表在主機頁面上就看得到；跨主機的指標與告警從 Monitoring 進去。</p>
<p><strong>Billing &amp; Cost Management</strong>：Billing（Subscriptions、Invoices、Usage Statements、Payment History、Upgrade and Manage Payment）、Cost Management（Overview、Cost Analysis、Cost and Usage Reports、Budgets、Scheduled Reports、Cost Anomaly Detection 等）。</p>
<p><strong>Governance &amp; Administration</strong>：Account Management（Tenancy Details、Announcements、Region Management）、Cloud Advisor、Resource Scheduler、Tenancy Management（Resource Explorer、Tenancy Explorer、Quota policies、Limits, quotas and usage、Tag Namespaces）、Organization Management。</p>
<p>右側每個項目滑過時會出現「Press P to pin link」，釘選的項目出現在 Home 分類與首頁的 Pinned 區，常用的頁面釘起來就不必每次翻選單。</p>
<h2 id="清單頁的-compartment-篩選器">清單頁的 compartment 篩選器</h2>
<p>Compartment 是 tenancy 底下用來分組資源與套用權限政策的容器，tenancy 本身是最上層的 root compartment，每個資源都建在某一個 compartment 裡。Instances、Virtual cloud networks、Block Volumes 這類清單頁的表格上方有一行「Applied filters」，其中的 Compartment 那一項篩選條件就是 compartment 篩選器，清單只列出選定 compartment 裡的資源。實測新帳號的預設是 root compartment，這一項篩選條件顯示為「&lt;tenancy 名稱&gt; (root)」。資源建在另一個 compartment 時，清單看起來是空的，要把篩選器切過去。建立頁上的下拉選單也一樣：VCN、subnet 的選單只列出「所在 compartment」那一欄選定的 compartment 裡的資源。</p>
<h2 id="常用頁面的路徑">常用頁面的路徑</h2>
<table>
  <thead>
      <tr>
          <th>要做的事</th>
          <th>選單路徑</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>建立、停止、刪除主機</td>
          <td>Compute → Instances</td>
      </tr>
      <tr>
          <td>建立 VCN、subnet，改防火牆規則</td>
          <td>Networking → Virtual cloud networks → 點進某個 VCN</td>
      </tr>
      <tr>
          <td>保留一個固定的公開 IP</td>
          <td>Networking → IP management → Reserved public IPs</td>
      </tr>
      <tr>
          <td>找刪除主機後留下的開機磁碟</td>
          <td>Storage → Block Storage → Block Volumes，再從頁面頂端的 Storage 子選單切到 Boot Volumes</td>
      </tr>
      <tr>
          <td>建立 Bastion、在它底下建立登入主機用的 SSH 工作階段（session）</td>
          <td>Identity &amp; Security → Bastion</td>
      </tr>
      <tr>
          <td>建立實驗用的 compartment</td>
          <td>Identity &amp; Security → Identity → Compartments</td>
      </tr>
      <tr>
          <td>加使用者、群組</td>
          <td>Identity &amp; Security → Identity → Domains → <code>Default</code></td>
      </tr>
      <tr>
          <td>寫權限政策</td>
          <td>Identity &amp; Security → Identity → Policies</td>
      </tr>
      <tr>
          <td>開多因素驗證、建 API 簽章金鑰</td>
          <td>人像選單 → User settings；API 簽章金鑰在 Token and keys 分頁，或頁面左下角 Resources 區段的 API Keys（官方文件兩種寫法都有）</td>
      </tr>
      <tr>
          <td>設預算與警示</td>
          <td>Billing &amp; Cost Management → Cost Management → Budgets</td>
      </tr>
      <tr>
          <td>看這個月花了多少</td>
          <td>Billing &amp; Cost Management → Cost Management → Cost Analysis</td>
      </tr>
      <tr>
          <td>查誰做了什麼操作</td>
          <td>Observability &amp; Management → Logging → Audit</td>
      </tr>
      <tr>
          <td>看主機指標、設告警</td>
          <td>Observability &amp; Management → Monitoring</td>
      </tr>
      <tr>
          <td>查某種資源的上限與用量</td>
          <td>Governance &amp; Administration → Tenancy Management → Limits, quotas and usage</td>
      </tr>
      <tr>
          <td>看 home region 與 tenancy OCID</td>
          <td>Governance &amp; Administration → Account Management → Tenancy Details</td>
      </tr>
      <tr>
          <td>訂閱其他區域（付費帳戶限定）</td>
          <td>Governance &amp; Administration → Account Management → Region Management</td>
      </tr>
  </tbody>
</table>
<p>試用與 Free Tier 帳號只能有一個訂閱區域（就是 home region），升級成 Pay As You Go 之後還要先在 Limits, quotas and usage 申請提高 Subscribed region count，才能在 Region Management 訂閱第二個區域。</p>
<p>選單路徑對不上時（改版、介面語言不同），在導覽選單的搜尋框打表格裡的頁面名稱。</p>
<h2 id="延伸閱讀各頁面背後的概念">延伸閱讀：各頁面背後的概念</h2>
<p>這些分類各自管什麼、Google Cloud 與 AWS 的對應名稱，見 <a href="/blog/devops/infra/cloud-providers/console-areas/" data-link-title="雲端主控台的管理領域：身分、資源分組、運算、網路、儲存、費用、監控、稽核、安全服務與配額" data-link-desc="雲端業者的主控台依管理需求分成幾個領域：每個領域管什麼、日常在那裡做哪些事、新帳號開好之後先去哪幾個領域看設定，以及 Oracle Cloud、Google Cloud、AWS 各自把它放在選單的哪個名稱底下">雲端主控台的管理領域</a>；從 Compute → Instances 進去之後建立頁每個分頁的取值，見 <a href="/blog/devops/infra/cloud-providers/oracle-cloud/hands-on/launch-instance-walkthrough/" data-link-title="Oracle Cloud 建立主機的實測紀錄：建立前的檢查、前置網路、主控台各分頁的 Always Free 設定值、等效的 CLI 指令、容量不足的重送、Bastion 工作階段逾時、Run Command 補公鑰的嘗試與重建後經由 port forwarding 登入" data-link-desc="要在 Oracle Cloud 建一台沒有公開 IP、經由 Bastion 登入的 Always Free A1 主機，想照一次實測重做、看建立頁每一欄的取值與換一種做法的結果時讀；也用在建立請求一直回容量不足、managed SSH session 建立逾時，或沒放公鑰的主機想用 Run Command 救援、Oracle Linux 10 的主機上找不到 Bastion plugin、想改用 port forwarding session 登入的時候">Oracle Cloud 建立主機的實測紀錄</a>；Tenancy Details 頁上 home region 的意義與它對 Always Free 額度的限制，見 <a href="/blog/devops/infra/cloud-providers/oracle-cloud/account-and-home-region/" data-link-title="Oracle Cloud 的帳號結構與 home region：tenancy、Always Free 的範圍與主控台登入欄位" data-link-desc="OCI 的 tenancy、home region、compartment 與 availability domain 各自管什麼，home region 為什麼在申請當下就要決定，Always Free 額度的計算與回收規則，以及主控台登入時租用戶與使用者名稱兩個欄位的分工">Oracle Cloud 的帳號結構與 home region</a>。</p>
]]></content:encoded></item><item><title>Oracle Cloud 的帳號結構與 home region：tenancy、Always Free 的範圍與主控台登入欄位</title><link>https://tarrragon.github.io/blog/devops/infra/cloud-providers/oracle-cloud/account-and-home-region/</link><pubDate>Sat, 24 Oct 2026 00:00:00 +0800</pubDate><guid>https://tarrragon.github.io/blog/devops/infra/cloud-providers/oracle-cloud/account-and-home-region/</guid><description>&lt;p>Oracle Cloud Infrastructure（OCI）帳號裡的 home region 在申請表送出的那一刻就固定，之後不能改，而 Always Free 的運算與區塊磁碟額度只能用在 home region，所以〈選 home region 時要先確認的事〉那一節要在送出申請表之前讀。這篇整理 tenancy、home region、compartment 與 availability domain 各自的範圍、它們怎麼限制 Always Free 額度能用在哪裡，以及在主控台登入時兩個欄位的填法；從本機用 CLI 操作見 &lt;a href="https://tarrragon.github.io/blog/devops/infra/cloud-providers/oracle-cloud/cli-session-login/" data-link-title="從本機用 OCI CLI 操作 Oracle Cloud：session token 登入、時效與 API 簽章金鑰" data-link-desc="OCI CLI 的兩種身分驗證方式——瀏覽器登入換來的 session token 與上傳公鑰的 API 簽章金鑰——各自把什麼存在本機、有效多久、外洩時的影響範圍，以及登入時的互動提示與錯誤訊息怎麼讀">從本機用 OCI CLI 操作 Oracle Cloud&lt;/a>。文中的規則取自 OCI 官方文件，查證日期 2026-10-24；登入欄位的行為在一個 Free Tier 帳號上實際操作過。&lt;/p>
&lt;h2 id="tenancyhome-regioncompartment-與-availability-domain">Tenancy、home region、compartment 與 availability domain&lt;/h2>
&lt;p>OCI 的帳號叫 &lt;strong>tenancy&lt;/strong>（主控台中文介面寫作「租用戶」）。一個 tenancy 對應一個客戶，裡面所有的使用者、群組、政策與資源都屬於它；申請時填的 Cloud Account Name 就是 tenancy 的名稱。Tenancy 與它底下的每一個資源各有一個以 &lt;code>ocid1.&lt;/code> 開頭的唯一識別碼，叫 OCID（Oracle Cloud ID），CLI 與 API 用它指定要操作的對象；tenancy 的 OCID 在 Tenancy Details 頁，其他資源的在各自的詳細頁上。&lt;/p>
&lt;p>&lt;strong>Home region&lt;/strong> 是 tenancy 建立時所在的那一個區域。官方文件〈&lt;a href="https://docs.oracle.com/en-us/iaas/Content/Identity/regions/managingregions.htm">Managing Regions&lt;/a>〉說明它存放帳號資訊與身分資源（使用者、群組、政策），而且建立之後不能變更，FAQ 的原文是「No. Oracle assigns your home region and you can&amp;rsquo;t change it.」使用者、群組、政策與 compartment 的定義住在 home region、只能在那裡修改：用 API 改 IAM 資源時要打 home region 的端點，用主控台改時主控台會替使用者把請求送到 home region，改完之後由 IAM 自動傳播到 tenancy 訂閱的其他區域，官方提醒傳播可能要幾分鐘。&lt;/p>
&lt;p>Tenancy 可以另外訂閱其他區域（region subscription），訂閱之後能在那一區建資源，而帳號與身分資源仍然住在 home region。訂閱改變的是資源能放在哪裡，不改變 home region。訂閱的數量有上限：官方〈Regions and Availability Domains〉寫明試用、Free Tier 與 Pay As You Go 的 tenancy 都只能有一個訂閱區域，也就是 home region 本身；升級成付費帳戶（Pay As You Go）之後可以申請提高這個上限；試用與 Free Tier 的 tenancy 不能申請，訂閱區域就只有 home region 一個。&lt;/p>
&lt;p>&lt;strong>Compartment&lt;/strong> 是 tenancy 底下用來分組資源與套用政策的容器。Tenancy 本身就是最上層的 root compartment，新帳號一開始只有它。實驗用的資源另開一個 compartment 放，清理時刪那一個 compartment 底下的資源就好，不會碰到 root 裡的其他設定。&lt;/p>
&lt;p>&lt;strong>Availability domain&lt;/strong>（AD）是一個區域裡彼此隔離的資料中心，跨業者的概念見 &lt;a href="https://tarrragon.github.io/blog/devops/infra/knowledge-cards/availability-zone/" data-link-title="Availability Zone（可用區）" data-link-desc="建立雲端主機或磁碟時要選可用區、遇到某個可用區容量不足、規劃兩台主機要不要放在不同可用區，或對照各家把這一層叫 zone、AZ 還是 availability domain 時，查可用區的範圍、它跟區域與故障域的關係與它限制了哪些資源的搭配">Availability Zone（可用區）&lt;/a>。區域之間的 AD 數量不同：有些區域有三個，有些只有一個。申請之前，各區域的 AD 數列在官方〈Regions and Availability Domains〉頁的區域表；申請之後，&lt;code>oci iam availability-domain list&lt;/code>（登入方式見 &lt;a href="https://tarrragon.github.io/blog/devops/infra/cloud-providers/oracle-cloud/cli-session-login/" data-link-title="從本機用 OCI CLI 操作 Oracle Cloud：session token 登入、時效與 API 簽章金鑰" data-link-desc="OCI CLI 的兩種身分驗證方式——瀏覽器登入換來的 session token 與上傳公鑰的 API 簽章金鑰——各自把什麼存在本機、有效多久、外洩時的影響範圍，以及登入時的互動提示與錯誤訊息怎麼讀">從本機用 OCI CLI 操作 Oracle Cloud&lt;/a>）回傳的清單長度就是自己 home region 的 AD 數。AD 數會影響免費機型建不起來時的退路，見〈A1 容量不足時的退路〉。&lt;/p></description><content:encoded><![CDATA[<p>Oracle Cloud Infrastructure（OCI）帳號裡的 home region 在申請表送出的那一刻就固定，之後不能改，而 Always Free 的運算與區塊磁碟額度只能用在 home region，所以〈選 home region 時要先確認的事〉那一節要在送出申請表之前讀。這篇整理 tenancy、home region、compartment 與 availability domain 各自的範圍、它們怎麼限制 Always Free 額度能用在哪裡，以及在主控台登入時兩個欄位的填法；從本機用 CLI 操作見 <a href="/blog/devops/infra/cloud-providers/oracle-cloud/cli-session-login/" data-link-title="從本機用 OCI CLI 操作 Oracle Cloud：session token 登入、時效與 API 簽章金鑰" data-link-desc="OCI CLI 的兩種身分驗證方式——瀏覽器登入換來的 session token 與上傳公鑰的 API 簽章金鑰——各自把什麼存在本機、有效多久、外洩時的影響範圍，以及登入時的互動提示與錯誤訊息怎麼讀">從本機用 OCI CLI 操作 Oracle Cloud</a>。文中的規則取自 OCI 官方文件，查證日期 2026-10-24；登入欄位的行為在一個 Free Tier 帳號上實際操作過。</p>
<h2 id="tenancyhome-regioncompartment-與-availability-domain">Tenancy、home region、compartment 與 availability domain</h2>
<p>OCI 的帳號叫 <strong>tenancy</strong>（主控台中文介面寫作「租用戶」）。一個 tenancy 對應一個客戶，裡面所有的使用者、群組、政策與資源都屬於它；申請時填的 Cloud Account Name 就是 tenancy 的名稱。Tenancy 與它底下的每一個資源各有一個以 <code>ocid1.</code> 開頭的唯一識別碼，叫 OCID（Oracle Cloud ID），CLI 與 API 用它指定要操作的對象；tenancy 的 OCID 在 Tenancy Details 頁，其他資源的在各自的詳細頁上。</p>
<p><strong>Home region</strong> 是 tenancy 建立時所在的那一個區域。官方文件〈<a href="https://docs.oracle.com/en-us/iaas/Content/Identity/regions/managingregions.htm">Managing Regions</a>〉說明它存放帳號資訊與身分資源（使用者、群組、政策），而且建立之後不能變更，FAQ 的原文是「No. Oracle assigns your home region and you can&rsquo;t change it.」使用者、群組、政策與 compartment 的定義住在 home region、只能在那裡修改：用 API 改 IAM 資源時要打 home region 的端點，用主控台改時主控台會替使用者把請求送到 home region，改完之後由 IAM 自動傳播到 tenancy 訂閱的其他區域，官方提醒傳播可能要幾分鐘。</p>
<p>Tenancy 可以另外訂閱其他區域（region subscription），訂閱之後能在那一區建資源，而帳號與身分資源仍然住在 home region。訂閱改變的是資源能放在哪裡，不改變 home region。訂閱的數量有上限：官方〈Regions and Availability Domains〉寫明試用、Free Tier 與 Pay As You Go 的 tenancy 都只能有一個訂閱區域，也就是 home region 本身；升級成付費帳戶（Pay As You Go）之後可以申請提高這個上限；試用與 Free Tier 的 tenancy 不能申請，訂閱區域就只有 home region 一個。</p>
<p><strong>Compartment</strong> 是 tenancy 底下用來分組資源與套用政策的容器。Tenancy 本身就是最上層的 root compartment，新帳號一開始只有它。實驗用的資源另開一個 compartment 放，清理時刪那一個 compartment 底下的資源就好，不會碰到 root 裡的其他設定。</p>
<p><strong>Availability domain</strong>（AD）是一個區域裡彼此隔離的資料中心，跨業者的概念見 <a href="/blog/devops/infra/knowledge-cards/availability-zone/" data-link-title="Availability Zone（可用區）" data-link-desc="建立雲端主機或磁碟時要選可用區、遇到某個可用區容量不足、規劃兩台主機要不要放在不同可用區，或對照各家把這一層叫 zone、AZ 還是 availability domain 時，查可用區的範圍、它跟區域與故障域的關係與它限制了哪些資源的搭配">Availability Zone（可用區）</a>。區域之間的 AD 數量不同：有些區域有三個，有些只有一個。申請之前，各區域的 AD 數列在官方〈Regions and Availability Domains〉頁的區域表；申請之後，<code>oci iam availability-domain list</code>（登入方式見 <a href="/blog/devops/infra/cloud-providers/oracle-cloud/cli-session-login/" data-link-title="從本機用 OCI CLI 操作 Oracle Cloud：session token 登入、時效與 API 簽章金鑰" data-link-desc="OCI CLI 的兩種身分驗證方式——瀏覽器登入換來的 session token 與上傳公鑰的 API 簽章金鑰——各自把什麼存在本機、有效多久、外洩時的影響範圍，以及登入時的互動提示與錯誤訊息怎麼讀">從本機用 OCI CLI 操作 Oracle Cloud</a>）回傳的清單長度就是自己 home region 的 AD 數。AD 數會影響免費機型建不起來時的退路，見〈A1 容量不足時的退路〉。</p>
<h2 id="always-free-的額度與它綁在-home-region-上的範圍">Always Free 的額度與它綁在 home region 上的範圍</h2>
<p>OCI 的免費方案有兩個部分。試用金是 300 美元、30 天內有效，可以用在大部分付費服務上；Always Free 是沒有期限的固定額度，試用結束之後仍然繼續。官方 Free Tier 頁的原文是「After your trial ends, your account remains active. There is no interruption to the availability of the Always Free Resources you have provisioned.」沒有升級成付費帳戶的帳號，試用結束後不會開始扣款；試用期間用試用金建的付費資源，在試用結束時被回收，A1 主機另有一條依合計規格停用的規則，見下方〈試用結束時超出額度〉那一項。試用中、試用結束而沒有升級、付費帳戶這三種狀態下超出額度各自的結果，整理在〈超出 Always Free 額度時：試用中、未升級與付費帳戶各自的結果〉。</p>
<p>運算的 Always Free 額度有兩種機型：</p>
<ul>
<li><strong>Ampere A1（<code>VM.Standard.A1.Flex</code>，ARM）</strong>：每月 1,500 OCPU 小時與 9,000 GB 小時的記憶體，相當於 2 OCPU、12 GB 記憶體整個月開著。可以全部給一台，也可以拆成兩台各 1 OCPU。付費 tenancy 的免費量比這個大：2026-10-26 讀到的 Oracle 的 Compute 價目頁（頁名這次沒有記下）寫的是「Each paid tenancy gets the first 3,000 OCPU hours and 18,000 GB hours per month for free」，也就是每月 3,000 OCPU 小時、18,000 GB 小時，相當於 4 OCPU、24 GB 整個月開著。OCI 的 OCPU 是一顆實體核心，跟其他業者以 vCPU 計價時的單位不同，比較時見 <a href="/blog/devops/infra/cloud-providers/pricing-comparison/" data-link-title="雲端免費額度與小型主機的收費比較：試用金與固定額度、計費單位、區域限制、試用結束後的處置、出站流量與查價項目" data-link-desc="Oracle Cloud、Google Cloud 與 AWS 的免費方案分別由哪幾種額度組成，比較時要換算的計費單位，免費主機能放在哪些區域，試用期結束後帳號與資源會怎樣，以及付費主機的價格該去哪裡查">雲端免費額度與小型主機的收費比較</a>。</li>
<li><strong>AMD Micro（<code>VM.Standard.E2.1.Micro</code>，x86）</strong>：最多兩台，每台 1/8 OCPU、1 GB 記憶體。</li>
</ul>
<p>儲存與網路另有額度：開機磁碟與區塊磁碟合計 200 GB（每台主機的開機磁碟預設 50 GB，從同一份 200 GB 額度裡扣）、備份最多 5 份、出站流量每月 10 TB；試用結束後沒有升級的 Free Tier tenancy，VCN 最多 2 個。預設 50 GB 的開機磁碟實際扣 47 GB 額度，數值是 46.6 GiB 進位（2026-10-27 從用量推論），查法見 <a href="/blog/devops/infra/cloud-providers/oracle-cloud/hands-on/private-ubuntu-egress-console-rebuild/" data-link-title="Oracle Cloud 私有子網路 Ubuntu 主機的實測紀錄：套件來源的出站（NAT gateway、路由與 NSG）、序列主控台的連線，以及被回收之後的重建" data-link-desc="要在 Oracle Cloud 沒有公開 IP 的私有子網路裡跑一台 Ubuntu 主機、讓它裝得到套件更新，或要經由序列主控台看主機的開機過程，或主機被閒置回收、停止或刪除之後要照原樣重建，或想知道 NAT gateway 要不要另外付費、開機磁碟扣掉多少區塊磁碟額度、合計超過 200 GB 時放不進額度的那一顆怎麼算、怎麼用 quota 擋下超額的建立、線上加大開機磁碟超過額度時怎麼算、空出額度之後付費磁碟多久轉成免費時，查實際跑過的指令、錯誤原文、重建腳本與每一步的讀法">Oracle Cloud 私有子網路 Ubuntu 主機的實測紀錄：套件來源的出站（NAT gateway、路由與 NSG）、序列主控台的連線，以及被回收之後的重建</a>〈費用與額度：A1、開機磁碟與區塊儲存額度、出站流量與 NAT gateway〉。</p>
<p><strong>運算與區塊磁碟的 Always Free 額度只能用在 home region。</strong> Free Tier 頁寫的是「You can provision Always Free Autonomous AI Databases and compute instances only in the home region」；Always Free Resources 頁對區塊磁碟的原文是「the volume must be created in the home region of the tenancy」。升級成付費帳戶並訂閱其他區域之後，建在 home region 以外那些訂閱區域的主機照一般價格計費。</p>
<p>免費主機只能建在 home region，主機的實體位置因此就是 home region。這個位置決定兩件事。一是出口 IP 的國家：業者配給一台主機的公開 IP 位址，屬於那個區域所在國家的位址段，主機對外連線時，對方看到的來源 IP 就登記在那個國家。二是延遲：從使用者所在地連到主機的延遲，由兩地的距離決定。</p>
<p>Always Free 的主機另有兩條回收規則：</p>
<ul>
<li><strong>閒置回收</strong>：連續 7 天內 CPU 使用率（第 95 百分位）、網路使用率、記憶體使用率（只算 A1）三項指標各自都低於 20%，Oracle 可能回收這台主機。官方頁用的詞是 reclaim，沒有寫回收之後主機是停止還是刪除。只在需要時才登入的實驗機會符合這個條件。</li>
<li><strong>試用結束時超出額度</strong>：Free Tier 頁判斷 A1 是否超額，看的是 tenancy 裡全部 A1 主機的合計（OCPU 加總、記憶體加總），不看單台主機的規格。合計超過 2 OCPU、12 GB 時，試用結束那一刻 tenancy 裡的 A1 主機全部被停用，30 天後刪除，除非升級成付費帳戶。被停用的是每一台 A1 主機，包括單台規格在額度內的那幾台。官方沒有寫已經被停用的主機在升級之後會不會恢復。試用期間超出的部分由試用金支付，帳單上看不到費用，所以 A1 合計超額的後果要到試用結束那一刻才浮現。這個合計要自己加總：到 Compute → Instances 清單逐台記下 A1 主機的 OCPU 與記憶體；清單一次只列一個 compartment，每個放過主機的 compartment 都要切過去看。要保留 A1 主機，試用結束前把合計壓回 2 OCPU、12 GB 以內：把其中幾台的 OCPU 或記憶體改小，或刪掉其中一台。</li>
</ul>
<p>官方對閒置回收只寫了三項指標都要低於 20%，沒有寫網路使用率的 20% 是對什麼的比例，也沒有寫升級成付費帳戶之後這條規則還適不適用；被回收之後主機的狀態與能不能恢復同樣沒寫。回收之後是停止或刪除兩種情形各自留下哪些資源、怎麼發現，以及照原樣重建一台 A1 主機的腳本，見 <a href="/blog/devops/infra/cloud-providers/oracle-cloud/hands-on/private-ubuntu-egress-console-rebuild/" data-link-title="Oracle Cloud 私有子網路 Ubuntu 主機的實測紀錄：套件來源的出站（NAT gateway、路由與 NSG）、序列主控台的連線，以及被回收之後的重建" data-link-desc="要在 Oracle Cloud 沒有公開 IP 的私有子網路裡跑一台 Ubuntu 主機、讓它裝得到套件更新，或要經由序列主控台看主機的開機過程，或主機被閒置回收、停止或刪除之後要照原樣重建，或想知道 NAT gateway 要不要另外付費、開機磁碟扣掉多少區塊磁碟額度、合計超過 200 GB 時放不進額度的那一顆怎麼算、怎麼用 quota 擋下超額的建立、線上加大開機磁碟超過額度時怎麼算、空出額度之後付費磁碟多久轉成免費時，查實際跑過的指令、錯誤原文、重建腳本與每一步的讀法">Oracle Cloud 私有子網路 Ubuntu 主機的實測紀錄：套件來源的出站（NAT gateway、路由與 NSG）、序列主控台的連線，以及被回收之後的重建</a>〈被回收之後的重建：怎麼發現、留下與消失的資源、重建腳本〉。</p>
<h2 id="a1-容量不足時的退路">A1 容量不足時的退路</h2>
<p>A1 免費機型在某個 AD 暫時沒有容量時，建立主機的 API 回 <code>Out of host capacity</code>。可以做的事有下面這些，出處分別是官方 Always Free 頁與 Compute 的〈Known Issues〉頁；標明「會計費」的幾項不在 Always Free 額度內，結果依帳號狀態而定，見〈超出 Always Free 額度時：試用中、未升級與付費帳戶各自的結果〉：</p>
<ul>
<li><strong>換一個 AD</strong>（Always Free 頁）：home region 只有一個 AD 時，這一項不存在。</li>
<li><strong>等一段時間再試</strong>（Always Free 頁）：有人釋出資源時才會短暫空出位置。重送的間隔看回應碼調整：<code>429 TooManyRequests</code> 是請求太頻繁被限流（<a href="/blog/backend/knowledge-cards/rate-limit/" data-link-title="Rate Limit" data-link-desc="說明限流如何保護服務入口、下游依賴與租戶公平性">Rate Limit</a> 卡），收到就拉長間隔，做法見 <a href="/blog/backend/knowledge-cards/exponential-backoff/" data-link-title="Exponential Backoff" data-link-desc="說明重試間隔如何逐步拉長以降低下游壓力">Exponential Backoff</a> 卡；<code>Out of host capacity</code> 才是那個 AD 當下沒有硬體。限流的門檻依帳號與 API 而定。</li>
<li><strong>不指定 fault domain</strong>（Known Issues 頁）：建立頁的 Fault domain 欄選「Let Oracle choose the best fault domain」，不把主機限定在單一個 fault domain 的硬體上。</li>
<li><strong>改小規格</strong>（Known Issues 頁）：同一個機型把 OCPU 或記憶體改小，需要的硬體少，容量比較容易拿到，仍然在免費額度內。</li>
<li><strong>建立前查容量</strong>（Known Issues 頁）：用 <code>CreateComputeCapacityReport</code> 這個 API 查某個機型當下在某個 AD 有沒有容量，查完再送建立請求。</li>
<li><strong>換成 x86 機型</strong>（會計費）：x86 的 Flex 機型不在免費額度內；試用期間用試用金建，當天就有主機可用，代價是這台用試用金建的 x86 主機在試用結束時會被回收。換架構要重新確認軟體有沒有那個架構的版本，見 <a href="/blog/devops/infra/cloud-providers/vm-options/shape-and-image/" data-link-title="機型與映像檔：CPU 架構、核心與記憶體、計費模式與作業系統" data-link-desc="雲端主機的機型決定的 CPU 架構、核心與記憶體，計費模式（隨用隨付、可被收回、預留容量、專屬主機）各自的條件，映像檔與機型之間的架構相容性，以及哪些項目建立後可以調整">機型與映像檔</a> 的〈CPU 架構：x86 與 ARM〉。免費的 x86 機型 E2.1.Micro 在一個區域裡只建得在一個 AD 上，2026-10-24 實測的 <code>ap-batam-1</code> 沒有這種機型，出處與實測見〈E2.1.Micro 在各區域的供應：服務配額表與 404 錯誤〉。</li>
<li><strong>改用可被收回的容量（preemptible）</strong>（官方沒有寫它算不算免費額度，這裡按會計費看待）：官方 Always Free 頁與 Free Tier 頁都沒有提到 preemptible。業者需要容量時會直接終止這種主機，價格與限制見 <a href="/blog/devops/infra/cloud-providers/vm-options/shape-and-image/" data-link-title="機型與映像檔：CPU 架構、核心與記憶體、計費模式與作業系統" data-link-desc="雲端主機的機型決定的 CPU 架構、核心與記憶體，計費模式（隨用隨付、可被收回、預留容量、專屬主機）各自的條件，映像檔與機型之間的架構相容性，以及哪些項目建立後可以調整">機型與映像檔</a> 的〈計費模式：隨用隨付、可被收回、預留容量與專屬主機〉。</li>
<li><strong>預留容量（capacity reservation）</strong>（會計費）：先向業者保留某種機型的容量，保留期間的計費方式見 <a href="/blog/devops/infra/cloud-providers/vm-options/shape-and-image/" data-link-title="機型與映像檔：CPU 架構、核心與記憶體、計費模式與作業系統" data-link-desc="雲端主機的機型決定的 CPU 架構、核心與記憶體，計費模式（隨用隨付、可被收回、預留容量、專屬主機）各自的條件，映像檔與機型之間的架構相容性，以及哪些項目建立後可以調整">機型與映像檔</a> 的〈計費模式：隨用隨付、可被收回、預留容量與專屬主機〉。</li>
<li><strong>升級成付費帳戶</strong>（Always Free 頁）：官方寫升級之後能用的運算資源種類變多（原文「gives you access to more types of Compute resources」）。對容量不足來說，升級的作用是讓上面那幾項會計費的選項（x86 的 Flex 機型、可被收回的容量、預留容量）在試用金用完或試用結束之後仍然建得起來。Always Free 的部分仍然不收費，額度以外建的資源照一般價格計費。</li>
</ul>
<p>Home region 只有一個 AD、而且只用免費額度時，能用的退路是等待重試、不指定 fault domain、改小規格與建立前查容量這四項；換 AD 在這種區域不存在；x86 的 Flex 機型、可被收回的容量與預留容量不在免費額度內，要用試用金或升級成付費帳戶才建得起來。在只有一個 AD 的 <code>ap-batam-1</code> 實際重送的紀錄、OCI CLI 在一條指令裡自己重送造成的限流，以及依回應碼調整間隔的重送腳本，見 <a href="/blog/devops/infra/cloud-providers/oracle-cloud/hands-on/launch-instance-walkthrough/" data-link-title="Oracle Cloud 建立主機的實測紀錄：建立前的檢查、前置網路、主控台各分頁的 Always Free 設定值、等效的 CLI 指令、容量不足的重送、Bastion 工作階段逾時、Run Command 補公鑰的嘗試與重建後經由 port forwarding 登入" data-link-desc="要在 Oracle Cloud 建一台沒有公開 IP、經由 Bastion 登入的 Always Free A1 主機，想照一次實測重做、看建立頁每一欄的取值與換一種做法的結果時讀；也用在建立請求一直回容量不足、managed SSH session 建立逾時，或沒放公鑰的主機想用 Run Command 救援、Oracle Linux 10 的主機上找不到 Bastion plugin、想改用 port forwarding session 登入的時候">Oracle Cloud 建立主機的實測紀錄</a> 的〈重送建立請求：CLI 自己的重送、限流門檻與重送腳本〉。</p>
<h2 id="e21micro-在各區域的供應服務配額表與-404-錯誤">E2.1.Micro 在各區域的供應：服務配額表與 404 錯誤</h2>
<p>E2.1.Micro 是 Always Free 的另一種機型。官方 Always Free 頁對它的供應寫的是 AD 層級：「Instances using the VM.Standard.E2.1.Micro shape can only be created in one availability domain.」也就是一個區域裡只有一個 AD 建得了 Micro，而官方沒有列出是哪一個 AD、哪些區域完全沒有。2026-10-24 在 <code>ap-batam-1</code> 實測，這一區唯一的 AD 沒有 E2.1.Micro，所以在這一區，A1 建不起來時改用 Micro 也建不起來。</p>
<p>主控台的服務配額表（Limits, quotas and usage 頁）上的數字是這個帳號允許開的台數上限，它不反映那一區是否提供那種硬體。這次的帳號在配額表上的 <code>vm-standard-e2-1-micro-count</code> 是 2，而 <code>ap-batam-1</code> 一台 Micro 也建不起來。</p>
<p>在沒有這個機型的區域用 CLI 建立 Micro 主機，API 回的是 <code>404 NotAuthorizedOrNotFound</code>。這個錯誤碼同時涵蓋權限不足與資源不存在，從訊息本身分不出是哪一種。一個區域實際提供哪些機型，用 <code>oci compute shape list --compartment-id &lt;compartment 的 OCID&gt; --availability-domain &lt;AD 名稱&gt;</code> 查，回傳的清單才是那個 AD 能建的機型；AD 名稱要填 <code>oci iam availability-domain list</code> 回傳的完整名稱，它帶有 tenancy 專屬的前綴，只寫 <code>AD-1</code> 會失敗。這條指令要先有 tenancy 才能跑，所以申請之前沒有辦法確認某一區有沒有 E2.1.Micro；申請之後才發現缺機型時，能做的事見〈選錯 home region 之後的選項〉。</p>
<h2 id="超出-always-free-額度時試用中未升級與付費帳戶各自的結果">超出 Always Free 額度時：試用中、未升級與付費帳戶各自的結果</h2>
<p>多建一台 A1、加大一顆磁碟、改用不在免費額度內的 x86 機型，這類讓用量超出 Always Free 額度的操作，結果由帳號當下的狀態決定：</p>
<ul>
<li><strong>試用中</strong>：超出的部分由試用金支付，帳單上看不到費用。試用結束時，用試用金建的付費資源會被回收，A1 合計超額時全部 A1 主機會被停用。</li>
<li><strong>試用結束而沒有升級</strong>：官方 Always Free 頁寫明，用不在 Always Free 範圍內的映像建主機，帳號必須是付費帳戶、或是還有試用金餘額的 Free Trial 帳號（原文「you must have a paid account or a Free Trial account with available credits」）；試用結束而沒有升級的帳號兩者都不是，所以超出額度的運算資源建不了，運算以外的資源這一頁沒有逐字寫；Free Tier 頁另外寫明，不升級的話申請時填的信用卡不會被扣款。</li>
<li><strong>升級成付費帳戶（Pay As You Go）</strong>：Always Free 的部分仍然不收費，超出的部分照一般價格計費。區塊磁碟的「超出的部分」以整顆磁碟計：沒有用 compartment quota 另設上限時，合計超過 200 GB 的建立請求不會被擋下，新建而放不進剩餘額度的那一顆整顆不算免費額度（2026-10-27 實測，見 <a href="/blog/devops/infra/cloud-providers/oracle-cloud/hands-on/private-ubuntu-egress-console-rebuild/" data-link-title="Oracle Cloud 私有子網路 Ubuntu 主機的實測紀錄：套件來源的出站（NAT gateway、路由與 NSG）、序列主控台的連線，以及被回收之後的重建" data-link-desc="要在 Oracle Cloud 沒有公開 IP 的私有子網路裡跑一台 Ubuntu 主機、讓它裝得到套件更新，或要經由序列主控台看主機的開機過程，或主機被閒置回收、停止或刪除之後要照原樣重建，或想知道 NAT gateway 要不要另外付費、開機磁碟扣掉多少區塊磁碟額度、合計超過 200 GB 時放不進額度的那一顆怎麼算、怎麼用 quota 擋下超額的建立、線上加大開機磁碟超過額度時怎麼算、空出額度之後付費磁碟多久轉成免費時，查實際跑過的指令、錯誤原文、重建腳本與每一步的讀法">Oracle Cloud 私有子網路 Ubuntu 主機的實測紀錄：套件來源的出站（NAT gateway、路由與 NSG）、序列主控台的連線，以及被回收之後的重建</a>〈費用與額度：A1、開機磁碟與區塊儲存額度、出站流量與 NAT gateway〉）。A1 的免費量是每月 3,000 OCPU 小時、18,000 GB 小時（相當於 4 OCPU、24 GB 整個月開著），出處是 2026-10-26 讀到的 Oracle 的 Compute 價目頁，見〈Always Free 的額度與它綁在 home region 上的範圍〉的 A1 那一項。</li>
</ul>
<p>站內各篇寫到「超出免費額度」的地方，指的都是這三種結果。升級之前先設好預算警示，見 <a href="/blog/devops/infra/cloud-providers/console-areas/" data-link-title="雲端主控台的管理領域：身分、資源分組、運算、網路、儲存、費用、監控、稽核、安全服務與配額" data-link-desc="雲端業者的主控台依管理需求分成幾個領域：每個領域管什麼、日常在那裡做哪些事、新帳號開好之後先去哪幾個領域看設定，以及 Oracle Cloud、Google Cloud、AWS 各自把它放在選單的哪個名稱底下">雲端主控台的管理領域</a> 的〈帳單與成本：花了多少、會花多少〉；升級時的 100 美元預先授權、扣款的信用卡要留多少額度、預算門檻與配額怎麼從每月能接受的上限推出來，見 <a href="/blog/devops/operations/08-cost-management/spend-planning-before-renting/" data-link-title="租用雲端主機之前的費用規劃：費用訊號的延遲、停止之前的最大超支、扣款的信用卡額度、配額與預算門檻的計算，以及停損停到哪一層" data-link-desc="租用雲端主機或把試用帳號升級成付費帳戶之前，費用失控時從觸發到停止之間的金額怎麼從配額與訊號延遲推出來，再用它推扣款的信用卡額度、配額、預算警示與觸發處置的門檻；Oracle Cloud、Google Cloud 與 AWS 的扣款時點、預先授權、扣款失敗的後果、擋下建立與停止用量的機制各自涵蓋什麼，以及停損停到哪一層的判斷">租用雲端主機之前的費用規劃：費用訊號的延遲、停止之前的最大超支、扣款的信用卡額度、配額與預算門檻的計算，以及停損停到哪一層</a>。</p>
<h2 id="選-home-region-時要先確認的事">選 home region 時要先確認的事</h2>
<p>Home region 在申請表上是一個下拉選單，選定的區域同時決定了免費主機的實體位置（出口 IP 的國家、延遲）與容量不足時有沒有別的 AD 可以換。選之前先確認這台免費主機要做什麼：</p>
<ul>
<li><strong>用途需要特定國家的出口 IP</strong>（例如要讓連線看起來從日本發出）：只有那個國家的區域符合，其他區域的延遲再低都達不到目的。以日本為例，這個條件與下方「主要拿來實驗」那一條的「選 AD 多的區域」同時滿足不了：日本的兩個區域（東京 <code>ap-tokyo-1</code>、大阪 <code>ap-osaka-1</code>）都只有一個 AD，選了日本，A1 容量不足時就沒有別的 AD 可以換，而 E2.1.Micro 有沒有提供要申請之後才查得到。兩者只能取一個：日本的出口 IP 是硬條件時，選日本的區域，接受 A1 容量不足時無處可換；出口 IP 只是加分項時，選 AD 多的區域，放棄日本的出口 IP。東京與大阪之間，官方沒有公開各區的容量資訊，選哪一個只能看延遲。預算為零而容量一直不足時，能用的退路見〈A1 容量不足時的退路〉最後一段。</li>
<li><strong>用途是給特定地區的使用者連</strong>：選離使用者近的區域，延遲由距離決定。</li>
<li><strong>主要拿來實驗</strong>：優先選 AD 多的區域（官方區域表上 AD 數為 3 的那幾個，名單見 <a href="/blog/devops/infra/knowledge-cards/availability-zone/" data-link-title="Availability Zone（可用區）" data-link-desc="建立雲端主機或磁碟時要選可用區、遇到某個可用區容量不足、規劃兩台主機要不要放在不同可用區，或對照各家把這一層叫 zone、AZ 還是 availability domain 時，查可用區的範圍、它跟區域與故障域的關係與它限制了哪些資源的搭配">Availability Zone（可用區）</a> 卡），A1 容量不足時有其他 AD 可以換。AD 多代表的是多了可以換的地方，不代表那一區的 A1 空閒容量比較多。</li>
<li><strong>資料要留在特定國家</strong>（法規或合約要求）：只有那個國家的區域符合，跟出口 IP 那一條同樣是硬條件。</li>
</ul>
<h2 id="選錯-home-region-之後的選項">選錯 home region 之後的選項</h2>
<p>Home region 不能改；官方有刪除 tenancy 的流程（〈<a href="https://docs.oracle.com/en-us/iaas/Content/General/Tasks/deleting_tenancy_freetier.htm">Deleting a Free Tier Tenancy and Cloud Account</a>〉：管理員在 Tenancy Details 頁按「Request tenancy deletion」），刪除後資源先被暫停、30 天後永久刪除且無法復原，而官方文件沒有寫明刪除之後能不能用同一個 email 與付款方式重新申請。走這條路之前，先開 support ticket 問清楚重新申請的條件。不刪 tenancy 的做法是保留原帳號、在想要的區域另建付費主機：管理員先把帳號升級成 Pay As You Go，再到 Limits, quotas and usage 頁申請提高訂閱區域的上限（Subscribed region count）；核准之後訂閱想要的區域，在那一區建的主機照一般價格計費。Always Free 額度仍然只能用在原本的 home region。</p>
<h2 id="主控台登入租用戶與使用者名稱兩個欄位與使用者名稱或密碼無效">主控台登入：租用戶與使用者名稱兩個欄位，與「使用者名稱或密碼無效」</h2>
<p>OCI 的登入頁把登入拆成兩個欄位，依序出現：</p>
<ol>
<li><strong>租用戶（Cloud Account Name）</strong>：填 tenancy 的名稱，也就是申請時取的帳戶名稱。OCI 用它找到要登入的是哪一個 tenancy。已經登入的主控台上，右上角人像選單的「租用戶」或「Tenancy:」後面就是這個值。</li>
<li><strong>使用者名稱</strong>：填 tenancy 裡那個使用者的名稱。申請時建立的管理員帳號，使用者名稱是申請用的 email。頁面要求選 identity domain（tenancy 裡存放使用者與群組的分區）時選 <code>Default</code>，新帳號只有這一個。</li>
</ol>
<p>兩個欄位任一個填錯，登入頁顯示的都是同一句「使用者名稱或密碼無效」，不會指出是哪一欄錯。實際登入時，租用戶欄填對、使用者名稱欄填成 tenancy 名稱，得到的就是這句訊息，密碼本身沒有錯。從本機用 <code>oci session authenticate</code> 登入時開出的瀏覽器頁面是同一個登入頁，欄位與錯誤訊息相同。</p>
<h2 id="延伸閱讀cli-登入免費額度比較位置與管理通道">延伸閱讀：CLI 登入、免費額度比較、位置與管理通道</h2>
<p>同一個 tenancy 從終端機登入的做法，以及 session token 與 API 簽章金鑰各自的時效，見 <a href="/blog/devops/infra/cloud-providers/oracle-cloud/cli-session-login/" data-link-title="從本機用 OCI CLI 操作 Oracle Cloud：session token 登入、時效與 API 簽章金鑰" data-link-desc="OCI CLI 的兩種身分驗證方式——瀏覽器登入換來的 session token 與上傳公鑰的 API 簽章金鑰——各自把什麼存在本機、有效多久、外洩時的影響範圍，以及登入時的互動提示與錯誤訊息怎麼讀">從本機用 OCI CLI 操作 Oracle Cloud</a>；Always Free 的 home region 限制跟 Google Cloud、AWS 的區域限制並排，見 <a href="/blog/devops/infra/cloud-providers/pricing-comparison/" data-link-title="雲端免費額度與小型主機的收費比較：試用金與固定額度、計費單位、區域限制、試用結束後的處置、出站流量與查價項目" data-link-desc="Oracle Cloud、Google Cloud 與 AWS 的免費方案分別由哪幾種額度組成，比較時要換算的計費單位，免費主機能放在哪些區域，試用期結束後帳號與資源會怎樣，以及付費主機的價格該去哪裡查">雲端免費額度與小型主機的收費比較</a>；home region 這一層之下，可用區與故障域在建立主機時各決定什麼，見 <a href="/blog/devops/infra/cloud-providers/vm-options/placement/" data-link-title="位置：區域、可用區與故障域" data-link-desc="雲端主機的區域、可用區與故障域各自代表多大的範圍、各自決定主機的哪些性質（延遲、出口 IP 的國家、可用機型與容量、硬體故障的影響範圍），以及哪一層建立後就不能改">位置：區域、可用區與故障域</a>；compartment 這種資源分組在三家主控台上的對應，見 <a href="/blog/devops/infra/cloud-providers/console-areas/" data-link-title="雲端主控台的管理領域：身分、資源分組、運算、網路、儲存、費用、監控、稽核、安全服務與配額" data-link-desc="雲端業者的主控台依管理需求分成幾個領域：每個領域管什麼、日常在那裡做哪些事、新帳號開好之後先去哪幾個領域看設定，以及 Oracle Cloud、Google Cloud、AWS 各自把它放在選單的哪個名稱底下">雲端主控台的管理領域</a>；主機建好之後，管理員登入它要經過的網路可達性、通道授權與主機登入驗證三層，見 <a href="/blog/devops/infra/03-network-foundation/management-access-channel/" data-link-title="伺服器管理通道的設計：網路可達性、通道授權、主機登入驗證三層的做法與選擇，以及救援入口" data-link-desc="與雲端廠商無關、適用於雲端 VM、地端主機與 VPS 的管理員登入通道設計：拆成網路可達性、通道授權與主機登入驗證的模型，各層的做法（來源白名單、跳板機、VPN、身分感知代理、代理程式反向連線、SSH 憑證）、更換 port 與 fail2ban 改不了的部分，依存取者身分、連線送達方式、收回方式選擇組合的依據，以及移除公開 IP 之後的出站路徑、切換順序、救援入口、組織護欄與稽核">伺服器管理通道的設計</a>。</p>
]]></content:encoded></item><item><title>從本機用 OCI CLI 操作 Oracle Cloud：session token 登入、時效與 API 簽章金鑰</title><link>https://tarrragon.github.io/blog/devops/infra/cloud-providers/oracle-cloud/cli-session-login/</link><pubDate>Sat, 24 Oct 2026 00:00:00 +0800</pubDate><guid>https://tarrragon.github.io/blog/devops/infra/cloud-providers/oracle-cloud/cli-session-login/</guid><description>&lt;p>這篇整理在 macOS 上安裝 OCI CLI 之後，讓它取得操作 tenancy（Oracle Cloud 的帳號）的身分的兩種做法。範圍從 &lt;code>oci&lt;/code> 指令裝好開始，到第一條查詢指令回傳資料為止；macOS 上的安裝是 &lt;code>brew install oci-cli&lt;/code>，裝好後 &lt;code>oci --version&lt;/code> 印出版本號，Linux 與 Windows 的安裝方式見官方〈Installing the CLI〉。不想在本機安裝的話，主控台頂端列的 Cloud Shell 是一個已經裝好 CLI、以目前登入身分驗證好的瀏覽器終端機，本篇的登入步驟在那裡都不需要。tenancy、home region 與主控台登入欄位見 &lt;a href="https://tarrragon.github.io/blog/devops/infra/cloud-providers/oracle-cloud/account-and-home-region/" data-link-title="Oracle Cloud 的帳號結構與 home region：tenancy、Always Free 的範圍與主控台登入欄位" data-link-desc="OCI 的 tenancy、home region、compartment 與 availability domain 各自管什麼，home region 為什麼在申請當下就要決定，Always Free 額度的計算與回收規則，以及主控台登入時租用戶與使用者名稱兩個欄位的分工">Oracle Cloud 的帳號結構與 home region&lt;/a>。實測環境是 Homebrew 安裝的 OCI CLI 3.95.1，日期 2026-10-24。&lt;/p>
&lt;h2 id="cli-的兩種身分驗證session-token-與-api-簽章金鑰">CLI 的兩種身分驗證：session token 與 API 簽章金鑰&lt;/h2>
&lt;p>OCI 的 API 不收帳號密碼。CLI 送出的每一個請求都用一把私鑰簽章，OCI 用對應的公鑰驗證簽章、再查這把公鑰屬於哪個使用者，以那個使用者的權限執行請求。兩種做法的差別在這對金鑰從哪裡來、公鑰怎麼讓 OCI 認得：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Session token&lt;/strong>：CLI 在本機產生一對臨時金鑰，開瀏覽器讓使用者登入主控台；登入成功後 OCI 簽發一個綁定這把臨時公鑰的 token，token 過期之後這對金鑰就沒有用了。&lt;/li>
&lt;li>&lt;strong>API 簽章金鑰&lt;/strong>：使用者在主控台把一把公鑰登記到自己的帳號下，之後持有對應私鑰的程式都能以這個使用者的身分呼叫 API，直到公鑰被刪除為止。&lt;/li>
&lt;/ul>
&lt;p>兩者在本機都會留下一個私鑰檔，差別在私鑰檔外洩之後能用多久。Session token 的私鑰在 token 過期後失效；API 簽章金鑰的私鑰在使用者到主控台刪掉公鑰之前一直有效。實驗與互動式操作用 session token，私鑰外洩之後可被冒用的時間最長到登入後 24 小時（見〈Session token 的時效與 refresh〉）；排程腳本、CI，以及經由 SSH 連進去、沒有瀏覽器可開的遠端機器，這類沒有人能開瀏覽器登入的場合才需要 API 簽章金鑰。&lt;/p>
&lt;h2 id="用瀏覽器登入換-session-token">用瀏覽器登入換 session token&lt;/h2>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">oci session authenticate --region ap-batam-1 --profile-name DEFAULT&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>--region&lt;/code>：填 tenancy 的 home region 的識別碼，這次實測的 home region 是 &lt;code>ap-batam-1&lt;/code>，換成自己的。CLI 用它決定開哪一區的登入頁、並寫進設定檔當成之後指令的預設區域；試用與 Free Tier 的 tenancy 只訂閱 home region 一個區域，填它就對。識別碼與主控台上的顯示名稱（例如「Indonesia North (Batam)」）是兩種寫法，對照列在 Governance &amp;amp; Administration → Account Management → Region Management 頁；不給這個選項時，CLI 也會列出全部區域的識別碼讓使用者輸入編號。&lt;/li>
&lt;li>&lt;code>--profile-name&lt;/code>：設定檔 &lt;code>~/.oci/config&lt;/code> 裡這一組身分的名稱。&lt;code>DEFAULT&lt;/code> 是 CLI 在指令沒有指定 &lt;code>--profile&lt;/code> 時使用的那一組；同一台機器要切換多個 tenancy 時，每個 tenancy 用一個不同的 profile 名稱。&lt;/li>
&lt;/ul>
&lt;p>實測 Homebrew 版的 CLI 跑在 Python 3.15 上時，這條指令與之後每條指令的開頭都會印一行 &lt;code>SyntaxWarning&lt;/code>，來源是 CLI 自己的程式碼裡的正規表示式字串，不影響結果。要讓輸出乾淨，在指令前面加上 &lt;code>PYTHONWARNINGS=ignore&lt;/code>（例如 &lt;code>PYTHONWARNINGS=ignore oci session validate&lt;/code>）只對那一條生效；改用 &lt;code>export PYTHONWARNINGS=ignore&lt;/code> 的話，整個 shell 裡所有 Python 程式的警告都會被關掉。&lt;/p>
&lt;p>登入過程中 CLI 會問兩個問題：區域與 profile 名稱，兩個都給在選項裡就不必互動輸入。這一點在 CLI 不是跑在互動式終端機裡時有差別——例如透過另一個程式代為執行、標準輸入沒有接到鍵盤——CLI 讀不到輸入，印出 &lt;code>Abort&lt;/code> 後結束。實測少給 &lt;code>--region&lt;/code> 時就是在區域清單之後直接 &lt;code>Abort&lt;/code>。&lt;/p>
&lt;p>CLI 接著開瀏覽器到登入頁，並在本機的 &lt;code>localhost:8181&lt;/code> 等登入結果。瀏覽器的登入頁跟主控台是同一個，先填租用戶，頁面要求選 identity domain 時選 &lt;code>Default&lt;/code>，再填使用者名稱與密碼，各欄的填法見 &lt;a href="https://tarrragon.github.io/blog/devops/infra/cloud-providers/oracle-cloud/account-and-home-region/" data-link-title="Oracle Cloud 的帳號結構與 home region：tenancy、Always Free 的範圍與主控台登入欄位" data-link-desc="OCI 的 tenancy、home region、compartment 與 availability domain 各自管什麼，home region 為什麼在申請當下就要決定，Always Free 額度的計算與回收規則，以及主控台登入時租用戶與使用者名稱兩個欄位的分工">Oracle Cloud 的帳號結構與 home region&lt;/a> 的〈主控台登入：租用戶與使用者名稱兩個欄位，與「使用者名稱或密碼無效」〉。登入成功後瀏覽器把 token 送回 &lt;code>localhost:8181&lt;/code>，終端機印出 &lt;code>Completed browser authentication process!&lt;/code> 與 &lt;code>Config written to: /Users/&amp;lt;user&amp;gt;/.oci/config&lt;/code>。瀏覽器頁面不小心關掉時，終端機上印著同一個登入網址，貼回瀏覽器就能繼續；網址裡帶著這次產生的臨時公鑰，所以只對正在等待的這一次登入有效。&lt;/p></description><content:encoded><![CDATA[<p>這篇整理在 macOS 上安裝 OCI CLI 之後，讓它取得操作 tenancy（Oracle Cloud 的帳號）的身分的兩種做法。範圍從 <code>oci</code> 指令裝好開始，到第一條查詢指令回傳資料為止；macOS 上的安裝是 <code>brew install oci-cli</code>，裝好後 <code>oci --version</code> 印出版本號，Linux 與 Windows 的安裝方式見官方〈Installing the CLI〉。不想在本機安裝的話，主控台頂端列的 Cloud Shell 是一個已經裝好 CLI、以目前登入身分驗證好的瀏覽器終端機，本篇的登入步驟在那裡都不需要。tenancy、home region 與主控台登入欄位見 <a href="/blog/devops/infra/cloud-providers/oracle-cloud/account-and-home-region/" data-link-title="Oracle Cloud 的帳號結構與 home region：tenancy、Always Free 的範圍與主控台登入欄位" data-link-desc="OCI 的 tenancy、home region、compartment 與 availability domain 各自管什麼，home region 為什麼在申請當下就要決定，Always Free 額度的計算與回收規則，以及主控台登入時租用戶與使用者名稱兩個欄位的分工">Oracle Cloud 的帳號結構與 home region</a>。實測環境是 Homebrew 安裝的 OCI CLI 3.95.1，日期 2026-10-24。</p>
<h2 id="cli-的兩種身分驗證session-token-與-api-簽章金鑰">CLI 的兩種身分驗證：session token 與 API 簽章金鑰</h2>
<p>OCI 的 API 不收帳號密碼。CLI 送出的每一個請求都用一把私鑰簽章，OCI 用對應的公鑰驗證簽章、再查這把公鑰屬於哪個使用者，以那個使用者的權限執行請求。兩種做法的差別在這對金鑰從哪裡來、公鑰怎麼讓 OCI 認得：</p>
<ul>
<li><strong>Session token</strong>：CLI 在本機產生一對臨時金鑰，開瀏覽器讓使用者登入主控台；登入成功後 OCI 簽發一個綁定這把臨時公鑰的 token，token 過期之後這對金鑰就沒有用了。</li>
<li><strong>API 簽章金鑰</strong>：使用者在主控台把一把公鑰登記到自己的帳號下，之後持有對應私鑰的程式都能以這個使用者的身分呼叫 API，直到公鑰被刪除為止。</li>
</ul>
<p>兩者在本機都會留下一個私鑰檔，差別在私鑰檔外洩之後能用多久。Session token 的私鑰在 token 過期後失效；API 簽章金鑰的私鑰在使用者到主控台刪掉公鑰之前一直有效。實驗與互動式操作用 session token，私鑰外洩之後可被冒用的時間最長到登入後 24 小時（見〈Session token 的時效與 refresh〉）；排程腳本、CI，以及經由 SSH 連進去、沒有瀏覽器可開的遠端機器，這類沒有人能開瀏覽器登入的場合才需要 API 簽章金鑰。</p>
<h2 id="用瀏覽器登入換-session-token">用瀏覽器登入換 session token</h2>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">oci session authenticate --region ap-batam-1 --profile-name DEFAULT</span></span></code></pre></div><ul>
<li><code>--region</code>：填 tenancy 的 home region 的識別碼，這次實測的 home region 是 <code>ap-batam-1</code>，換成自己的。CLI 用它決定開哪一區的登入頁、並寫進設定檔當成之後指令的預設區域；試用與 Free Tier 的 tenancy 只訂閱 home region 一個區域，填它就對。識別碼與主控台上的顯示名稱（例如「Indonesia North (Batam)」）是兩種寫法，對照列在 Governance &amp; Administration → Account Management → Region Management 頁；不給這個選項時，CLI 也會列出全部區域的識別碼讓使用者輸入編號。</li>
<li><code>--profile-name</code>：設定檔 <code>~/.oci/config</code> 裡這一組身分的名稱。<code>DEFAULT</code> 是 CLI 在指令沒有指定 <code>--profile</code> 時使用的那一組；同一台機器要切換多個 tenancy 時，每個 tenancy 用一個不同的 profile 名稱。</li>
</ul>
<p>實測 Homebrew 版的 CLI 跑在 Python 3.15 上時，這條指令與之後每條指令的開頭都會印一行 <code>SyntaxWarning</code>，來源是 CLI 自己的程式碼裡的正規表示式字串，不影響結果。要讓輸出乾淨，在指令前面加上 <code>PYTHONWARNINGS=ignore</code>（例如 <code>PYTHONWARNINGS=ignore oci session validate</code>）只對那一條生效；改用 <code>export PYTHONWARNINGS=ignore</code> 的話，整個 shell 裡所有 Python 程式的警告都會被關掉。</p>
<p>登入過程中 CLI 會問兩個問題：區域與 profile 名稱，兩個都給在選項裡就不必互動輸入。這一點在 CLI 不是跑在互動式終端機裡時有差別——例如透過另一個程式代為執行、標準輸入沒有接到鍵盤——CLI 讀不到輸入，印出 <code>Abort</code> 後結束。實測少給 <code>--region</code> 時就是在區域清單之後直接 <code>Abort</code>。</p>
<p>CLI 接著開瀏覽器到登入頁，並在本機的 <code>localhost:8181</code> 等登入結果。瀏覽器的登入頁跟主控台是同一個，先填租用戶，頁面要求選 identity domain 時選 <code>Default</code>，再填使用者名稱與密碼，各欄的填法見 <a href="/blog/devops/infra/cloud-providers/oracle-cloud/account-and-home-region/" data-link-title="Oracle Cloud 的帳號結構與 home region：tenancy、Always Free 的範圍與主控台登入欄位" data-link-desc="OCI 的 tenancy、home region、compartment 與 availability domain 各自管什麼，home region 為什麼在申請當下就要決定，Always Free 額度的計算與回收規則，以及主控台登入時租用戶與使用者名稱兩個欄位的分工">Oracle Cloud 的帳號結構與 home region</a> 的〈主控台登入：租用戶與使用者名稱兩個欄位，與「使用者名稱或密碼無效」〉。登入成功後瀏覽器把 token 送回 <code>localhost:8181</code>，終端機印出 <code>Completed browser authentication process!</code> 與 <code>Config written to: /Users/&lt;user&gt;/.oci/config</code>。瀏覽器頁面不小心關掉時，終端機上印著同一個登入網址，貼回瀏覽器就能繼續；網址裡帶著這次產生的臨時公鑰，所以只對正在等待的這一次登入有效。</p>
<p>設定檔裡的這一組長這樣（值是佔位的）：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ini" data-lang="ini"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">[DEFAULT]</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="na">fingerprint</span><span class="o">=</span><span class="s">&lt;臨時公鑰的指紋&gt;</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="na">key_file</span><span class="o">=</span><span class="s">/Users/&lt;user&gt;/.oci/sessions/DEFAULT/oci_api_key.pem</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="na">tenancy</span><span class="o">=</span><span class="s">&lt;tenancy 的 OCID&gt;</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="na">region</span><span class="o">=</span><span class="s">&lt;home region 的識別碼&gt;</span>
</span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="na">security_token_file</span><span class="o">=</span><span class="s">/Users/&lt;user&gt;/.oci/sessions/DEFAULT/token</span></span></span></code></pre></div><p><code>tenancy</code> 是 tenancy 的 OCID：OCI 給每一個資源（tenancy、compartment、VCN、主機）一個以 <code>ocid1.&lt;資源類型&gt;.</code> 開頭的唯一識別碼，叫 OCID（Oracle Cloud ID），CLI 與 API 用它指定要操作哪一個資源，各資源的詳細頁上都有一個可以複製的 OCID 欄位。<code>key_file</code> 是 CLI 產生的臨時私鑰，<code>security_token_file</code> 是 OCI 簽發的 token，兩個檔都在 <code>~/.oci/sessions/&lt;profile 名稱&gt;/</code> 底下。</p>
<p>不再使用時跑 <code>oci session terminate --profile &lt;profile 名稱&gt;</code>。官方 CLI 參考對這條指令的說明是從設定檔移除這一組，並刪掉它參照的資源（例如金鑰檔），沒有寫 OCI 那一端會不會撤銷已經簽發的 token。所以 token 與私鑰檔在 terminate 之前被複製走時，要假設那份 token 仍然有效：拿到的人可以在它過期前跑 <code>oci session refresh</code>，按〈Session token 的時效與 refresh〉寫的上限，影響的期限最長到登入後 24 小時。</p>
<h2 id="使用-session-token-時每條指令要帶的設定config-file-is-invalid-與-user-missing">使用 session token 時每條指令要帶的設定：config file is invalid 與 user missing</h2>
<p>CLI 預設用 API 簽章金鑰的方式驗證身分，用 session token 時要明確告訴它。兩種寫法效果相同：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="c1"># 每條指令各自指定</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">oci iam region-subscription list --auth security_token
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="c1"># 整個 shell 工作階段都用 session token</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="nb">export</span> <span class="nv">OCI_CLI_AUTH</span><span class="o">=</span>security_token</span></span></code></pre></div><p>少了這個設定，CLI 照 API 簽章金鑰的流程檢查設定檔，而那個流程要求設定檔裡有 <code>user</code>（使用者的 OCID），session 登入寫出的設定檔沒有這一欄。實測 CLI 在送出請求之前就停下來，印出 <code>ERROR: The config file at ~/.oci/config is invalid</code>，表格裡列出 <code>user | missing</code>，提示去主控台找使用者的 OCID——照提示補上 <code>user</code> 是在改成 API 簽章金鑰的做法，對 session token 是錯的方向，該補的是 <code>--auth security_token</code>。</p>
<p>確認登入成功、同時查出 tenancy 的基本資訊，可以跑這幾條：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">oci session validate --auth security_token          <span class="c1"># 印出 token 的到期時間</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">oci iam region-subscription list --auth security_token   <span class="c1"># 訂閱的區域，is-home-region 為 true 的是 home region</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl">oci iam availability-domain list --auth security_token   <span class="c1"># home region 的 availability domain 清單</span></span></span></code></pre></div><h2 id="session-token-的時效與-refresh">Session token 的時效與 refresh</h2>
<p>Token 的預設效期是 1 小時：實測 17:44 登入，<code>oci session validate</code> 回報到期時間 18:44。過期之前可以延長：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">oci session refresh --profile DEFAULT</span></span></code></pre></div><p><code>--profile</code> 填登入時取的 profile 名稱；登入那一條指令的選項叫 <code>--profile-name</code>，其他指令（refresh、terminate、一般查詢）都叫 <code>--profile</code>。profile 不是 <code>DEFAULT</code> 時，上一節那幾條查詢指令也要各加 <code>--profile &lt;名稱&gt;</code>。官方文件說明 refresh 要在 token 還有效時做，可以一路延長到登入後的 24 小時；超過 24 小時，或 token 已經過期，就要重新跑一次 <code>oci session authenticate</code>、在瀏覽器重新登入。</p>
<h2 id="api-簽章金鑰不需要每天登入的做法">API 簽章金鑰：不需要每天登入的做法</h2>
<p>API 簽章金鑰在主控台的人像選單 → User settings 頁建立。官方〈Required Keys and OCIDs〉對這一頁的寫法有兩種：一處寫進入「Token and keys」分頁，另一處寫左下角 Resources 區段裡的「API Keys」，畫面上找得到哪一個就用哪一個；兩者都從「Add API Key」按鈕開始。在 Add API Key 的對話框讓主控台產生金鑰對並下載私鑰（Download Private Key），按 Add 之後頁面顯示一段 <code>[DEFAULT]</code> 開頭的設定文字。官方寫明一個使用者最多三把 API 金鑰。</p>
<p>那段文字是 CLI 設定檔的一組 profile，其中 <code>key_file</code> 是一個佔位路徑，CLI 會照這一行去讀私鑰，所以貼進 <code>~/.oci/config</code> 之後要把它改成私鑰實際存放的路徑。同一台機器已經照上面的步驟用 session token 登入過時，設定檔裡已經有一組 <code>[DEFAULT]</code>，貼上的這一組要改成另一個名稱（例如 <code>[apikey]</code>），兩組同名時 CLI 只會讀其中一組。私鑰檔的權限設成只有自己能讀寫，因為持有它的人能以這個使用者的全部權限呼叫 API：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">mv ~/Downloads/&lt;下載的私鑰檔名&gt;.pem ~/.oci/   <span class="c1"># 瀏覽器下載的位置換成自己的</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">chmod <span class="m">600</span> ~/.oci/&lt;下載的私鑰檔名&gt;.pem          <span class="c1"># 私鑰檔只允許擁有者讀寫</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="nb">unset</span> OCI_CLI_AUTH                              <span class="c1"># 前面設過 session token 的 shell 要先取消，否則仍走 session</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl">oci iam region-subscription list --profile apikey   <span class="c1"># 不帶 --auth，CLI 用 API 簽章金鑰</span></span></span></code></pre></div><p>這把金鑰沒有到期時間。不用的時候回到 User settings 頁的 API 金鑰清單刪掉它，持有私鑰的程式就無法再呼叫 API。私鑰外洩的影響範圍是這個使用者的全部權限，所以給排程與 CI 用的金鑰，建在一個只有必要權限的專用使用者底下，不建在申請時建立的管理員帳號底下。</p>
<h2 id="延伸閱讀帳號結構免費額度與憑證設計">延伸閱讀：帳號結構、免費額度與憑證設計</h2>
<p>登入頁的租用戶與使用者名稱欄位、home region 對 Always Free 的限制，見 <a href="/blog/devops/infra/cloud-providers/oracle-cloud/account-and-home-region/" data-link-title="Oracle Cloud 的帳號結構與 home region：tenancy、Always Free 的範圍與主控台登入欄位" data-link-desc="OCI 的 tenancy、home region、compartment 與 availability domain 各自管什麼，home region 為什麼在申請當下就要決定，Always Free 額度的計算與回收規則，以及主控台登入時租用戶與使用者名稱兩個欄位的分工">Oracle Cloud 的帳號結構與 home region</a>；登入之後要建主機時各家免費額度的計算方式，見 <a href="/blog/devops/infra/cloud-providers/pricing-comparison/" data-link-title="雲端免費額度與小型主機的收費比較：試用金與固定額度、計費單位、區域限制、試用結束後的處置、出站流量與查價項目" data-link-desc="Oracle Cloud、Google Cloud 與 AWS 的免費方案分別由哪幾種額度組成，比較時要換算的計費單位，免費主機能放在哪些區域，試用期結束後帳號與資源會怎樣，以及付費主機的價格該去哪裡查">雲端免費額度與小型主機的收費比較</a>；session token 與 API 簽章金鑰這組取捨背後的概念，見 <a href="/blog/devops/infra/02-identity-credentials/iam-oidc-privilege-boundary/" data-link-title="身分與存取憑證地基 — IAM 模型、OIDC 短期憑證與權限邊界設計" data-link-desc="IAM 的 identity / policy / role 三元件、最小權限的持續收斂、用 OIDC 取代長期 access key，以及 SCP 與 Permissions Boundary 的環境隔離">身分與存取憑證地基 — IAM 模型、OIDC 短期憑證與權限邊界設計</a> 的〈長期 access key 的風險〉與〈OIDC：給 CI/CD 的短期憑證〉。</p>
]]></content:encoded></item></channel></rss>