<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>GCP Security - 東東 GCP 教學 - GCP 實戰講師</title>
	<atom:link href="https://dongdonggcp.com/tag/gcp-security/feed/" rel="self" type="application/rss+xml" />
	<link>https://dongdonggcp.com</link>
	<description>助你考取證照，轉職成功</description>
	<lastBuildDate>Wed, 22 Apr 2026 10:31:54 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://dongdonggcp.com/wp-content/uploads/2025/04/cropped-340838097_121391010914395_5443948698124160121_n-32x32.jpg</url>
	<title>GCP Security - 東東 GCP 教學 - GCP 實戰講師</title>
	<link>https://dongdonggcp.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">243235092</site>	<item>
		<title>GCP Organization Policy 完全攻略：Google Cloud 安全工程師必備知識</title>
		<link>https://dongdonggcp.com/2026/04/22/gcp-organization-policy-introduction/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=gcp-organization-policy-introduction</link>
					<comments>https://dongdonggcp.com/2026/04/22/gcp-organization-policy-introduction/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 22 Apr 2026 10:31:51 +0000</pubDate>
				<category><![CDATA[資訊安全]]></category>
		<category><![CDATA[GCP Organization Policy]]></category>
		<category><![CDATA[GCP Security]]></category>
		<category><![CDATA[機構政策]]></category>
		<category><![CDATA[組織政策]]></category>
		<guid isPermaLink="false">https://dongdonggcp.com/?p=11790</guid>

					<description><![CDATA[<p>GCP Organization Pol [&#8230;]</p>
<p>The post <a href="https://dongdonggcp.com/2026/04/22/gcp-organization-policy-introduction/">GCP Organization Policy 完全攻略：Google Cloud 安全工程師必備知識</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></description>
										<content:encoded><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><a href="https://docs.cloud.google.com/organization-policy/overview" target="_blank" rel="noopener" title="">GCP Organization Policy</a>（組織政策）是 Google Cloud 提供的集中式資安政策管理工具，讓管理員統一設定「全公司的資源可以怎麼使用」，透過 Constraints（約束條件）在 Organization、Folder、Project 三層結構中強制執行安全限制。與 IAM 管理「誰能做什麼」不同，Organization Policy 管理「任何人都不能做什麼」——違規操作一律擋下，不受 IAM 角色影響。</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>如果說 IAM 是管理「誰可以做什麼」的工具，那 <strong>GCP Organization Policy</strong> 就是管理「全公司的資源可以怎麼使用」的守門員。兩者看起來很像，但扮演的角色完全不同。</p>



<h2 class="wp-block-heading">1. 什麼是 GCP Organization Policy？</h2>



<h3 class="wp-block-heading">什麼是 Organization Policy？</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>GCP Organization Policy Service</strong> 是 Google Cloud 的集中式治理工具，透過定義 Constraints（約束條件），在整個雲端環境中統一規定哪些行為被允許、哪些行為被禁止。它是一種「護欄機制（Guardrail）」——不論操作者是誰、擁有什麼 IAM 角色，只要行為違反政策，一律擋下。</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Organization Policy 的設定方式，是透過定義一系列的 <strong>Constraints（約束條件）</strong> 來實現。每個 constraint 對應一個特定的 Google Cloud 行為，例如：</p>



<ul class="wp-block-list">
<li>可不可以建立有公開 IP 的 VM？</li>



<li>可不可以使用未受信任的 OS 映像檔？</li>



<li>Storage bucket 能不能公開存取？</li>
</ul>



<p>這些 constraint 可以套用在<strong>組織（Organization）、資料夾（Folder）或專案（Project）</strong> 層級，並依照層級結構自動向下繼承。</p>



<h3 class="wp-block-heading">為什麼 Organization Policy 比 IAM 更重要？</h3>



<p>IAM 和 Organization Policy 是 Google Cloud 安全架構的兩個不同層次，不能互相取代：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>比較項目</th><th>IAM</th><th>Organization Policy</th></tr></thead><tbody><tr><td>管理對象</td><td>身分（人、服務帳戶）</td><td>對資源的操作與設定</td></tr><tr><td>設定粒度</td><td>個別資源或專案</td><td>組織、資料夾、專案</td></tr><tr><td>執行機制</td><td>授權或拒絕操作</td><td>允許或禁止特定行為</td></tr><tr><td>繼承方式</td><td>自動向下繼承</td><td>自動向下繼承</td></tr><tr><td>典型用途</td><td>誰能讀取 GCS bucket</td><td>所有 bucket 不能公開</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Organization Policy 的優先層級高於 IAM 授權。就算某個使用者有 <code>Compute Instance Admin</code> 的 IAM 角色，如果組織政策規定「所有 VM 不得有外部 IP」，他一樣無法建立有外部 IP 的 VM。</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>用比喻來說：</p>



<ul class="wp-block-list">
<li><strong>IAM</strong> 是「員工識別證」——決定某個人能不能進入這棟大樓、使用這台機器。</li>



<li><strong>Organization Policy</strong> 是「公司規章」——不管是誰，所有人都必須遵守，違規一律擋下。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">2. Organization Policy 的資源層級繼承架構</h2>



<h3 class="wp-block-heading">它是怎麼運作的？</h3>



<p>Google Cloud 的資源以樹狀結構組織：</p>



<pre class="wp-block-code"><code>Organization（組織）
    └── Folder（資料夾）
            └── Project（專案）
                    └── Resources（資源）</code></pre>



<p>當在 <strong>Organization 層級</strong>設定一個 Organization Policy 時，這個政策會自動往下繼承到所有 Folder、Project 和資源。組織管理員可以用最少的設定，達到全面覆蓋的效果。</p>



<p><strong>實際情境：</strong> 假設你在 Organization 層級設定政策，禁止任何 VM 使用外部 IP 位址，那麼整個組織底下的所有 Folder、所有 Project，都不能建立有外部 IP 的 VM——除非有特別的 Override 設定。</p>



<figure class="wp-block-image aligncenter size-large"><img fetchpriority="high" decoding="async" width="1024" height="533" src="https://dongdonggcp.com/wp-content/uploads/2026/04/Organization-Policy-的資源層級繼承架構-1024x533.png" alt="" class="wp-image-11796" srcset="https://dongdonggcp.com/wp-content/uploads/2026/04/Organization-Policy-的資源層級繼承架構-1024x533.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/04/Organization-Policy-的資源層級繼承架構-300x156.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/04/Organization-Policy-的資源層級繼承架構-768x400.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/04/Organization-Policy-的資源層級繼承架構.png 1319w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Organization Policy 的資源層級繼承架構</figcaption></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">inheritFromParent 是什麼？為什麼重要？</h3>



<p><code>inheritFromParent</code> 是理解 Organization Policy 繼承機制的核心欄位。</p>



<ul class="wp-block-list">
<li><strong>預設（inheritFromParent: true）</strong>：子層節點（Folder 或 Project）從父層繼承政策。</li>



<li><strong>設定 inheritFromParent: false</strong>：該節點完全切斷與父層的政策繼承，改用自己設定的政策。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>一旦子節點設定 <code>inheritFromParent: false</code>，它的政策就完全獨立運作。即使 Organization 層級允許某個網域，這個允許對該 Folder 完全無效——Folder 只認自己設定的規則。這是安全架構設計中最容易踩到的陷阱之一。</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><strong>具體案例：</strong></p>



<ul class="wp-block-list">
<li>Organization 層級：允許 <code>abc.com</code> 的成員</li>



<li>Apps Folder 層級：只允許 <code>def.com</code> 的成員，並設定 <code>inheritFromParent: false</code></li>
</ul>



<p>結果：嘗試把 <code>peter@abc.com</code> 加入 Apps Folder 底下某個 Project 的 IAM 政策，<strong>會直接失敗</strong>。因為 Apps Folder 已完全切斷繼承，只認 <code>def.com</code>。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" width="1024" height="531" src="https://dongdonggcp.com/wp-content/uploads/2026/04/政策斷點-inheritFrom-Parent-覆蓋機制的運作邏輯-1024x531.png" alt="" class="wp-image-11797" srcset="https://dongdonggcp.com/wp-content/uploads/2026/04/政策斷點-inheritFrom-Parent-覆蓋機制的運作邏輯-1024x531.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/04/政策斷點-inheritFrom-Parent-覆蓋機制的運作邏輯-300x156.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/04/政策斷點-inheritFrom-Parent-覆蓋機制的運作邏輯-768x398.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/04/政策斷點-inheritFrom-Parent-覆蓋機制的運作邏輯-1536x796.png 1536w, https://dongdonggcp.com/wp-content/uploads/2026/04/政策斷點-inheritFrom-Parent-覆蓋機制的運作邏輯.png 1863w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">政策斷點 inheritFrom Parent 覆蓋機制的運作邏輯</figcaption></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">3. 兩大核心 Constraint 類型：List vs Boolean</h2>



<h3 class="wp-block-heading">List Constraint（清單限制）</h3>



<p>List Constraint 用「<strong>允許清單（Allow List）</strong>」或「<strong>拒絕清單（Deny List）</strong>」控制特定資源的使用範圍：</p>



<ul class="wp-block-list">
<li><strong>Allow（允許）操作</strong>：只有清單內的值才被允許，其他的全部拒絕</li>



<li><strong>Deny（拒絕）操作</strong>：清單內的值被禁止，其他的則允許</li>
</ul>



<p>例如：<code>compute.trustedImageProjects</code> 是一個 List Constraint，用 Allow 操作把特定 Project 列入白名單，代表整個組織只能從這個 Project 的映像檔建立 boot disk。</p>



<h3 class="wp-block-heading">Boolean Constraint（布林限制）</h3>



<p>Boolean Constraint 只有兩個選項：<strong>開（Enforced）</strong> 或 <strong>關（Not Enforced）</strong>。</p>



<p>例如：<code>constraints/iam.disableServiceAccountCreation</code>，設定為 Enforced 後，整個組織就無法建立新的服務帳戶。沒有白名單、沒有例外，就是一個開關。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" width="1024" height="562" src="https://dongdonggcp.com/wp-content/uploads/2026/04/兩大控制閥門-布林開關與清單過濾-1024x562.png" alt="" class="wp-image-11798" srcset="https://dongdonggcp.com/wp-content/uploads/2026/04/兩大控制閥門-布林開關與清單過濾-1024x562.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/04/兩大控制閥門-布林開關與清單過濾-300x165.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/04/兩大控制閥門-布林開關與清單過濾-768x422.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/04/兩大控制閥門-布林開關與清單過濾.png 1288w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">兩大控制閥門:布林開關與清單過濾</figcaption></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">4. 限制可信任映像檔來源：compute.trustedImageProjects</h2>



<h3 class="wp-block-heading">為什麼要控制 Boot Disk 映像檔來源？</h3>



<p>在企業環境中，VM 使用的 OS 映像品質直接影響整體安全性。隨意使用公開市場上未經審核的映像檔，可能引入：</p>



<ul class="wp-block-list">
<li>映像檔內含已知漏洞（CVE）</li>



<li>映像檔被植入惡意程式</li>



<li>不符合企業安全強化（Hardening）標準</li>
</ul>



<p>企業安全團隊通常會維護一個「<strong>黃金映像（Golden Image）</strong>」專案，所有 VM 只能從這個專案中的映像建立。</p>



<h3 class="wp-block-heading">如何設定？</h3>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>要讓所有 VM 只使用安全強化的 OS 映像，需要同時完成兩個步驟：</p>



<ol class="wp-block-list">
<li><strong>設定 Organization Policy</strong>：在 Organization 層級啟用 <code>compute.trustedImageProjects</code>，以 <strong>Allow</strong> 操作列入受信任的 Project（例如 <code>security-images-project</code>）當你使用 Allow 動作，它就是白名單的方式，同時，會阻擋所有不在白名單的映像檔。</li>



<li><strong>設定 IAM 權限</strong>：在 <code>security-images-project</code> 中，授予組織內使用者 <code>compute.imageUser</code> 角色，讓他們有讀取並使用映像的權限</li>
</ol>



<p>Policy 確保大家只能用這個 Project 的映像；IAM 確保大家有權限存取這個 Project。兩個步驟缺一不可。</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><strong>為什麼用 Allow 而不是 Deny？</strong> 因為 Allow 的語義是「只有這些才被允許」，天然具有「排除其他所有選項」的效果。如果用 Deny，你只是拒絕了你列出的幾個專案，但其他未列出的公開映像仍然可以使用——這不是我們要的結果。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="526" src="https://dongdonggcp.com/wp-content/uploads/2026/04/限制可信任映像檔來源-1024x526.png" alt="" class="wp-image-11799" srcset="https://dongdonggcp.com/wp-content/uploads/2026/04/限制可信任映像檔來源-1024x526.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/04/限制可信任映像檔來源-300x154.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/04/限制可信任映像檔來源-768x394.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/04/限制可信任映像檔來源-1536x788.png 1536w, https://dongdonggcp.com/wp-content/uploads/2026/04/限制可信任映像檔來源-2048x1051.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">5. 限制專案建立權限：集中管理 Project Creator 角色</h2>



<h3 class="wp-block-heading">為什麼要集中控制專案建立？</h3>



<p>當你建立好一個 GCP 的組織機構，你會看到任何在這個網域的人員都有這兩個權限，專案建立者和帳單帳戶建立者。</p>



<p>在大型企業中，如果所有人都能自由建立 GCP 專案，很快就會出現「<strong>專案蔓延（Project Sprawl）</strong>」——到處都是沒人管的孤兒專案，浪費資源又製造安全風險。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="422" src="https://dongdonggcp.com/wp-content/uploads/2026/04/Org_member_default_iam_role-1024x422.png" alt="" class="wp-image-11822" style="aspect-ratio:2.426636283073807;width:689px;height:auto" srcset="https://dongdonggcp.com/wp-content/uploads/2026/04/Org_member_default_iam_role-1024x422.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/04/Org_member_default_iam_role-300x124.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/04/Org_member_default_iam_role-768x317.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/04/Org_member_default_iam_role-1536x634.png 1536w, https://dongdonggcp.com/wp-content/uploads/2026/04/Org_member_default_iam_role.png 1716w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">GCP 的組織機構預設會給所有網域成員的權限</figcaption></figure>



<h3 class="wp-block-heading">怎麼做？</h3>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>只讓特定團隊建立專案，需要同時執行兩個步驟：</p>



<ol class="wp-block-list">
<li><strong>移除一般使用者的 Project Creator 角色</strong>：在 Organization 層級，把所有使用者從 Project Creator 角色中移除，一般使用者就無法自行建立新專案</li>



<li><strong>授權指定團隊</strong>：把負責專案管理的 DevOps 團隊群組，加入 Organization 層級的 Project Creator 角色</li>
</ol>



<p>注意：兩個步驟必須同時執行。只移除一般使用者但沒有指定誰來建立，專案建立會完全癱瘓；只授權 DevOps 但沒移除一般使用者，限制就沒有意義。</p>
</blockquote>



<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="234" src="https://dongdonggcp.com/wp-content/uploads/2026/04/Remove_Project_Creator-1024x234.png" alt="" class="wp-image-11821" style="width:1024px;height:auto" srcset="https://dongdonggcp.com/wp-content/uploads/2026/04/Remove_Project_Creator-1024x234.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/04/Remove_Project_Creator-300x68.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/04/Remove_Project_Creator-768x175.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/04/Remove_Project_Creator.png 1367w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">在 Organization Level 移除一般使用者的 Project Creator 角色</figcaption></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">6. 控制 VM 的公開 IP 位址：保護生產環境安全</h2>



<h3 class="wp-block-heading">為什麼生產環境不應有公開 IP？</h3>



<p>給 VM 一個公開 IP 位址，等於把它直接曝露在網際網路上。對於資料庫伺服器、內部 API 服務、或任何不需要對外的 VM 來說，這是巨大的安全風險——攻擊者可以直接掃描公開 IP，嘗試暴力破解 SSH 或進行 DDoS 攻擊。</p>



<p>如下圖你可以看到，當我建立好一臺虛擬機器時，隨時都有駭客在掃描我的外部 IP 並且嘗試登入。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="402" src="https://dongdonggcp.com/wp-content/uploads/2026/04/6-3-1-隨時有人嘗試登入主機-1024x402.png" alt="" class="wp-image-11823" srcset="https://dongdonggcp.com/wp-content/uploads/2026/04/6-3-1-隨時有人嘗試登入主機-1024x402.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/04/6-3-1-隨時有人嘗試登入主機-300x118.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/04/6-3-1-隨時有人嘗試登入主機-768x302.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/04/6-3-1-隨時有人嘗試登入主機-1536x603.png 1536w, https://dongdonggcp.com/wp-content/uploads/2026/04/6-3-1-隨時有人嘗試登入主機.png 1912w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">網路上隨時都有駭客在掃描 VM 的 IP 並且嘗試登入</figcaption></figure>



<h3 class="wp-block-heading">如何同時保留前端 IP，鎖定其他 VM？</h3>



<p>現實情況往往是：前端 Web 伺服器需要公開 IP，但後端應用程式和資料庫不應該有。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>使用 <code>constraints/compute.vmExternalIpAccess</code> 這個 constraint，在政策中明確列出哪些 VM 實例可以使用外部 IP（以資源名稱方式列入 Allow 清單），其餘的 VM 自動被禁止。這比 VPC 分割更精準（VPC 分割以子網路為單位，無法做到 VM 層級的細粒度控制），也比移除 IAM 角色更直接，並且不依賴工程師手動記得不勾選外部 IP。</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">7. 服務帳戶安全管控：三大 IAM 約束條件</h2>



<p>服務帳戶（Service Account）是 GCP 中機器身分的代表，也是許多安全事件的攻擊目標。Organization Policy 提供三個相關 constraint 加強管控：</p>



<h3 class="wp-block-heading">三個 Constraint 快速比較</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Constraint</th><th>作用</th><th>類型</th><th>適用場景</th></tr></thead><tbody><tr><td><code>iam.disableServiceAccountCreation</code></td><td>禁止建立新服務帳戶</td><td>Boolean</td><td>生產環境集中管控</td></tr><tr><td><code>iam.disableServiceAccountKeyCreation</code></td><td>禁止建立服務帳戶金鑰</td><td>Boolean</td><td>CI/CD 安全加固</td></tr><tr><td><code>iam.disableServiceAccountKeyUpload</code></td><td>禁止上傳服務帳戶金鑰</td><td>Boolean</td><td>防止外部金鑰匯入</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><code>disableServiceAccountKeyCreation</code> 和 <code>disableServiceAccountCreation</code> 是兩個功能完全不同的 constraint，不能混用。前者只限制「金鑰的建立」，服務帳戶本身還是存在的；後者才是直接禁止「服務帳戶的建立」。混淆這兩者，是企業安全配置中最常見的錯誤之一。</p>



<p>而 <code>disableServiceAccountKeyUpload</code>，是因爲用戶可以任意建立金鑰並且上傳到 GCP 上，聽起來很方便，但這個金鑰是怎麼產生的？密碼強度夠不夠？甚至不知道這個金鑰是不是每個人都有，或者甚至是駭客上傳的。因此，在資安上會造成潛在的威脅。</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">CI/CD 場景的最佳實務</h3>



<p>在 CI/CD 場景中，建議：</p>



<ol class="wp-block-list">
<li>為 CI/CD cluster 建立一個專屬的自訂服務帳戶</li>



<li>在 Project 層級啟用 <code>constraints/iam.disableServiceAccountKeyCreation</code></li>



<li>讓 CI/CD 工具改用 <strong>Workload Identity Federation</strong> (如 Github) 或 <strong>Instance Metadata Service</strong> 取得短期憑證 </li>
</ol>



<p>這樣即使有人嘗試為服務帳戶建立金鑰，也會被 Policy 阻擋，從源頭消除靜態憑證洩漏的風險。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">8. 保護 Shared VPC 主機專案不被誤刪</h2>



<h3 class="wp-block-heading">什麼是 Shared VPC？為什麼需要保護？</h3>



<p><strong>Shared VPC</strong>（又稱 XPN，Cross-Project Networking）讓多個專案共享同一個 VPC 網路。其中的 <strong>Host Project（主機專案）</strong> 負責提供 VPC 資源給其他 Service Projects 使用。如果 Host Project 被誤刪，所有依賴這個 VPC 的服務都會瞬間斷線。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Google Cloud 會自動為 Shared VPC Host Project 加上 **Lien（留置權）**防止被誤刪，但若使用者有足夠權限，可以手動移除這個 Lien 再刪除專案。啟用 <code>compute.restrictXpnProjectLienRemoval</code> 這個 constraint 後，就算使用者有 Project 刪除權限，也無法移除 Shared VPC Host Project 的 Lien，從根本保護關鍵網路資源不被誤刪。</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">9. 網域限制共用政策：iam.allowedPolicyMemberDomains</h2>



<h3 class="wp-block-heading">為什麼要限制外部網域存取資源？</h3>



<p>在預設情況下，Google Cloud 的 IAM 允許把任何 Google 帳戶加入專案的 IAM 政策。如果工程師不小心把外部 Gmail 帳戶加入專案，外部人員就能存取企業的雲端資源。</p>



<p><code>constraints/iam.allowedPolicyMemberDomains</code> 讓你指定哪些網域（以 Google Workspace 客戶 ID 或 Cloud Identity 客戶 ID 方式指定）才能被加入 IAM 政策，不在清單內的網域一律無法被授予任何權限。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="210" src="https://dongdonggcp.com/wp-content/uploads/2026/04/allowedPolicyMemberDomains-1024x210.png" alt="" class="wp-image-11820" srcset="https://dongdonggcp.com/wp-content/uploads/2026/04/allowedPolicyMemberDomains-1024x210.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/04/allowedPolicyMemberDomains-300x62.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/04/allowedPolicyMemberDomains-768x158.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/04/allowedPolicyMemberDomains.png 1397w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Organization Policy 網域邊界限制</figcaption></figure>



<h3 class="wp-block-heading">如何為外部合作夥伴開設例外政策？</h3>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>在維持 <code>iam.allowedPolicyMemberDomains</code> 政策的前提下，為外部合作夥伴開設例外的正確流程：</p>



<ol class="wp-block-list">
<li>暫時關閉 <code>iam.allowedPolicyMemberDomains</code> 政策</li>



<li>將政策值設定為「Custom（自訂）」</li>



<li>把外部合作夥伴的 Cloud Identity 或 Google Workspace 客戶 ID 加入 constraint 的例外清單</li>



<li>確認設定正確後，重新啟用政策</li>
</ol>



<p>注意：把合作夥伴帳號加入 Google Group <strong>不能</strong>繞過這個限制。這個 constraint 是以<strong>客戶 ID</strong>為單位做網域驗證的。</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">10. Cloud Storage 安全防護：防止資料對外公開洩漏</h2>



<h3 class="wp-block-heading">什麼是 storage.publicAccessPrevention？</h3>



<p><code>constraints/storage.publicAccessPrevention</code> 是專門防止 Cloud Storage 資料外洩的 constraint。啟用後，組織內所有 Cloud Storage bucket（包含未來新建立的）都無法被設定為允許匿名的公開存取。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>建立完整的 Cloud Storage 存取控制，建議搭配兩個設定的「黃金組合」：啟用 <code>storage.publicAccessPrevention</code>（防止 bucket 被匿名公開存取）+ 啟用 <strong>Uniform Bucket-Level Access</strong>（關閉 ACL，統一改用 IAM 管理 bucket 存取）。前者防止資料因設定疏漏而意外公開，後者防止因外部帳號被加入 IAM 而導致外洩。兩者相輔相成，缺一不可。</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="540" src="https://dongdonggcp.com/wp-content/uploads/2026/04/截圖-2026-04-22-下午6.10.17-1024x540.png" alt="" class="wp-image-11825" srcset="https://dongdonggcp.com/wp-content/uploads/2026/04/截圖-2026-04-22-下午6.10.17-1024x540.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/04/截圖-2026-04-22-下午6.10.17-300x158.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/04/截圖-2026-04-22-下午6.10.17-768x405.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/04/截圖-2026-04-22-下午6.10.17.png 1276w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">防止 data 被公開存取，並且統一存取權限。</figcaption></figure>



<h2 class="wp-block-heading">11. 強制使用 CMEK 加密：gcp.restrictNonCmekServices</h2>



<h3 class="wp-block-heading">什麼是 CMEK？</h3>



<p><strong>CMEK（Customer-Managed Encryption Keys，客戶自管加密金鑰）</strong> 是 Google Cloud 提供的加密機制。預設情況下，Google Cloud 使用自己管理的金鑰（GMEK）加密資料。CMEK 讓企業可以使用自己在 Cloud KMS 中管理的金鑰進行加密。</p>



<p>企業強制使用 CMEK 的主要原因：</p>



<ul class="wp-block-list">
<li><strong>法規合規</strong>：金融業、醫療業、GDPR 場景可能要求對加密金鑰有完整控制權</li>



<li><strong>資料主權</strong>：企業可以隨時撤銷金鑰，確保資料的最終控制權在自己手中</li>



<li><strong>審計要求</strong>：所有金鑰的使用記錄都可以在 Cloud KMS 中審計</li>
</ul>



<h3 class="wp-block-heading">如何強制使用 CMEK？Deny 才是正確做法</h3>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><code>constraints/gcp.restrictNonCmekServices</code> 的語義是「限制哪些服務<strong>可以不使用</strong> CMEK」。要強制所有 Cloud Storage 資源必須使用 CMEK，正確設定是使用 <strong>Deny</strong> 操作，將 <code>storage.googleapis.com</code> 列入拒絕清單。如果誤用 Allow 操作，代表的是「允許 Cloud Storage 不用 CMEK」，效果完全相反。這是實務配置中最容易搞反的邏輯之一。</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>正確設定範例：</p>



<pre class="wp-block-code"><code>constraint: gcp.restrictNonCmekServices
binding at: org1
policy type: deny
policy value: storage.googleapis.com</code></pre>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="542" src="https://dongdonggcp.com/wp-content/uploads/2026/04/restrictNonCmekServices-1024x542.png" alt="" class="wp-image-11826" srcset="https://dongdonggcp.com/wp-content/uploads/2026/04/restrictNonCmekServices-1024x542.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/04/restrictNonCmekServices-300x159.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/04/restrictNonCmekServices-768x406.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/04/restrictNonCmekServices.png 1283w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">強制實施CMEK 加密</figcaption></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">12. 資源地理位置限制：GDPR 合規的利器</h2>



<h3 class="wp-block-heading">什麼時候需要 Resource Location Restriction？</h3>



<p>當企業需要遵守 <strong>GDPR</strong> 或其他有資料落地要求的法規時，確保所有 Google Cloud 資源只建立在特定地理區域是非常重要的合規要求。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>限制 Google Cloud 資源只能建立在特定地理區域，<strong>唯一正確的工具</strong>是 <code>constraints/gcp.resourceLocations</code>（Resource Location Restriction）。常見的錯誤做法包括：使用 IAM 自訂角色（IAM 沒有以地理位置為條件的授權機制）、使用 Identity-Aware Proxy（IAP 是管理使用者對應用程式的存取，和資源建立地點無關）、使用 Restrict Resource Service Usage（這個 constraint 是限制服務使用，不是限制地理位置）。</p>
</blockquote>



<p><code>constraints/gcp.resourceLocations</code> 支援以 Region、Multi-region 或具體的 Zone 為單位設定限制，能夠非常精確地控制資源的建立位置。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="555" src="https://dongdonggcp.com/wp-content/uploads/2026/04/resourceLocations-1024x555.png" alt="" class="wp-image-11827" srcset="https://dongdonggcp.com/wp-content/uploads/2026/04/resourceLocations-1024x555.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/04/resourceLocations-300x162.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/04/resourceLocations-768x416.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/04/resourceLocations.png 1289w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Resource Location Restriction 可以限制資源所在地以符合當地法規</figcaption></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">13. 組織政策被繞過了怎麼辦？常見原因排查</h2>



<h3 class="wp-block-heading">為什麼政策對某個 Project 失效了？</h3>



<p>假設你在 Folder 層級設定了政策，禁止所有 VM 使用外部 IP，但兩天後發現某個 Project 底下的 VM 竟然有外部 IP。</p>



<p><strong>最常見原因：</strong> 該 Project 在 Project 層級對這個 constraint 設定了 Override，把政策值改成了「Allow」，因此 Folder 層級的禁止設定對這個 Project 失效了。</p>



<h3 class="wp-block-heading">排查步驟</h3>



<ol class="wp-block-list">
<li>到 Google Cloud Console → <strong>Organization Policy</strong>，找到該 constraint</li>



<li>查看政策的繼承情況，確認各個層級的設定值</li>



<li>找出哪個層級有 Override，然後移除或修正</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>在 Google Cloud 的 Organization Policy 機制中，子層的 Policy 可以覆蓋父層的 Policy（除非父層政策設定了不允許 Override）。「沉默代表繼承」——如果你希望某個 Folder 或 Project 有不同的行為，必須明確在那個層級設定 Override；如果沒有設定，就代表接受上層的政策設定，沒有任何例外。</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="520" src="https://dongdonggcp.com/wp-content/uploads/2026/04/Policy_Override-1024x520.png" alt="" class="wp-image-11828" srcset="https://dongdonggcp.com/wp-content/uploads/2026/04/Policy_Override-1024x520.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/04/Policy_Override-300x152.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/04/Policy_Override-768x390.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/04/Policy_Override.png 1295w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">檢查 Organization Policy 覆蓋的狀況</figcaption></figure>



<h2 class="wp-block-heading">14. 預設網路與 CI/CD 管道的安全配置</h2>



<h3 class="wp-block-heading">compute.skipDefaultNetworkCreation 是什麼？</h3>



<p>當一個新的 Google Cloud Project 被建立時，系統預設會自動建立一個 <strong>Default VPC 網路</strong>。這個預設網路有幾個問題：</p>



<ul class="wp-block-list">
<li>防火牆規則預設允許許多常見的輸入連線（如 SSH、RDP），不符合最小權限原則</li>



<li>大型組織中，每個 Project 都有預設網路，網路架構會變得混亂難以管理</li>



<li>工程師可能直接在預設網路上部署資源，沒有任何額外的安全配置</li>
</ul>



<p><strong>解決方法：</strong> 在 Organization 層級啟用 <code>constraints/compute.skipDefaultNetworkCreation</code>。啟用後，所有新建立的 Project 都不會自動產生預設 VPC 網路，工程師必須根據企業的網路架構規範手動建立符合要求的 VPC。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="561" src="https://dongdonggcp.com/wp-content/uploads/2026/04/skipDefaultNetworkCreation-1024x561.png" alt="" class="wp-image-11824" srcset="https://dongdonggcp.com/wp-content/uploads/2026/04/skipDefaultNetworkCreation-1024x561.png 1024w, https://dongdonggcp.com/wp-content/uploads/2026/04/skipDefaultNetworkCreation-300x164.png 300w, https://dongdonggcp.com/wp-content/uploads/2026/04/skipDefaultNetworkCreation-768x421.png 768w, https://dongdonggcp.com/wp-content/uploads/2026/04/skipDefaultNetworkCreation.png 1272w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">避免使用預設的 VPC 網絡，產生較寬鬆的防火牆規則。</figcaption></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">15. 備戰重點整理與常見觀念陷阱</h2>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>GCP Organization Policy 六大常見陷阱：</strong></p>



<ol class="wp-block-list">
<li><strong>Allow vs Deny 搞反</strong>：<code>compute.trustedImageProjects</code> 用 Allow（只允許白名單）；<code>gcp.restrictNonCmekServices</code> 用 Deny（禁止不用 CMEK）</li>



<li><strong>Boolean Constraint 混用</strong>：<code>disableServiceAccountCreation</code>（禁建帳戶）≠ <code>disableServiceAccountKeyCreation</code>（禁建金鑰）</li>



<li><strong>繼承機制誤解</strong>：<code>inheritFromParent: false</code> 會讓子節點完全獨立，父層允許的規則在此完全無效</li>



<li><strong>地理位置限制用錯工具</strong>：要限制資源建立地區，只能用 <code>gcp.resourceLocations</code>，IAM 和 IAP 都做不到</li>



<li><strong>Shared VPC 保護工具記錯</strong>：用 <code>compute.restrictXpnProjectLienRemoval</code>，不是 <code>restrictSharedVpcHostProjects</code></li>



<li><strong>Cloud Storage 防護不完整</strong>：<code>storage.publicAccessPrevention</code> 要搭配 Uniform Bucket-Level Access 才形成完整防線</li>
</ol>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">結論</h2>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>GCP Organization Policy 是 Google Cloud 安全架構中不可或缺的一環，它在 IAM 之上提供更高維度的護欄——無論誰來操作、用什麼角色，只要行為違反組織政策，就一律擋下。從映像檔的來源控制、VM 的 IP 管理、服務帳戶的建立限制，到 Cloud Storage 的公開防護和 CMEK 加密強制，每一個 constraint 背後都對應著真實的企業安全需求。建議在設計組織的雲端安全架構時，把 Organization Policy 的規劃納入最早期的階段，先把護欄架好，讓工程師在安全的邊界內自由發揮。</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">常見問題解答（FAQ）</h2>



<p><strong>Q1：Organization Policy 和 IAM 條件（IAM Conditions）有什麼差別？</strong> IAM Conditions 是在 IAM 授權基礎上加入額外條件（如時間、資源標籤）來細化授權；Organization Policy 則是從行為層面設定哪些操作根本不被允許，不管你有什麼 IAM 角色。</p>



<p><strong>Q2：我可以在 Project 層級覆蓋 Organization 層級的政策嗎？</strong> 預設情況下可以，子層可以 Override 父層的政策。但如果父層在設定 constraint 時鎖定了不允許 Override，子層就無法覆蓋。這是組織管理員需要仔細規劃的地方。</p>



<p><strong>Q3：Organization Policy 的設定會即時生效嗎？</strong> 是的，Organization Policy 通常在幾分鐘內就會生效。但需要注意：對於已經存在的資源（例如已有公開 IP 的 VM），Policy 不會自動修正，只會阻擋<strong>未來</strong>的違規操作。</p>



<p><strong>Q4：什麼是 Constraint 的 Dry Run 模式？</strong> Dry Run（模擬執行）模式讓你先評估一個 constraint 的影響範圍，而不實際執行限制。違規操作會被記錄在 Cloud Logging 中但不會被阻止，方便管理員在正式啟用前了解有哪些資源會受到影響。</p>



<p><strong>Q5：如何查看目前組織內所有的 Organization Policy 設定？</strong> 可以在 Google Cloud Console 的「IAM &amp; Admin → Organization Policies」中查看，也可以使用以下指令：</p>



<p>bash</p>



<pre class="wp-block-code"><code>gcloud org-policies list --organization=ORGANIZATION_ID</code></pre>



<p><strong>Q6：compute.trustedImageProjects 可以套用在 Folder 層級嗎？</strong> 可以。Organization Policy 可以套用在 Organization、Folder 或 Project 任何層級。套用在 Folder 層級時，該 Folder 底下的所有 Project 都會受到映像來源限制的約束。</p>



<p><strong>Q7：storage.publicAccessPrevention 和 Uniform Bucket-Level Access 有什麼關係？</strong> 兩者是獨立的設定，但相輔相成。<code>publicAccessPrevention</code> 防止 bucket 被匿名公開存取；Uniform Bucket-Level Access 則是關閉 ACL，統一用 IAM 管理存取權限。同時啟用兩者，可以建立更完整的 Cloud Storage 安全管控。</p>



<p><strong>Q8：如果同一個 constraint 在 Folder 和 Project 層級都有設定，以哪個為準？</strong> 以最接近資源的層級為準，也就是 Project 層級的設定會覆蓋 Folder 層級的設定（前提是 <code>inheritFromParent</code> 沒有特別限制）。理解這個優先順序，對排查政策衝突非常重要。</p>



<p><strong>Q9：Resource Location Restriction 可以限制到具體的 Zone（區域）嗎？</strong> 可以。<code>constraints/gcp.resourceLocations</code> 支援以 Region、Multi-region 或具體的 Zone 為單位設定限制，能夠非常精確地控制資源的建立位置。</p>



<p><strong>Q10：Organization Policy 的設定有沒有辦法自動化管理？</strong> 有。可以透過 Terraform 的 <code>google_org_policy_policy</code> 資源，或使用 Google Cloud 的 Organization Policy API，以程式碼方式管理所有 constraint 設定。這也是大型企業推薦的「<strong>Policy as Code</strong>」實踐方式，確保政策設定可被版本控管和自動化部署。</p><p>The post <a href="https://dongdonggcp.com/2026/04/22/gcp-organization-policy-introduction/">GCP Organization Policy 完全攻略：Google Cloud 安全工程師必備知識</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://dongdonggcp.com/2026/04/22/gcp-organization-policy-introduction/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">11790</post-id>	</item>
	</channel>
</rss>
