

<?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>azure &#8211; Max的程式語言筆記</title>
	<atom:link href="https://stackoverflow.max-everyday.com/tag/azure/feed/" rel="self" type="application/rss+xml" />
	<link>https://stackoverflow.max-everyday.com</link>
	<description>我要當一個豬頭，快樂過每一天</description>
	<lastBuildDate>Tue, 05 May 2026 11:20:14 +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://stackoverflow.max-everyday.com/wp-content/uploads/2017/02/max-stackoverflow-256.png</url>
	<title>azure &#8211; Max的程式語言筆記</title>
	<link>https://stackoverflow.max-everyday.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Azure App gateway 設定自訂網域指向應用程式閘道</title>
		<link>https://stackoverflow.max-everyday.com/2026/05/azure-app-gateway-setup/</link>
					<comments>https://stackoverflow.max-everyday.com/2026/05/azure-app-gateway-setup/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Tue, 05 May 2026 11:20:13 +0000</pubDate>
				<category><![CDATA[Azure 筆記]]></category>
		<category><![CDATA[azure]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=8387</guid>

					<description><![CDATA[這是一個常見的誤解。事實上，一個公用 IP 位址...]]></description>
										<content:encoded><![CDATA[
<p>這是一個常見的誤解。事實上，一個公用 IP 位址可以同時對應到多個不同的 Web App（網站）。</p>



<p>在現代的網路架構中，主要透過以下兩種技術來達成：</p>



<h3 class="wp-block-heading">1. 使用主機名稱識別（Host Header）</h3>



<p>這是最常見的做法。當多個網站共享同一個 IP 時，伺服器會根據瀏覽器傳送的 HTTP Request 中的 Host 欄位來判斷要由哪一個 App 處理。</p>



<ul class="wp-block-list">
<li>用戶輸入 A.com，請求送到 IP 1.2.3.4。</li>



<li>伺服器看見要求的主機名稱是 A.com，於是把流量導向 Web App A。</li>



<li>另一個用戶輸入 B.com，同樣送到 IP 1.2.3.4。</li>



<li>伺服器看見要求的主機名稱是 B.com，則導向 Web App B。</li>
</ul>



<p>這也是為什麼在 Azure App Service 或應用程式閘道上，你需要註冊自訂網域的原因，這樣伺服器才知道這個網域是歸屬於哪一個服務。</p>



<h3 class="wp-block-heading">2. 使用反向代理（Reverse Proxy）</h3>



<p>像你提到的 Azure 應用程式閘道（Application Gateway）就是一個強大的反向代理伺服器。</p>



<p>一個應用程式閘道通常只有一個公用 IP，但它可以根據不同的規則來分流：</p>



<ul class="wp-block-list">
<li>根據網域分流：例如 <code>shop.example.com</code> 導向後端的「購物車服務」，而 <code>blog.example.com</code> 導向「部落格服務」。</li>



<li>根據路徑分流：同一個網域下，<code>[example.com/api](https://example.com/api)</code> 導向「後端 API 服務」，而 <code>[example.com/static](https://example.com/static)</code> 導向「靜態網頁服務」。</li>
</ul>



<h3 class="wp-block-heading">總結</h3>



<p>一個 IP 確實可以對應多個 Web App。這不僅節省了公用 IP 的資源（IP 資源很貴且有限），也讓系統架構更具靈活性。</p>



<p>你目前正在設定的應用程式閘道，正是利用這種機制來管理多個後端服務，只要確保 DNS 正確指向該 IP，並在 Azure 上完成對應的網域註冊即可。</p>



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



<h2 class="wp-block-heading">有多個網域分流, app gateway how to setup</h2>



<p>在 Azure 應用程式閘道（Application Gateway）中處理多個網域分流，核心機制是使用 <strong>多站台（Multi-site）接聽程式</strong>。</p>



<p>這就像是在同一個門牌號碼（IP）下，根據信封上的收件人姓名（網域）把信件分派給不同的辦公室。</p>



<p>以下是具體的設定步驟：</p>



<h3 class="wp-block-heading">1. 建立後端集區（Backend Pools）</h3>



<p>首先，你要為不同的 App 建立各自的集區。</p>



<ul class="wp-block-list">
<li>建立後端集區 A：加入第一個 Web App 的位址。</li>



<li>建立後端集區 B：加入第二個 Web App 的位址。</li>
</ul>



<h3 class="wp-block-heading">2. 設定接聽程式（Listeners）</h3>



<p>這是最關鍵的一步。你需要為每個網域建立一個獨立的接聽程式。</p>



<ul class="wp-block-list">
<li><strong>接聽程式 A</strong>：
<ul class="wp-block-list">
<li>關聯的前端 IP：選擇你的公用 IP。</li>



<li>接聽程式類型：選擇多站台（Multi-site）。</li>



<li>主機名稱：輸入第一個網域（例如 <code>app1.example.com</code>）。</li>
</ul>
</li>



<li><strong>接聽程式 B</strong>：
<ul class="wp-block-list">
<li>接聽程式類型：選擇多站台（Multi-site）。</li>



<li>主機名稱：輸入第二個網域（例如 <code>app2.example.com</code>）。</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">3. 設定後端設定（Backend Settings）</h3>



<p>針對多租用戶服務（如 App Service），這裡有兩個重點：</p>



<ul class="wp-block-list">
<li><strong>主機名稱覆寫</strong>：根據 Azure 的建議，如果你已經在後端 App 註冊了自訂網域，請選擇從後端目標選取主機名稱，或者手動輸入對應的網域。</li>



<li><strong>通訊協定</strong>：通常設定為 HTTPS (Port 443)。</li>
</ul>



<h3 class="wp-block-heading">4. 建立路由規則（Routing Rules）</h3>



<p>最後，把「接聽程式」與「後端集區」串聯起來。</p>



<ul class="wp-block-list">
<li><strong>規則 A</strong>：當接聽程式 A 收到請求時，將流量導向後端集區 A。</li>



<li><strong>規則 B</strong>：當接聽程式 B 收到請求時，將流量導向後端集區 B。</li>
</ul>



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



<h3 class="wp-block-heading">常見問題排查</h3>



<p>如果設定後無法連線，請檢查以下幾點：</p>



<ul class="wp-block-list">
<li><strong>DNS 設定</strong>：確認 <code>app1.example.com</code> 與 <code>app2.example.com</code> 的 CNAME 或 A 紀錄都指向應用程式閘道的 IP。</li>



<li><strong>後端註冊</strong>：在 Azure App Service 的自訂網域設定中，必須已經新增了該網域，否則 App Service 會因為無法識別 Host Header 而回傳 404 錯誤。</li>



<li><strong>憑證問題</strong>：如果你使用 HTTPS，接聽程式必須上傳對應網域的 SSL 憑證。如果是多網域，可以使用萬用字元憑證（Wildcard Certificate）或針對每個接聽程式上傳專屬憑證。</li>
</ul>



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



<h2 class="wp-block-heading">同一個 port 只能有一個Listeners?</h2>



<p>在 Azure 應用程式閘道中，<strong>同一個 Port（埠號）是可以有多個接聽程式（Listeners）的</strong>，但前提是這些接聽程式必須是 <strong>多站台（Multi-site）</strong> 類型。</p>



<p>如果你的設計是想在同一個 IP 的 Port 80 或 443 下跑多個網站，這是完全沒問題的。</p>



<p>以下是運作的核心規則：</p>



<h3 class="wp-block-heading">1. 基本規則：唯一性</h3>



<p>應用程式閘道判斷要把流量交給哪個接聽程式，是根據 <strong>IP + Port + 主機名稱（Host Name）</strong> 的組合來決定的。</p>



<ul class="wp-block-list">
<li><strong>基本型（Basic）接聽程式</strong>：會「佔據」該 Port 的所有流量。如果你在 Port 443 設了一個基本型接聽程式，你就不能再針對同一個 Port 建立其他的接聽程式。</li>



<li><strong>多站台（Multi-site）接聽程式</strong>：允許多個接聽程式共享同一個 Port。</li>
</ul>



<h3 class="wp-block-heading">2. 如何在同一個 Port 設定多個接聽程式</h3>



<p>當你需要多個網域（例如 <code>a.com</code> 和 <code>b.com</code>）都使用 Port 443 時，你的設定會長這樣：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>接聽程式名稱</strong></td><td><strong>類型</strong></td><td><strong>埠號</strong></td><td><strong>主機名稱</strong></td></tr></thead><tbody><tr><td>Listener-A</td><td>多站台</td><td>443</td><td><code>a.com</code></td></tr><tr><td>Listener-B</td><td>多站台</td><td>443</td><td><code>b.com</code></td></tr><tr><td>Listener-C</td><td>多站台</td><td>443</td><td><code>*.c.com</code> (萬用字元)</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">3. 系統如何判斷流量去哪？</h3>



<p>當一個請求進來時，應用程式閘道會檢查 HTTP 標頭中的 Host 欄位：</p>



<ol start="1" class="wp-block-list">
<li>如果連線請求的網域是 <code>a.com</code>，它會精準比對到 <strong>Listener-A</strong>。</li>



<li>如果連線請求的網域是 <code>b.com</code>，它會精準比對到 <strong>Listener-B</strong>。</li>



<li>如果 Host 欄位跟所有接聽程式都對不起來，該連線就會失敗（回傳錯誤），除非你有設定一個「預設」的路由規則。</li>
</ol>



<h3 class="wp-block-heading">4. 注意事項</h3>



<ul class="wp-block-list">
<li><strong>SSL 憑證</strong>：如果你在同一個 Port 跑多個 HTTPS 站台，應用程式閘道會使用 <strong>SNI（伺服器名稱指示）</strong> 技術。這意味著每個接聽程式都可以綁定各自對應網域的 SSL 憑證。</li>



<li><strong>避免衝突</strong>：你不能在同一個 Port 同時存在一個「基本型」接聽程式與多個「多站台」接聽程式，系統會判定這會產生衝突。</li>
</ul>



<p><strong>簡單來說：</strong> 只要你把接聽程式類型選為 <strong>多站台（Multi-site）</strong> 並填入正確的 <strong>主機名稱</strong>，你就可以在同一個 Port 上掛載非常多個不同的網站。</p>



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



<p>Error log</p>



<pre class="wp-block-preformatted">無法將設定變更儲存至應用程式閘道 'agw-stg-jpe-001'。錯誤: Application Gateway listener-policyhub-stg 和 appGatewayHttpsListener 的兩個 Http Listener 使用了相同的 Frontend Port</pre>



<p>這個錯誤訊息非常明確，問題在於你的應用程式閘道中發生了 <strong>設定衝突</strong>。</p>



<p>簡單來說，系統發現你有兩個接聽程式（Listeners）在搶奪相同的「通訊窗口」。</p>



<h3 class="wp-block-heading">衝突原因分析</h3>



<p>根據錯誤訊息，以下三個關鍵要素在兩個接聽程式之間完全重複了：</p>



<ol start="1" class="wp-block-list">
<li><strong>Frontend Port</strong>：都是 <code>port_443</code>。</li>



<li><strong>Frontend IP</strong>：都是 <code>appGatewayFrontendIP</code>。</li>



<li><strong>HostName</strong>：都是 <code>policyhub.test.<code>com</code>.tw</code>。</li>
</ol>



<p>在 Azure 應用程式閘道中，這三個元素的組合必須是 <strong>唯一</strong> 的。如果 <code>HostName</code> 完全一樣，閘道器就無法判斷當流量進來時，到底該交給 <code>listener-hub-stg</code> 還是 <code>appGatewayHttpsListener</code> 來處理。</p>



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



<h3 class="wp-block-heading">解決方案</h3>



<p>請依照你的實際需求，選擇以下其中一種調整方式：</p>



<h4 class="wp-block-heading">方案一：刪除多餘或舊的接聽程式</h4>



<p>如果你發現 <code>appGatewayHttpsListener</code> 是之前測試留下的舊設定，或者它原本就應該被新的 <code>listener-hub-stg</code> 取代，請直接刪除其中一個。</p>



<h4 class="wp-block-heading">方案二：合併路由規則（最推薦）</h4>



<p>如果你希望這個網域 <code>hub.test.<code>com</code>.tw</code> 對應到某個後端，你只需要 <strong>一個</strong> 接聽程式。</p>



<ol start="1" class="wp-block-list">
<li>保留其中一個接聽程式（例如 <code>listener-hub-stg</code>）。</li>



<li>確保該接聽程式關聯到正確的 <strong>要求路由規則（Request Routing Rule）</strong>。</li>



<li>在路由規則中定義流量該去哪個 <strong>後端集區（Backend Pool）</strong>。</li>
</ol>



<h4 class="wp-block-heading">方案三：區分主機名稱（Host Name）</h4>



<p>如果你原本的意圖是要讓兩個不同的網域共用 443 Port，請檢查這兩個接聽程式的 <code>HostName</code> 設定：</p>



<ul class="wp-block-list">
<li>將 <code>listener-hub-stg</code> 設定為 <code>hub.test.<code>com</code>.tw</code>。</li>



<li>將另一個接聽程式設定為另一個網域，例如 <code>other.test.com.tw</code>。</li>



<li><strong>注意</strong>：不可以兩個都留空白（基本型），也不可以兩個都填入相同的網域。</li>
</ul>



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



<h3 class="wp-block-heading">操作建議步驟</h3>



<ol start="1" class="wp-block-list">
<li>進入 Azure 入口網站，開啟 <code>agw-stg-jpe-001</code>。</li>



<li>點選左側選單的 <strong>接聽程式 (Listeners)</strong>。</li>



<li>找到 <code>appGatewayHttpsListener</code> 和 <code>listener-policyhub-stg</code>。</li>



<li>檢查這兩個接聽程式是否都設定了相同的網域。如果是，請決定要保留哪一個，並將另一個 <strong>刪除</strong> 或 <strong>更改主機名稱</strong>。</li>



<li>儲存變更後，再次嘗試部署。</li>
</ol>



<p>通常這種情況發生在「手動新增新的接聽程式」時，忘記舊有的接聽程式已經佔用了該網域的 443 Port。</p>



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



<p>Error:</p>



<pre class="wp-block-preformatted">502 Bad Gateway
Microsoft-Azure-Application-Gateway/v2</pre>



<p>遇到這個錯誤代表你的 <strong>Application Gateway 已經收到請求，但它在嘗試與後端伺服器（如 App Service 或 VM）溝通時失敗了</strong>。</p>



<p>既然你正在進行多租用戶服務（App Service）的設定，這通常與「主機名稱不一致」或「健康狀態探查（Health Probe）失敗」有關。請依照以下步驟排查：</p>



<h3 class="wp-block-heading">1. 檢查後端健康狀態 (最直接的方法)</h3>



<p>在 Azure 入口網站中，進入您的 Application Gateway：</p>



<ul class="wp-block-list">
<li>點選左側選單的 <strong>後端狀況 (Backend Health)</strong>。</li>



<li>查看您的後端集區狀態。如果是 <strong>Unhealthy</strong>，右側通常會顯示具體的錯誤訊息。</li>
</ul>



<h3 class="wp-block-heading">2. 常見原因：主機名稱（Host Name）不匹配</h3>



<p>多租用戶服務（如 App Service）非常依賴 HTTP 要求中的 <code>Host</code> 標頭。</p>



<ul class="wp-block-list">
<li><strong>問題點</strong>：如果你的 Gateway 傳送要求到後端時，使用的是 <code>hub.test.com.tw</code>，但後端的 App Service 沒有註冊這個網域，App Service 會拒絕連線，導致 502。</li>



<li><strong>解決方案</strong>：
<ol start="1" class="wp-block-list">
<li>確認 App Service 的 <strong>自訂網域 (Custom domains)</strong> 中已經新增了 <code>hub.test.com.tw</code>。</li>



<li>在 Application Gateway 的 <strong>後端設定 (Backend Settings)</strong> 中，確認是否開啟了 <strong>覆寫後端主機名稱</strong>。</li>



<li>根據先前的建議，應選擇 <strong>從後端目標選取主機名稱</strong> 或手動輸入該 App 的預設網域（如 <code>xxxx.azurewebsites.net</code>）。</li>
</ol>
</li>
</ul>



<h3 class="wp-block-heading">3. 健康狀態探查 (Health Probe) 失敗</h3>



<p>如果後端設定要求使用 HTTPS，但探查的目標不正確，閘道器會認為後端已掛掉，進而回傳 502。</p>



<ul class="wp-block-list">
<li><strong>檢查點</strong>：進入 <strong>健康狀態探查 (Health Probes)</strong> 設定。</li>



<li><strong>建議</strong>：針對 App Service，勾選 <strong>從後端設定中選取主機名稱</strong>。這能確保探查時傳送的主機名稱與後端設定一致。</li>
</ul>



<h3 class="wp-block-heading">4. SSL 憑證與 HTTPS 握手失敗</h3>



<p>如果你在 Application Gateway 與後端 App Service 之間使用 HTTPS 連線：</p>



<ul class="wp-block-list">
<li>確認後端 App Service 能夠處理 HTTPS。</li>



<li>如果使用自簽憑證，必須在 Application Gateway 中上傳該信任的根憑證（.cer 檔）。</li>
</ul>



<h3 class="wp-block-heading">5. 後端伺服器逾時</h3>



<p>如果你的 Web App 處理請求的時間太長（例如正在進行大型資料庫搬遷或運算），Application Gateway 會因為超過預設的 <strong>要求逾時 (Request timeout)</strong> 時間而主動中斷連線。</p>



<ul class="wp-block-list">
<li><strong>檢查點</strong>：進入 <strong>後端設定</strong>，嘗試增加 <strong>要求逾時</strong> 的秒數（預設通常是 20 秒，可以試著改為 60 秒或更高）。</li>
</ul>



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



<h3 class="wp-block-heading">快速排查建議</h3>



<p>如果你剛處理完前面的 <code>Listeners</code> 衝突問題，請先確認：</p>



<ol start="1" class="wp-block-list">
<li><strong>路由規則</strong> 是否正確連結到正確的 <strong>後端集區</strong>。</li>



<li><strong>後端集區</strong> 內的位址（FQDN）是否正確無誤。</li>
</ol>



<p>只要 <strong>後端狀況 (Backend Health)</strong> 顯示為 <strong>Healthy</strong>，502 錯誤通常就會消失。</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2026/05/azure-app-gateway-setup/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure SQL 啟用 Entra ID 驗證</title>
		<link>https://stackoverflow.max-everyday.com/2026/05/azure-sql-entra-id-pwd/</link>
					<comments>https://stackoverflow.max-everyday.com/2026/05/azure-sql-entra-id-pwd/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Tue, 05 May 2026 05:04:46 +0000</pubDate>
				<category><![CDATA[Azure 筆記]]></category>
		<category><![CDATA[azure]]></category>
		<category><![CDATA[mssql]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=8380</guid>

					<description><![CDATA[如果你有在玩雲端資料庫，一定知道傳統的帳號密碼超...]]></description>
										<content:encoded><![CDATA[
<p>如果你有在玩雲端資料庫，一定知道傳統的帳號密碼超麻煩，不只難記，萬一被外流就慘了。</p>



<p>微軟現在有個超讚的設定，可以把 Azure SQL 資料庫變成 僅限 Microsoft Entra ID 驗證。這聽起來很專業，其實就是把傳統的帳號密碼大門關起來，規定大家只能用正式的微軟雲端帳號登入。</p>



<p>停用本地驗證方法並僅允許 Azure Active Directory 驗證，可確保只有 Azure Active Directory 識別身分才能存取 Azure SQL Database，以提升安全性。</p>



<p>這樣做有什麼好處呢？</p>



<ul class="wp-block-list">
<li>第一個好處是統一管理。所有的權限都歸雲端帳號管，不用在資料庫裡建一堆帳號。</li>



<li>再來是安全性大升級！因為雲端帳號可以開啟手機簡訊或 APP 的多重驗證，駭客就算偷到密碼也進不來！</li>
</ul>



<p>操作起來其實很簡單，不論你是習慣打指令還是用滑鼠點網頁都能搞定。</p>



<p>如果你是用圖形網頁操作，只要在建立資料庫的時候，去 身份驗證 分頁點一下 僅限 Microsoft Entra 驗證。</p>



<p>接著搜尋你自己的帳號，把它設成 管理員 就大功告成。</p>



<p>設定完記得測試看看，這時候你會發現原本的 SQL 舊帳號已經被 封鎖 沒辦法用了，一定要改用微軟帳號才能進去。</p>



<p>我覺得這功能真的超方便！以前要記一堆資料庫密碼真的很痛苦，現在只要保護好一個主帳號就好。</p>



<p>把複雜的事情變簡單，而且還更安全，這絕對是現代開發者必學的懶人自保術呀！</p>



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



<p>既然程式是跑在 Docker 裡，沒辦法手動點選視窗，那我們就要幫程式申請一張「專屬通行證」，也就是 Client Secret <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f511.png" alt="🔑" class="wp-smiley" style="height: 1em; max-height: 1em;" />。</p>



<p>這張通行證要在 Azure 入口網站（Azure Portal）裡面產生，步驟其實很簡單，就像是在幫你的程式辦身分證一樣：</p>



<p><strong>第一步：註冊應用程式</strong></p>



<p>首先去 Azure Portal 搜尋「應用程式註冊」（App Registrations）:<br><a href="https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade">https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade</a></p>



<p>點進去後選「新註冊」。幫你的程式取個名字，然後按註冊就好。這時候你會看到一個「應用程式 (用戶端) 識別碼」，這就是連線字串裡的 Client ID <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f194.png" alt="🆔" class="wp-smiley" style="height: 1em; max-height: 1em;" />。</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="678" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2026/05/chrome_2026-05-05-13-00-7b-1024x678.jpg?v=1777957275" alt="" class="wp-image-8381" srcset="https://stackoverflow.max-everyday.com/wp-content/uploads/2026/05/chrome_2026-05-05-13-00-7b-1024x678.jpg?v=1777957275 1024w, https://stackoverflow.max-everyday.com/wp-content/uploads/2026/05/chrome_2026-05-05-13-00-7b-600x397.jpg?v=1777957275 600w, https://stackoverflow.max-everyday.com/wp-content/uploads/2026/05/chrome_2026-05-05-13-00-7b-768x509.jpg?v=1777957275 768w, https://stackoverflow.max-everyday.com/wp-content/uploads/2026/05/chrome_2026-05-05-13-00-7b.jpg?v=1777957275 1439w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>第二步：產生秘密金鑰</strong></p>



<p>在左邊選單找到「憑證與密碼」，點進去後選「用戶端密碼」，接著按「新用戶端密碼」。你可以設定這組密碼多久會過期。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="485" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2026/05/chrome_2026-05-05-13-03-7c-1024x485.jpg?v=1777957435" alt="" class="wp-image-8382" srcset="https://stackoverflow.max-everyday.com/wp-content/uploads/2026/05/chrome_2026-05-05-13-03-7c-1024x485.jpg?v=1777957435 1024w, https://stackoverflow.max-everyday.com/wp-content/uploads/2026/05/chrome_2026-05-05-13-03-7c-600x284.jpg?v=1777957435 600w, https://stackoverflow.max-everyday.com/wp-content/uploads/2026/05/chrome_2026-05-05-13-03-7c-768x363.jpg?v=1777957435 768w, https://stackoverflow.max-everyday.com/wp-content/uploads/2026/05/chrome_2026-05-05-13-03-7c-1536x727.jpg?v=1777957435 1536w, https://stackoverflow.max-everyday.com/wp-content/uploads/2026/05/chrome_2026-05-05-13-03-7c.jpg?v=1777957435 2016w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>第三步：立刻存檔</strong></p>



<p>按下的那一刻，畫面會出現一串長長的字，那就是 Client Secret。記得這時候一定要趕快複製存起來！因為一旦離開這個畫面，系統就會把它遮起來，你再也看不到了，只能重新再產生一個 <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" />。</p>



<p>最後別忘了，還要回到你的 SQL Server 裡面，把這個應用程式的名字加進去並給它權限，你的程式才能順利進門。</p>



<p>我覺得這種做法雖然多了一點步驟，但把權限跟程式碼分開管理，程式碼裡不再放死板板的密碼，而是改用這種可以隨時更換、受雲端監控的通行證。</p>



<p>這樣一來，不只開發起來更優雅，安全等級也是直接拉滿，這才是專業開發者的懶人自保術呀 <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2728.png" alt="✨" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>你知道除了手動複製，其實還有更安全的方法來管理這些秘密金鑰嗎？<br><br>既然都聊到這了，那一定要跟你分享進階版的絕招！</p>



<p>雖然把 Client Secret 存在 Docker 的環境變數裡已經比以前進步，但對追求極致安全的工程師來說，這還不夠。因為金鑰還是存在某個地方，萬一主機被攻破，祕密還是會外流。</p>



<p>這時候，我們可以用 Azure 提供的一種超神科技，叫做<strong>受控識別（Managed Identity）</strong>。</p>



<p>這概念就像是你不用再幫程式辦身分證了，而是直接讓 Azure 認得這台 虛擬機 或 容器 服務本身。當程式要去連資料庫時，它會直接跟 Azure 說：「嘿，我是你家養的容器，讓我進去吧！」</p>



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



<p>簡單來說，更安全的作法有兩種：</p>



<p><strong>一、使用受控識別（最推薦）</strong></p>



<p>這就像是 刷臉認證。你只要在 Azure 平台上把你的服務（例如 Azure Container Instances）開啟 受控識別 功能，並在 SQL 資料庫裡授權給它。</p>



<p>這時候 Python 的連線字串就會變得超乾淨，完全不需要 UID 也不需要 PWD：</p>



<pre class="wp-block-code"><code>driver = {ODBC Driver 18 for SQL Server}
connection_string = (
　f"DRIVER={driver};"
　f"SERVER={server},{port};"
　f"DATABASE={database};"
　"Authentication=ActiveDirectoryMSI;"
　"Encrypt=yes;"
　"TrustServerCertificate=no;"
　"Connection Timeout=30;"
)</code></pre>



<p>這真的是 懶人包 的極致，程式碼裡完全沒有任何祕密，安全性滿分！</p>



<p><strong>二、使用 Azure Key Vault</strong></p>



<p>如果你還是需要用 Client Secret，可以把它藏在 雲端保險箱（Key Vault）裡面。</p>



<p>程式執行時才去保險箱領鑰匙，而不是直接把鑰匙貼在門口。這樣就算別人看到你的程式碼或 Docker 設定，也拿不到真正的密碼。</p>



<pre class="wp-block-code"><code>範例程式碼：

driver = {ODBC Driver 18 for SQL Server}
connection_string = (
　f"DRIVER={driver};"
　f"SERVER={server},{port};"
　f"DATABASE={database};"
　f"UID={client_id};"
　f"PWD={client_secret};"
　"Authentication=ActiveDirectoryServicePrincipal;"
　"Encrypt=yes;"
　"TrustServerCertificate=no;"
　"Connection Timeout=30;"
)</code></pre>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f31f.png" alt="🌟" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 關鍵改版：我們把原本放「帳號」的地方換成 應用程式 ID（UID），把原本放「密碼」的地方換成 秘密金鑰（PWD）。</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f31f.png" alt="🌟" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 認證模式：這行 Authentication=<strong>ActiveDirectoryServicePrincipal </strong>是最關鍵的！它就像是跟資料庫打暗號，說：「嘿！我是用程式身分來敲門的，不是真人喔！」<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f916.png" alt="🤖" class="wp-smiley" style="height: 1em; max-height: 1em;" /></li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f31f.png" alt="🌟" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 安全提醒：連線字串裡的 Encrypt=yes 建議要留著，這樣資料在傳輸過程中才會被加密，就像是幫資料坐上防彈運鈔車一樣安全。<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e1.png" alt="🛡" class="wp-smiley" style="height: 1em; max-height: 1em;" /></li>
</ul>



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



<p>我的小小建議：</p>



<p>我覺得最高境界，就是根本不要持有秘密。</p>



<p>當我們用<strong>受控識別（<strong>Managed Identity</strong>）</strong>的時候，身為開發者的我們連密碼長什麼樣子都不知道。不用擔心密碼過期、不用定期更換，更不用怕不小心把密碼推到 GitHub 上面去。</p>



<p>這種把 安全性 融入到環境架構裡的作法，不只讓開發過程變得超清爽，心裡也會覺得非常踏實，這才是真正的優雅開發呀！<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2728.png" alt="✨" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>這種 不用記密碼 的生活，是不是聽起來就很吸引人呢？</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2026/05/azure-sql-entra-id-pwd/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure Ubuntu VM 安裝 MSSQL Client</title>
		<link>https://stackoverflow.max-everyday.com/2026/04/azure-ubuntu-vm-odbc/</link>
					<comments>https://stackoverflow.max-everyday.com/2026/04/azure-ubuntu-vm-odbc/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Wed, 29 Apr 2026 05:15:51 +0000</pubDate>
				<category><![CDATA[Azure 筆記]]></category>
		<category><![CDATA[azure]]></category>
		<category><![CDATA[mssql]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=8368</guid>

					<description><![CDATA[要在 Azure Ubuntu VM 上為 Py...]]></description>
										<content:encoded><![CDATA[
<p>要在 Azure Ubuntu VM 上為 Python 安裝 <strong>Microsoft ODBC Driver 18</strong>，你需要完成兩個主要部分：安裝系統層級的驅動程式，以及安裝 Python 介面庫（通常是 <code>pyodbc</code>）。</p>



<p>請注意，<strong>ODBC Driver 18</strong> 預設啟用了加密連線（<code>Encrypt=yes</code>），這與舊版本（v17）不同，連線時可能需要調整連線字串。</p>



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



<h3 class="wp-block-heading">第一步：安裝 Microsoft ODBC Driver 18</h3>



<p>請根據你的 Ubuntu 版本執行以下指令（適用於 20.04, 22.04, 24.04）：</p>



<p><strong>導入 Microsoft 公鑰與來源清單</strong></p>



<pre class="wp-block-code"><code># 取得 Ubuntu 版本號 (如 22.04)
UBUNTU_VERSION=$(lsb_release -rs)

# 下載 Microsoft GPG 金鑰
curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc

# 加入 Microsoft Ubuntu 套件庫
curl https://packages.microsoft.com/config/ubuntu/$UBUNTU_VERSION/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list</code></pre>



<p><strong>安裝驅動程式與開發標頭檔</strong></p>



<p>sudo apt-get update</p>



<h1 class="wp-block-heading">ACCEPT_EULA=Y 會自動同意授權合約</h1>



<pre class="wp-block-code"><code>sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 unixodbc-dev</code></pre>



<p><strong>（選填）安裝 SQL Server 命令列工具 (sqlcmd/bcp)</strong></p>



<pre class="wp-block-code"><code>sudo ACCEPT_EULA=Y apt-get install -y mssql-tools18<br>echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' &gt;&gt; ~/.bashrc<br>source ~/.bashrc</code></pre>



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



<h3 class="wp-block-heading">第二步：安裝 Python 套件</h3>



<p>在你的 Python 虛擬環境中安裝 <code>pyodbc</code>：</p>



<pre class="wp-block-preformatted">pip install pyodbc
</pre>



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



<h3 class="wp-block-heading">第三步：Python 程式碼範例與注意事項</h3>



<p>由於 ODBC 18 預設強制加密，如果你的 Azure SQL 伺服器證書不是由受信任的授權單位簽發的（或者你在本地測試），你可能需要在連線字串中加入 <code>TrustServerCertificate=yes</code>。</p>



<pre class="wp-block-code"><code>import pyodbc

# 請替換成你的 Azure SQL 資訊
server = 'your_server.database.windows.net'
database = 'your_db'
username = 'your_username'
password = 'your_password'

# 注意 Driver 名稱必須精確匹配：{ODBC Driver 18 for SQL Server}
conn_str = (
    f"DRIVER={{ODBC Driver 18 for SQL Server}};"
    f"SERVER={server};"
    f"DATABASE={database};"
    f"UID={username};"
    f"PWD={password};"
    "Encrypt=yes;"
    "TrustServerCertificate=no;" # 若連線失敗可改為 yes 測試，但在正式環境建議保持 no
    "Connection Timeout=30;"
)

try:
    conn = pyodbc.connect(conn_str)
    cursor = conn.cursor()
    cursor.execute("SELECT @@version;")
    row = cursor.fetchone()
    print(f"Connected! SQL Server Version: {row&#91;0]}")
except Exception as e:
    print(f"Error: {e}")
</code></pre>



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



<h3 class="wp-block-heading">常見問題排除</h3>



<ul class="wp-block-list">
<li><strong>找不到驅動程式</strong>：執行 <code>odbcinst -q -d</code>。你應該會看到 <code>[ODBC Driver 18 for SQL Server]</code>。如果沒有，請確認第一步安裝是否成功。</li>



<li><strong>SSL/TLS 錯誤</strong>：Azure SQL 要求 TLS 1.2 以上版本。Ubuntu 20.04+ 通常預設支援，但如果你在連線時遇到證書驗證錯誤，請檢查 Azure SQL 的防火牆設定，並確認 <code>TrustServerCertificate</code> 的設定。</li>



<li><strong>權限問題</strong>：在 Azure VM 上，確保網路安全性群組 (NSG) 已允許 <strong>1433</strong> 埠通訊，且 Azure SQL 的防火牆已將該 VM 的公用 IP 加入白名單。</li>
</ul>



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



<p>Error</p>



<pre class="wp-block-code"><code>W: OpenPGP signature verification failed: https://packages.microsoft.com/ubuntu/26.04/prod resolute InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY EE4D7792F748182B
E: The repository 'https://packages.microsoft.com/ubuntu/26.04/prod resolute InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.</code></pre>



<p>看來在 Ubuntu 24.04 (Noble) 上，系統沒能正確識別或找到你剛才匯入的 Microsoft GPG 金鑰。這通常是因為金鑰存放路徑與來源清單（<code>.list</code>）中定義的路徑不一致導致的。</p>



<p>從你的錯誤訊息看，<code>noble InRelease</code> 找不到金鑰 <code>EB3E94ADBE1229CF</code>。</p>



<h3 class="wp-block-heading">解決方案</h3>



<p>請按照以下步驟重新匯入金鑰並修正路徑：</p>



<h4 class="wp-block-heading">1. 下載並轉換金鑰格式</h4>



<p>Ubuntu 24.04 偏好使用 <code>.gpg</code> 格式存放在 <code>/usr/share/keyrings/</code>。</p>



<pre class="wp-block-code"><code># 下載並將金鑰轉換為 gpg 格式存放到指定位置
curl -sSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /usr/share/keyrings/microsoft-prod.gpg > /dev/null</code></pre>



<h4 class="wp-block-heading">2. 更新來源清單 (Source List)</h4>



<p>確保你的 <code>mssql-release.list</code> 指向的是正確的金鑰路徑（剛才建立的那個）：</p>



<pre class="wp-block-code"><code>echo "deb &#91;arch=amd64,arm64,armhf signed-by=/usr/share/keyrings/microsoft-prod.gpg] https://packages.microsoft.com/ubuntu/24.04/prod noble main" | sudo tee /etc/apt/sources.list.d/mssql-release.list
</code></pre>



<h4 class="wp-block-heading">3. 再次執行安裝</h4>



<p>現在更新索引，這一次應該不會報 GPG 錯誤了：</p>



<pre class="wp-block-code"><code>sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 unixodbc-dev
</code></pre>



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



<h3 class="wp-block-heading">為什麼會失敗？（小知識）</h3>



<ul class="wp-block-list">
<li><strong>NO_PUBKEY 錯誤</strong>：這表示 <code>apt</code> 下載了軟體清單，但因為沒有對應的「印章」（公鑰），它不敢相信這些檔案是 Microsoft 官方發布的，所以拒絕執行。</li>



<li><strong>Killed 訊息</strong>：我在你的 Log 看到一個 <code>Killed</code>。如果 <code>apt-get update</code> 過程中出現 Killed，通常是 <strong>RAM（記憶體）不足</strong>。如果你的 Azure VM 是 <code>B1s</code> 或 <code>B1ls</code> 等微型規格，建議先關閉一些佔用記憶體的程序，或暫時增加 Swap。</li>



<li><strong>Ubuntu 24.04 (Noble)</strong>：這是比較新的版本，Microsoft 的路徑配置有時會與舊版（使用 <code>/etc/apt/trusted.gpg.d/</code>）略有不同。</li>
</ul>



<h3 class="wp-block-heading">驗證安裝結果</h3>



<p>安裝完成後，你可以執行這個指令確認驅動程式已經就緒：</p>



<pre class="wp-block-code"><code>odbcinst -q -d -n "ODBC Driver 18 for SQL Server"
</code></pre>



<p>如果出現驅動程式的路徑資訊，就代表你成功了！接著就可以繼續用 <code>pip install pyodbc</code> 進行 Python 開發。</p>



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



<p>要在 Ubuntu 終端機直接測試連線，我們通常會使用 <code>sqlcmd</code> (隨 mssql-tools18 安裝) 或者使用 <code>isql</code> (unixODBC 自帶工具)。</p>



<p>由於你安裝的是 <strong>ODBC Driver 18</strong>，請特別注意連線字串中的<strong>加密選項</strong>。</p>



<h3 class="wp-block-heading">方法一：使用 <code>isql</code> 進行快速測試</h3>



<p><code>isql</code> 是 unixODBC 提供的工具，適合用來驗證驅動程式是否能正確與資料庫握手。</p>



<p>請在終端機輸入以下指令（將參數直接寫在連線字串中）：</p>



<pre class="wp-block-code"><code># -v 代表 verbose (詳細輸出)，可以幫你判斷錯誤原因
# 注意：ODBC 18 預設強制加密，若伺服器憑證未經第三方認證，需加上 TrustServerCertificate=yes
isql -v -k "DRIVER={ODBC Driver 18 for SQL Server};SERVER=1.2.3.4,1433;DATABASE=YOUR_DB;UID=userid;PWD=userpwd;Encrypt=yes;TrustServerCertificate=yes"
</code></pre>



<ul class="wp-block-list">
<li>如果成功，你會看到 <code>Connected!</code> 提示。</li>



<li>輸入 <code>quit</code> 即可結束連線。</li>
</ul>



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



<h3 class="wp-block-heading">方法二：使用 <code>sqlcmd</code> (Microsoft 官方工具)</h3>



<p>如果你之前有安裝 <code>mssql-tools18</code>，這是最推薦的測試方式：</p>



<pre class="wp-block-code"><code>sqlcmd -S 1.2.3.4,1433 -d YOUR_DB -U userid -P 'userpwd' -C
</code></pre>



<ul class="wp-block-list">
<li>參數 <code>-C</code> 代表 <code>TrustServerCertificate</code>（信任伺服器憑證）。</li>



<li>注意：如果密碼包含特殊字元，請用<strong>單引號 <code>' '</code></strong> 包起來。</li>
</ul>



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



<h3 class="wp-block-heading">疑難排解：連線失敗的常見原因</h3>



<ol start="1" class="wp-block-list">
<li><strong>Network Timeout (連線逾時)</strong>：
<ul class="wp-block-list">
<li><strong>檢查 Azure NSG</strong>：確保你的 Azure VM 出站規則 (Outbound) 允許 1433 埠。</li>



<li><strong>檢查目標伺服器</strong>：1.2.x.x  的 IP，請確認該伺服器防火牆是否有將你的 Azure VM <strong>公用 IP</strong> 加入白名單。</li>
</ul>
</li>



<li><strong>SSL Provider 錯誤 (憑證問題)</strong>：
<ul class="wp-block-list">
<li>這是 ODBC 18 最常見的問題。如果沒加 <code>TrustServerCertificate=yes</code> (或 <code>isql</code> 中的參數)，連線會因為無法驗證憑證而中斷。</li>
</ul>
</li>



<li><strong>Login Failed</strong>：
<ul class="wp-block-list">
<li>請確認資料庫名稱 YOUR_DB 與帳密無誤。</li>
</ul>
</li>
</ol>



<h3 class="wp-block-heading">Python 程式碼快速驗證</h3>



<p>如果你已經進入了虛擬環境並安裝了 <code>pyodbc</code>，可以用這段代碼直接測試：</p>



<p>Python</p>



<pre class="wp-block-code"><code>import pyodbc

conn_str = (
    "DRIVER={ODBC Driver 18 for SQL Server};"
    "SERVER=1.2.3.4,1433;"
    "DATABASE=YOUR_DB;"
    "UID=userid;"
    "PWD=userpwd;"
    "Encrypt=yes;"
    "TrustServerCertificate=yes;"
)

try:
    with pyodbc.connect(conn_str, timeout=5) as conn:
        print("連線成功！")
        cursor = conn.cursor()
        cursor.execute("SELECT TOP 1 name FROM sys.databases")
        print(f"資料庫清單測試: {cursor.fetchone()}")
except Exception as e:
    print(f"連線失敗原因: {e}")
</code></pre>



<p>你的連線測試結果出現什麼錯誤訊息嗎？</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2026/04/azure-ubuntu-vm-odbc/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure 混合式連線說明</title>
		<link>https://stackoverflow.max-everyday.com/2026/04/azure-hcm/</link>
					<comments>https://stackoverflow.max-everyday.com/2026/04/azure-hcm/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Wed, 22 Apr 2026 11:54:02 +0000</pubDate>
				<category><![CDATA[Azure 筆記]]></category>
		<category><![CDATA[azure]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=8335</guid>

					<description><![CDATA[Azure 的混合式連線（Hybrid Conn...]]></description>
										<content:encoded><![CDATA[
<p>Azure 的混合式連線（Hybrid Connections）是一項讓位於 Azure 的雲端服務（如 App Service 或 Azure Functions）可以安全地存取位於內部網路（On-premises）資源的技術。</p>



<p>這些內部資源通常是在公司防火牆後面的資料庫（例如 SQL Server、MySQL）或具備 TCP 連線能力的 HTTP 服務。</p>



<h3 class="wp-block-heading">運作原理</h3>



<p>混合式連線不要求你在防火牆上開啟任何對外的通訊埠（Inbound Port），也不需要建立複雜的 VPN 或 ExpressRoute。它的運作基礎是 Azure Relay。</p>



<p>當你安裝了混合式連線管理員（Hybrid Connection Manager, HCM）在內部網路的伺服器上後，HCM 會透過 443 埠（HTTPS/WebSockets）向 Azure 發起「對外」的連線。雲端的應用程式與內網的 HCM 之間會建立一條雙向的安全隧道，藉此傳輸資料。</p>



<h3 class="wp-block-heading">選取與建立的區別</h3>



<p>在 Azure 控制台看到的那兩段文字，分別代表不同的操作情境：</p>



<ul class="wp-block-list">
<li>新增選取的混合式連線：如果你之前已經在同一個服務匯流排（Service Bus）命名空間中建立過連線，你可以直接從清單中挑選現有的定義，並套用到目前的應用程式。這適合多個 App 需要存取同一個後端資源時使用。</li>



<li>建立新混合式連線：這表示要從頭開始定義一個新的存取路徑。你需要填寫後端資源的主機名稱（如 db-server-01）以及對應的通訊埠（如 1433）。建立完成後，系統會提供一段金鑰，讓你安裝在內網的 HCM 程式使用，完成配對連線。</li>
</ul>



<h3 class="wp-block-heading">優點</h3>



<p>跨平台：只要後端資源支援 TCP 協議（例如資料庫、網頁服務），基本上都能透過這種方式連通。<a href="https://gemini.google.com/app/d9feae7ac1264e42?hl=zh-TW"></a></p>



<p>安全性高：不需要開啟防火牆進入點，大幅降低被攻擊的風險。</p>



<p>設定簡單：不需要變更網路架構或申請靜態 IP。</p>



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



<p>針對混合式連線管理員（HCM）與服務匯流排（Service Bus）命名空間，若結合 Microsoft 雲端導入框架（Cloud Adoption Framework, CAF）的規範與實務建議，可以從架構、命名、以及資源管理三個層面來理解。</p>



<h3 class="wp-block-heading">資源與命名空間的關係</h3>



<p>混合式連線本質上是建立在 <strong>Azure Relay</strong> 服務之上的功能。在設定時，系統會要求你選擇或建立一個服務匯流排（Service Bus）命名空間來存放這些連線實體。</p>



<ul class="wp-block-list">
<li><strong>隸屬關係</strong>：每一個混合式連線（Hybrid Connection）都必須隸屬於一個 Service Bus 命名空間。</li>



<li><strong>延遲考量</strong>：CAF 建議將 Service Bus 命名空間部署在與你的 App Service（雲端應用程式）<strong>相同的 Azure 區域</strong>，以減少網路傳遞的延遲。</li>
</ul>



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



<h3 class="wp-block-heading">CAF 命名建議與規範</h3>



<p>根據 CAF 的資源命名慣例，命名應具備可讀性與組織性，建議格式如下：</p>



<p><code>sb-&lt;應用程式名稱&gt;-&lt;環境&gt;-&lt;地區&gt;-&lt;編號&gt;</code></p>



<ul class="wp-block-list">
<li><strong>sb (Service Bus Prefix)</strong>：資源類型的簡寫，Service Bus 命名空間通常使用 <code>sb</code>。</li>



<li><strong>環境</strong>：例如 <code>prod</code> (正式)、<code>dev</code> (開發) 或 <code>test</code> (測試)。</li>



<li><strong>地區</strong>：例如 <code>tw</code> (台灣) 或 <code>hk</code> (香港)。</li>
</ul>



<p><strong>範例：</strong> <code>sb-hrsystem-prod-tw-01</code></p>



<p>這讓 MIS 或維運人員一看就知道這是用於 HR 系統、正式環境、位於台灣機房的服務匯流排。</p>



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



<h3 class="wp-block-heading">混合式連線管理員 (HCM) 的部署建議</h3>



<p>HCM 是安裝在內部網路伺服器上的代理程式（Agent），它是連線成功的關鍵。</p>



<ul class="wp-block-list">
<li><strong>高可用性 (High Availability)</strong>：CAF 建議在生產環境中，針對同一個混合式連線，應在不同的伺服器上安裝<strong>至少兩個 HCM 執行個體</strong>。Azure 會自動在這些活動狀態的執行個體之間進行負載平衡與故障轉移。</li>



<li><strong>安全性 (Security)</strong>：
<ul class="wp-block-list">
<li>HCM 伺服器只需要<strong>對外</strong>存取 Azure 的 443 埠（HTTPS/WebSockets）。</li>



<li>不需要開啟任何入站（Inbound）防火牆規則。</li>



<li>CAF 強烈建議啟用<strong>用戶端授權</strong>，並使用共用存取簽章（SAS）金鑰來管理連線權限。</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">實務建議整理表</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>項目</strong></td><td><strong>CAF / 最佳實務建議</strong></td></tr></thead><tbody><tr><td><strong>網路延遲</strong></td><td>命名空間應與 App Service 放在同一個 Azure Region。</td></tr><tr><td><strong>定價層級</strong></td><td>建議至少使用 <strong>Standard (標準)</strong> 層級以獲得更好的 SLA 保證與管理功能。</td></tr><tr><td><strong>監控</strong></td><td>應將命名空間的診斷日誌（Diagnostic Logs）發送至 Log Analytics 以監控連線狀態。</td></tr><tr><td><strong>管理</strong></td><td>避免將過多不相關系統的混合式連線放在同一個命名空間，應以「工作負載（Workload）」為單位進行隔離。</td></tr></tbody></table></figure>



<p>在 Azure 控制台中操作時，選擇「建立新混合式連線」通常會自動引導你完成命名空間的建立或選擇，此時套用上述命名慣例，會對未來的維護有很大幫助。</p>



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



<p>針對混合式連線管理員（HCM）與相關資源的命名，遵循 Microsoft 雲端導入框架（CAF）可以確保架構在擴充時保持清晰。以下是具體的命名建議與實務做法。</p>



<h3 class="wp-block-heading">資源命名建議</h3>



<p>在 Azure 中，混合式連線（Hybrid Connection）並非獨立存在的實體，它依賴於服務匯流排（Service Bus）命名空間以及轉送（Relay）實體。</p>



<ol start="1" class="wp-block-list">
<li>服務匯流排命名空間（Service Bus Namespace）建議格式：sb-&lt;系統/專案名稱>-&lt;環境>-&lt;區域>範例：sb-hr-prod-tw用途：這是承載所有連線的容器，應以「用途」而非單一伺服器命名。</li>



<li>混合式連線實體（Hybrid Connection Entity）建議格式：hc-&lt;目標伺服器/服務>-&lt;通訊埠>範例：hc-sqlserver01-1433 或 hc-api-endpoint-8080用途：直接反映這個連線要通往內網的哪台主機與哪個服務。</li>



<li>混合式連線管理員（HCM）安裝主機建議格式：hcm-vm-&lt;流水號>範例：hcm-vm-01, hcm-vm-02用途：安裝在內網的實體機或虛擬機。建議在主機名稱加上 hcm 前綴，方便網路管理員識別這台機器的流量性質。</li>
</ol>



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



<h3 class="wp-block-heading">CAF 命名組成要素</h3>



<p>CAF 建議的命名應包含以下標籤資訊，透過連字號（-）組合：</p>



<p>資源類型縮寫（Resource type）：例如 sb (Service Bus), hc (Hybrid Connection)。</p>



<p>應用程式名稱（App name）：代表這個連線服務的系統。</p>



<p>環境（Environment）：例如 dev, test, prod。</p>



<p>區域（Region）：縮寫如 tw (Taiwan), hk (Hong Kong)。</p>



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



<h3 class="wp-block-heading">部署與架構建議</h3>



<p>為了符合企業級的穩定性，除了命名外，CAF 還有幾點關鍵建議：</p>



<ol start="1" class="wp-block-list">
<li>分組管理（Grouping）不要將所有不相關的連線塞進同一個服務匯流排。建議依據工作負載（Workload）來區分。例如：薪資系統使用一個 sb，差勤系統使用另一個 sb。這樣在金鑰管理與權限控管上會更安全。</li>



<li>高可用性（High Availability）在內網環境中，針對同一個混合式連線，應至少在兩台不同的主機上安裝 HCM。Azure 會自動在這些主機之間切換流量。這時命名可採用 hcm-host-a 與 hcm-host-b 來區分冗餘成員。</li>



<li>規格層級在正式生產環境中，Service Bus 建議至少選擇標準版（Standard），以支援足夠的連線數與混合式連線功能。</li>
</ol>



<p>透過這種標準化的命名方式，當系統搬遷或擴充規模時，MIS 人員能迅速識別資源歸屬，減少誤刪或配置錯誤的風險。</p>



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



<p>要讓位於 Azure 雲端的應用程式連回地端資源，混合式連線管理員（HCM）扮演的是一個主動外連的轉運站角色。它的運作邏輯並非由雲端直接「戳」進你的防火牆，而是從內部主動向外建立通道。</p>



<p>安裝與連通的具體流程如下：</p>



<h3 class="wp-block-heading">安裝與配對</h3>



<p>首先，你需要在地端內網找一台伺服器（Windows Server 2012 以上版本）安裝 HCM 程式。</p>



<ul class="wp-block-list">
<li>在 Azure 入口網站點擊建立新混合式連線後，會得到一串連線字串（Gateway Connection String）。</li>



<li>將此字串貼入地端的 HCM 程式中。</li>



<li>此時 HCM 會透過 TCP 443 埠向 Azure Relay 服務發起連線。</li>
</ul>



<h3 class="wp-block-heading">建立通訊隧道</h3>



<p>一旦 HCM 與 Azure 握手成功，連線狀態會顯示為已連線（Connected）。</p>



<ul class="wp-block-list">
<li><strong>外連請求</strong>：雲端的 App Service 發出存取請求（例如指向 <code>db-server:1433</code>）。</li>



<li><strong>代理轉送</strong>：Azure Relay 收到請求後，會透過剛才 HCM 建立的長連線通道，將封包傳送給地端的 HCM。</li>



<li><strong>本地派送</strong>：地端的 HCM 接收到封包，再以地端伺服器的身份，將請求發送給內網中真正的目標（如 SQL Server）。</li>
</ul>



<h3 class="wp-block-heading">關鍵技術特性</h3>



<p>這種方式之所以適合企業環境，主要有三個原因：</p>



<ul class="wp-block-list">
<li><strong>免開入站埠</strong>：防火牆不需要開啟任何 Incoming Port，這對資安部門來說非常重要。只要內網主機可以連上網（443 埠），連線就能建立。</li>



<li><strong>無需 VPN</strong>：它不需要建立點對點 VPN 或昂貴的專線，設定過程只需幾分鐘。</li>



<li><strong>解析機制</strong>：App Service 會使用 HCM 所在的內網 DNS 環境。只要在 Azure 上設定的主機名稱地端能認得，連線就能成功。</li>
</ul>



<h3 class="wp-block-heading">實際操作建議</h3>



<p>如果你的環境需要穩定運作，請注意以下幾點：</p>



<ul class="wp-block-list">
<li><strong>多主機部署</strong>：在兩台不同的地端伺服器安裝同一個連線的 HCM，這樣當其中一台重啟或更新時，服務不會中斷。</li>



<li><strong>網路出口</strong>：確保地端 HCM 所在的主機沒有嚴格限制對外連線，否則無法連接到 Azure 的服務匯流排。</li>



<li><strong>資源隔離</strong>：一個連線只對應一個特定主機與通訊埠（例如 <code>192.168.1.50:1433</code>），這符合最小權限原則，不會讓整個內網暴露在雲端。</li>
</ul>



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



<p>資源隔離：一個連線只對應一個特定主機與通訊埠, 地端的API 只能被一台雲端的web app access ?</p>



<p>並非如此。資源隔離的定義是指每個混合式連線（Hybrid Connection）的「終點」是固定的，但「起點」可以非常靈活。</p>



<h3 class="wp-block-heading">多對一的存取關係</h3>



<p>一個地端資源（例如一台 API Server）可以同時被多個雲端應用程式存取。</p>



<p>在 Azure 的設定中，混合式連線是一個獨立的資源實體。只要你將該連線實體關聯到不同的 Web App，這些 App 都能透過同一個 HCM 通道連回地端的同一個 API。這在微服務架構中非常常見，例如你的前端 Web App、後端 API App 以及排程用的 Azure Functions，都可以共用同一個連往地端資料庫的混合式連線。</p>



<h3 class="wp-block-heading">資源隔離的真正含義</h3>



<p>所謂的資源隔離（Resource Isolation），重點在於安全控管與範圍限制：</p>



<ul class="wp-block-list">
<li><strong>精確的目標定義</strong>：一個混合式連線必須明確指定目標主機名稱（或 IP）與通訊埠（Port）。例如，你建立了一個連往 <code>api-server:8080</code> 的連線，雲端 App 就只能存取這個主機的 8080 埠，無法存取該機器的 1433 埠或其他內網主機。</li>



<li><strong>按需分配</strong>：你可以決定哪些 Web App 有權掛載這個連線。如果 Web App A 有掛載，它就能連通；如果 Web App B 沒有掛載，它完全無法偵測到地端資源的存在。</li>
</ul>



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



<h3 class="wp-block-heading">實務建議</h3>



<p>如果你有多個雲端 App 需要存取地端 API，建議做法如下：</p>



<ul class="wp-block-list">
<li><strong>建立單一連線實體</strong>：在 Service Bus 命名空間下建立一個名為 <code>hc-internal-api-8080</code> 的連線。</li>



<li><strong>多點掛載</strong>：分別進入各個 Web App 的「網路」設定頁面，選擇「新增選取的混合式連線」，並指名同一個 <code>hc-internal-api-8080</code>。</li>



<li><strong>流量監控</strong>：雖然多個 App 共用連線，但你仍可以在 Service Bus 的監控圖表中看到整體的連線數與資料傳輸量。</li>
</ul>



<p>總結來說，地端 API 並非只能被一台雲端 App 存取，而是能被「你授權過的」所有雲端資源存取。這種設計讓你在維護地端 HCM 代理程式時更方便，不需要為每個雲端 App 都重複安裝一套地端代理。</p>



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



<p>地端的 outbound 要怎麼開?</p>



<p>要讓地端的混合式連線管理員（HCM）成功連回 Azure，地端防火牆不需要開啟任何「入站（Inbound）」規則，但必須確保「出站（Outbound）」通訊順暢。</p>



<p>HCM 是透過 HTTPS（TCP 443 埠）連向雲端的，且必須能與特定類型的 Azure 資源溝通。</p>



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



<h3 class="wp-block-heading">出站防火牆設定規則</h3>



<p>建議 MIS 人員在地端防火牆或代理伺服器（Proxy）上，針對 HCM 所在的主機設定以下規則：</p>



<ul class="wp-block-list">
<li><strong>連接埠（Port）</strong>：必須開啟 <strong>TCP 443</strong>。</li>



<li><strong>傳輸通訊協定</strong>：HTTPS 與 WebSockets（混合式連線依賴 WebSocket 進行雙向傳輸）。</li>
</ul>



<h4 class="wp-block-heading">建議開通的網域名稱（FQDN）</h4>



<p>由於 Azure 的 IP 位址會變動，CAF 建議優先使用 FQDN（網域名稱）進行過濾：</p>



<ol start="1" class="wp-block-list">
<li><strong>*.servicebus.windows.net</strong>這是最重要的核心。混合式連線底層跑的是 Azure Relay，而 Relay 服務掛在 Service Bus 之下。</li>



<li><strong>*.table.core.windows.net</strong>HCM 需要存取 Azure 儲存體資料表來確認連線狀態與配置。</li>



<li><strong>https://www.google.com/search?q=login.microsoftonline.com</strong>用於身份驗證與取得存取權杖（Access Token）。</li>
</ol>



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



<h3 class="wp-block-heading">如果資安要求必須使用固定 IP</h3>



<p>如果貴單位的防火牆嚴格限制不能使用萬用字元（Wildcard）網域，則必須下載 <strong>Azure IP Ranges and Service Tags</strong> 列表。</p>



<ul class="wp-block-list">
<li><strong>Service Tag</strong>：請搜尋 <strong>AzureRelay</strong> 與 <strong>ServiceBus</strong> 兩個標籤。</li>



<li><strong>注意事項</strong>：Azure 每個區域的 IP 範圍很大且會定期更新。如果使用 IP 過濾，MIS 必須定期更新防火牆白名單，維運成本較高。</li>
</ul>



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



<h3 class="wp-block-heading">如何測試連線是否成功</h3>



<p>在地端 HCM 主機上，你可以使用 PowerShell 快速測試網路路徑是否通暢：</p>



<p>PowerShell</p>



<pre class="wp-block-code"><code># 測試連往 Service Bus 命名空間的 443 埠
Test-NetConnection -ComputerName &#91;您的命名空間名稱].servicebus.windows.net -Port 443
</code></pre>



<p>如果 <code>TcpTestSucceeded</code> 顯示為 <code>True</code>，表示地端的 outbound 已經成功開通。</p>



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



<h3 class="wp-block-heading">特別提示：關於 Proxy（代理伺服器）</h3>



<p>如果地端環境必須經過 Proxy 才能上網，安裝完 HCM 後，你需要手動修改 HCM 的設定檔（通常是 <code>Microsoft.HybridConnectionManager.Core.dll.config</code>），在 <code>&lt;system.net&gt;</code> 標籤中加入 <code>proxy</code> 設定，它才能正常穿透代理服務。</p>



<p><a href="https://gemini.google.com/app/62f0e7d52af22601?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/a82ab211b3158723?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/b11be2764b1256dd?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/cb5bdf804d01ffdb?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/1c0c9d5953e9dd33?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/16cd80ebc1877e59?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/9d114a48e4b85e73?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/536e39fe898377d6?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/31355a6b4c23a721?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/777f1d68934b04b7?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/0c0876a1db3cdc3d?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/c8e995e39d4a210d?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/2d14c8f229896407?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/3f06330ebeed0449?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/319c24a031f18fe7?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/e0d96ae176cb3243?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/72e65e5dc71d240c?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/1ccba83e952ddf8e?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/61d45d5cf23420fe?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/5a89fdd6c9e238a7?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/4ce514854f09042f?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/5d5c95ce54d507d2?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/f010c3f3aa2a0435?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/a192617677276822?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/c4f06078afd16192?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/8a1e4f6523dd9a21?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/daef535f552bc467?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/f5865a3a4237c23a?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/ac840ab78271a1d1?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/4652c6bbff682f83?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/7f27a2c82730bf1e?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/2c932698548eeb82?hl=zh-TW"></a></p>



<p><a href="https://gemini.google.com/app/5f6b1746a19e4f33?hl=zh-TW"></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2026/04/azure-hcm/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure Front Door (AFD) 與 WAF 比較</title>
		<link>https://stackoverflow.max-everyday.com/2026/04/azure-front-door-afd-app-gateway/</link>
					<comments>https://stackoverflow.max-everyday.com/2026/04/azure-front-door-afd-app-gateway/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Wed, 22 Apr 2026 10:43:48 +0000</pubDate>
				<category><![CDATA[Azure 筆記]]></category>
		<category><![CDATA[azure]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=8333</guid>

					<description><![CDATA[簡單來說，Azure Front Door (A...]]></description>
										<content:encoded><![CDATA[
<p>簡單來說，<strong>Azure Front Door (AFD) 本身不是 WAF，但它「包含」並「整合」了 WAF 功能。</strong></p>



<p>你可以把它想像成一個**「全球性的交通樞紐」<strong>，而 WAF 是這個樞紐上的</strong>「安檢門」**。</p>



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



<h2 class="wp-block-heading">1. 它們的關係是什麼？</h2>



<ul class="wp-block-list">
<li><strong>Azure Front Door (AFD):</strong> 是一個全球性的 <strong>內容傳遞網路 (CDN)</strong> 和 <strong>第 7 層負載平衡器</strong>。它的主要工作是讓你的網站跑得更快（加速）、更穩（高可用性）。</li>



<li><strong>Azure WAF:</strong> 是一個<strong>安全插件/策略</strong>，可以掛載在 Azure Front Door 上。它的主要工作是過濾惡意攻擊（如 SQL 注入、XSS 跨站腳本攻擊）。</li>
</ul>



<h2 class="wp-block-heading">2. 為什麼大家常把它們放在一起講？</h2>



<p>因為當你使用 Azure Front Door 時，通常會<strong>啟用</strong>它的 WAF 功能。這有幾個好處：</p>



<ul class="wp-block-list">
<li><strong>邊緣防護 (Edge Security):</strong> 攻擊在還沒進入你的伺服器（甚至還沒進入 Azure 區域中心）之前，就在全球各地的邊緣節點被攔截了。</li>



<li><strong>集中管理:</strong> 你只需要設定一份 WAF 規則，就能保護全球各地的後端服務。</li>
</ul>



<h2 class="wp-block-heading">3. Azure Front Door 的兩個版本與 WAF 的差異</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>功能</strong></td><td><strong>Standard (標準版)</strong></td><td><strong>Premium (高級版)</strong></td></tr></thead><tbody><tr><td><strong>WAF 支援</strong></td><td>支援自定義規則</td><td><strong>完整支援</strong> (含受管規則集)</td></tr><tr><td><strong>安全防護</strong></td><td>僅基本的自定義 WAF</td><td><strong>進階 Bot 防護</strong>、受管規則集 (DRS)</td></tr><tr><td><strong>適用場景</strong></td><td>一般加速與基礎防護</td><td>對安全性要求極高、怕爬蟲攻擊的企業</td></tr></tbody></table></figure>



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



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 總結</h3>



<p>如果你需要的是 <strong>WAF（Web 應用程式防火牆）</strong>，在 Azure 中你有兩個主要選擇：</p>



<ol start="1" class="wp-block-list">
<li><strong>Azure Front Door + WAF:</strong> 適用於<strong>全球性/對外</strong>的網站，在邊緣端就攔截攻擊。</li>



<li><strong>Application Gateway + WAF:</strong> 適用於<strong>區域性/虛擬網路內</strong>的架構。</li>
</ol>



<p><strong>你的需求是要幫全球分佈的網站做防護嗎？</strong> 如果是的話，Azure Front Door 的 WAF 功能會是非常強大的選擇。</p>



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



<p>在選擇 Azure 防禦方案時，價格結構主要分為「固定月費」與「變動流量費」。以下為 <strong>Azure Front Door (AFD)</strong> 兩個版本與 <strong>Application Gateway (AppGW)</strong> 的價格與定位比較：</p>



<h3 class="wp-block-heading">1. 價格比較表 (預估)</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>費用維度</strong></td><td><strong>AFD Standard (標準版)</strong></td><td><strong>AFD Premium (高級版)</strong></td><td><strong>AppGW + WAF (v2)</strong></td></tr></thead><tbody><tr><td><strong>基本固定月費</strong></td><td>約 <strong>$35</strong> USD/月</td><td>約 <strong>$330</strong> USD/月</td><td>約 <strong>$323</strong> USD/月 ($0.443/hr)</td></tr><tr><td><strong>WAF 策略費</strong></td><td>需額外支付策略/規則費</td><td><strong>已包含</strong> 在月費內</td><td>需額外支付策略/規則費</td></tr><tr><td><strong>流量費用</strong></td><td>按 GB 與請求數計費</td><td>按 GB 與請求數計費</td><td>按 <strong>CU (容量單位)</strong> 計費</td></tr><tr><td><strong>主要 WAF 功能</strong></td><td>僅支援「自定義規則」</td><td>支援「微軟受管規則集」</td><td>支援「微軟受管規則集」</td></tr><tr><td><strong>Bot 防護</strong></td><td>基礎 (Basic)</td><td>進階 (Advanced)</td><td>基礎 (Basic)</td></tr><tr><td><strong>Private Link</strong></td><td>不支援</td><td><strong>支援</strong> (可私連後端)</td><td>不支援 (它是區域性服務)</td></tr></tbody></table></figure>



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



<h3 class="wp-block-heading">2. 重點解析：該選哪一個？</h3>



<h4 class="wp-block-heading"><strong>Azure Front Door Standard (標準版)</strong></h4>



<ul class="wp-block-list">
<li><strong>適合誰：</strong> 預算有限、主要需要 <strong>CDN 加速</strong>，且只需要簡單的安全規則（如封鎖特定 IP 或地理位置）。</li>



<li><strong>注意：</strong> 如果你需要微軟自動更新的 SQLi/XSS 規則，這個版本「不支援」受管規則集，防禦力較弱。</li>
</ul>



<h4 class="wp-block-heading"><strong>Azure Front Door Premium (高級版)</strong></h4>



<ul class="wp-block-list">
<li><strong>適合誰：</strong> 大型企業、跨國網站、對安全性有高度要求的服務。</li>



<li><strong>關鍵價值：</strong> 它包含了 <strong>WAF 受管規則集</strong>（不需要自己寫防禦代碼）和 <strong>Private Link</strong>。如果你不希望你的後端伺服器暴露在公網上，Premium 是唯一能透過私有網路連接後端的方案。</li>



<li><strong>省錢點：</strong> 雖然月費高，但它免除了 WAF 的政策費與規則費。</li>
</ul>



<h4 class="wp-block-heading"><strong>Application Gateway + WAF v2 (區域型)</strong></h4>



<ul class="wp-block-list">
<li><strong>適合誰：</strong> 服務集中在 <strong>單一區域</strong> (例如只在台灣或香港)，不需要全球加速，且後端架構多為 VM 或 AKS (Kubernetes)。</li>



<li><strong>關鍵差異：</strong> 它是一個區域性服務。如果你有 3 個區域的後端，你就需要買 3 組 AppGW，成本會迅速超過 Front Door。</li>



<li><strong>價格陷阱：</strong> 除了固定費用，它的 <strong>CU (Capacity Unit)</strong> 計費方式較複雜，高併發流量下成本可能波動較大。</li>
</ul>



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



<h3 class="wp-block-heading">3. 決策建議</h3>



<ul class="wp-block-list">
<li><strong>如果你要保護「全球」流量：</strong> 直接看 <strong>Front Door</strong>。如果只是小型個人網站選 Standard，如果是商業營運、怕被黑、怕爬蟲，請直上 <strong>Premium</strong>。</li>



<li><strong>如果你要保護「單一區域」內的 VNet 資源：</strong> 選擇 <strong>Application Gateway + WAF</strong>。它能更深層地整合你的虛擬網路空間。</li>



<li><strong>如果你極度重視安全（尤其是 Bot 攻擊）：</strong> <strong>Front Door Premium</strong> 的 Bot 防護是三者中最強的（基於微軟威脅情報中心數據）。</li>
</ul>



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



<p><strong>你是打算保護已經上線的既有網站，還是正在規劃新的跨區域架構？</strong></p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2026/04/azure-front-door-afd-app-gateway/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure SMTP 寄信服務選項</title>
		<link>https://stackoverflow.max-everyday.com/2026/04/azure-smtp-mail/</link>
					<comments>https://stackoverflow.max-everyday.com/2026/04/azure-smtp-mail/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Wed, 22 Apr 2026 05:07:24 +0000</pubDate>
				<category><![CDATA[Azure 筆記]]></category>
		<category><![CDATA[azure]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=8331</guid>

					<description><![CDATA[Azure 本身並不提供傳統意義上的「開放式 S...]]></description>
										<content:encoded><![CDATA[
<p>Azure 本身並不提供傳統意義上的「開放式 SMTP 伺服器」，但有三種主要方式可以達成 SMTP 寄信需求：</p>



<h3 class="wp-block-heading">Azure Communication Services (ACS)</h3>



<p>這是目前 Azure 原生的推薦方案。它提供 Email 服務，且支援 <strong>SMTP Relay</strong> 功能。</p>



<ul class="wp-block-list">
<li><strong>特點</strong>：按量計費，整合在 Azure 資源管理內，安全性高。</li>



<li><strong>認證方式</strong>：支援透過 Entra ID (原 Azure AD) 的應用程式註冊與 Service Principal 進行認證。</li>



<li><strong>連線資訊</strong>：伺服器通常為 <code>smtp.azurecomm.net</code>，使用連接埠 587。</li>
</ul>



<h3 class="wp-block-heading">Twilio SendGrid</h3>



<p>長期以來 Azure 官方合作的第三方服務，在 Azure 市集中可以直接購買與整合。</p>



<ul class="wp-block-list">
<li><strong>特點</strong>：功能最成熟，有豐富的報表、開信追蹤與行銷工具。</li>



<li><strong>適用場景</strong>：除了簡單的系統通知，還需要處理電子報或進階郵件管理時的首選。</li>



<li><strong>連線資訊</strong>：伺服器為 <code>smtp.sendgrid.net</code>，使用 API Key 作為認證密碼。</li>
</ul>



<h3 class="wp-block-heading">Microsoft 365 (Exchange Online)</h3>



<p>如果你公司本身有在使用 Microsoft 365，也可以透過 Exchange Online 寄信。</p>



<ul class="wp-block-list">
<li><strong>注意事項</strong>：微軟正在全面停用 SMTP 的「基本驗證」（Basic Auth），到 2026 年底後，傳統的帳號密碼登入將失效，必須改用 <strong>OAuth 2.0</strong>。</li>



<li><strong>限制</strong>：有每日寄信限額，且不適合發送大量行銷郵件，較適合內部系統或小量自動化腳本。</li>
</ul>



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



<h3 class="wp-block-heading">關鍵技術限制與建議</h3>



<ol start="1" class="wp-block-list">
<li><strong>封鎖 Port 25</strong>：Azure 所有的虛擬主機 (VM) 預設都會封鎖對外的 Port 25，以防垃圾郵件。請務必改用 <strong>Port 587 (TLS)</strong>。</li>



<li><strong>固定 IP 信用度</strong>：不建議在 VM 內自建 SMTP 伺服器直接對外寄信，因為雲端 IP 很容易被列入黑名單，寄達率極低。</li>



<li><strong>首選建議</strong>：如果你追求純 Azure 環境與簡單的系統通知，優先考慮 <strong>Azure Communication Services</strong>；如果需要強大的退信分析與行銷功能，選擇 <strong>SendGrid</strong>。</li>
</ol>



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



<p>要在 Exchange Online 使用 SMTP 寄信，由於微軟已經全面停用基本驗證，目前的標準做法是透過 Azure 註冊應用程式並使用 OAuth 2.0。以下是開發者最常用的用戶端憑證流程步驟：</p>



<h3 class="wp-block-heading">1. 在 Microsoft Entra ID 註冊應用程式</h3>



<p>首先要在 Azure 入口網站建立一個身份，讓系統允許你的程式存取 Exchange Online。</p>



<ul class="wp-block-list">
<li>進入 Azure Portal，搜尋並進入 <strong>Microsoft Entra ID</strong>。</li>



<li>點選 <strong>應用程式註冊</strong>，新增一個註冊。</li>



<li>記下 <strong>應用程式 (用戶端) 識別碼</strong> 以及 <strong>目錄 (租戶) 識別碼</strong>，稍後程式碼會用到。</li>



<li>在 <strong>憑證與密碼</strong> 中，新增一個 <strong>用戶端密碼</strong>，產生的數值請立即複製儲存，離開頁面後就看不到了。</li>
</ul>



<h3 class="wp-block-heading">2. 設定 API 權限</h3>



<p>賦予這個應用程式寄信的權利。</p>



<ul class="wp-block-list">
<li>在應用程式註冊頁面點選 <strong>API 權限</strong>。</li>



<li>點選 <strong>新增權限</strong>，選擇 <strong>Microsoft Graph</strong>。</li>



<li>選擇 <strong>應用程式權限</strong> (不是委派權限)。</li>



<li>搜尋並勾選 <code>Mail.Send</code>。</li>



<li>儲存後，務必點選 <strong>代表 [你的組織名稱] 授與管理員同意</strong>，狀態變為綠色勾勾才算生效。</li>
</ul>



<h3 class="wp-block-heading">3. 配置 Exchange Online 服務主體</h3>



<p>這是一個純指令步驟，目的是在 Exchange 系統內建立一個對應的服務主體，並賦予它寄件者權限。你需要安裝 PowerShell 的 ExchangeOnlineManagement 模組。</p>



<ul class="wp-block-list">
<li>連線到 Exchange Online：<code>Connect-ExchangeOnline</code>。</li>



<li>執行以下指令建立連結：</li>
</ul>



<p>PowerShell</p>



<pre class="wp-block-code"><code>New-ServicePrincipal -AppId &lt;你的應用程式ID&gt; -ServiceId &lt;你的應用程式物件ID&gt;
</code></pre>



<ul class="wp-block-list">
<li>賦予特定信箱的寄信權限：</li>
</ul>



<p>PowerShell</p>



<pre class="wp-block-code"><code>Add-MailboxPermission -Identity "sender@yourdomain.com" -User &lt;你的應用程式ID&gt; -AccessRights FullAccess
</code></pre>



<h3 class="wp-block-heading">4. 撰寫程式碼獲取 Token 並寄信</h3>



<p>不能再像以前只輸入帳號密碼，程式邏輯需要改為：</p>



<ol start="1" class="wp-block-list">
<li>向 Microsoft Entra ID 請求 Token。</li>



<li>將 Token 放入 SMTP 連線的認證標頭中。</li>
</ol>



<p>如果使用 Python，可以使用 <code>msal</code> 函式庫來處理認證。</p>



<p>Python</p>



<pre class="wp-block-code"><code>import msal

app = msal.ConfidentialClientApplication(
    client_id, authority=f"https://login.microsoftonline.com/{tenant_id}",
    client_credential=client_secret
)
result = app.acquire_token_for_client(scopes=&#91;"https://graph.microsoft.com/.default"])
access_token = result&#91;'access_token']
</code></pre>



<h3 class="wp-block-heading">5. SMTP 連線設定</h3>



<p>連線資訊維持不變，但認證方式必須支援 XOAUTH2。</p>



<ul class="wp-block-list">
<li><strong>SMTP 伺服器</strong>：<code>smtp.office365.com</code></li>



<li><strong>連接埠</strong>：587</li>



<li><strong>加密方式</strong>：STARTTLS</li>



<li><strong>使用者名稱</strong>：你的完整 Email 地址</li>



<li><strong>密碼</strong>：剛才取得的 <code>access_token</code> 長字串</li>
</ul>



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



<h3 class="wp-block-heading">常見問題提醒</h3>



<ul class="wp-block-list">
<li><strong>安全性限制</strong>：如果你的租戶啟用了「安全性預設值」(Security Defaults)，可能會強制要求 MFA，這會導致傳統 SMTP 連線失敗。使用 OAuth 2.0 應用程式權限可以繞過此限制。</li>



<li><strong>寄件人一致性</strong>：你在程式碼中 <code>From</code> 欄位填寫的地址，必須與步驟 3 授權的信箱一致，否則會被 Exchange 拒絕寄送。</li>



<li><strong>權限生效時間</strong>：在 Azure 修改權限後，有時需要等待 5 到 15 分鐘才會完全同步到 Exchange 伺服器。</li>
</ul>



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



<p>在 Azure VNet 內部的後端服務向 Entra ID 請求 Token 是<strong>標準做法</strong>，但為了符合企業級的安全與效能規範，建議不要直接走公網連線，而是透過以下兩種技術進行優化：</p>



<h3 class="wp-block-heading">1. 使用受控識別 (Managed Identities)</h3>



<p>這是最推薦的方案。如果你是將後端服務部署在 Azure VM、App Service 或 Azure Container Apps 上，不應該在程式碼中寫死 Client ID 或 Secret。</p>



<ul class="wp-block-list">
<li><strong>安全性</strong>：你不需要管理憑證或金鑰，Azure 會自動處理身份認證。</li>



<li><strong>運作機制</strong>：程式碼向本地端的一個特定 Endpoint 請求 Token，Azure 基礎設施會負責與 Entra ID 對接並回傳 Token。</li>



<li><strong>網路路徑</strong>：這類請求通常走 Azure 內部的管理平面，不會暴露在公網。</li>
</ul>



<h3 class="wp-block-heading">2. 使用受控識別 (Managed Identity) 結合 Private Link</h3>



<p>如果你的 VNet 有嚴格的資安限制（封鎖所有對外 443 流量），連 Entra ID 的公用端點都不想連，可以考慮使用 <strong>Microsoft Entra Private Link</strong>。</p>



<ul class="wp-block-list">
<li><strong>原理</strong>：在 VNet 內部建立一個 Private Endpoint，讓請求 Entra ID 的流量完全限制在私有網路內。</li>



<li><strong>缺點</strong>：設定較為複雜，且這項功能目前主要針對特定資源存取，對於純粹的 Token 請求，通常只要確保 VNet 允許 HTTPS (443) 傳出至 <code>login.microsoftonline.com</code> 即可。</li>
</ul>



<h3 class="wp-block-heading">為什麼這對後端服務是安全的</h3>



<ul class="wp-block-list">
<li><strong>Service-to-Service 認證</strong>：Entra ID 產生的 Token 是基於應用程式身份（App Role），而不是特定使用者。這非常適合後端無人值守（Headless）的環境。</li>



<li><strong>範圍縮小 (Scoped)</strong>：你可以限制該 Token 僅能用於發送郵件（Mail.Send），無法存取其他資料。</li>



<li><strong>加密傳輸</strong>：所有的 Token 請求都必須強制使用 TLS 1.2 以上加密。</li>
</ul>



<h3 class="wp-block-heading">潛在的效能疑慮與對策</h3>



<p>如果你擔心後端服務頻繁請求 Token 會造成延遲：</p>



<ul class="wp-block-list">
<li><strong>快取機制</strong>：不應每次寄信都請求新 Token。Token 通常有一小時的有效期，程式碼中應該實作快取邏輯，只有在 <code>expires_in</code> 快到期時才重新獲取。如果你使用官方的 <code>MSAL</code> SDK，它會自動幫你處理快取。</li>



<li><strong>網路開銷</strong>：Token 請求只是極小的 JSON 資料，對 VNet 頻寬幾乎沒有影響。</li>
</ul>



<h3 class="wp-block-heading">總結建議</h3>



<p>對於 VNet 內部的後端服務，請求 Token 是完全適合的。最佳實踐是：<strong>優先使用 System-assigned Managed Identity</strong>，並在程式中透過 <strong>DefaultAzureCredential</strong> 來獲取 Token。這樣既不需要在設定檔存密碼，也能確保認證過程符合 Azure 最新的安全規範。</p>



<p>對於寄信這種非高併發的任務，這點認證開銷是可以忽略不計的。你目前比較需要擔心的反而是 VNet 的 NSG 是否有開啟 587 連接埠對外連線至 Office 365 的權限。</p>



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



<p>這是一個關於雲端架構安全性的好問題。簡單來說，Microsoft Graph 的確是一個<strong>外網端點</strong>（<a target="_blank" rel="noreferrer noopener" href="https://graph.microsoft.com/">https://graph.microsoft.com</a>），但這並不代表它不安全。</p>



<p>以下從網路層級、認證機制與最佳實踐來分析：</p>



<h3 class="wp-block-heading">Microsoft Graph 的網路位置</h3>



<p>Microsoft Graph 是微軟雲端服務的統一入口，本質上是一個<strong>公用端點 (Public Endpoint)</strong>。這意味著你的 VNet 內部服務需要透過 HTTPS (Port 443) 才能存取它。</p>



<h3 class="wp-block-heading">Backend 存取外網的安全考量</h3>



<p>雖然它是「外網」端點，但實務上它是安全的，原因如下：</p>



<ul class="wp-block-list">
<li><strong>傳輸層加密 (TLS)</strong>：所有與 Graph API 的通訊都強制使用 TLS 1.2 或更高版本，資料在傳輸過程中是加密的。</li>



<li><strong>身分驗證強制性</strong>：沒有有效的 OAuth 2.0 Token，任何人（即使連得上網址）都無法存取任何資料。</li>



<li><strong>微軟骨幹網路</strong>：如果你的 Backend 服務是在 Azure VNet 內，發往 Microsoft Graph 的流量通常會留在 <strong>Microsoft 骨幹網路 (Global Network)</strong> 內部路由，而不會真的繞到公眾網際網路 (Public Internet) 的路由器。</li>
</ul>



<h3 class="wp-block-heading">如何讓存取過程更安全？</h3>



<p>如果你的 VNet 是嚴格隔離的環境（封鎖所有 Outbound 流量），你可以採用以下對策：</p>



<h4 class="wp-block-heading">1. 使用受控識別 (Managed Identity)</h4>



<p>這是最重要的安全措施。</p>



<ul class="wp-block-list">
<li><strong>優點</strong>：你的 Backend 服務不需要儲存任何 Client Secret（金鑰）。身份辨識由 Azure 平台自動處理。</li>



<li><strong>安全性</strong>：即使程式碼外洩，也沒有金鑰可以被盜用。</li>
</ul>



<h4 class="wp-block-heading">2. 設定網路安全組 (NSG) 或是服務標記 (Service Tags)</h4>



<p>你不需要開放「所有外網」權限。</p>



<ul class="wp-block-list">
<li>在 VNet 的 NSG 中，將輸出規則目的地設定為 <strong>Service Tag</strong>：<code>AzureActiveDirectory</code>。</li>



<li>這樣你的後端服務就只能存取身份驗證相關的微軟服務，而不能隨便連到其他的惡意網站。</li>
</ul>



<h4 class="wp-block-heading">3. 透過 Private Link (私密連結)</h4>



<p>雖然 Microsoft Graph 目前還不像 Storage 或 SQL 提供完全的「私有端點」來收發郵件（它主要是針對資料整合），但你可以透過 <strong>Azure API Management (APIM)</strong> 作為代理。</p>



<ul class="wp-block-list">
<li><strong>架構</strong>：VNet -> Private Endpoint -> APIM -> Microsoft Graph。</li>



<li><strong>優點</strong>：你的後端服務完全不需要開啟任何對外網的存取權限。</li>
</ul>



<h3 class="wp-block-heading">總結建議</h3>



<p>對於一般公司內部的後端服務，直接存取 Microsoft Graph 是<strong>符合業界標準</strong>的。只要你：</p>



<ol start="1" class="wp-block-list">
<li>使用 <strong>HTTPS</strong> 連線。</li>



<li>採用 <strong>Managed Identity</strong> (受控識別) 取代金鑰。</li>



<li>在 NSG 中限制僅允許存取 <strong>AzureActiveDirectory</strong> 的 Service Tag。</li>
</ol>



<p>這樣的安全強度對於 MIS 與資安稽核來說通常是足夠的。</p>



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



<p>根據 2026 年最新的官方公告與限制說明，Exchange Online 的寄信限額如下：</p>



<h3 class="wp-block-heading">核心寄送限制</h3>



<ul class="wp-block-list">
<li><strong>每日收件者上限</strong>：每個人員信箱每天最多可寄送給 <strong>10,000 個收件者</strong>。</li>



<li><strong>計算方式</strong>：這是一個 24 小時的滑動視窗（Rolling Window），而不是每天凌晨重置。</li>



<li><strong>外部收件者限額 (ERR)</strong>：微軟原本計畫在 2026 年 4 月將「外部收件者」限制在每日 2,000 人，但因客戶反饋激烈，該計畫已於 <strong>2026 年 1 月正式取消</strong>。目前外部收件者依然併入總量 10,000 人的額度內，沒有獨立的較低上限。</li>
</ul>



<h3 class="wp-block-heading">其他關鍵節流限制</h3>



<p>除了總量，還有以下技術限制會影響你的後端程式：</p>



<ul class="wp-block-list">
<li><strong>每分鐘傳送速率</strong>：每分鐘最多寄送 <strong>30 封郵件</strong>。如果超過此速度，Exchange 會回傳重試代碼（Throttling）。</li>



<li><strong>單封郵件收件者人數</strong>：單封 Email 最多只能包含 <strong>500 個收件者</strong>（可由管理者調高至 1,000 個）。</li>



<li><strong>並行連線數</strong>：使用 SMTP AUTH 時，最多支援 <strong>3 個並行連線</strong>。</li>
</ul>



<h3 class="wp-block-heading">租戶層級總額 (TERRL)</h3>



<p>除了單一信箱的限制，整個組織（Tenant）也有一個總對外寄信額度，通常是根據你購買的授權數量來計算：</p>



<ul class="wp-block-list">
<li>公式大致為：<code>500 x (授權數量 ^ 0.7) + 9,500</code>。</li>



<li>這意味著如果你的公司只有 1 個授權，總額就是 10,000 封；如果有 1,000 個授權，總額約為每日 7.2 萬封。</li>
</ul>



<h3 class="wp-block-heading">專家提醒</h3>



<p>如果你的後端服務需要發送大量的系統通知或電子報（例如一天超過一萬封），Exchange Online <strong>並不是</strong>合適的選擇。它被定位為「人員商務通訊」，過量發信容易被系統標記為垃圾郵件發送者。建議若需求量大，應轉向使用 <strong>Azure Communication Services (ACS)</strong> 或 <strong>SendGrid</strong>，這類服務才有專門的信用額度管理與更高的寄送上限。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2026/04/azure-smtp-mail/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>台灣資安法規 access log 可以出境外?</title>
		<link>https://stackoverflow.max-everyday.com/2026/04/taiwan-access-log-overseas/</link>
					<comments>https://stackoverflow.max-everyday.com/2026/04/taiwan-access-log-overseas/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Wed, 22 Apr 2026 04:32:23 +0000</pubDate>
				<category><![CDATA[Azure 筆記]]></category>
		<category><![CDATA[azure]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=8327</guid>

					<description><![CDATA[下表根據台灣現行法規（如《資通安全管理法》及《個...]]></description>
										<content:encoded><![CDATA[
<p>下表根據台灣現行法規（如《資通安全管理法》及《個人資料保護法》）彙整 access log 是否可儲存或傳輸至境外的原則。</p>



<h2 class="wp-block-heading">核心原則：區分「機關屬性」與「資料內容」</h2>



<p>在台灣，存取紀錄 (access log) 能否出境，主要取決於該紀錄是否包含<strong>機敏資料</strong>或<strong>個人資料</strong>，以及該單位是否為<strong>政府機關/關鍵基礎設施</strong>。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><th class="has-text-align-left" data-align="left">情況 [1, 2, 3, 4, 5]</th><th class="has-text-align-left" data-align="left">是否可出境外</th><th class="has-text-align-left" data-align="left">法規要求與說明</th></tr><tr><td class="has-text-align-left" data-align="left"><strong>一般企業 (非特許產業)</strong></td><td class="has-text-align-left" data-align="left"><strong>原則允許</strong></td><td class="has-text-align-left" data-align="left">若 log 僅包含技術資訊（如 IP、timestamp），法律無明文禁止。若包含個資，則須符合《個資法》規範。</td></tr><tr><td class="has-text-align-left" data-align="left"><strong>包含個人資料之 Log</strong></td><td class="has-text-align-left" data-align="left"><strong>有限制允許</strong></td><td class="has-text-align-left" data-align="left">根據 <a href="https://law.moj.gov.tw/LawClass/LawAll.aspx?pcode=I0050021">個人資料保護法</a> 第 21 條，主管機關得限制國際傳輸（如涉及國家安全、重大公共利益或受入國法律保護不足時）。</td></tr><tr><td class="has-text-align-left" data-align="left"><strong>政府機關/公務機關</strong></td><td class="has-text-align-left" data-align="left"><strong>原則禁止/嚴格審核</strong></td><td class="has-text-align-left" data-align="left">公務機關之資通系統日誌應在地化保存為原則。涉及國家機密或機敏資料之處理，通常要求實體隔離或在地化儲存。</td></tr><tr><td class="has-text-align-left" data-align="left"><strong>金融、醫療等特許產業</strong></td><td class="has-text-align-left" data-align="left"><strong>需經核准/合規</strong></td><td class="has-text-align-left" data-align="left">相關產業使用雲端服務時，需遵循「金融機構使用雲端服務實務手冊」等準則，確保日誌能隨時供國內監管機構稽核。</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">實務合規建議</h2>



<ol class="wp-block-list">
<li><strong>日誌去識別化</strong>：若需將 access log 傳送到境外資安中心（如國外總部的 SOC 或 SIEM），應先過濾或遮蓋日誌中的敏感資訊（如姓名、身分證字號、非必要之個資欄位）。</li>



<li><strong>保留期限要求</strong>：根據《資通安全責任等級分級辦法》，核心資通系統之日誌應<strong>至少保留 6 個月</strong>，且需確保其完整性（防竄改）。</li>



<li><strong>雲端服務條款</strong>：若使用 Google Cloud、AWS 或 Azure 等境外雲端平台，應確認合約中關於資料存放地 (Data Residency) 的設定，並確認是否符合特定目的事業主管機關之規定。</li>



<li><strong>稽核義務</strong>：不論 Log 存放在何處，機關或企業必須保證當發生資安事件時，能及時提供完整日誌供主管機關調查。 [2, 5, 6, 7, 8]</li>
</ol>



<p>您的單位是否屬於 <strong>A、B、C 級資通安全責任等級</strong> 機關，或是 <strong>關鍵基礎設施 (CII)</strong> 提供者？這將決定您是否有更嚴格的在地化儲存義務。</p>



<p>[1] <a href="https://stellexlaw.com/taiwan-pdpa-data-breach-notification-72-hour-deadline-requirements/">https://stellexlaw.com</a></p>



<p>[2] <a href="https://pcw.tp.edu.tw/ischool/news/attached/25/12-11011%E8%B3%87%E5%AE%89%E9%9C%80%E6%B1%82.pdf">https://pcw.tp.edu.tw</a></p>



<p>[3] <a href="https://www.jcic.org.tw/main_ch/fileRename/fileRename.aspx?fid=1203&amp;kid=1">https://www.jcic.org.tw</a></p>



<p>[4] <a href="https://law.moea.gov.tw/NewsContent.aspx?id=135034#:~:text=%E4%B8%80%E3%80%81%E7%82%BA%E5%81%A5%E5%85%A8%E6%9C%AC%E9%83%A8%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E7%92%B0%E5%A2%83%EF%BC%8C%E5%BC%B7%E5%8C%96%E4%BA%BA%E5%93%A1%EF%BC%88%E5%90%AB%E9%A7%90%E9%BB%9E%E5%A4%96%E5%8C%85%E4%BA%BA%E5%93%A1%EF%BC%89%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E8%AA%8D%E7%9F%A5%EF%BC%8C%20%E9%98%B2%E6%AD%A2%E5%9B%A0%E4%BA%BA%E7%82%BA%E7%96%8F%E5%A4%B1%E8%80%8C%E5%B0%8E%E8%87%B4%E6%A9%9F%E6%95%8F%E8%B3%87%E6%96%99%E5%A4%96%E6%B4%A9%E7%AD%89%E6%83%85%E4%BA%8B%E7%99%BC%E7%94%9F%EF%BC%8C%E4%BB%A5%E7%A2%BA%E4%BF%9D%E5%90%84%E5%96%AE%E4%BD%8D%E9%9B%BB%E8%85%A6%E3%80%81%E8%B3%87%20%E6%96%99%E3%80%81%E7%B3%BB%E7%B5%B1%E5%8F%8A%E7%B6%B2%E8%B7%AF%E5%AE%89%E5%85%A8%EF%BC%8C%E7%89%B9%E8%A8%82%E5%AE%9A%E6%9C%AC%E9%A0%88%E7%9F%A5%E3%80%82%20%E4%BA%8C%E3%80%81%E6%A9%9F%E6%95%8F%E8%B3%87%E6%96%99%EF%BC%8C%E6%8C%87%E4%B8%8B%E5%88%97%E4%BA%8B%E9%A0%85%E3%80%81%E6%A5%AD%E5%8B%99%E5%8F%8A%E8%B3%87%E6%96%99%EF%BC%9A%20%28%E4%B8%80%29%E4%BE%9D%E6%B3%95%E8%A6%8F%E6%98%8E%E5%AE%9A%E4%B9%8B%E5%9C%8B%E5%AE%B6%E6%A9%9F%E5%AF%86%E4%BA%8B%E9%A0%85%E3%80%81%E4%B8%80%E8%88%AC%E5%85%AC%E5%8B%99%E6%A9%9F%E5%AF%86%E4%BA%8B%E9%A0%85%E3%80%82%20%28%E4%BA%8C%29%E5%90%84%E7%B4%9A%E4%B8%BB%E7%AE%A1%E6%8C%87%E7%A4%BA%E6%87%89%E4%BF%9D%E5%AF%86%E4%B9%8B%E6%95%8F%E6%84%9F%E6%80%A7%E6%A5%AD%E5%8B%99%E3%80%82%20%28%E4%B8%89%29%E6%89%BF%E8%BE%A6%E5%96%AE%E4%BD%8D%E6%88%96%E4%BA%BA%E5%93%A1%E5%B0%B1%E8%BE%A6%E7%90%86%E6%A5%AD%E5%8B%99%E8%80%83%E9%87%8F%EF%BC%8C%E8%AA%8D%E7%82%BA%E9%9C%80%E4%BF%9D%E5%AF%86%E4%B9%8B%E9%87%8D%E8%A6%81%E8%B3%87%E6%96%99%E3%80%82%20%E4%B8%89%E3%80%81%E5%AF%A6%E9%AB%94%E9%9A%94%E9%9B%A2%E4%BD%9C%E6%A5%AD%E9%A0%88%E7%9F%A5%20%28%E4%B8%80%29%E8%99%95%E7%90%86%E6%A9%9F%E6%95%8F%E8%B3%87%E6%96%99%E6%99%82%EF%BC%8C%E6%87%89%E4%BD%BF%E7%94%A8%E5%B0%88%E5%B1%AC%E5%AF%A6%E9%AB%94%E9%9A%94%E9%9B%A2%E9%9B%BB%E8%85%A6%E8%A8%AD%E5%82%99%E8%99%95%E7%90%86%E5%8F%8A%E5%88%97%E5%8D%B0%E3%80%82%20%28%E4%BA%8C%29%E5%84%B2%E5%AD%98%E6%A9%9F%E6%95%8F%E8%B3%87%E6%96%99%E4%B9%8B%E5%8F%AF%E6%94%9C%E5%BC%8F%E5%84%B2%E5%AD%98%E5%AA%92%E9%AB%94%E6%87%89%E4%B8%8A%E9%8E%96%E4%BF%9D%E7%AE%A1%EF%BC%8C%E4%B8%A6%E5%83%85%E9%99%90%E6%96%BC%E5%AF%A6%E9%AB%94%E9%9A%94%E9%9B%A2%E9%9B%BB%E8%85%A6%20%E8%AE%80%E5%8F%96%E3%80%81%E7%B9%95%E6%89%93%E5%8F%8A%E5%88%97%E5%8D%B0%E3%80%82%20%28%E4%B8%89%29%E5%AF%A6%E9%AB%94%E9%9A%94%E9%9B%A2%E9%9B%BB%E8%85%A6%E4%B8%8D%E5%BE%97%E7%A7%81%E8%87%AA%E9%80%A3%E6%8E%A5%E7%B6%B2%E8%B7%AF%E4%B8%A6%E4%B8%8D%E5%BE%97%E8%88%87%E4%B8%8A%E7%B6%B2%E9%9B%BB%E8%85%A6%E5%85%B1%E7%94%A8%E5%8D%B0%E8%A1%A8%E6%A9%9F%E3%80%82%20%28%E5%9B%9B%29%E5%AF%A6%E9%AB%94%E9%9A%94%E9%9B%A2%E9%9B%BB%E8%85%A6%E8%A3%BD%E5%A6%A5%E4%B9%8B%E6%96%87%E4%BB%B6%E5%A6%82%E9%9C%80%E7%B6%B2%E8%B7%AF%E5%82%B3%E8%BC%B8%E6%88%96%E5%BE%9E%E9%80%A3%E7%B6%B2%E9%9B%BB%E8%85%A6%E4%B8%8B%E8%BC%89%E6%96%87%E4%BB%B6%E8%A4%87%E8%A3%BD%E8%87%B3%20%E9%9A%94%E9%9B%A2%E9%9B%BB%E8%85%A6%E4%BD%BF%E7%94%A8%E6%99%82%EF%BC%8C%E6%87%89%E5%85%88%E5%B0%87%E6%96%87%E4%BB%B6%E8%A4%87%E8%A3%BD%E8%87%B3%E5%8F%AF%E6%94%9C%E5%BC%8F%E5%84%B2%E5%AD%98%E5%AA%92%E9%AB%94%EF%BC%8C%E5%86%8D%E7%A7%BB%E8%87%B3%E7%9B%AE%E7%9A%84%E9%9B%BB">https://law.moea.gov.tw</a></p>



<p>[5] <a href="https://www.ba.org.tw/FileDownload/Download?FileId=600d928f-0657-474f-b280-c2799421e682&amp;FileName=%E9%87%91%E8%9E%8D%E6%A9%9F%E6%A7%8B%E4%BD%BF%E7%94%A8%E9%9B%B2%E7%AB%AF%E6%9C%8D%E5%8B%99%E5%AF%A6%E5%8B%99%E6%89%8B%E5%86%8A%28%E5%90%AB%E5%B0%88%E6%9C%89%E5%90%8D%E8%A9%9E%E8%88%87%E6%AA%A2%E6%A0%B8%E8%A1%A8%29%E7%AC%AC%E4%B8%80%E7%89%88__113.08.pdf">https://www.ba.org.tw</a></p>



<p>[6] <a href="https://moda.gov.tw/ACS/laws/faq/04/638#:~:text=%E5%90%84%E6%A9%9F%E9%97%9C%E6%96%BC%E6%97%A5%E5%B8%B8%E7%B6%AD%E9%81%8B%E8%B3%87%E9%80%9A%E7%B3%BB%E7%B5%B1%E6%99%82%EF%BC%8C%E6%87%89%E8%A8%82%E5%AE%9A%E6%97%A5%E8%AA%8C%E4%B9%8B%E8%A8%98%E9%8C%84%E6%99%82%E9%96%93%E9%80%B1%E6%9C%9F%E5%8F%8A%E7%95%99%E5%AD%98%E6%94%BF%E7%AD%96%EF%BC%8C%E4%B8%A6%E4%BF%9D%E7%95%99%E6%97%A5%E8%AA%8C%E8%87%B3%E5%B0%916%E5%80%8B%E6%9C%88%EF%BC%8C%E5%85%B6%E4%BF%9D%E5%AD%98%E9%A0%85%E7%9B%AE%E5%BB%BA%E8%AD%B0%E5%A6%82%E4%B8%8B%EF%BC%9A%20%E4%BD%9C%E6%A5%AD%E7%B3%BB%E7%B5%B1%E6%97%A5%E8%AA%8C%28OS%20event%20log%29%20%E7%B6%B2%E7%AB%99%E6%97%A5%E8%AA%8C%28web%20log%29%20%E6%87%89%E7%94%A8%E7%A8%8B%E5%BC%8F%E6%97%A5%E8%AA%8C%28AP%20log%29">https://moda.gov.tw</a></p>



<p>[7] <a href="https://dsp.twse.com.tw/public/static/downloads/brokerDepartment/%E8%B3%87%E9%80%9A%E7%B3%BB%E7%B5%B1%E5%AE%89%E5%85%A8%E9%98%B2%E8%AD%B7%E5%9F%BA%E6%BA%96%E5%8F%83%E8%80%83%E6%8C%87%E5%BC%95%E8%AA%AA%E6%98%8E_20220520090505.pdf">https://dsp.twse.com.tw</a></p>



<p>[8] <a href="https://law.moda.gov.tw/LawContent.aspx?id=FL089967#:~:text=%E7%AC%AC13%20%E6%A2%9D%E7%89%B9%E5%AE%9A%E9%9D%9E%E5%85%AC%E5%8B%99%E6%A9%9F%E9%97%9C%E7%9F%A5%E6%82%89%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E4%BA%8B%E4%BB%B6%E5%BE%8C%EF%BC%8C%E6%87%89%E4%BE%9D%E4%B8%8B%E5%88%97%E8%A6%8F%E5%AE%9A%E6%99%82%E9%96%93%E5%AE%8C%E6%88%90%E6%90%8D%E5%AE%B3%E6%8E%A7%E5%88%B6%E6%88%96%E5%BE%A9%E5%8E%9F%E4%BD%9C%E6%A5%AD%EF%BC%8C%E4%B8%A6%E4%BE%9D%E4%B8%AD%E5%A4%AE%E7%9B%AE%E7%9A%84%E4%BA%8B%E6%A5%AD%E4%B8%BB%E7%AE%A1%E6%A9%9F%E9%97%9C%E6%8C%87%E5%AE%9A%E4%B9%8B%E6%96%B9%E5%BC%8F%E8%BE%A6%E7%90%86%E9%80%9A%E7%9F%A5%E4%BA%8B%E5%AE%9C%EF%BC%9A%20%E4%B8%80%E3%80%81%E7%AC%AC%E4%B8%80%E7%B4%9A%E6%88%96%E7%AC%AC%E4%BA%8C%E7%B4%9A%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E4%BA%8B%E4%BB%B6%EF%BC%8C%E6%96%BC%E7%9F%A5%E6%82%89%E8%A9%B2%E4%BA%8B%E4%BB%B6%E5%BE%8C%E4%B8%83%E5%8D%81%E4%BA%8C%E5%B0%8F%E6%99%82%E5%85%A7%E3%80%82%20%E4%BA%8C%E3%80%81%E9%87%8D%E5%A4%A7%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E4%BA%8B%E4%BB%B6%EF%BC%8C%E6%96%BC%E7%9F%A5%E6%82%89%E8%A9%B2%E4%BA%8B%E4%BB%B6%E5%BE%8C%E4%B8%89%E5%8D%81%E5%85%AD%E5%B0%8F%E6%99%82%E5%85%A7%E3%80%82">https://law.moda.gov.tw</a></p>



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



<p>是的，根據台灣法律與資安實務規範，<strong>公立大學（含國立、市立大學）在《資通安全管理法》與《個人資料保護法》的定義下，通常被視為「公務機關」</strong>。 [1, 2]</p>



<p>這意味著在處理 access log（存取紀錄）時，公立大學受到的限制遠比一般私人企業嚴格。以下為詳細分類與規範說明：</p>



<h2 class="wp-block-heading">1. 公立大學的法規身份</h2>



<ul class="wp-block-list">
<li><strong>資安法定位</strong>：公立學校被列為<strong>公務機關</strong>，必須遵守《資通安全管理法》及其子法。相對於此，私立大學通常被歸類為「特定非公務機關」。</li>



<li><strong>個資法定位</strong>：在個資法中，公立學校亦屬於公務機關，負有更高的個資保護與管理義務。 [2, 3, 4, 5]</li>
</ul>



<h2 class="wp-block-heading">2. 資通安全責任等級</h2>



<p>教育部已根據學校規模與業務性質，將各公立大學核定為不同的資安責任等級：</p>



<ul class="wp-block-list">
<li><strong>A 級 (最高)</strong>：教學醫院（如 台大醫院、<a href="https://www.hosp.ncku.edu.tw/">成大醫院</a>）或涉及國家安全機密研究的特定系所。</li>



<li><strong>B 級 (多數公立大學)</strong>：一般公立大學（如 <a href="https://www.ntu.edu.tw/">台灣大學</a>、<a href="https://www.nycu.edu.tw/">陽明交通大學</a>、<a href="https://www.nccu.edu.tw/">政治大學</a>）多被核定為 B 級機關。</li>



<li><strong>C 級</strong>：獨立學院或規模較小的專科學校。 [6, 7, 8, 9, 10]</li>
</ul>



<h2 class="wp-block-heading">3. Log 出境與存放之限制</h2>



<p>由於身分為「公務機關」，公立大學在處理 log 時須遵守以下規範：</p>



<ul class="wp-block-list">
<li><strong>禁止使用具資安疑慮產品</strong>：禁止使用大陸廠牌之資通訊產品處理公務資料或紀錄。</li>



<li><strong>在地化保存原則</strong>：公務機關的核心資通系統日誌以<strong>在地化保存</strong>為原則，特別是涉及機敏業務或個資的 log。</li>



<li><strong>國際傳輸限制</strong>：若欲將包含個資的 log 傳輸至境外（例如使用國外雲端 SIEM 服務），需符合 <a href="https://law.moj.gov.tw/LawClass/LawAll.aspx?pcode=I0050021">個人資料保護法</a> 第 21 條規定，且主管機關（教育部）有權限制此類國際傳輸。</li>



<li><strong>保存期限</strong>：B 級（含）以上機關之核心系統 log 應<strong>至少保存 6 個月</strong>，且需具備防竄改機制。 [3, 9, 11, 12, 13, 14]</li>
</ul>



<h2 class="wp-block-heading">總結建議</h2>



<p>若您在公立大學任職並計畫將 access log 傳送到境外：</p>



<ol class="wp-block-list">
<li><strong>確認系統等級</strong>：確認該 log 所屬系統是否為「核心資通系統」。</li>



<li><strong>去識別化處理</strong>：傳輸前務必過濾個資與機敏欄位。</li>



<li><strong>合約審查</strong>：若使用境外雲端服務，需確保符合教育部針對「委外辦理資通事項」的相關資安查核要求。</li>
</ol>



<p>您目前是需要將學校的 <strong>Web Log</strong> 還是 <strong>內部行政系統的 Log</strong> 傳送到境外的資安平台嗎？</p>



<p>[1] <a href="https://moda.gov.tw/ACS/laws/faq/01/632#:~:text=1.1.%20%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E7%AE%A1%E7%90%86%E6%B3%95%EF%BC%88%E4%BB%A5%E4%B8%8B%E7%B0%A1%E7%A8%B1%E8%B3%87%E5%AE%89%E6%B3%95%EF%BC%89%E4%B9%8B%E7%B4%8D%E7%AE%A1%E5%B0%8D%E8%B1%A1%E7%82%BA%E4%BD%95%EF%BC%9F%20%E8%B3%87%E5%AE%89%E6%B3%95%E7%B4%8D%E7%AE%A1%E5%B0%8D%E8%B1%A1%E5%8C%85%E5%90%AB%E5%85%AC%E5%8B%99%E6%A9%9F%E9%97%9C%E5%8F%8A%E7%89%B9%E5%AE%9A%E9%9D%9E%E5%85%AC%E5%8B%99%E6%A9%9F%E9%97%9C%E3%80%82%20%E4%B8%80%E3%80%81%E5%85%AC%E5%8B%99%E6%A9%9F%E9%97%9C%EF%BC%9A%E6%8C%87%E4%BE%9D%E6%B3%95%E8%A1%8C%E4%BD%BF%E5%85%AC%E6%AC%8A%E5%8A%9B%E4%B9%8B%E4%B8%AD%E5%A4%AE%E3%80%81%E5%9C%B0%E6%96%B9%E6%A9%9F%E9%97%9C%EF%BC%88%E6%A7%8B%EF%BC%89%E6%88%96%E5%85%AC%E6%B3%95%E4%BA%BA%EF%BC%8C%E4%BD%86%E4%B8%8D%E5%90%AB%E8%BB%8D%E4%BA%8B%E5%8F%8A%E6%83%85%E5%A0%B1%E6%A9%9F%E9%97%9C%E3%80%82%20%E4%BA%8C%E3%80%81%E7%89%B9%E5%AE%9A%E9%9D%9E%E5%85%AC%E5%8B%99%E6%A9%9F%E9%97%9C%EF%BC%9A%E6%8C%87%E9%97%9C%E9%8D%B5%E5%9F%BA%E7%A4%8E%E8%A8%AD%E6%96%BD%E6%8F%90%E4%BE%9B%E8%80%85%E3%80%81%E5%85%AC%E7%87%9F%E4%BA%8B%E6%A5%AD%E3%80%81%E7%89%B9%E5%AE%9A%E8%B2%A1%E5%9C%98%E6%B3%95%E4%BA%BA%E6%88%96%E5%8F%97%E6%94%BF%E5%BA%9C%E6%8E%A7%E5%88%B6%E4%B9%8B%E4%BA%8B%E6%A5%AD%E3%80%81%E5%9C%98%E9%AB%94%E6%88%96%E6%A9%9F%E6%A7%8B%E3%80%82">https://moda.gov.tw</a></p>



<p>[2] <a href="https://powilaw.com/%E7%B6%93%E9%A9%97%E5%88%86%E4%BA%AB/f/%E5%AD%B8%E6%A0%A1%E7%A9%B6%E7%AB%9F%E7%AE%97%E5%80%8B%E8%B3%87%E6%B3%95%E7%9A%84%E5%85%AC%E5%8B%99%E6%A9%9F%E9%97%9C%E9%82%84%E6%98%AF%E3%80%8C%E9%9D%9E%E5%85%AC%E5%8B%99%E6%A9%9F%E9%97%9C">https://powilaw.com</a></p>



<p>[3] <a href="https://www.taccst.moe.edu.tw/announce/detail/38/#:~:text=%E6%9C%AC%E4%B8%AD%E5%BF%83%E8%88%87%E6%95%99%E8%82%B2%E6%A9%9F%E6%A7%8B%E8%B3%87%E5%AE%89%E9%A9%97%E8%AD%89%E4%B8%AD%E5%BF%83%E5%85%B1%E5%90%8C%E8%BE%A6%E7%90%86%E6%95%99%E8%82%B2%E9%83%A8109%2D110%E5%B9%B4%E5%BA%A6%E5%B0%8D%E6%89%80%E5%B1%AC%E5%85%AC%E5%8B%99%E6%A9%9F%E9%97%9C%E5%8F%8A%E6%89%80%E7%AE%A1%E7%89%B9%E5%AE%9A%E9%9D%9E%E5%85%AC%E5%8B%99%E6%A9%9F%E9%97%9C%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E7%A8%BD%E6%A0%B8%E8%A8%88%E7%95%AB%E8%AA%AA%E6%98%8E%E6%9C%83%EF%BC%8C%E7%9B%B8%E9%97%9C%E8%B3%87%E8%A8%8A%E5%A6%82%E4%B8%8B%EF%BC%9A.%20%E5%A3%B9%E3%80%81%E4%BE%9D%E6%93%9A:%20%E4%B8%80%E3%80%81%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E7%AE%A1%E7%90%86%E6%B3%95%E7%AC%AC13%E6%A2%9D%E7%AC%AC1%E9%A0%85%E5%8F%8A%E7%AC%AC17%E6%A2%9D%E7%AC%AC3%E9%A0%85%E3%80%82%20%E4%BA%8C%E3%80%81%E6%95%99%E8%82%B2%E9%83%A8%E6%89%80%E7%AE%A1%E7%89%B9%E5%AE%9A%E9%9D%9E%E5%85%AC%E5%8B%99%E6%A9%9F%E9%97%9C%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E7%AE%A1%E7%90%86%E4%BD%9C%E6%A5%AD%E8%BE%A6%E6%B3%95%E7%AC%AC5%E6%A2%9D%E7%AC%AC1%E9%A0%85%E3%80%82%20%E8%B2%B3%E3%80%81%E7%9B%AE%E7%9A%84:%20%E4%BE%9D%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E7%AE%A1%E7%90%86%E6%B3%95%E7%AC%AC13%E6%A2%9D%E7%AC%AC1%E9%A0%85%E5%8F%8A%E7%AC%AC17%E6%A2%9D%E7%AC%AC3%E9%A0%85%E8%A6%8F%E5%AE%9A%EF%BC%8C%E5%85%AC%E5%8B%99%E6%A9%9F%E9%97%9C%E6%87%89%E7%A8%BD%E6%A0%B8%E5%85%B6%E6%89%80%E5%B1%AC%E6%88%96%E7%9B%A3%E7%9D%A3%E6%A9%9F%E9%97%9C%E4%B9%8B%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E7%B6%AD%E8%AD%B7%E8%A8%88%E7%95%AB%E5%AF%A6%E6%96%BD%E6%83%85%E5%BD%A2%EF%BC%8C%E4%B8%AD%E5%A4%AE%E7%9B%AE%E7%9A%84%E4%BA%8B%E6%A5%AD%E4%B8%BB%E7%AE%A1%E6%A9%9F%E9%97%9C%E5%BE%97%E7%A8%BD%E6%A0%B8%E6%89%80%E7%AE%A1%E9%97%9C%E9%8D%B5%E5%9F%BA%E7%A4%8E%E8%A8%AD%E6%96%BD%E6%8F%90%E4%BE%9B%E8%80%85%E4%BB%A5%E5%A4%96%E4%B9%8B%E7%89%B9%E5%AE%9A%E9%9D%9E%E5%85%AC%E5%8B%99%E6%A9%9F%E9%97%9C%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E7%B6%AD%E8%AD%B7%E8%A8%88%E7%95%AB%E5%AF%A6%E6%96%BD%E6%83%85%E5%BD%A2%E3%80%82%E6%95%99%E8%82%B2%E9%83%A8%E7%82%BA%E8%90%BD%E5%AF%A6%E5%89%8D%E8%BF%B0%E6%B3%95%E4%BB%A4%E8%A6%8F%E5%AE%9A%EF%BC%8C%E8%A6%8F%E5%8A%83%E6%AF%8F%E5%B9%B4%E8%87%AA%E6%89%80%E5%B1%AC%E5%85%AC%E5%8B%99%E6%A9%9F%E9%97%9C%E5%8F%8A%E6%89%80%E7%AE%A1%E7%89%B9%E5%AE%9A%E9%9D%9E%E5%85%AC%E5%8B%99%E6%A9%9F%E9%97%9C%E9%81%B8%E5%AE%9A%E5%8F%97%E7%A8%BD%E6%A0%B8%E5%B0%8D%E8%B1%A1%EF%BC%8C%E7%94%B1%E6%95%99%E8%82%B2%E6%A9%9F%E6%A7%8B%E8%B3%87%E5%AE%89%E9%A9%97%E8%AD%89%E4%B8%AD%E5%BF%83%E5%8D%94%E5%8A%A9%E8%BE%A6%E7%90%86%E5%89%8D%E9%96%8B%E7%A8%BD%E6%A0%B8%E4%BD%9C%E6%A5%AD%EF%BC%8C%E4%BB%A5%E5%8D%94%E5%8A%A9%E6%89%80%E5%B1%AC%E6%A9%9F%E9%97%9C%E3%80%81%E5%AD%B8%E6%A0%A1%E5%BC%B7%E5%8C%96%E8%B3%87%E5%AE%89%E9%98%B2%E8%AD%B7%E5%B7%A5%E4%BD%9C%E4%B9%8B%E5%AE%8C%E6%95%B4%E6%80%A7%E5%8F%8A%E6%9C%89%E6%95%88%E6%80%A7%EF%BC%8C%E4%B8%A6%E9%80%8F%E9%81%8E%E6%8C%81%E7%BA%8C%E6%94%B9%E5%96%84%E9%99%8D%E4%BD%8E%E8%B3%87%E5%AE%89%E9%A2%A8%E9%9A%AA%E3%80%82%20%E5%8F%83%E3%80%81%E8%BE%A6%E7%90%86%E5%96%AE%E4%BD%8D:%20%E4%B8%80%E3%80%81%E4%B8%BB%E8%BE%A6:%E6%95%99%E8%82%B2%E9%83%A8.">https://www.taccst.moe.edu.tw</a></p>



<p>[4] <a href="https://moda.gov.tw/ACS/laws/faq/01/632#:~:text=1.1.%20%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E7%AE%A1%E7%90%86%E6%B3%95%EF%BC%88%E4%BB%A5%E4%B8%8B%E7%B0%A1%E7%A8%B1%E8%B3%87%E5%AE%89%E6%B3%95%EF%BC%89%E4%B9%8B%E7%B4%8D%E7%AE%A1%E5%B0%8D%E8%B1%A1%E7%82%BA%E4%BD%95%EF%BC%9F%20%E8%B3%87%E5%AE%89%E6%B3%95%E7%B4%8D%E7%AE%A1%E5%B0%8D%E8%B1%A1%E5%8C%85%E5%90%AB%E5%85%AC%E5%8B%99%E6%A9%9F%E9%97%9C%E5%8F%8A%E7%89%B9%E5%AE%9A%E9%9D%9E%E5%85%AC%E5%8B%99%E6%A9%9F%E9%97%9C%E3%80%82%20%E4%B8%80%E3%80%81%E5%85%AC%E5%8B%99%E6%A9%9F%E9%97%9C%EF%BC%9A%E6%8C%87%E4%BE%9D%E6%B3%95%E8%A1%8C%E4%BD%BF%E5%85%AC%E6%AC%8A%E5%8A%9B%E4%B9%8B%E4%B8%AD%E5%A4%AE%E3%80%81%E5%9C%B0%E6%96%B9%E6%A9%9F%E9%97%9C%EF%BC%88%E6%A7%8B%EF%BC%89%E6%88%96%E5%85%AC%E6%B3%95%E4%BA%BA%EF%BC%8C%E4%BD%86%E4%B8%8D%E5%90%AB%E8%BB%8D%E4%BA%8B%E5%8F%8A%E6%83%85%E5%A0%B1%E6%A9%9F%E9%97%9C%E3%80%82%20%E4%BA%8C%E3%80%81%E7%89%B9%E5%AE%9A%E9%9D%9E%E5%85%AC%E5%8B%99%E6%A9%9F%E9%97%9C%EF%BC%9A%E6%8C%87%E9%97%9C%E9%8D%B5%E5%9F%BA%E7%A4%8E%E8%A8%AD%E6%96%BD%E6%8F%90%E4%BE%9B%E8%80%85%E3%80%81%E5%85%AC%E7%87%9F%E4%BA%8B%E6%A5%AD%E3%80%81%E7%89%B9%E5%AE%9A%E8%B2%A1%E5%9C%98%E6%B3%95%E4%BA%BA%E6%88%96%E5%8F%97%E6%94%BF%E5%BA%9C%E6%8E%A7%E5%88%B6%E4%B9%8B%E4%BA%8B%E6%A5%AD%E3%80%81%E5%9C%98%E9%AB%94%E6%88%96%E6%A9%9F%E6%A7%8B%E3%80%82">https://moda.gov.tw</a></p>



<p>[5] <a href="https://www.pdpc.gov.tw/News_Html/100/">https://www.pdpc.gov.tw</a></p>



<p>[6] <a href="https://topu.nccu.edu.tw/project/index/q/category/21">https://topu.nccu.edu.tw</a></p>



<p>[7] <a href="https://www.tcrc.edu.tw/files/52/06.pdf">https://www.tcrc.edu.tw</a></p>



<p>[8] <a href="https://www.net.fju.edu.tw/file/ED-J-017.pdf">https://www.net.fju.edu.tw</a></p>



<p>[9] <a href="https://www.cc.ntu.edu.tw/chinese/epaper/0060/20220320_6001.html">https://www.cc.ntu.edu.tw</a></p>



<p>[10] <a href="https://it.nycu.edu.tw/it/ch/app/artwebsite/view?module=artwebsite&amp;id=5964&amp;serno=7a2e17f9-81eb-43bf-93eb-6e2e7178a14d">https://it.nycu.edu.tw</a></p>



<p>[11] <a href="https://www.hhps.kh.edu.tw/upload/14/101_50656/%E6%95%99%E8%82%B2%E9%AB%94%E7%B3%BB%E5%9B%A0%E6%87%89%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E7%AE%A1%E7%90%86%E6%B3%95%E4%B9%8B%E8%A6%8F%E5%8A%83%E8%AA%AA%E6%98%8E-108.01.21.pdf">https://www.hhps.kh.edu.tw</a></p>



<p>[12] <a href="https://lic.niu.edu.tw/p/404-1010-64054.php#:~:text=%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E7%94%A2%E5%93%81%E9%99%90%E5%88%B6%E4%BD%BF%E7%94%A8%E5%8E%9F%E5%89%87%E3%80%8D%EF%BC%8C%E4%B8%A6%E8%AB%8B%E4%BE%9D%E8%AA%AA%E6%98%8E%E8%BE%A6%E7%90%86%EF%BC%8C%E8%AB%8B%E6%9F%A5%E7%85%A7%E4%B8%A6%E8%BD%89%E7%9F%A5%E6%89%80%E5%B1%AC%E5%85%AC%E5%8B%99%E6%A9%9F%E9%97%9C%EF%BC%88%E6%A7%8B%EF%BC%89%E3%80%82%20%E8%AA%AA%E6%98%8E%EF%BC%9A%20%E4%B8%80%E3%80%81%E7%82%BA%E9%81%BF%E5%85%8D%E5%85%AC%E5%8B%99%E5%8F%8A%E6%A9%9F%E6%95%8F%E8%B3%87%E6%96%99%E9%81%AD%E4%B8%8D%E7%95%B6%E7%AB%8A%E5%8F%96%EF%BC%8C%E5%B0%8E%E8%87%B4%E6%A9%9F%E9%97%9C%E6%A9%9F%E6%95%8F%E5%85%AC%E5%8B%99%E8%B3%87%E8%A8%8A%E5%A4%96%E6%B4%A9%E6%88%96%E9%80%A0%E6%88%90%E5%9C%8B%E5%AE%B6%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E5%8D%B1%E5%AE%B3%E9%A2%A8%E9%9A%AA%EF%BC%8C%E8%A1%8C%E6%94%BF%E9%99%A2%E5%89%8D%E5%B7%B2%E7%99%BC%E5%B8%83%E3%80%8C%E5%90%84%E6%A9%9F%E9%97%9C%E5%B0%8D%E5%8D%B1%E5%AE%B3%E5%9C%8B%E5%AE%B6%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E7%94%A2%E5%93%81%E9%99%90%E5%88%B6%E4%BD%BF%E7%94%A8%E5%8E%9F%E5%89%87%E3%80%8D%EF%BC%8C%E6%98%8E%E7%A2%BA%E8%A6%81%E6%B1%82%E4%B8%AD%E5%A4%AE%E8%88%87%E5%9C%B0%E6%96%B9%E6%A9%9F%E9%97%9C%EF%BC%88%E6%A7%8B%EF%BC%89%E3%80%81%E5%85%AC%E7%AB%8B%E5%AD%B8%E6%A0%A1%E3%80%81%E5%85%AC%E7%87%9F%E4%BA%8B%E6%A5%AD%E3%80%81%E8%A1%8C%E6%94%BF%E6%B3%95%E4%BA%BA%E4%BB%A5%E5%8F%8A%E8%87%AA%E8%A1%8C%E6%88%96%E5%A7%94%E5%A4%96%E7%87%9F%E9%81%8B%E6%8F%90%E4%BE%9B%E5%85%AC%E7%9C%BE%E6%B4%BB%E5%8B%95%E6%88%96%E4%BD%BF%E7%94%A8%E4%B9%8B%E5%A0%B4%E5%9C%B0%EF%BC%8C%E9%99%90%E5%88%B6%E4%BD%BF%E7%94%A8%E5%8D%B1%E5%AE%B3%E5%9C%8B%E5%AE%B6%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E7%94%A2%E5%93%81%EF%BC%8C%E4%B8%A6%E4%BB%A5%E8%A1%8C%E6%94%BF%E9%99%A2%E7%A7%98%E6%9B%B8%E9%95%B7109%E5%B9%B412%E6%9C%8818%E6%97%A5%E9%99%A2%E8%87%BA%E8%AD%B7%E9%95%B7%E5%AD%97%E7%AC%AC1090201804A%E8%99%9F%E5%87%BD%EF%BC%8C%E9%87%8D%E7%94%B3%E5%85%AC%E5%8B%99%E7%94%A8%E4%B9%8B%E8%B3%87%E9%80%9A%E8%A8%8A%E7%94%A2%E5%93%81%E4%B8%8D%E5%BE%97%E4%BD%BF%E7%94%A8%E5%A4%A7%E9%99%B8%E5%BB%A0%E7%89%8C%EF%BC%8C%E4%B8%94%E4%B8%8D%E5%BE%97%E5%AE%89%E8%A3%9D%E9%9D%9E%E5%85%AC%E5%8B%99%E7%94%A8%E8%BB%9F%E9%AB%94%E3%80%82%20%E4%BA%8C%E3%80%81%E7%82%BA%E5%9B%A0%E6%87%89%E6%96%B0%E5%9E%8B%E6%85%8B%E6%95%B8%E4%BD%8D%E6%9C%8D%E5%8B%99%E5%BB%B6%E4%BC%B8%E4%B9%8B%E6%96%B0%E8%88%88%E8%B3%87%E5%AE%89%E9%A2%A8%E9%9A%AA%EF%BC%8C%E5%86%8D%E6%AC%A1%E9%87%8D%E7%94%B3%E5%90%84%E5%85%AC%E5%8B%99%E6%A9%9F%E9%97%9C%E6%87%89%E9%81%B5%E5%BE%AA%E5%89%8D%E8%BF%B0%E8%A6%8F%E5%AE%9A%EF%BC%8C%E4%B8%A6%E8%AB%8B%E9%85%8D%E5%90%88%E8%BE%A6%E7%90%86%E4%BB%A5%E4%B8%8B%E4%BA%8B%E9%A0%85%EF%BC%9A%20%28%E4%B8%80%29%E5%85%AC%E5%8B%99%E7%94%A8%E4%B9%8B%E8%B3%87%E9%80%9A%E8%A8%8A%E7%94%A2%E5%93%81%E4%B8%8D%E5%BE%97%E4%BD%BF%E7%94%A8%E5%A4%A7%E9%99%B8%E5%BB%A0%E7%89%8C%EF%BC%8C%E4%B8%94%E4%B8%8D%E5%BE%97%E5%AE%89%E8%A3%9D%E9%9D%9E%E5%85%AC%E5%8B%99%E7%94%A8%E8%BB%9F%E9%AB%94%E3%80%82%20%28%E4%BA%8C%29%E5%90%84%E6%A9%9F%E9%97%9C%E6%87%89%E5%B0%B1%E5%B7%B2%E4%BD%BF%E7%94%A8%E6%88%96%E6%8E%A1%E8%B3%BC%E4%B9%8B%E5%A4%A7%E9%99%B8%E5%BB%A0%E7%89%8C%E8%B3%87%E9%80%9A%E8%A8%8A%E7%94%A2%E5%93%81%E5%88%97%E5%86%8A%E7%AE%A1%E7%90%86%EF%BC%8C%E4%B8%94%E4%B8%8D%E5%BE%97%E8%88%87%E5%85%AC%E5%8B%99%E7%92%B0%E5%A2%83%E4%BB%8B%E6%8E%A5%E3%80%82">https://lic.niu.edu.tw</a></p>



<p>[13] <a href="https://www.zzm.kh.edu.tw/view/index.php?WebID=81&amp;MainType=0&amp;SubType=101&amp;MainMenuId=31101&amp;SubMenuId=31670&amp;DataId=168571&amp;page=1&amp;Work=View#:~:text=%E4%B8%80%E3%80%81%E4%BE%9D%E6%93%9A%E5%B8%82%E5%BA%9C114%E5%B9%B44%E6%9C%887%E6%97%A5%E9%AB%98%E5%B8%82%E5%BA%9C%E7%A0%94%E8%B3%87%E5%AD%97%E7%AC%AC11401689300%E8%99%9F%E5%87%BD%E8%BE%A6%E7%90%86%E3%80%82%20%E4%BA%8C%E3%80%81%E7%82%BA%E9%81%BF%E5%85%8D%E5%85%AC%E5%8B%99%E5%8F%8A%E6%A9%9F%E6%95%8F%E8%B3%87%E6%96%99%E9%81%AD%E4%B8%8D%E7%95%B6%E7%AB%8A%E5%8F%96%EF%BC%8C%E5%B0%8E%E8%87%B4%E6%A9%9F%E9%97%9C%E6%A9%9F%E6%95%8F%E5%85%AC%E5%8B%99%E8%B3%87%E8%A8%8A%E5%A4%96%E6%B4%A9%E6%88%96%E9%80%A0%E6%88%90%E5%9C%8B%E5%AE%B6%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E5%8D%B1%E5%AE%B3%E9%A2%A8%E9%9A%AA%EF%BC%8C%E8%A1%8C%E6%94%BF%E9%99%A2%E5%89%8D%E5%B7%B2%E7%99%BC%E5%B8%83%E3%80%8C%E5%90%84%E6%A9%9F%E9%97%9C%E5%B0%8D%E5%8D%B1%E5%AE%B3%E5%9C%8B%E5%AE%B6%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E7%94%A2%E5%93%81%E9%99%90%E5%88%B6%E4%BD%BF%E7%94%A8%E5%8E%9F%E5%89%87%E3%80%8D%EF%BC%88%E5%A6%82%E9%99%84%E4%BB%B61%EF%BC%89%EF%BC%8C%E6%98%8E%E7%A2%BA%E8%A6%81%E6%B1%82%E4%B8%AD%E5%A4%AE%E8%88%87%E5%9C%B0%E6%96%B9%E6%A9%9F%E9%97%9C%EF%BC%88%E6%A7%8B%EF%BC%89%E3%80%81%E5%85%AC%E7%AB%8B%E5%AD%B8%E6%A0%A1%E3%80%81%E5%85%AC%E7%87%9F%E4%BA%8B%E6%A5%AD%E3%80%81%E8%A1%8C%E6%94%BF%E6%B3%95%E4%BA%BA%E4%BB%A5%E5%8F%8A%E8%87%AA%E8%A1%8C%E6%88%96%E5%A7%94%E5%A4%96%E7%87%9F%E9%81%8B%E6%8F%90%E4%BE%9B%E5%85%AC%E7%9C%BE%E6%B4%BB%E5%8B%95%E6%88%96%E4%BD%BF%E7%94%A8%E4%B9%8B%E5%A0%B4%E5%9C%B0%EF%BC%8C%E9%99%90%E5%88%B6%E4%BD%BF%E7%94%A8%E5%8D%B1%E5%AE%B3%E5%9C%8B%E5%AE%B6%E8%B3%87%E9%80%9A%E5%AE%89%E5%85%A8%E7%94%A2%E5%93%81%EF%BC%8C%E4%B8%A6%E4%BB%A5%E8%A1%8C%E6%94%BF%E9%99%A2%E7%A7%98%E6%9B%B8%E9%95%B7109%E5%B9%B412%E6%9C%8818%E6%97%A5%E9%99%A2%E8%87%BA%E8%AD%B7%E9%95%B7%E5%AD%97%E7%AC%AC1090201804A%E8%99%9F%E5%87%BD%EF%BC%8C%E9%87%8D%E7%94%B3%E5%85%AC%E5%8B%99%E7%94%A8%E4%B9%8B%E8%B3%87%E9%80%9A%E8%A8%8A%E7%94%A2%E5%93%81%E4%B8%8D%E5%BE%97%E4%BD%BF%E7%94%A8%E5%A4%A7%E9%99%B8%E5%BB%A0%E7%89%8C%EF%BC%8C%E4%B8%94%E4%B8%8D%E5%BE%97%E5%AE%89%E8%A3%9D%E9%9D%9E%E5%85%AC%E5%8B%99%E7%94%A8%E8%BB%9F%E9%AB%94%E3%80%82%20%E4%B8%89%E3%80%81%E7%82%BA%E5%9B%A0%E6%87%89%E6%96%B0%E5%9E%8B%E6%85%8B%E6%95%B8%E4%BD%8D%E6%9C%8D%E5%8B%99%E5%BB%B6%E4%BC%B8%E4%B9%8B%E6%96%B0%E8%88%88%E8%B3%87%E5%AE%89%E9%A2%A8%E9%9A%AA%EF%BC%8C%E5%86%8D%E6%AC%A1%E9%87%8D%E7%94%B3%E5%90%84%E5%85%AC%E5%8B%99%E6%A9%9F%E9%97%9C%E6%87%89%E9%81%B5%E5%BE%AA%E5%89%8D%E8%BF%B0%E8%A6%8F%E5%AE%9A%EF%BC%8C%E4%B8%A6%E8%AB%8B%E5%AD%B8%E6%A0%A1%E9%85%8D%E5%90%88%E8%BE%A6%E7%90%86%E4%BB%A5%E4%B8%8B%E4%BA%8B%E9%A0%85%EF%BC%9A%20%28%E4%B8%80%29%E5%85%AC%E5%8B%99%E7%94%A8%E4%B9%8B%E8%B3%87%E9%80%9A%E8%A8%8A%E7%94%A2%E5%93%81%E4%B8%8D%E5%BE%97%E4%BD%BF%E7%94%A8%E5%A4%A7%E9%99%B8%E5%BB%A0%E7%89%8C%EF%BC%8C%E4%B8%94%E4%B8%8D%E5%BE%97%E5%AE%89%E8%A3%9D%E9%9D%9E%E5%85%AC%E5%8B%99%E7%94%A8%E8%BB%9F%E9%AB%94%E3%80%82%20%28%E4%BA%8C%29%E5%AD%B8%E6%A0%A1%E6%87%89%E5%B0%B1%E5%B7%B2%E4%BD%BF%E7%94%A8%E6%88%96%E6%8E%A1%E8%B3%BC%E4%B9%8B%E5%A4%A7%E9%99%B8%E5%BB%A0%E7%89%8C%E8%B3%87%E9%80%9A%E8%A8%8A%E7%94%A2%E5%93%81%E5%88%97%E5%86%8A%EF%BC%8C%E4%B8%A6%E7%94%B1%E5%B0%88%E4%BA%BA%E7%AE%A1%E7%90%86%EF%BC%8C%E4%B8%94%E4%B8%8D%E5%BE%97%E8%88%87%E5%85%AC%E5%8B%99%E7%92%B0%E5%A2%83%E4%BB%8B%E6%8E%A5%E3%80%82">https://www.zzm.kh.edu.tw</a></p>



<p>[14] <a href="https://www.pdpc.gov.tw/News_Html/100/">https://www.pdpc.gov.tw</a></p>



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



<p>針對公立大學的 <strong>Web Log</strong>（網頁伺服器存取紀錄）傳輸至境外，雖然其性質通常比行政系統紀錄（如人事、薪資）稍微不敏感，但身為<strong>公務機關</strong>，仍須遵循以下實務規範：</p>



<h2 class="wp-block-heading">1. 核心判斷：是否包含「個資」或「帳號」？</h2>



<ul class="wp-block-list">
<li><strong>純技術 Log</strong>：如果 Log 僅包含 <code>來源 IP</code>、<code>訪問時間</code>、<code>URL 路徑</code>、<code>HTTP 狀態碼</code>、<code>User-Agent</code>，在現行法規下通常被視為技術資訊。這類資訊傳輸至境外（如使用 Cloudflare, Akamai 或國外資安監控中心）的門檻較低。</li>



<li><strong>含個資 Log</strong>：若 URL 參數中包含 <strong>身分證字號</strong>、<strong>學號</strong>、<strong>姓名</strong>（例如：<code>GET /profile?id=A123456789</code>），或 Log 紀錄了 <strong>使用者帳號</strong>，這就涉及《個資法》的「國際傳輸」。身為公立大學（公務機關），應盡量避免這類資訊出境。</li>
</ul>



<h2 class="wp-block-heading">2. 教育部與資安法之要求</h2>



<p>根據《資通安全管理法》及教育部對公立學校的指導原則：</p>



<ul class="wp-block-list">
<li><strong>優先在地儲存</strong>：核心資通系統（如校務系統入口、首頁）的原始日誌（Raw Logs）應在校園內部或國內儲存空間備份至少 <strong>6 個月</strong>。</li>



<li><strong>境外傳輸前置作業</strong>：若要將 Web Log 送往境外的 SIEM 或分析平台，建議先在校內進行 <strong>去識別化 (Anonymization/Masking)</strong>，將學號或敏感參數遮蓋後再外傳。</li>
</ul>



<h2 class="wp-block-heading">3. 禁止使用「危害國家資通安全產品」</h2>



<p>這是公立大學最嚴格的紅線：</p>



<ul class="wp-block-list">
<li><strong>禁止名單</strong>：絕對不能將 Log 傳輸至<strong>中國大陸廠牌</strong>的雲端空間或使用其資安分析服務（如阿里雲、華為雲等），這違反行政院及教育部的資安規定。</li>



<li><strong>合格供應商</strong>：使用如 Google (GCP)、Amazon (AWS) 或 Microsoft (Azure) 等美商雲端，且選擇台灣或鄰近非紅區節點，是目前較常見且合規的作法。</li>
</ul>



<h2 class="wp-block-heading">4. 實務操作建議</h2>



<p>若您計畫將 Web Log 傳送到境外資安分析平台：</p>



<ol class="wp-block-list">
<li><strong>確認合約</strong>：確保服務供應商（如 CDN 或 WAF 服務商）符合資安法規要求，且有提供資料安全保護協議。</li>



<li><strong>稽核準備</strong>：確保當教育部或資通安全署進行資安稽核時，您能在校內調取出「完整、未經過境外過濾」的原始日誌。</li>



<li><strong>隱私宣告</strong>：在大學官網的「隱私權政策」中，應載明會蒐集存取紀錄，並可能用於資安防護目的。</li>
</ol>



<p>您是打算使用 <strong>境外 CDN/WAF（如 Cloudflare）</strong>，還是要將 Log 匯入到 <strong>國外的總部或第三方分析軟體</strong> 中？不同的使用情境，對合規文件的要求也會有所不同。</p>



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



<p>若您是公立大學（公務機關），計畫將 <strong>Web Log</strong> 匯入 <strong>Azure Monitor (Log Analytics)</strong>，主要會涉及「資料儲存地」與「公務雲端規範」兩大重點。</p>



<p>以下是針對您的情境（Azure 境外分析）的具體合規分析與建議：</p>



<h2 class="wp-block-heading">1. Azure 資料駐留 (Data Residency) 的選擇</h2>



<p>Azure 雖然是境外廠商，但他在台灣已有資料中心。</p>



<ul class="wp-block-list">
<li><strong>建議做法</strong>：在建立 Log Analytics Workspace 時，區域（Region）請優先選擇 <strong>Taiwan North (台灣北部)</strong>。</li>



<li><strong>合規意義</strong>：若 Log 儲存在台灣本地節點，則不屬於「資料出境」，可直接規避《個資法》第 21 條關於國際傳輸的複雜限制，也最符合教育部對公務機關「資料在地化」的期待。</li>
</ul>



<h2 class="wp-block-heading">2. 若必須傳輸至國外區域（如 East US 或 Singapore）</h2>



<p>若因特定功能或預算考量需傳往國外，公立大學須滿足以下條件：</p>



<ul class="wp-block-list">
<li><strong>個資去識別化</strong>：在 Log 發送至 Azure 之前，應透過 Azure Monitor Agent (AMA) 的 <strong>資料收集規則 (DCR)</strong> 或中繼伺服器，將 URL 參數中的學號、身分證字號或使用者帳號進行 <code>Hashing</code> 或 <code>Masking</code>（遮罩）。</li>



<li><strong>排除具資安疑慮之廠商</strong>：Azure 屬美商，符合行政院針對公務機關使用雲端服務的合格供應商範疇（非大陸廠牌）。</li>
</ul>



<h2 class="wp-block-heading">3. 遵守《資通安全管理法》子法規範</h2>



<p>身為 B 級（或以上）機關，將 Web Log 匯入 Azure 時需確保：</p>



<ul class="wp-block-list">
<li><strong>完整性與防竄改</strong>：Azure Log Analytics 具備唯讀特性，符合資安法對日誌不可竄改的要求。</li>



<li><strong>備份義務</strong>：法律要求 Log 需保存 <strong>6 個月</strong>。雖然 Azure 可以設定保留期，但建議校內仍需留有一份原始 Log 備份，以應付教育部或資安署的實地稽核。</li>



<li><strong>委外資安稽核</strong>：公立大學將資通業務委外處理（使用雲端算委外的一種），應每年對受託資服商進行資安稽核。實務上通常以查閱微軟提供的 <strong>合規性報告 (Compliance Reports, 如 SOC 2)</strong> 代替實地查核。</li>
</ul>



<h2 class="wp-block-heading">4. 實務操作風險提醒</h2>



<ul class="wp-block-list">
<li><strong>IP 位址爭議</strong>：雖然 IP 位址在台灣目前的法律實務中，對於是否屬於「個資」仍有討論空間，但在公務機關的嚴格標準下，建議將 IP 的最後一碼（Last Octet）遮蓋後再傳往境外區域，可大幅降低合規壓力。</li>
</ul>



<p><strong>總結建議：</strong><br>最省事的合規方式是將 Azure Log Analytics Workspace 建立在 <strong>台灣區域 (Taiwan North)</strong>。若必須放在國外，請務必先在校內端完成 <strong>敏感欄位遮蓋</strong>。</p>



<p>您目前預計匯入的 Log 數量大嗎？是否需要針對 <strong>自動化遮蓋敏感資訊</strong> 的技術設定提供建議？</p>



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



<p>這確實是目前許多單位在評估 <strong>Taiwan North (台灣北部)</strong> 節點時會遇到的典型問題：<strong>「資料在地化」與「服務完整度」的衝突</strong>。</p>



<p>既然因為 <code>Container Apps</code> 的技術限制必須使用境外區域（例如 <code>East Asia</code> 香港或 <code>Southeast Asia</code> 新加坡），針對公立大學（公務機關）的身份，您可以採取以下<strong>合規路徑</strong>來處理 Web Log：</p>



<h2 class="wp-block-heading">1. 採取「混合式」日誌架構 (最推薦)</h2>



<p>不要直接將原始 Log 從 Container Apps 丟往境外的 Log Analytics。</p>



<ul class="wp-block-list">
<li><strong>做法</strong>：在 Container Apps 輸出的流量中，先經過一個位於校內（或國內雲端 VM）的 <strong>中繼站 (Forwarder/Collector)</strong>，例如 Fluentd 或 OpenTelemetry。</li>



<li><strong>關鍵動作</strong>：在中繼站進行 <strong>去識別化 (De-identification)</strong>。
<ul class="wp-block-list">
<li>遮蓋 URL 中的敏感字串（學號、姓名）。</li>



<li>將來源 IP 去標籤（例如 192.168.1.100 改為 192.168.1.x）。</li>
</ul>
</li>



<li><strong>合規點</strong>：傳出國外的資料已不具備「個資」屬性，這對教育部和稽核單位來說，合規壓力會降到最低。</li>
</ul>



<h2 class="wp-block-heading">2. 完備「委外資安」行政手續</h2>



<p>依據《資通安全管理法》子法，公立大學將資通業務（含 Log 存儲）委外給 Azure 時，應履行以下行政程序：</p>



<ul class="wp-block-list">
<li><strong>受託對象安全性</strong>：Azure (Microsoft) 屬非大陸廠牌，過關。</li>



<li><strong>資料國際傳輸聲明</strong>：在校內資安會議或公文中，敘明因技術限制（Taiwan North 尚無該功能），資料暫存於國外節點，並已實施去識別化措施。</li>



<li><strong>下載 SOC 報告</strong>：從 <a href="https://servicetrust.microsoft.com/">Microsoft Service Trust Portal</a> 下載最新的 <strong>SOC 1/2</strong> 或 <strong>ISO 27001</strong> 報告存檔，證明該區域已通過國際資安標準。</li>
</ul>



<h2 class="wp-block-heading">3. 設定「異地備援」至校內</h2>



<p>即便分析是在境外的 Azure Monitor 進行，法律要求的「6 個月日誌保存」建議還是要有一份在校內。</p>



<ul class="wp-block-list">
<li><strong>做法</strong>：將 Log 同時導流一份回校內的伺服器儲存。</li>



<li><strong>合規點</strong>：若資安署或教育稽核要看「原始原始碼（Raw Log）」，您可以出示校內這份。境外那份僅定義為「分析用途」，而非「唯一保存地」。</li>
</ul>



<h2 class="wp-block-heading">4. 實務折衷方案：選用「新加坡」優於「香港」</h2>



<p>若必須選境外：</p>



<ul class="wp-block-list">
<li><strong>優先選 Southeast Asia (新加坡)</strong>：政治風險相對較低，且與台灣網路連線品質優。</li>



<li><strong>避免 East Asia (香港)</strong>：雖然連線快，但因《國安法》等因素，部分公務機關在資安稽核時對香港區域的資料存放會更為敏感。</li>
</ul>



<p><strong>總結建議：</strong><br>既然技術上非出國不可，請務必在 Log 送入 Azure 之前，先在校園端過濾掉<strong>明文個資</strong>。只要 Log 裡沒有「可辨識特定人」的資料，它就是純粹的「技術數據」，出境的爭議會小很多。</p>



<p>您目前的 Container Apps 是要處理 <strong>校內行政系統</strong> 的 Web 流量，還是 <strong>一般學術研究/宣傳型</strong> 的網站？（後者的敏感度較低，處理起來會更彈性）</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2026/04/taiwan-access-log-overseas/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>App Service (Web App) 轉向 Azure Container Apps (ACA) 完整 CLI 指令</title>
		<link>https://stackoverflow.max-everyday.com/2026/04/azure-web-app-to-aca/</link>
					<comments>https://stackoverflow.max-everyday.com/2026/04/azure-web-app-to-aca/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Tue, 21 Apr 2026 09:59:18 +0000</pubDate>
				<category><![CDATA[Azure 筆記]]></category>
		<category><![CDATA[azure]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=8319</guid>

					<description><![CDATA[整理了從建立 Resource Group 到佈...]]></description>
										<content:encoded><![CDATA[
<p>整理了從建立 Resource Group 到佈署 ACA 的完整 CLI 指令。</p>



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



<h3 class="wp-block-heading">第一部分：Azure CLI 指令集</h3>



<p>請確保你的 Azure CLI 已安裝 <code>containerapp</code> 擴充功能：<code>az extension add --name containerapp</code>。</p>



<h4 class="wp-block-heading">1. 建立資源群組 (Resource Group)</h4>



<p>Bash</p>



<pre class="wp-block-code"><code>az group create \
  --name my-aca-rg \
  --location taiwannorth
</code></pre>



<h4 class="wp-block-heading">2. 建立 Log Analytics 工作區</h4>



<p>ACA 需要一個工作區來儲存日誌。</p>



<p>Bash</p>



<pre class="wp-block-code"><code>az monitor log-analytics workspace create \
  --resource-group my-aca-rg \
  --workspace-name my-aca-logs \
  --location taiwannorth
</code></pre>



<h4 class="wp-block-heading">3. 建立 Container Apps Environment</h4>



<p>這是 ACA 的基礎設施邊界。根據你的需求，我們不設定 VNet 整合。</p>



<p>Bash</p>



<pre class="wp-block-code"><code>az containerapp env create \
  --name my-aca-env \
  --resource-group my-aca-rg \
  --logs-workspace my-aca-logs \
  --location taiwannorth
</code></pre>



<h4 class="wp-block-heading">4. 佈署 Container App</h4>



<p>假設你的映像檔在 Docker Hub 或公共倉庫（若是私有倉庫如 ACR，則需額外參數）。</p>



<p>Bash</p>



<pre class="wp-block-code"><code>az containerapp create \
  --name my-web-app \
  --resource-group my-aca-rg \
  --environment my-aca-env \
  --image mcr.microsoft.com/k8se/quickstart:latest \
  --target-port 80 \
  --ingress external \
  --query properties.configuration.ingress.fqdn
</code></pre>



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



<h3 class="wp-block-heading">第二部分：關於「不連內網」與「其他服務整合」</h3>



<p>你的需求是 <strong>「不需連內網 (VNet)」</strong>，這在 ACA 中被稱為 <strong>Managed Environment</strong>。</p>



<h4 class="wp-block-heading">1. 這是否會影響與其他 Azure 服務的溝通？</h4>



<p><strong>不會。</strong> 即使不加入自定義 VNet，ACA 預設就能透過 <strong>公用端點 (Public Endpoint)</strong> 與其他 Azure 服務溝通，例如：</p>



<ul class="wp-block-list">
<li><strong>Azure SQL / Cosmos DB：</strong> 透過公用存取或防火牆白名單連接。</li>



<li><strong>Blob Storage：</strong> 透過 SDK 直接存取。</li>



<li><strong>Static Web Apps (SWA)：</strong> 這兩者經常搭配使用。</li>
</ul>



<h4 class="wp-block-heading">2. 與「靜態網頁 (Static Web Apps)」的整合場景</h4>



<p>這是一個非常經典的架構：</p>



<ul class="wp-block-list">
<li><strong>前端：</strong> 使用 <strong>Azure Static Web Apps</strong> 佈署 React/Vue/Angular。它全球佈署，速度快且成本極低。</li>



<li><strong>後端：</strong> 使用 <strong>Azure Container Apps</strong> 作為 API Server 或處理複雜邏輯。</li>



<li><strong>串接方式：</strong> 1. 你可以在 SWA 的設定中，將 ACA 的 FQDN 設定為 API 的來源。2. 利用 SWA 的 <strong>&#8220;Bring your own backend&#8221; (BYOB)</strong> 功能，將 ACA 連結到 SWA，這樣前端請求 <code>/api</code> 時，Azure 會自動路由到你的 ACA，且不需要處理跨網域 (CORS) 問題。</li>
</ul>



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



<h3 class="wp-block-heading">補充建議</h3>



<ul class="wp-block-list">
<li><strong>成本控制：</strong> ACA 的優勢在於可以「縮減至 0 (Scale to Zero)」，如果你的服務不是 24/7 都有流量，這比 Web App 便宜非常多。</li>



<li><strong>安全性：</strong> 既然不使用 VNet，建議在 ACA 內啟用 <strong>Managed Identity (受控識別)</strong> 來存取 Key Vault 或資料庫，這樣就不需要在程式碼裡寫死密碼。</li>
</ul>



<p>你的 Web App 目前是跑什麼樣的程式語言？如果涉及私有映像檔倉庫（如 ACR），我再幫你補上相關的認證指令。</p>



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



<h2 class="wp-block-heading">佈署 Container App, 只能用 http (port:80) 不能用 https 連?</h2>



<p>在 Azure Container Apps (ACA) 中，關於連線協議的設計非常明確：<strong>對外（Ingress）強制使用 HTTPS</strong>，而<strong>內部（Container 之間）則可以使用 HTTP</strong>。</p>



<p>以下是針對你疑問的詳細拆解：</p>



<h3 class="wp-block-heading">1. 對外連線：強制 HTTPS</h3>



<p>當你將 <code>ingress</code> 設定為 <code>external</code> 時，Azure 會自動為你的 Container App 提供一個預設的 FQDN（例如 <code>my-app.taiwannorth.azurecontainerapps.io</code>），並且：</p>



<ul class="wp-block-list">
<li><strong>自動處理 SSL/TLS 憑證：</strong> Azure 會自動管理並為該網址簽發憑證。</li>



<li><strong>強制導向：</strong> 預設情況下，所有來自外部的 <strong>HTTP (Port 80)</strong> 請求都會被<strong>自動轉址 (Redirect) 到 HTTPS (Port 443)</strong>。</li>



<li><strong>安全性：</strong> 你不需要在容器內部處理複雜的憑證設定，這些都在 ACA 的邊界（Ingress）層級處理掉了。</li>
</ul>



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



<h3 class="wp-block-heading">2. 內部通訊：可以使用 HTTP</h3>



<p>雖然外部使用者必須透過 HTTPS 連線，但你的 <strong>容器內部（Container Port）</strong> 通常只需要監聽 HTTP 即可。</p>



<ul class="wp-block-list">
<li><strong>SSL Termination (SSL 卸載)：</strong> 流量到達 ACA 環境的入口時，HTTPS 會被「卸載」。接著，ACA 的負載平衡器會透過 <strong>HTTP</strong> 將流量轉發給你的容器。</li>



<li><strong>指令中的 <code>--target-port 80</code>：</strong> 這就是告訴 ACA，你的程式碼在容器內監聽的是 Port 80。</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>[!TIP]</p>



<p><strong>結論：</strong> 使用者訪問你的網址時「一定是用 https」，但你寫程式時，只要讓 App 監聽 http port 就可以了。</p>
</blockquote>



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



<h3 class="wp-block-heading">3. 如果你想更動 Ingress 設定</h3>



<p>如果你希望調整，以下是相關的指令邏輯：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>需求</strong></td><td><strong>指令參數</strong></td><td><strong>說明</strong></td></tr></thead><tbody><tr><td><strong>開放給所有人</strong></td><td><code>--ingress external</code></td><td>提供 HTTPS 公開網址。</td></tr><tr><td><strong>僅限環境內溝通</strong></td><td><code>--ingress internal</code></td><td>只有同個 ACA Environment 內的服務可互連，不對外。</td></tr><tr><td><strong>指定容器監聽 Port</strong></td><td><code>--target-port 8080</code></td><td>如果你的 App 跑在 8080，請務必對應。</td></tr><tr><td><strong>傳輸協議</strong></td><td><code>--transport http</code></td><td>預設為 http，支援 http2 或 grpc。</td></tr></tbody></table></figure>



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



<h3 class="wp-block-heading">4. 與靜態網頁 (Static Web App) 串接時的 HTTPS</h3>



<p>既然你提到可能配合「靜態網頁」使用：</p>



<ul class="wp-block-list">
<li><strong>Static Web Apps</strong> 同樣強制 HTTPS。</li>



<li>由於兩者都是 HTTPS，在瀏覽器端發送 API 請求時，不會遇到「混合內容 (Mixed Content)」的安全警告。</li>
</ul>



<p><strong>最後一個小提醒：</strong></p>



<p>在 <code>taiwannorth</code> (台北) 部署時，請確認你的 CLI 版本是最新的，因為新區域的資源類型有時需要最新版的 API 支援。</p>



<p>你的程式碼是使用特定的框架（如 .NET, Node.js, Python）嗎？我可以幫你確認該框架預設的 Port 是否需要調整。</p>



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



<h2 class="wp-block-heading">&#8211;target-port 參數要換成 443?</h2>



<p>不需要。在 <code>--target-port</code> 參數中，你<strong>應該維持設定為你的程式（容器）真正監聽的 Port</strong>（通常是 80, 8080 或 5000），而不是 443。</p>



<p>這裡有一個關鍵觀念：<strong>ACA 的 Ingress 層會幫你做「SSL 卸載 (SSL Termination)」。</strong></p>



<h3 class="wp-block-heading">為什麼不填 443？</h3>



<ol start="1" class="wp-block-list">
<li><strong>流量轉發流程：</strong>
<ul class="wp-block-list">
<li><strong>外部使用者</strong>：透過 <code>https://...</code> (Port 443) 訪問你的 FQDN。</li>



<li><strong>ACA Ingress 控制器</strong>：接收 HTTPS 流量，處理 SSL 憑證，解密後將流量轉為 <strong>HTTP</strong>。</li>



<li><strong>你的容器</strong>：接收來自 Ingress 轉發的 <strong>HTTP</strong> 流量。</li>
</ul>
</li>



<li><strong>容器內部配置：</strong>大多數 Docker 映像檔（例如 Nginx, Node.js, Python）在容器內預設都是跑 HTTP (Port 80/8080)。如果你強行設定 <code>--target-port 443</code>，ACA 會試圖把流量導向容器的 443 Port，但如果你的程式沒在該 Port 監聽或沒配置憑證，連線就會失敗。</li>
</ol>



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



<h3 class="wp-block-heading">指令情境建議</h3>



<ul class="wp-block-list">
<li><strong>如果你的程式碼監聽 80 (如 Nginx 預設)：</strong>Bash<code>--target-port 80</code></li>



<li><strong>如果你的程式碼監聽 8080 (如 Spring Boot 或許多 Node.js 框架)：</strong>Bash<code>--target-port 8080</code></li>



<li><strong>只有在一種極罕見的情況下才用 443：</strong>除非你自己把 SSL 憑證打包進 Docker Image 裡，並且讓你的程式碼直接監聽 443 Port 並處理加密（這在雲端原生架構中不建議，因為管理憑證很麻煩）。</li>
</ul>



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



<h3 class="wp-block-heading">總結</h3>



<p>外部連線時，Azure 會<strong>強制幫你加密</strong>，所以使用者看到的絕對是 <code>https://</code>。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>驗證方法：</strong></p>



<p>部署完成後，你可以試著在瀏覽器輸入 <code>http://&lt;你的網址&gt;</code>，你會發現它會自動跳轉成 <code>https://&lt;你的網址&gt;</code>。這證明了 HTTPS 是在「入口處」就處理好的，跟你的 <code>--target-port</code> 設定無關。</p>
</blockquote>



<p>目前你的 Web App 程式碼裡面，監聽的是哪個 Port 呢？</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2026/04/azure-web-app-to-aca/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>測試台灣連 japan east / 新加坡反應時間</title>
		<link>https://stackoverflow.max-everyday.com/2026/04/azure-japan-east-response-time/</link>
					<comments>https://stackoverflow.max-everyday.com/2026/04/azure-japan-east-response-time/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Tue, 21 Apr 2026 09:49:59 +0000</pubDate>
				<category><![CDATA[Azure 筆記]]></category>
		<category><![CDATA[azure]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=8313</guid>

					<description><![CDATA[power shell 腳本, 請直接複製執行這...]]></description>
										<content:encoded><![CDATA[
<p>power shell 腳本, 請直接複製執行這兩段指令：</p>



<h3 class="wp-block-heading">1. 實測新加坡速度 (Southeast Asia)</h3>



<p>PowerShell</p>



<pre class="wp-block-code"><code>$time = Measure-Command { $socket = New-Object Net.Sockets.TcpClient; $socket.Connect("20.195.69.73", 443); $socket.Close() }
Write-Host "新加坡 (Southeast Asia) 回應時間: $($time.TotalMilliseconds) ms"
</code></pre>



<h3 class="wp-block-heading">2. 實測日本東部速度 (Japan East)</h3>



<p>PowerShell</p>



<pre class="wp-block-code"><code>$time = Measure-Command { $socket = New-Object Net.Sockets.TcpClient; $socket.Connect("20.43.64.106", 443); $socket.Close() }
Write-Host "日本東部 (Japan East) 回應時間: $($time.TotalMilliseconds) ms"</code></pre>



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



<p>執行結果:</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="321" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2026/04/WindowsTerminal_2026-04-21-17-46-5m-1024x321.jpg?v=1776764857" alt="" class="wp-image-8314" srcset="https://stackoverflow.max-everyday.com/wp-content/uploads/2026/04/WindowsTerminal_2026-04-21-17-46-5m-1024x321.jpg?v=1776764857 1024w, https://stackoverflow.max-everyday.com/wp-content/uploads/2026/04/WindowsTerminal_2026-04-21-17-46-5m-600x188.jpg?v=1776764857 600w, https://stackoverflow.max-everyday.com/wp-content/uploads/2026/04/WindowsTerminal_2026-04-21-17-46-5m-768x241.jpg?v=1776764857 768w, https://stackoverflow.max-everyday.com/wp-content/uploads/2026/04/WindowsTerminal_2026-04-21-17-46-5m-1536x482.jpg?v=1776764857 1536w, https://stackoverflow.max-everyday.com/wp-content/uploads/2026/04/WindowsTerminal_2026-04-21-17-46-5m-2048x643.jpg?v=1776764857 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>數據出來了，結果非常明確：<strong>日本東部 (Japan East) 的物理連線速度明顯優於新加坡</strong>，快了將近 <strong>27ms</strong> (約 40%)。</p>



<p>在網路環境下，42ms 是一個非常漂亮的速度。既然日本區的 TCP 連線反應更快，我們就選 <strong><code>japaneast</code></strong>。</p>



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



<h3 class="wp-block-heading">最終決定：使用 Japan East (日本東部)</h3>



<p>雖然它比較快，但因為你的環境 DNS 解析不穩，建議你在執行 Azure 指令前，先確保你的環境能正確解析網域名稱。</p>



<p><strong>解決 DNS 不穩的小技巧：</strong> 如果你之後又遇到 <code>Name resolution failed</code>，請將你的電腦 DNS 暫時手動設定為 <code>8.8.8.8</code> (Google) 或 <code>1.1.1.1</code> (Cloudflare)，這通常能解決學術網路對部分 Azure 區域解析不良的問題。</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2026/04/azure-japan-east-response-time/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure 的 Log Analytics Workspace</title>
		<link>https://stackoverflow.max-everyday.com/2026/04/azure-log-analytics-workspace/</link>
					<comments>https://stackoverflow.max-everyday.com/2026/04/azure-log-analytics-workspace/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Tue, 21 Apr 2026 09:44:29 +0000</pubDate>
				<category><![CDATA[Azure 筆記]]></category>
		<category><![CDATA[azure]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=8310</guid>

					<description><![CDATA[在 Azure 中，Log Analytics ...]]></description>
										<content:encoded><![CDATA[
<p>在 Azure 中，<strong>Log Analytics Workspace</strong> 是屬於 <code>monitor</code> 指令集的一部分。要建立它，你需要使用 <code>az monitor log-analytics workspace create</code>。</p>



<p>以下是完整的建立步驟與語法：</p>



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



<h3 class="wp-block-heading">1. 建立 Log Analytics Workspace</h3>



<p>你可以直接執行以下指令來建立一個新的工作區：</p>



<p>PowerShell</p>



<pre class="wp-block-code"><code>az monitor log-analytics workspace create `
  --resource-group $RESOURCE_GROUP `
  --workspace-name $WORKSPACE_NAME `
  --location $LOCATION
</code></pre>



<h3 class="wp-block-heading">2. 為什麼需要它？</h3>



<p>在建立 Container App Environment (CAE) 時，工作區就像是一個「大型儲存桶」，負責接收並儲存容器產生的所有日誌（Logs）和指標（Metrics）。</p>



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



<h3 class="wp-block-heading">3. 自動化整合腳本 (從建立到取得 ID/Key)</h3>



<p>為了讓你後續建立 Container App Environment 順利，建議依照這個流程操作：</p>



<p>PowerShell</p>



<pre class="wp-block-code"><code># 設定 Workspace 名稱 (自定義)
$WORKSPACE_NAME = "log-pr-prod-twn-01"

# Step A: 建立 Workspace
az monitor log-analytics workspace create `
  --resource-group $RESOURCE_GROUP `
  --workspace-name $WORKSPACE_NAME `
  --location $LOCATION

# Step B: 取得該 Workspace 的 ID
$WORKSPACE_ID = az monitor log-analytics workspace show `
  --resource-group $RESOURCE_GROUP `
  --workspace-name $WORKSPACE_NAME `
  --query id --output tsv

# Step C: 取得該 Workspace 的 Key
$WORKSPACE_KEY = az monitor log-analytics workspace get-shared-keys `
  --resource-group $RESOURCE_GROUP `
  --workspace-name $WORKSPACE_NAME `
  --query primarySharedKey --output tsv

# Step D: 現在你可以成功建立 Container App Env 了！
az containerapp env create `
  --name $CONTAINERAPP_ENVIRONMENT `
  --resource-group $RESOURCE_GROUP `
  --location $LOCATION `
  --logs-workspace-id $WORKSPACE_ID `
  --logs-workspace-key $WORKSPACE_KEY
</code></pre>



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



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 小提醒</h3>



<ul class="wp-block-list">
<li><strong>定價層 (Pricing Tier)</strong>：預設建立的會是 <code>PerGB2018</code>，這是目前的標準定價模式，按量計費。</li>



<li><strong>保留天數</strong>：預設通常會保留 30 天的日誌，如果需要更長，可以在建立後調整。</li>



<li><strong>資源群組</strong>：請確保 <code>$RESOURCE_GROUP</code> 已經先建立好了（<code>az group create</code>），否則指令會報錯。</li>
</ul>



<p>你現在的 <code>$RESOURCE_GROUP</code> 和 <code>$LOCATION</code> 變數都已經設定好了嗎？（例如 <code>$LOCATION = "eastasia"</code>）</p>



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



<p>關於 Azure Log Analytics Workspace 的計費，這是一個「進來要錢、留著要錢、查一般不用錢」的邏輯。</p>



<p>以下是針對 2026 年最新計費模式的詳細拆解：</p>



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



<h3 class="wp-block-heading">1. 實際會被收多少？ (按量計費)</h3>



<p>基本的「隨用隨付 (Pay-As-You-Go)」主要由兩個部分組成：</p>



<ul class="wp-block-list">
<li><strong>資料擷取 (Ingestion)：</strong> 每 GB 約為 <strong>$2.30 USD</strong>。
<ul class="wp-block-list">
<li><em>註：每個月通常有前 5 GB 的免費額度。</em></li>
</ul>
</li>



<li><strong>資料保留 (Retention)：</strong> * <strong>前 31 天免費</strong>。
<ul class="wp-block-list">
<li>超過 31 天後，每 GB 每月約收 <strong>$0.10 USD</strong>。</li>



<li>如果你是為了法規需要存好幾年（長效保留），價格會降到每 GB 約 <strong>$0.02 USD</strong>。</li>
</ul>
</li>
</ul>



<p><strong>簡單試算：</strong></p>



<p>如果你每天產生 1 GB 的日誌，一個月 30 GB。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>(30GB &#8211; 5GB 免費) × $2.30 = <strong>$57.5 USD / 月</strong> (約台幣 $1,800)。</p>
</blockquote>



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



<h3 class="wp-block-heading">2. 分析（查詢）需要錢嗎？</h3>



<p><strong>這取決於你使用的「資料層次 (Tier)」：</strong></p>



<ul class="wp-block-list">
<li><strong>Analytics Logs (預設)：</strong> <strong>查詢完全免費</strong>。你可以無限次執行 KQL 查詢來產出圖表。</li>



<li><strong>Basic Logs (基本日誌)：</strong> 這種層次擷取很便宜（約 $0.50/GB），但<strong>查詢要錢</strong>，每掃描 1 GB 資料約收 <strong>$0.005 USD</strong>。適合存那些「平常不看，出事才查」的資料。</li>



<li><strong>Search Job (搜尋作業)：</strong> 如果要在海量歷史資料中搜尋，會按掃描量計費。</li>
</ul>



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



<h3 class="wp-block-heading">3. 定價層 (Pricing Tiers)</h3>



<p>除了按量計費，如果你資料量很大，可以使用「承諾層級 (Commitment Tiers)」來打折：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>層級</strong></td><td><strong>每日資料量</strong></td><td><strong>折扣幅度 (預估)</strong></td></tr></thead><tbody><tr><td><strong>隨用隨付</strong></td><td>無限制</td><td>無折扣</td></tr><tr><td><strong>100 GB/日</strong></td><td>固定收 100 GB 的錢</td><td>約打 <strong>85 折</strong></td></tr><tr><td><strong>200 GB/日</strong></td><td>固定收 200 GB 的錢</td><td>約打 <strong>8 折</strong></td></tr><tr><td><strong>500 GB/日</strong></td><td>固定收 500 GB 的錢</td><td>約打 <strong>7 折</strong></td></tr></tbody></table></figure>



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



<h3 class="wp-block-heading">4. 有 EPS (每秒事件數) 上限嗎？</h3>



<p>Azure Log Analytics <strong>沒有嚴格的 EPS 硬性上限</strong>，它是彈性擴張的，但有以下<strong>限流 (Throttling)</strong> 規則：</p>



<ul class="wp-block-list">
<li><strong>資料擷取速度：</strong> 單一個 Workspace 通常支援到 <strong>6 GB/分鐘</strong> 的擷取速度。如果超過，可能會遇到延遲，但資料不會遺失（會排隊）。</li>



<li><strong>API 調用限制：</strong> 如果你是透過 API 狂發日誌，每分鐘約有 200 次請求的限制。</li>



<li><strong>查詢限制：</strong> 為了防止惡意查詢榨乾資源，單一查詢最多跑 10 分鐘，且回傳結果上限為 30,000 列。</li>
</ul>



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



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 專業建議：如何省錢？</h3>



<ol start="1" class="wp-block-list">
<li><strong>過濾掉沒用的日誌：</strong> 在 <code>az containerapp</code> 設定中，只傳送「錯誤 (Error)」或「重要 (Warning)」等級的日誌到 Workspace。</li>



<li><strong>善用 Basic Tier：</strong> 對於開發環境或測試環境的日誌，可以設定為 <code>Basic</code> 模式來節省 75% 的擷取成本。</li>



<li><strong>設定預算上限 (Daily Cap)：</strong> 你可以設定 Workspace 每天最多只能收多少 GB（例如 5GB），避免因為程式 Bug 產生無窮迴圈 Log 導致帳單爆炸。</li>
</ol>



<p>你目前預計每天產生的日誌量大約是多少？如果量很大，我可以直接幫你算承諾層級的划算程度。</p>



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



<h2 class="wp-block-heading">台灣資案法規, log 可以放其他國家嗎?</h2>



<p>這是一個非常關鍵的合規性問題。在台灣，Log（日誌）是否可以存放於境外，取決於你的<strong>產業屬性</strong>、<strong>公司身分</strong>以及 <strong>Log 內是否包含個人資料（PII）</strong>。</p>



<p>依照 2026 年最新的法規趨勢與《資通安全管理法》，我為你整理如下：</p>



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



<h3 class="wp-block-heading">1. 公務機關與關鍵資訊基礎設施 (CII)</h3>



<p>如果你屬於政府單位、公務機關，或受託開發的廠商：</p>



<ul class="wp-block-list">
<li><strong>原則：禁止。</strong> 根據資安署規定，公務機關雲端資料（含備份、備援、日誌）的實體所在地<strong>不得位於大陸地區（含港澳）</strong>。</li>



<li><strong>落地要求：</strong> 對於高等級資安系統，通常要求資料儲存與處理需在<strong>本國境內</strong>。即使使用雲端，也傾向於選擇有「台灣資料中心」的服務（如 Azure 台灣區域）。</li>
</ul>



<h3 class="wp-block-heading">2. 特殊監管產業 (如金融、醫療)</h3>



<ul class="wp-block-list">
<li><strong>金融業：</strong> 受金管會高度監管。雖然目前法規已放寬雲端委外，但如果 Log 涉及客戶交易明細或個人敏感資料，通常需要報備，且必須確保受監管單位（金管會）能隨時進行實地稽核。</li>



<li><strong>醫療業：</strong> 根據最新的電子病歷及相關法規，涉及病患隱私的資料與 Log 通常要求存放於境內。</li>
</ul>



<h3 class="wp-block-heading">3. 一般民間企業 (受《個資法》規範)</h3>



<p>如果你是一般民間企業，Log 是否出境主要看 <strong>《個人資料保護法》第 21 條</strong>：</p>



<ul class="wp-block-list">
<li><strong>可以出境，但有條件：</strong> 除非主管機關（如經濟部、數發部）針對特定產業發布禁止令（例如過去曾禁止電商將個資傳往大陸），否則原則上可以國際傳輸。</li>



<li><strong>保護措施：</strong> 你必須確保接收資料的國家對個資有完善保護，且必須在隱私政策中告知用戶。</li>
</ul>



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



<h3 class="wp-block-heading">4. 實務建議：Log 存放於 Azure 的策略</h3>



<p>既然你在使用 Azure，建議採取以下三種策略來規避法律風險：</p>



<h4 class="wp-block-heading">方案 A：使用 Azure 台灣區域 (Taiwan North)</h4>



<p>Azure 已經在台灣（桃園/板橋一帶）設立資料中心。</p>



<ul class="wp-block-list">
<li><strong>做法：</strong> 建立 Log Analytics Workspace 時，將 <code>Location</code> 設定為 <code>Taiwan North</code>。</li>



<li><strong>優點：</strong> 滿足最嚴苛的「資料落地」要求，且網路延遲最低。</li>
</ul>



<h4 class="wp-block-heading">方案 B：資料去識別化 (Data Masking)</h4>



<p>如果你的應用程式 Log 包含使用者的 <strong>IP、Email、手機號碼</strong>，這些都屬於個資。</p>



<ul class="wp-block-list">
<li><strong>做法：</strong> 在將 Log 送往 Log Analytics 之前，在應用程式端進行加密（Hash）或遮罩處理。</li>



<li><strong>優點：</strong> 脫敏後的 Log 就不再屬於《個資法》定義的個人資料，存放於新加坡（Southeast Asia）或美國通常沒有合規問題。</li>
</ul>



<h4 class="wp-block-heading">方案 C：分層儲存</h4>



<ul class="wp-block-list">
<li><strong>做法：</strong> * <strong>一般日誌：</strong> 放境外（便宜）。
<ul class="wp-block-list">
<li><strong>稽核日誌 (Audit Logs)：</strong> 包含敏感操作或個資，強制放在台灣境內或地端。</li>
</ul>
</li>
</ul>



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



<h3 class="wp-block-heading">總結檢查清單</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>情況</strong></td><td><strong>是否可放境外 (如新加坡/美國)？</strong></td><td><strong>備註</strong></td></tr></thead><tbody><tr><td><strong>公務機關 / 關鍵基設</strong></td><td><strong>否</strong></td><td>必須在本國境內。</td></tr><tr><td><strong>涉及個資的 Log</strong></td><td><strong>需評估</strong></td><td>需符合個資法國際傳輸規定。</td></tr><tr><td><strong>純系統/效能 Log</strong></td><td><strong>是</strong></td><td>通常無法律限制。</td></tr><tr><td><strong>中國地區 (含港澳)</strong></td><td><strong>絕對禁止</strong></td><td>台灣資安法明確排斥。</td></tr></tbody></table></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>提示：</strong> 雖然 Azure <code>East Asia</code> 指的是香港，但根據台灣目前的資安政策，<strong>高度建議不要將涉及個資或資安的 Log 放在香港</strong>，建議優先選擇 <code>Taiwan North</code>。</p>
</blockquote>



<p>你的應用程式是否會處理到身分證字號、信用卡號等敏感資料並印在 Log 裡呢？</p>



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



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="84" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2026/04/WindowsTerminal_2026-04-21-17-54-5n-1024x84.jpg?v=1776765301" alt="" class="wp-image-8317" srcset="https://stackoverflow.max-everyday.com/wp-content/uploads/2026/04/WindowsTerminal_2026-04-21-17-54-5n-1024x84.jpg?v=1776765301 1024w, https://stackoverflow.max-everyday.com/wp-content/uploads/2026/04/WindowsTerminal_2026-04-21-17-54-5n-600x49.jpg?v=1776765301 600w, https://stackoverflow.max-everyday.com/wp-content/uploads/2026/04/WindowsTerminal_2026-04-21-17-54-5n-768x63.jpg?v=1776765301 768w, https://stackoverflow.max-everyday.com/wp-content/uploads/2026/04/WindowsTerminal_2026-04-21-17-54-5n-1536x126.jpg?v=1776765301 1536w, https://stackoverflow.max-everyday.com/wp-content/uploads/2026/04/WindowsTerminal_2026-04-21-17-54-5n-2048x168.jpg?v=1776765301 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<pre class="wp-block-code"><code>az containerapp env create `
>>   --name $CONTAINERAPP_ENVIRONMENT `
>>   --resource-group $RESOURCE_GROUP `
>>   --location $LOCATION `
>>   --logs-workspace-id $WORKSPACE_ID `
>>   --logs-workspace-key $WORKSPACE_KEY
You cannot create a Containerapp environment in location taiwannorth. List of eligible locations: westus2, southeastasia, swedencentral, canadacentral, westeurope, northeurope, eastus, eastus2, eastasia, australiaeast, germanywestcentral, japaneast, uksouth, westus, centralus, northcentralus, southcentralus, koreacentral, brazilsouth, westus3, francecentral, southafricanorth, norwayeast, switzerlandnorth, uaenorth, canadaeast, westcentralus, ukwest, centralindia, japanwest, australiasoutheast, francesouth, spaincentral, italynorth, polandcentral, southindia.</code></pre>



<p>看起來你撞到了 Azure 區域功能的硬傷。雖然 <strong>Taiwan North (台灣北部)</strong> 已經上線，但並非所有服務（特別是 <strong>Container Apps</strong> 這種比較新的託管服務）都會在第一時間支援該區域。</p>



<p>根據錯誤訊息，<strong>Taiwan North 目前還不支援 Container Apps Environment</strong>。</p>



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



<h3 class="wp-block-heading">1. 解決方案：更換區域</h3>



<p>既然 Log 法律合規性是你考量的重點，且台灣暫時不可用，建議改用 <strong>Singapore (southeastasia)</strong>。</p>



<ul class="wp-block-list">
<li><strong>優點：</strong> 離台灣最近，延遲低，且非中國地區，符合多數民間企業的資安規範。</li>



<li><strong>注意：</strong> 如果你改了區域，<strong>Log Analytics Workspace 也必須重新建立在同一個區域</strong>，否則會報錯或產生跨區域流量費用。</li>
</ul>



<h3 class="wp-block-heading">2. 修正後的執行腳本</h3>



<p>請依序執行以下步驟（我們把 Location 硬切到 <code>southeastasia</code>）：</p>



<p>PowerShell</p>



<pre class="wp-block-code"><code># 1. 更新區域變數
$LOCATION = "southeastasia"

# 2. 重新建立或更新 Workspace (要在同一個區域)
az monitor log-analytics workspace create `
  --resource-group $RESOURCE_GROUP `
  --workspace-name $WORKSPACE_NAME `
  --location $LOCATION

# 3. 重新抓取 ID 和 Key (確保是新的)
$WORKSPACE_ID = az monitor log-analytics workspace show --resource-group $RESOURCE_GROUP --workspace-name $WORKSPACE_NAME --query id -o tsv
$WORKSPACE_KEY = az monitor log-analytics workspace get-shared-keys --resource-group $RESOURCE_GROUP --workspace-name $WORKSPACE_NAME --query primarySharedKey -o tsv

# 4. 再次嘗試建立 Container App Environment
az containerapp env create `
  --name $CONTAINERAPP_ENVIRONMENT `
  --resource-group $RESOURCE_GROUP `
  --location $LOCATION `
  --logs-workspace-id $WORKSPACE_ID `
  --logs-workspace-key $WORKSPACE_KEY
</code></pre>



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



<h3 class="wp-block-heading">3. 關於法規的應對 (當 Location 為新加坡時)</h3>



<p>如果你的公司必須遵守「資料落地台灣」，而技術上又必須使用 Container Apps，目前有兩種彈性做法：</p>



<ul class="wp-block-list">
<li><strong>混合雲模式：</strong> 把運算放在 <code>southeastasia</code>，但資料庫（SQL/Storage）放在 <code>taiwannorth</code>。Log 則透過 <strong>Diagnostic Settings</strong> 同步一份備份回台灣境內的 Storage Account。</li>



<li><strong>等待期：</strong> 依照 2026 年的進度，台灣區域的服務正在陸續補齊。你可以先在新加坡開發，等 <code>taiwannorth</code> 支援 Container Apps 後再進行區域轉移（Region Move）。</li>
</ul>



<h3 class="wp-block-heading">4. 如何檢查該區域支援哪些服務？</h3>



<p>如果你想確認某個區域到底能不能用，可以執行：</p>



<p>PowerShell</p>



<pre class="wp-block-code"><code>az provider show -n Microsoft.App --query "resourceTypes&#91;?resourceType=='managedEnvironments'].locations" -o json
</code></pre>



<p>這會直接噴出目前全球支援 Container App Environment 的所有清單，你可以看到 <code>taiwannorth</code> 是否在裡面。</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2026/04/azure-log-analytics-workspace/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
