<?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>テクノロジー | ナギ｜システム基盤エンジニアの知見録</title>
	<atom:link href="https://sys-univ.com/category/tec/feed/" rel="self" type="application/rss+xml" />
	<link>https://sys-univ.com</link>
	<description>大手SIer20年超｜要件定義から設計・構築・試験・移行・運用まで、実務で使える知見を発信</description>
	<lastBuildDate>Tue, 10 Nov 2026 05:51:35 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</generator>
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://sys-univ.com/category/tec/feed/"/>
	<item>
		<title>AWS DataSync実行中にS3を更新するとどうなる？差分転送と切替前の確認手順</title>
		<link>https://sys-univ.com/tec/aws-datasync-s3-migration/</link>
					<comments>https://sys-univ.com/tec/aws-datasync-s3-migration/#respond</comments>
		
		<dc:creator><![CDATA[ナギ]]></dc:creator>
		<pubDate>Tue, 10 Nov 2026 05:51:25 +0000</pubDate>
				<category><![CDATA[テクノロジー]]></category>
		<category><![CDATA[AWS]]></category>
		<guid isPermaLink="false">https://sys-univ.com/?p=3604</guid>

					<description><![CDATA[十数TBのデータをAmazon S3の別バケットへ移す計画を立てていたとき、私はAWSサポートに「DataSyncの実行中に、転送元のオブジェクトを追加・上書き・削除したらどうなるか」と問い合わせました。 コピーの所要時 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">十数TBのデータをAmazon S3の別バケットへ移す計画を立てていたとき、私はAWSサポートに「DataSyncの実行中に、転送元のオブジェクトを追加・上書き・削除したらどうなるか」と問い合わせました。</p>


<p class="wp-block-paragraph">コピーの所要時間とは別に、切替の判断基準を決める必要があったからです。コピー中も業務が動くなら、転送先にはいつの時点のデータが揃うのでしょうか。<strong>DataSyncのタスクが成功したら、そのまま切り替えてよいのでしょうか。</strong></p>


<p class="wp-block-paragraph">私が移行計画で分けて考えるのは、初回コピーにかかる時間と、書き込みを止めてから切替が終わるまでの時間です。以下では、S3バケット間のコピーを例に、両方をどう見積もり、何を確認して切り替えるかを整理します。</p>



  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">1. 最大5 Gbpsで見積もれるのは、転送時間の理論下限</a></li><li><a href="#toc2" tabindex="0">2. タスクが成功した時点で、S3のデータは揃っているか</a></li><li><a href="#toc3" tabindex="0">3. 最終差分と照合を、切替手順に組み込む</a><ol><li><a href="#toc4" tabindex="0">初回コピーと最終差分を分ける</a></li><li><a href="#toc5" tabindex="0">同じサイズの上書きは、どう見分けるか</a></li><li><a href="#toc6" tabindex="0">書き込みを長く止められない場合は、S3レプリケーションを検討する</a></li></ol></li><li><a href="#toc7" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">1. 最大5 Gbpsで見積もれるのは、転送時間の理論下限</span></h2>


<p class="wp-block-paragraph">エージェントを使用しないDataSync転送では、1タスクあたり最大5 Gbpsです。たとえば20 TBを5 Gbpsで連続転送できたとしても、約8時間53分かかります。これは10進単位で容量を速度で割った試算です。実際のタスクには、対象オブジェクトの列挙や転送結果の検証も含まれます。移行計画では、<strong>本番に近いサイズ分布・件数で、起動から完了までの所要時間</strong>を測ります。</p>


<p class="wp-block-paragraph">速度を改善したい場合は、同じデータセットでBasicとEnhancedを比較します。Basicは準備・転送・検証を順に進め、Enhancedは列挙・準備・転送・検証を並行して進めます。EnhancedではAPIの <code>PrepareDuration</code>、<code>TransferDuration</code>、<code>VerifyDuration</code> がいずれも0を返すため、比較には <code>TotalDuration</code> を使います。切替リハーサルでは、タスクの時間とは別に、書き込み停止から照合・切替までを通しで計測します。</p>


<p class="wp-block-paragraph">もう一つの選択肢は、互いに重複しないプレフィックスに分け、複数のタスクを並列に実行する方法です。たとえば <code>archive/2024/</code> と <code>archive/2025/</code> を別タスクに割り当てます。並列化の効果は、<strong>最初のタスクを開始してから最後のタスクが完了するまでの時間</strong>で判断します。データ量が一方に偏ると、そのタスクの完了が全体を左右します。</p>


<p class="wp-block-paragraph">参考：<a href="https://docs.aws.amazon.com/ja_jp/datasync/latest/userguide/datasync-limits.html">AWS DataSyncのクォータ</a> ／ <a href="https://docs.aws.amazon.com/datasync/latest/userguide/choosing-task-mode.html">タスクモードの選択</a> ／ <a href="https://docs.aws.amazon.com/datasync/latest/apireference/API_TaskExecutionResultDetail.html">タスク実行結果のAPI仕様</a></p>


<h2 class="wp-block-heading"><span id="toc2">2. タスクが成功した時点で、S3のデータは揃っているか</span></h2>


<p class="wp-block-paragraph">AWSサポートからは、準備時に転送対象を洗い出し、転送時にその情報と照らし合わせる仕組みだと説明を受けました。準備中や転送中に追加・上書き・削除されたオブジェクトは、その回の転送に変更が反映されないことがあるとのことです。この処理順序はBasicの説明と整合します。S3間では2024年10月からEnhancedも選べるため、挙動やログを調べるときは、まず対象タスクのモードと検証設定を確認します。</p>


<p class="wp-block-paragraph">対策として、転送元の更新を止めてデータの状態を固定する時間を設けること、その確保が難しければS3レプリケーションなどの別の手段を検討することを勧められました。</p>


<p class="wp-block-paragraph">たとえば、Enhancedで <code>report.csv</code> の転送と検証が済んだ後、タスク全体が終了する前に、転送元で同じキーが上書きされたとします。Enhancedの既定の検証対象は、そのタスクで転送したデータです。タスクの結果が <code>SUCCESS</code> でも、上書き後の内容が転送先に反映されたかは、結果ステータスだけでは判断できません。更新のタイミングによっては、検証不一致が起きることもあります。</p>


<figure class="wp-block-table">
<table class="has-fixed-layout">
<thead>
<tr>
<th>コピー中に起きる変更</th>
<th>切替前に確認すること</th>
</tr>
</thead>
<tbody>
<tr>
<th>オブジェクトの追加</th>
<td>新しいキーが転送先に存在するか</td>
</tr>
<tr>
<th>同じキーへの上書き</th>
<td>転送先が切替時点の内容になっているか</td>
</tr>
<tr>
<th>オブジェクトの削除</th>
<td>転送先に残す方針か。削除を反映するなら、不要なキーが残っていないか</td>
</tr>
</tbody>
</table>
</figure>


<p class="wp-block-paragraph">Basicでは、対象範囲全体を転送後に検証する <code>POINT_IN_TIME_CONSISTENT</code> を選べます。これは転送後の照合設定で、書き込みを続ける転送元をある時点で固定する機能とは役割が異なります。<strong>切替の基準時点を定め、その時点の状態と転送先をどう照合するか</strong>を手順に落とします。</p>


<p class="wp-block-paragraph">参考：<a href="https://aws.amazon.com/about-aws/whats-new/2024/10/aws-datasync-performance-scalability-data-transfers/">Enhancedの提供開始</a> ／ <a href="https://docs.aws.amazon.com/datasync/latest/userguide/configure-data-verification-options.html">DataSyncの検証オプション</a> ／ <a href="https://docs.aws.amazon.com/datasync/latest/userguide/troubleshooting-task-verification.html">検証不一致のトラブルシューティング</a></p>


<h2 class="wp-block-heading"><span id="toc3">3. 最終差分と照合を、切替手順に組み込む</span></h2>


<p class="wp-block-paragraph">以下は、初回コピーを稼働中に行い、最終差分の転送前に書き込みを止められる場合の設計例です。</p>


<h3 class="wp-block-heading"><span id="toc4">初回コピーと最終差分を分ける</span></h3>


<ol class="wp-block-list">
	<li><strong>稼働中に初回コピーを行う。</strong> 結果とログを確認し、エラーや再転送が必要な対象を洗い出します。</li>


	<li><strong>転送元への更新を止める。</strong> アプリ、バッチ、外部連携などの書き込み元を洗い出し、実行中の更新が終わった時点を切替の基準にします。照合が終わるまで、転送先への業務書き込みも止めておきます。</li>


	<li><strong>差分転送を実行する。</strong> 変更分の転送に加え、転送元にないキーを転送先にも残すかを事前に決めます。削除を反映する <code>REMOVE</code> を使う場合は、転送先だけに存在するデータを消してよい範囲かを確認します。全件転送の <code>TransferMode=ALL</code> では転送先をスキャンしないため、<code>PreserveDeletedFiles=REMOVE</code> は組み合わせられません。</li>


	<li><strong>結果を照合して切り替える。</strong> タスク結果、エラーや想定外のスキップ、対象キーの不足や余分なキーを確認し、必要な範囲では内容も照合します。条件を満たしたら、参照先と書き込み先を切り替えます。</li>
</ol>


<p class="wp-block-paragraph">差分転送を再実行して転送0件になることは、補助確認に使えます。たとえば、転送元で削除されたキーを転送先に保持する設定では、転送0件でも古いキーが残り得ます。切替直前のキーとサイズの確認には、対象プレフィックスを <code>ListObjectsV2</code> で両側ともページ末尾まで取得して照合します。S3 Inventoryは日次・週次の出力なので、事前調査や監査に使います。</p>


<p class="wp-block-paragraph">参考：<a href="https://docs.aws.amazon.com/datasync/latest/apireference/API_Options.html">DataSyncのタスクオプション</a> ／ <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html">ListObjectsV2</a> ／ <a href="https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/storage-inventory.html">S3インベントリ</a></p>


<h3 class="wp-block-heading"><span id="toc5">同じサイズの上書きは、どう見分けるか</span></h3>


<p class="wp-block-paragraph">キーとサイズだけでは、同じサイズに上書きされたオブジェクトを見分けられません。大容量オブジェクトでは、ETagをそのまま内容照合に使うのにも注意が必要です。マルチパートアップロードで作られたETagはオブジェクト全体のMD5とは異なり、<strong>同じ内容でもパートの分け方が違うとETagが異なる場合があります。</strong></p>


<p class="wp-block-paragraph">オブジェクト本体を取得せずに照合するなら、両バケットで <code>HeadObject</code> を <code>ChecksumMode=ENABLED</code> で呼び出し、<strong>両方が <code>FULL_OBJECT</code> で、同じアルゴリズムのチェックサムが取得できる場合</strong>に値を比較します。たとえば、両方にオブジェクト全体の <code>ChecksumCRC64NVME</code> があれば、その値を照合します。片方しか値がない場合や、片方がパート単位の値を組み合わせる <code>COMPOSITE</code> の場合は、この方法で直接比較できません。</p>


<p class="wp-block-paragraph">比較できる値がなければ、必要な対象だけ両側から読み出し、オブジェクト全体のSHA-256を同じ方法で計算して比べます。既存データに比較可能なチェックサムがどの程度あるかを事前に確認します。読み出し照合が必要な対象が多ければ、そのデータ量と照合時間をリハーサルで測り、費用も見積もります。</p>
<p>移行費用を見積もる際は、DataSyncの料金に加え、S3のリクエスト料金も含めます。切替前の照合で両バケットを列挙したり、チェックサムを取得したり、オブジェクト本体を読み出したりする場合は、その分の <code dir="ltr">LIST</code>・`HEAD`・`GET` も見積もりに入れます。タグなども業務で使う場合は、内容のチェックサムとは別の照合項目にします。</p>


<p class="wp-block-paragraph">参考：<a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_Object.html">S3オブジェクトのETagとチェックサム</a> ／ <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html">HeadObject</a> ／ <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html">マルチパートアップロードのチェックサム</a></p>


<h3 class="wp-block-heading"><span id="toc6">書き込みを長く止められない場合は、S3レプリケーションを検討する</span></h3>


<p class="wp-block-paragraph">S3レプリケーションを使う場合は、まず転送元・転送先の両方でバージョニングを有効にします。既存バケットで有効にする場合は、上書きや削除後に残る旧バージョンの保管費用と、ライフサイクルによる保持・削除ルールを見直します。そのうえで、<strong>ライブレプリケーションのルールを先に設定し、新規書き込みを複製する経路を作ってから、S3 Batch Replicationで既存分を移します。</strong></p>


<p class="wp-block-paragraph">現行形式のレプリケーションルールでは、削除マーカーの複製は既定で無効です。複製が必要なら、ルールが対応していることを確認して明示的に有効にします。バージョンIDを指定した削除や、ライフサイクルが作成した削除マーカーは複製されないため、要件に含まれる場合は別途扱いを決めます。</p>


<p class="wp-block-paragraph">レプリケーションは非同期です。切替前には、既存分のジョブ結果とライブレプリケーションの未完了・失敗を確認し、旧バケットへの書き込みをどこで締め切るかを決めます。書き込みを一切止められない場合は、旧バケットに遅れて到達する更新も含め、アプリ側の書き込み先の切替方法を設計する必要があります。</p>


<p class="wp-block-paragraph">参考：<a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication-requirements.html">レプリケーションの要件</a> ／ <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-batch-replication-batch.html">S3 Batch Replication</a> ／ <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication-what-is-isnot-replicated.html">S3が複製する対象と削除時の挙動</a></p>


<h2 class="wp-block-heading"><span id="toc7">まとめ</span></h2>


<p class="wp-block-paragraph">移行計画に所要時間を書くときは、初回コピーと書き込み停止を別の欄にします。停止時間の欄には、最終差分だけでなく、照合と切替までの実測時間を入れます。切替判定の欄には、対象範囲、削除の扱い、内容まで確認する範囲を書きます。今回の問い合わせで私が改めて意識したのは、切替当日に迷わないよう、どの時点のデータを揃え、何が一致すれば進めるかを移行計画の段階で決めておくことです。</p>


<p class="wp-block-paragraph">&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sys-univ.com/tec/aws-datasync-s3-migration/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>OracleのLIKE検索でほぼ全件ヒット？全角アンダースコアの不具合とSQL改修・再発防止の実例</title>
		<link>https://sys-univ.com/incident/oracle-like-fullwidth-underscore/</link>
					<comments>https://sys-univ.com/incident/oracle-like-fullwidth-underscore/#respond</comments>
		
		<dc:creator><![CDATA[ナギ]]></dc:creator>
		<pubDate>Wed, 21 Oct 2026 10:20:39 +0000</pubDate>
				<category><![CDATA[トラブル]]></category>
		<category><![CDATA[テクノロジー]]></category>
		<guid isPermaLink="false">https://sys-univ.com/?p=3506</guid>

					<description><![CDATA[データベースの検索結果が想定より多いとき、SQLの書き方だけを疑っていないでしょうか。検索条件が正しく見えても、データ型や文字セット、データベースのリリースによって文字の解釈が変わることがあります。 ある処理で、全角アン [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">データベースの検索結果が想定より多いとき、SQLの書き方だけを疑っていないでしょうか。検索条件が正しく見えても、データ型や文字セット、データベースのリリースによって文字の解釈が変わることがあります。</p>


<p class="wp-block-paragraph">ある処理で、全角アンダースコア「＿」を含むデータを探したところ、意図しない大量のレコードが検索対象になる事象が発生しました。調査では、公開されていたサポート情報と実機の動作が食い違い、最終的にOracle側の不具合と確認されました。しかし、製品側に修正があるからといって、パッチ適用がプロジェクトの最適解とは限りません。</p>


<p class="wp-block-paragraph">本記事では、<strong>事象の把握→原因の切り分け→対策の比較→実施→効果確認→再発防止</strong>の過程を紹介します。あわせて、Oracle Database 19cの公式仕様に基づく現在の書き方と、読者自身が確認するための検証SQLを示します。</p>


<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>先に結論：Oracle 19cでのLIKE検索</strong></p>


<ul class="wp-block-list">
	<li>ワイルドカードは半角の<code>%</code>（0文字以上）と<code>_</code>（1文字）。全角の<code>％</code>と<code>＿</code>は通常の文字として扱うのが公式仕様です。</li>


	<li>利用者が入力した半角<code>%</code>・<code>_</code>を文字として探すときは、<code>ESCAPE</code>句で明示的にエスケープします。バインド変数だけではワイルドカード化を防げません。</li>


	<li>過去の案件で採用した<code>LIKEC</code>への一律変更は、19cでの一般的な推奨規約ではありません。照合順序・データ型も含めて、<strong>実際に使用するDB環境で検証して判断します</strong>。</li>
</ul>


<p class="wp-block-paragraph">※障害事例は特定リリースの記録ですが、Oracle 19cの説明・SQL例は公式仕様に基づいており、筆者は19c実機での再現・効果検証を実施していません。利用するリリース、文字セット、データ型、照合順序で読者自身が検証してください。</p>
</blockquote>



  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">1. 事象発生：全角アンダースコアの検索で想定外の大量ヒット</a><ol><li><a href="#toc2" tabindex="0">何を検索したかったのか</a></li><li><a href="#toc3" tabindex="0">半角・全角の違いは目視では分かりにくい</a></li></ol></li><li><a href="#toc4" tabindex="0">2. 現状把握・原因調査：仕様、データ型、実機結果を突き合わせる</a><ol><li><a href="#toc5" tabindex="0">まず再現条件を小さくする</a></li><li><a href="#toc6" tabindex="0">サポート文書と実測結果が一致しなかった</a></li></ol></li><li><a href="#toc7" tabindex="0">3. 対策の立案・評価：ORA-01424と将来互換性まで比較する</a><ol><li><a href="#toc8" tabindex="0">対策を「直せるか」ではなく「全体コスト」で比べる</a></li><li><a href="#toc9" tabindex="0">ORA-01424を生んだのはどの書き方か</a></li><li><a href="#toc10" tabindex="0">なぜLIKECをSQL規約として採用したのか――保守サポートと技術的な認識をそろえる</a></li><li><a href="#toc11" tabindex="0">今回パッチを見送り、SQL規約と運用回避を選んだ理由</a></li></ol></li><li><a href="#toc12" tabindex="0">4. 対策の実施：変更範囲を絞り、SQL規約と運用を整える</a><ol><li><a href="#toc13" tabindex="0">改修対象と運用対象を分けて展開する</a></li><li><a href="#toc14" tabindex="0">GLの役割は、技術評価と業務上の判断をつなぐこと</a></li></ol></li><li><a href="#toc15" tabindex="0">5. 効果の確認：検索結果の正しさと将来互換性を確認する</a><ol><li><a href="#toc16" tabindex="0">SQLの実行可否・検索結果・将来互換性を確認する</a></li></ol></li><li><a href="#toc17" tabindex="0">6. 歯止め：個別対処をプロジェクト全体のルールにする</a><ol><li><a href="#toc18" tabindex="0">SQL規約に判断結果を反映する</a></li><li><a href="#toc19" tabindex="0">再発防止は「注意喚起」で終わらせない</a></li></ol></li><li><a href="#toc20" tabindex="0">7. Oracle 19cではどう書くか：LIKE・ESCAPE・照合順序</a><ol><li><a href="#toc21" tabindex="0">Oracle 19cの公式仕様では全角は通常の文字</a></li><li><a href="#toc22" tabindex="0">入力値のワイルドカードはバインド変数だけでは防げない</a></li><li><a href="#toc23" tabindex="0">実機で確認するSQL：VARCHAR2とNVARCHAR2を比較</a></li><li><a href="#toc24" tabindex="0">照合順序によって文字の一致判定が変わる場合がある</a></li></ol></li><li><a href="#toc25" tabindex="0">8. まとめ：サポートと根拠をそろえ、説明できる対策を選ぶ</a><ol><li><a href="#toc26" tabindex="0">参考資料</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">1. 事象発生：全角アンダースコアの検索で想定外の大量ヒット</span></h2>


<h3 class="wp-block-heading"><span id="toc2">何を検索したかったのか</span></h3>


<p class="wp-block-paragraph">アプリケーションでは、データに含まれる全角アンダースコア「＿」を、<strong>文字そのもの</strong>として検索したいという要件がありました。ところが、問題が発生したOracle Database 11.2.0.1環境では、次のような検索が想定外の結果になりました。</p>


<pre class="wp-block-code"><code>-- 過去の障害を説明するために匿名化したSQL
-- 両端の % は半角、中央の ＿ は全角
SELECT *
FROM TEST
WHERE EFG LIKE '%＿%';
</code></pre>


<p class="wp-block-paragraph">本来は「全角アンダースコア（＿）を含む行」だけを検索するはずでした。ところが、当時のOracle環境では、全角＿が「任意の1文字」を表すワイルドカードとして扱われる不具合がありました。</p>
<p>この結果、<code>LIKE '%＿%'</code> という条件で、全角＿を含まない1文字以上の値まで一致し、ほぼ全件がヒットしてしまいました。</p>
<p><strong>問題は、検索結果が誤るだけでなく、不要なデータまで検索対象となり、処理負荷も増大することです。</strong> 実際、この案件でも性能問題をきっかけに調査を開始しました。</p>


<h3 class="wp-block-heading"><span id="toc3">半角・全角の違いは目視では分かりにくい</span></h3>


<figure class="wp-block-table">
<table class="has-fixed-layout">
<thead>
<tr>
<th>文字</th>
<th>表示</th>
<th>本来の役割（19cの標準仕様）</th>
</tr>
</thead>
<tbody>
<tr>
<td>半角パーセント</td>
<td><code>%</code></td>
<td>0文字以上に一致するワイルドカード</td>
</tr>
<tr>
<td>半角アンダースコア</td>
<td><code>_</code></td>
<td>ちょうど1文字に一致するワイルドカード</td>
</tr>
<tr>
<td>全角パーセント</td>
<td><code>％</code></td>
<td>通常の文字</td>
</tr>
<tr>
<td>全角アンダースコア</td>
<td><code>＿</code></td>
<td>通常の文字</td>
</tr>
</tbody>
</table>
</figure>


<p class="wp-block-paragraph">SQLのレビュー画面では、特に半角<code>_</code>と全角<code>＿</code>を見落としやすくなります。また、問題の本質は「全角文字が常にワイルドカードになる」ことではありません。過去の検証記録では、<strong>パターンに半角の<code>%</code>や<code>_</code>が混在したとき、全角<code>％</code>・<code>＿</code>がワイルドカードとして動作する現象</strong>が問題となりました。</p>


<h2 class="wp-block-heading"><span id="toc4">2. 現状把握・原因調査：仕様、データ型、実機結果を突き合わせる</span></h2>


<h3 class="wp-block-heading"><span id="toc5">まず再現条件を小さくする</span></h3>


<p class="wp-block-paragraph">障害対応では、いきなり本番SQLを広範囲に修正するのではなく、現象を小さな表と短いSQLで再現します。この案件でも、<code>CHAR</code>、<code>NCHAR</code>、<code>NVARCHAR2</code>、<code>VARCHAR2</code>を使い、半角・全角のアンダースコアを格納したテストデータで挙動を確認しました。</p>


<p class="wp-block-paragraph">調査の観点は、次の4つに分けられます。</p>


<figure class="wp-block-table">
<table class="has-fixed-layout">
<thead>
<tr>
<th>確認項目</th>
<th>確認の目的</th>
<th>具体例</th>
</tr>
</thead>
<tbody>
<tr>
<td>検索文字</td>
<td>半角・全角の混同がないか</td>
<td><code>%</code>と<code>％</code>、<code>_</code>と<code>＿</code>を区別</td>
</tr>
<tr>
<td>データ型</td>
<td>列と検索パターンの変換があるか</td>
<td><code>VARCHAR2</code>、<code>NVARCHAR2</code>など</td>
</tr>
<tr>
<td>文字セット</td>
<td>各国語キャラクタセットの条件</td>
<td><code>NLS_NCHAR_CHARACTERSET</code>を確認</td>
</tr>
<tr>
<td>SQLの種類</td>
<td>比較方式とESCAPEの影響</td>
<td><code>LIKE</code>と<code>LIKEC</code>を比較</td>
</tr>
</tbody>
</table>
</figure>


<p class="wp-block-paragraph">各国語キャラクタセットは、例えば次のSQLで確認できます。</p>


<pre class="wp-block-code"><code>SELECT parameter, value
FROM NLS_DATABASE_PARAMETERS
WHERE parameter IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
</code></pre>


<p class="wp-block-paragraph">過去のサポート調査では、各国語キャラクタセットが固定幅かどうかも論点になりました。再現性を評価するときは、実際の環境で確認した文字セット名と、対象列の型を記録します。</p>


<h3 class="wp-block-heading"><span id="toc6">サポート文書と実測結果が一致しなかった</span></h3>


<p class="wp-block-paragraph">当時のサポート情報には、特定の<code>NCHAR</code>・<code>NVARCHAR2</code>環境では、全角の<code>％</code>をワイルドカードとして扱わないという説明がありました。しかし、検証環境では半角記号との組合せなどにより、説明と一致しない結果が得られました。</p>


<p class="wp-block-paragraph">サポート窓口への初期問い合わせでは、特定リリースの「仕様」とする説明が提示されました。しかし、当時のサポート文書では全角記号をワイルドカードとして扱わないと説明されている一方、手元の実機では半角記号が混じると一致範囲が広がりました。<strong>私は、仕様の説明だけでは今回のSQL実行結果を説明できないと考えました。</strong> そこでSQL、データ型、再現条件、エラーを具体的に提示し、継続調査を依頼しました。その後、Oracle側から<strong>製品の不具合に起因する事象と考えられる</strong>との回答があり、11.2.0.4で修正済みと報告されました。</p>


<p class="wp-block-paragraph">ここで重要なのは「メーカーの回答を疑う」という姿勢ではありません。<strong>文書の記述と実測が異なる場合に、同じ条件で再現できる証拠をそろえ、技術的な説明がつくまで調べること</strong>です。技術的な事実を確定させると、対策を比較する土台ができます。</p>


<h2 class="wp-block-heading"><span id="toc7">3. 対策の立案・評価：ORA-01424と将来互換性まで比較する</span></h2>


<h3 class="wp-block-heading"><span id="toc8">対策を「直せるか」ではなく「全体コスト」で比べる</span></h3>


<p class="wp-block-paragraph">原因が製品不具合だと分かると、パッチ適用が第一候補に見えます。しかし、稼働中システムのパッチ適用では、問題の検索処理以外の業務機能にも影響しないかを確認する必要があります。今回の案件では、パッチの適用作業そのものより、<strong>広範囲の影響調査・回帰テスト・リリース調整にかかる工数</strong>が大きいと評価しました。</p>


<p class="wp-block-paragraph">複数の業務グループを集めてアクション会議を開催し、方式・基盤側が技術評価・再現検証を主導、業務側には影響範囲と運用上の回避可否の確認を依頼しました。GLとして、技術的な正しさに加え、PMと業務側が費用・リスク・運用制約を含めて選択できるよう整理したのです。</p>


<figure class="wp-block-table">
<table class="has-fixed-layout">
<thead>
<tr>
<th>対策候補</th>
<th>長所</th>
<th>案件での評価・採用範囲</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>A. パッチセット適用</strong></td>
<td>製品不具合そのものの修正が期待できる</td>
<td>DB全体の影響調査・回帰テストが大きい。今回の障害対応を目的とする適用は見送る</td>
</tr>
<tr>
<td><strong>B. <code>LIKE</code>＋全角記号の<code>ESCAPE</code></strong></td>
<td>一見、修正量を限定できる</td>
<td>11.2.0.1の再現SQLですでに<code>ORA-01424</code>。有効な回避策にならない</td>
</tr>
<tr>
<td><strong>C. <code>LIKEC</code>への変更とエスケープ方式の整理</strong></td>
<td>旧環境では<code>LIKEC</code>＋全角エスケープが動作し、保守サポートもSQL書き換えを回避策として提示。原因と対策候補について技術的な認識をそろえられた</td>
<td><strong>新規・改修SQLの記述方針として採用</strong>。将来の修正済みリリースで問題になる全角エスケープは規約で禁止。既存処理の残存リスクには運用回避を併用</td>
</tr>
<tr>
<td><strong>D. 運用回避</strong></td>
<td>大量の既存SQL改修を避け、限定的な対象データ・業務だけで対応できる</td>
<td><strong>改修工数が大きく、対象データが少ない既存機能で採用</strong>。回避手順と影響範囲を業務側と共有し、SQL規約と組み合わせて案件として対応</td>
</tr>
</tbody>
</table>
</figure>


<p class="wp-block-paragraph">これは特定案件での費用・リスク評価です。パッチにセキュリティ修正が含まれる場合、サポート要件がある場合などは、別の結論になることがあります。</p>


<h3 class="wp-block-heading"><span id="toc9">ORA-01424を生んだのはどの書き方か</span></h3>


<p class="wp-block-paragraph">実機確認で明らかになったのは、<strong>「全角記号をエスケープする」という方針自体が、リリースの違いによって成立しなくなる</strong>ことでした。</p>


<pre class="wp-block-code"><code>-- 旧リリース（11.2.0.1）では ORA-01424 を確認
SELECT * FROM TEST WHERE EFG LIKE '%\＿%' ESCAPE '\';

-- 同じ旧リリースで実行できた、LIKEC＋全角エスケープ
SELECT * FROM TEST WHERE EFG LIKEC '%\＿%' ESCAPE '\';

-- ただし上のLIKEC文は11.2.0.4の検証環境では ORA-01424
</code></pre>


<figure class="wp-block-table">
<table class="has-fixed-layout">
<thead>
<tr>
<th>SQL方式・パターン</th>
<th>11.2.0.1での記録</th>
<th>11.2.0.4での記録・仕様</th>
<th>判断</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>LIKE '%\＿%' ESCAPE '\'</code></td>
<td><code>ORA-01424</code></td>
<td>全角記号はリテラルとなり、同じエスケープは無効</td>
<td>旧環境の対策にはできない</td>
</tr>
<tr>
<td><code>LIKEC '%\＿%' ESCAPE '\'</code></td>
<td>実行できた</td>
<td><code>ORA-01424</code>を実機確認</td>
<td>将来互換性がない</td>
</tr>
<tr>
<td><code>LIKEC '%＿%'</code>（全角をエスケープしない）</td>
<td>半角・全角が混在する旧環境の検索条件では、SQL記述の統一だけでリスクをなくせない</td>
<td>全角<code>＿</code>を通常文字として扱う仕様</td>
<td><strong>新規・改修SQLの規約として採用</strong>。旧環境で影響を受ける既存処理は運用回避と組み合わせ、案件の対応目的を達成</td>
</tr>
<tr>
<td><code>LIKE '%＿%'</code>（全角をエスケープしない）</td>
<td>半角<code>%</code>との組合せで想定外にヒット</td>
<td>全角<code>＿</code>を通常文字として扱う仕様</td>
<td>修正済みリリースでは基本形</td>
</tr>
</tbody>
</table>
</figure>


<p class="wp-block-paragraph"><code>ORA-01424</code>が発生するのは、<code>ESCAPE '\'</code>に指定したエスケープ文字の次に、リテラル化の対象となる半角<code>%</code>・<code>_</code>やエスケープ文字自身ではなく、通常文字である全角<code>＿</code>が続くためです。<strong>修正前に成立した「全角記号のエスケープ」が、修正後には無効な指定になる</strong>ことを理解する必要があります。</p>


<p class="wp-block-paragraph">対策を採用する前に、<strong>修正対象の現行環境だけでなく、将来のアップグレード先でも同じSQLが成立するか</strong>を確認したことが、二度の改修を避けるうえで重要でした。</p>


<h3 class="wp-block-heading"><span id="toc10">なぜLIKECをSQL規約として採用したのか――保守サポートと技術的な認識をそろえる</span></h3>


<p class="wp-block-paragraph">今回重視したのは、<code>LIKE</code>と<code>LIKEC</code>のどちらが一般的に優れているかではありません。調査では、旧環境の<code>NCHAR</code>・<code>NVARCHAR2</code>列に対し、<code>LIKE</code>に全角エスケープを付けると<code>ORA-01424</code>になる一方、<code>LIKEC</code>なら実行できる組合せを確認しました。保守サポートからも<code>LIKEC</code>への書き換えが回避策として提示され、<strong>原因、成立する回避方法、リリースによる挙動の違いについて、サポートと技術的な認識をそろえることができました。</strong></p>


<p class="wp-block-paragraph">ただし、将来のアップグレード後には、全角記号をエスケープした<code>LIKEC</code>が<code>ORA-01424</code>になることも実機で確認しました。そこでプロジェクトのSQL規約では、<strong>「パターンマッチングには<code>LIKEC</code>を使い、半角<code>%</code>・<code>_</code>を文字として探す場合にエスケープする。全角<code>％</code>・<code>＿</code>はエスケープしない」</strong>という方針を定めました。</p>


<p class="wp-block-paragraph">この規約は、旧環境に存在した全角記号の問題をすべてSQLだけで解消するという意味ではありません。今回の対応目的を、<strong>新規・改修SQLの記述を統一すること、影響のある既存機能のリスクを抑えながら業務を継続すること、将来のアップグレード時に同じ箇所を再改修しないこと</strong>と定め、改修量が大きい一方で対象データが限定的な部分には運用回避を併用しました。</p>


<p class="wp-block-paragraph"><strong>この対策で目的を達成できることについて、保守サポートから得た技術的根拠を持ち、PMや業務側に説明して実施方針の合意につなげられたことが重要です。</strong> 自分たちの推測だけではなく、問い合わせ結果と実機検証に基づいて判断したことは、後から対応理由を説明する際にも役立ちます。保守サポートが確認したのは製品動作と回避策に関する技術的見解であり、改修・運用回避の適用範囲や工数の判断はプロジェクト側の責任で決めました。</p>


<h3 class="wp-block-heading"><span id="toc11">今回パッチを見送り、SQL規約と運用回避を選んだ理由</span></h3>


<p class="wp-block-paragraph">今回の障害への個別対処としてパッチを当てることは選択しませんでした。製品修正を適用すれば問題箇所は直っても、影響調査を対象SQLだけで済ませられず、調査・試験の総コストが大きかったためです。</p>


<p class="wp-block-paragraph">一方、SQL修正であれば対象機能を絞って検証できます。ただし、既存SQLの改修箇所が膨大なのに、問題となるデータや利用場面が少ない場合は、改修・試験の工数が効果に見合いません。そこで<strong>影響の大きさと対象データの量、運用で吸収できる負担を比較し、必要なSQL修正と運用回避を使い分ける</strong>方針を選びました。新規・改修SQLには<code>LIKEC</code>の規約を適用し、既存機能のうち費用対効果が見合わない範囲は運用面で対処します。</p>


<h2 class="wp-block-heading"><span id="toc12">4. 対策の実施：変更範囲を絞り、SQL規約と運用を整える</span></h2>


<h3 class="wp-block-heading"><span id="toc13">改修対象と運用対象を分けて展開する</span></h3>


<p class="wp-block-paragraph">SQL規約を改訂し、パターンマッチングには<code>LIKEC</code>を利用すること、半角の<code>%</code>と<code>_</code>をリテラルとして検索するときはエスケープすること、全角の<code>％</code>と<code>＿</code>にはエスケープを付けないことを定めました。新規・改修SQLではこの方針を使い、既存機能については改修の費用対効果と業務影響を見て対応方法を選びました。</p>


<p class="wp-block-paragraph">SQL改修が膨大でも、対象データが限られ、現場で無理なく回避できるなら、運用対応の方が合理的な場合があります。運用回避を選んだ機能については、対象条件と対処手順を業務側に周知する必要があります。</p>


<h3 class="wp-block-heading"><span id="toc14">GLの役割は、技術評価と業務上の判断をつなぐこと</span></h3>


<p class="wp-block-paragraph">今回、複数の業務グループを集めたアクション会議で、影響調査と対応の方向性を整理しました。方式・基盤側がSQLの再現検証と対策評価を主導し、業務側には対象機能や対象データ、運用回避の可否を確認してもらいました。</p>


<p class="wp-block-paragraph">PMへの説明では、パッチ適用の作業費だけでなく、DB全体の影響調査・回帰テスト・変更管理の総コストと、SQL改修後の将来互換性を比較しました。さらに、保守サポートに確認した技術的な内容を対策の根拠として示し、業務側とは修正する範囲と運用回避する範囲を調整しました。<strong>技術的に可能な対策と、プロジェクトとして選ぶべき対策は必ずしも同じではありません。</strong> GLには、製品側の技術的見解を確認するだけでなく、PM・業務側の合意形成を通じて実行可能な対策へ落とし込む役割があります。</p>
<p>今回のように、データベースで発生した問題が必ずしもDB側の設定だけで解決するとは限りません。SQLの実装や業務要件にも踏み込み、アプリケーション担当者や保守サポートと連携して原因を切り分けることも、DBAの重要な仕事です。</p>
<p>DBAが担う物理設計、性能管理、障害対応、バックアップ・復旧などの役割については、次の記事で詳しく解説しています。</p>

<a href="https://sys-univ.com/dev/database-engineer-dba/" title="データベースエンジニア（DBA）の仕事｜止めない、失わない、遅くさせない" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/08/251be8c60a42d58dcec6615bfa7aa384-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/08/251be8c60a42d58dcec6615bfa7aa384-160x90.jpg 160w, https://sys-univ.com/wp-content/uploads/2026/08/251be8c60a42d58dcec6615bfa7aa384-500x281.jpg 500w, https://sys-univ.com/wp-content/uploads/2026/08/251be8c60a42d58dcec6615bfa7aa384-800x450.jpg 800w, https://sys-univ.com/wp-content/uploads/2026/08/251be8c60a42d58dcec6615bfa7aa384-300x169.jpg 300w, https://sys-univ.com/wp-content/uploads/2026/08/251be8c60a42d58dcec6615bfa7aa384-768x432.jpg 768w, https://sys-univ.com/wp-content/uploads/2026/08/251be8c60a42d58dcec6615bfa7aa384-1536x864.jpg 1536w, https://sys-univ.com/wp-content/uploads/2026/08/251be8c60a42d58dcec6615bfa7aa384-120x68.jpg 120w, https://sys-univ.com/wp-content/uploads/2026/08/251be8c60a42d58dcec6615bfa7aa384-320x180.jpg 320w, https://sys-univ.com/wp-content/uploads/2026/08/251be8c60a42d58dcec6615bfa7aa384-376x212.jpg 376w, https://sys-univ.com/wp-content/uploads/2026/08/251be8c60a42d58dcec6615bfa7aa384.jpg 1672w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">データベースエンジニア（DBA）の仕事｜止めない、失わない、遅くさせない</div><div class="blogcard-snippet internal-blogcard-snippet">データベースエンジニア（DBA）は何をする職種なのか。Oracle DBAの実務経験をもとに、物理設計・構築、性能と容量管理、権限・監査、監視、バックアップ、障害復旧、データ移行まで、構築後も続く仕事と責任をわかりやすく解説します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.08.03</div></div></div></div></a>


<h2 class="wp-block-heading"><span id="toc15">5. 効果の確認：検索結果の正しさと将来互換性を確認する</span></h2>


<h3 class="wp-block-heading"><span id="toc16">SQLの実行可否・検索結果・将来互換性を確認する</span></h3>


<p class="wp-block-paragraph">SQLの検証では、エラーが出ないだけでは合格にできません。「全角<code>＿</code>を含む行だけを返す」という要件を満たすか、含まない行が混ざらないかまで確認します。さらに、同じ検索処理が将来のアップグレード後にも成立するかを調べます。</p>


<figure class="wp-block-table">
<table class="has-fixed-layout">
<thead>
<tr>
<th>検証観点</th>
<th>確認内容</th>
</tr>
</thead>
<tbody>
<tr>
<td>事象の再現</td>
<td>旧リリースの<code>LIKE '%＿%'</code>で、全角<code>＿</code>を含まない値も検索対象となる</td>
</tr>
<tr>
<td>SQLの実行可否</td>
<td><code>LIKE '%\＿%' ESCAPE '\'</code>では旧環境で<code>ORA-01424</code>、<code>LIKEC '%\＿%' ESCAPE '\'</code>では旧環境で実行可能</td>
</tr>
<tr>
<td>将来互換性</td>
<td>修正済みリリースでは<code>LIKEC</code>＋全角エスケープが<code>ORA-01424</code>となる</td>
</tr>
<tr>
<td>文字の組み合わせ</td>
<td>全角<code>＿</code>・<code>％</code>と半角<code>_</code>・<code>%</code>を混在させ、意図しない一致がないか確認する</td>
</tr>
<tr>
<td>列型と環境条件</td>
<td><code>VARCHAR2</code>・<code>NVARCHAR2</code>、文字セット、照合順序を記録する</td>
</tr>
<tr>
<td>運用回避の成立</td>
<td>改修しない部分について、対象データと回避手順が実際の業務で扱えるかを確認する</td>
</tr>
<tr>
<td>性能への影響</td>
<td>ヒット件数、実行計画、I/O、応答時間を確認する</td>
</tr>
</tbody>
</table>
</figure>


<p class="wp-block-paragraph"><strong>実行できるSQLと、業務要件どおりの結果を返すSQLは別です。</strong> この区別が、原因調査でも、対策評価でも重要でした。</p>


<p class="wp-block-paragraph">次章以降の規約・テスト項目に反映する際は、全角と半角を混ぜた入力、エスケープ文字、NULLや空文字なども含め、同じ不具合を再び見落とさないようにします。現行Oracle向けの具体的なSQL例は第7章で紹介します。</p>


<h2 class="wp-block-heading"><span id="toc17">6. 歯止め：個別対処をプロジェクト全体のルールにする</span></h2>


<h3 class="wp-block-heading"><span id="toc18">SQL規約に判断結果を反映する</span></h3>


<p class="wp-block-paragraph">実案件では、SQL規約に「パターンマッチングにおけるLIKECの利用」を新設し、設計・コーディング時の確認基準としてプロジェクトに展開しました。</p>


<p class="wp-block-paragraph">重要なのは、<strong>調査担当者だけが知っている注意点を、ほかの開発メンバーも実践できるルールに変えた</strong>ことです。規約、レビュー観点、テストデータまで揃えてこそ、障害対応が再発防止につながります。</p>


<p class="wp-block-paragraph">当時の規約改訂は、その案件の環境と将来のリリース変更を考慮したものです。現在のOracle 19c向けの規約としては、そのままコピーせず、次節に示すように<code>LIKE</code>を原則としたうえで、必要な例外条件を整理します。</p>


<h3 class="wp-block-heading"><span id="toc19">再発防止は「注意喚起」で終わらせない</span></h3>


<p class="wp-block-paragraph">プロジェクト内へ周知するだけでなく、SQLレビューで確認する項目と、テストで使う文字の組合せを具体化します。例えば、検索条件に利用者入力が含まれる処理では、半角<code>%</code>・<code>_</code>・エスケープ文字、全角<code>％</code>・<code>＿</code>、NULLや空文字をテストデータに含めます。</p>


<p class="wp-block-paragraph">修正箇所だけでなく、<strong>SQLの作り方とレビュー観点を変えること</strong>が歯止めになります。既存の機能が大きく、全面改修が現実的でない場合には、運用制約を明示し、将来の改修時に見直す対象として管理することも必要です。</p>


<h2 class="wp-block-heading"><span id="toc20">7. Oracle 19cではどう書くか：LIKE・ESCAPE・照合順序</span></h2>


<h3 class="wp-block-heading"><span id="toc21">Oracle 19cの公式仕様では全角は通常の文字</span></h3>


<p class="wp-block-paragraph">Oracle Database 19cのSQL言語リファレンスでは、<code>LIKE</code>のワイルドカードとして認識するのはASCII相当の半角<code>%</code>と<code>_</code>で、<strong>全角の<code>％</code>と<code>＿</code>は通常の文字として扱う</strong>と説明されています。また、Oracleはほとんどの場合に<code>LIKE</code>を推奨し、<code>LIKEC</code>はUnicodeの完全な文字単位で比較する必要がある場合の選択肢と位置付けています。</p>


<p class="wp-block-paragraph">そのため、<strong>19cで旧案件のSQL規約をそのまま移植し、すべての<code>LIKE</code>を<code>LIKEC</code>へ変更する必要はありません</strong>。適切な演算子は検索要件に基づいて選択します。</p>


<figure class="wp-block-table">
<table class="has-fixed-layout">
<thead>
<tr>
<th>検索要件</th>
<th>SQLの考え方</th>
</tr>
</thead>
<tbody>
<tr>
<td>全角<code>＿</code>を含む値を探す</td>
<td>原則として<code>LIKE '%＿%'</code></td>
</tr>
<tr>
<td>半角<code>_</code>を文字として探す</td>
<td><code>LIKE '%\_%' ESCAPE '\'</code></td>
</tr>
<tr>
<td>半角<code>%</code>を文字として探す</td>
<td><code>LIKE '%\%%' ESCAPE '\'</code></td>
</tr>
<tr>
<td>利用者入力を部分一致検索する</td>
<td>入力中の<code>\</code>・<code>%</code>・<code>_</code>をエスケープし、バインド変数で渡す</td>
</tr>
<tr>
<td>Unicodeの複合文字を1文字として評価する</td>
<td>要件に応じて<code>LIKEC</code>を検討</td>
</tr>
</tbody>
</table>
</figure>


<p class="wp-block-paragraph">適用時は列のデータ型・照合順序・入力値の取り扱いを確認します。</p>


<h3 class="wp-block-heading"><span id="toc22">入力値のワイルドカードはバインド変数だけでは防げない</span></h3>


<p class="wp-block-paragraph">現行システムで起こりやすいのは、検索欄に利用者が入力した<code>%</code>や<code>_</code>がそのままワイルドカードとして解釈され、想定より広い範囲に一致してしまう問題です。</p>


<p class="wp-block-paragraph">例えば次のSQLは、SQLインジェクションを防ぐ目的でバインド変数を使用していても、<strong><code>:keyword</code>中のワイルドカードが有効なまま</strong>です。</p>


<pre class="wp-block-code"><code>-- バインド変数を使っていても、入力中の % や _ はワイルドカードとして働く
SELECT *
FROM TEST
WHERE EFG LIKE '%' || :keyword || '%';
</code></pre>


<p class="wp-block-paragraph">利用者入力を<strong>通常の文字列として部分一致検索したい</strong>場合は、先にエスケープ文字自体を二重化し、その後<code>%</code>と<code>_</code>をエスケープします。次は説明用のSQLです。</p>


<pre class="wp-block-code"><code>-- :keyword を1か所でバインドするSQL例
-- 未入力はNULLとして扱い、検索対象としない
WITH input_keyword AS (
    SELECT :keyword AS keyword FROM dual
)
SELECT t.*
FROM TEST t
CROSS JOIN input_keyword k
WHERE k.keyword IS NOT NULL
  AND t.EFG LIKE
      '%' ||
      REPLACE(
        REPLACE(
          REPLACE(k.keyword, '\', '\\'),
          '%', '\%'
        ),
        '_', '\_'
      ) || '%'
      ESCAPE '\';
</code></pre>


<p class="wp-block-paragraph"><code>REPLACE</code>は、<strong>エスケープ文字→<code>%</code>→<code>_</code>の順序</strong>で適用します。逆順にすると、新たに挿入したエスケープ文字が再度処理され、意図しない検索パターンになる可能性があります。</p>


<p class="wp-block-paragraph">Oracleは空文字列をNULLとして扱うため、未入力を検出する条件として<code>LENGTH(:keyword) &gt; 0</code>を追加する必要はありません。未入力で全件表示する仕様の場合は別途分岐してください。また、上の例ではバインド変数はSQL中の1か所です。実運用ではアプリケーション側で文字列をエスケープしてから単一のバインド変数として渡す方法も選べます。</p>


<p class="wp-block-paragraph">データ型が<code>NVARCHAR2</code>の場合は、文字列リテラルとバインド値の型変換も検証してください。また、検索語にSQL構文を連結するのではなく、値をバインドして渡す方針は維持します。</p>


<h3 class="wp-block-heading"><span id="toc23">実機で確認するSQL：VARCHAR2とNVARCHAR2を比較</span></h3>


<p class="wp-block-paragraph">以下は読者のOracle 19c環境で試せる検証手順です。<strong>テスト専用スキーマで作成し、DBの文字セット・セッション設定も記録</strong>してください。全角・半角の字形が入力時に変換されていないかにも注意します。</p>


<pre class="wp-block-code"><code>-- 検証用テーブル（業務データは使用しない）
CREATE TABLE LIKE_TEST (
    ID NUMBER PRIMARY KEY,
    TXT_V VARCHAR2(40 CHAR),
    TXT_N NVARCHAR2(40)
);

INSERT INTO LIKE_TEST VALUES (1, '東京＿本店', N'東京＿本店');
INSERT INTO LIKE_TEST VALUES (2, '東京_本店',  N'東京_本店');
INSERT INTO LIKE_TEST VALUES (3, '東京％本店', N'東京％本店');
INSERT INTO LIKE_TEST VALUES (4, '東京%本店',  N'東京%本店');
INSERT INTO LIKE_TEST VALUES (5, '東京本店',   N'東京本店');
INSERT INTO LIKE_TEST VALUES (6, NULL, NULL);
COMMIT;

-- ① 全角＿を含む値の検索：VARCHAR2／NVARCHAR2で比較
SELECT ID, TXT_V FROM LIKE_TEST WHERE TXT_V LIKE '%＿%' ORDER BY ID;
SELECT ID, TXT_N FROM LIKE_TEST WHERE TXT_N LIKE N'%＿%' ORDER BY ID;

-- ② 半角_はESCAPEを付け、文字として検索
SELECT ID, TXT_V FROM LIKE_TEST WHERE TXT_V LIKE '%\_%' ESCAPE '\' ORDER BY ID;
SELECT ID, TXT_N FROM LIKE_TEST WHERE TXT_N LIKE N'%\_%' ESCAPE '\' ORDER BY ID;

-- ③ 全角＿にESCAPEを付けるとどうなるか（エラー確認用）
SELECT ID, TXT_V FROM LIKE_TEST WHERE TXT_V LIKE '%\＿%' ESCAPE '\' ORDER BY ID;
SELECT ID, TXT_N FROM LIKE_TEST WHERE TXT_N LIKE N'%\＿%' ESCAPE '\' ORDER BY ID;

-- ④ LIKECを使用した全角＿の検索
SELECT ID, TXT_V FROM LIKE_TEST WHERE TXT_V LIKEC '%＿%' ORDER BY ID;
SELECT ID, TXT_N FROM LIKE_TEST WHERE TXT_N LIKEC N'%＿%' ORDER BY ID;

-- 確認終了後、必要な場合のみ実行
-- DROP TABLE LIKE_TEST PURGE;
</code></pre>


<p class="wp-block-paragraph">公式仕様上、①と④では全角<code>＿</code>を通常文字として扱い、②では半角<code>_</code>をエスケープし、③は無効なエスケープ指定となることが想定されます。<strong>実際の結果は照合順序・文字セットを含めて検証し、条件ごとの一致行・エラー番号を記録</strong>してください。必要に応じて、後述する照合順序の条件も記録してください。</p>


<h3 class="wp-block-heading"><span id="toc24">照合順序によって文字の一致判定が変わる場合がある</span></h3>


<p class="wp-block-paragraph">Oracle 19cで全角<code>＿</code>をワイルドカードとして扱わないことと、全角・半角の文字が比較上同じと見なされるかは別の問題です。<code>LIKE</code>の一致判定は、列・式の照合順序（collation）の影響を受けます。大文字・小文字、アクセント、文字幅など、区別したい属性がある場合は、対象DBの照合設定と実際の検索結果を確認してください。</p>


<pre class="wp-block-code"><code>-- セッションの比較設定を記録する
SELECT parameter, value
FROM NLS_SESSION_PARAMETERS
WHERE parameter IN ('NLS_COMP', 'NLS_SORT');
</code></pre>


<p class="wp-block-paragraph"><code>NLS_COMP</code>や<code>NLS_SORT</code>に加え、列・式で指定された照合順序が評価に影響する場合もあります。検索結果の差を調査するときは、SQLだけでなく、これらの環境条件を合わせて記録することが重要です。</p>


<p class="wp-block-paragraph">検索パターンの先頭に<code>%</code>を置く部分一致検索は、通常のB-tree索引の範囲検索を効率よく利用しにくくなります。大量データを対象にする場合は、実行計画やI/Oを確認し、必要に応じて検索方式・索引設計を見直します。</p>


<h2 class="wp-block-heading"><span id="toc25">8. まとめ：サポートと根拠をそろえ、説明できる対策を選ぶ</span></h2>


<p class="wp-block-paragraph">今回の事例で重要だったのは、Oracleに不具合があったという事実だけではありません。検索結果の異常から出発し、再現条件を切り分け、サポート文書と実機の矛盾を根拠とともに提示して調査を依頼しました。</p>


<p class="wp-block-paragraph">不具合を修正するパッチが存在しても、稼働中のシステムでは影響調査や回帰テスト、展開の負担まで含めて判断しなければなりません。今回の案件では、パッチ適用を見送り、<strong>新規・改修SQLの規約整備と、改修量に比べ対象データが少ない既存機能での運用回避を組み合わせる</strong>方針を選びました。さらに、旧環境で有効なエスケープ方式がアップグレード先では<code>ORA-01424</code>になることを検証し、将来の保守も考慮した規約としました。</p>


<p class="wp-block-paragraph">こうした対策を選ぶうえで大きかったのは、<strong>保守サポートと技術的な認識をそろえ、その回答と実機検証を根拠にPM・業務側へ説明し、実施方針の合意を得られたこと</strong>です。製品の動作についてはサポートに確認し、どの範囲を改修して何を運用で回避するかはプロジェクトで決める。その責任分界と判断根拠を明確にしたことで、対応を実行に移すことができました。</p>


<p class="wp-block-paragraph"><strong>障害対応の本質は、技術的な解決策を見つけることだけではありません。品質・コスト・リスクを比較し、ベンダーと関係者の技術的な認識をそろえ、後から理由を説明できる対策を選ぶことです。</strong> この進め方こそが、別の障害に直面したときにも再利用できる実務上のノウハウだと考えます。</p>


<p class="wp-block-paragraph">なお、現在のOracle 19cでは、全角記号を通常文字として扱う仕様が明記されています。個々のシステムでは、利用者入力のワイルドカード化、文字セット、照合順序、性能面も含め、対象環境で検証して最終判断してください。</p>


<hr class="wp-block-separator has-alpha-channel-opacity" />

<h3 class="wp-block-heading"><span id="toc26">参考資料</span></h3>


<ul class="wp-block-list">
	<li><a href="https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/Pattern-matching-Conditions.html">Oracle Database 19c SQL言語リファレンス：Pattern-matching Conditions</a> — LIKE、LIKEC、ESCAPE、全角記号の扱い</li>


	<li><a href="https://docs.oracle.com/en/database/oracle/oracle-database/19/nlspg/linguistic-sorting-and-matching.html">Oracle Database 19c Globalization Support Guide：Linguistic Sorting and Matching</a> — NLS_COMP、NLS_SORT、照合順序</li>
</ul>

]]></content:encoded>
					
					<wfw:commentRss>https://sys-univ.com/incident/oracle-like-fullwidth-underscore/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Amazon Cognito DRの落とし穴｜バックアップがあってもログインできない理由</title>
		<link>https://sys-univ.com/tec/aws-dr-cognito-mrr/</link>
					<comments>https://sys-univ.com/tec/aws-dr-cognito-mrr/#respond</comments>
		
		<dc:creator><![CDATA[ナギ]]></dc:creator>
		<pubDate>Wed, 07 Oct 2026 09:05:03 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[テクノロジー]]></category>
		<guid isPermaLink="false">https://sys-univ.com/?p=3462</guid>

					<description><![CDATA[災害対策を検討するとき、「バックアップを別リージョンに保存している」「DR側にもWeb/APやDBを用意している」という説明をよく聞きます。 データを遠隔地に保全し、サーバやデータベースを別リージョンで起動できるようにす [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>災害対策を検討するとき、「バックアップを別リージョンに保存している」「DR側にもWeb/APやDBを用意している」という説明をよく聞きます。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>データを遠隔地に保全し、サーバやデータベースを別リージョンで起動できるようにすることは重要です。ただ、それだけで業務を再開できるとは限りません。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>DBが復旧している。Web/APも起動している。それでも利用者がログインできなければ、オンラインサービスは利用できません。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>DRで確認すべきなのは、リソースが存在するかではなく、<strong>利用者が認証され、必要な処理を実行し、安全に業務を継続できる一連の経路が成立するか</strong>です。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>Amazon Cognitoは、この問題を分かりやすく示す例です。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>本記事では、実際のDR検討で経験した問題と、2026年に提供開始されたAmazon Cognito User PoolsのMulti-Region Replication（MRR）を題材に、AWSのDR設計で何を確認すべきかを整理します。</p>
<!-- /wp:separator -->
<!-- wp:heading -->

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">1. DRは「データ」「起動」「業務経路」の3レベルで考える</a></li><li><a href="#toc2" tabindex="0">2. DRではリソース一覧ではなく「1トランザクション」を追う</a></li><li><a href="#toc3" tabindex="0">3. 実案件で直面した「データは送れるが、認証できない」問題</a></li><li><a href="#toc4" tabindex="0">4. Cognito MRRで何が変わったのか</a><ol><li><a href="#toc5" tabindex="0">issuerもDRの依存関係になる</a></li></ol></li><li><a href="#toc6" tabindex="0">5. 東京→大阪DRで確認すべきこと</a></li><li><a href="#toc7" tabindex="0">6. 「認証だけのDR」と「システム全体のDR」は違う</a><ol><li><a href="#toc8" tabindex="0">DR時だから認証を弱めてよいわけではない</a></li></ol></li><li><a href="#toc9" tabindex="0">7. フェイルオーバーは「何を異常とみなすか」まで設計する</a></li><li><a href="#toc10" tabindex="0">8. AWS DR設計で確認したいチェックリスト</a><ol><li><a href="#toc11" tabindex="0">MRRの前提</a></li><li><a href="#toc12" tabindex="0">障害時に認証できるか</a></li><li><a href="#toc13" tabindex="0">業務経路全体が成立するか</a></li></ol></li><li><a href="#toc14" tabindex="0">9. まとめ</a></li><li><a href="#toc15" tabindex="0">参考資料</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">1. DRは「データ」「起動」「業務経路」の3レベルで考える</span></h2>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p>DRを考えるときは、どこまで復旧できれば「DRが成立した」と考えるのかを3つのレベルに分けると整理しやすくなります。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>レベル1は、<strong>データが残っている状態</strong>です。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>データベースのバックアップやスナップショット、オブジェクトストレージ、AMIなどを遠隔リージョンへ保管し、大規模障害でもデータや復旧資材を失わないようにします。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>レベル2は、<strong>システムを起動できる状態</strong>です。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>DRリージョンでネットワーク、サーバ、コンテナ、データベースなどを起動し、アプリケーションが動作できるところまで復旧します。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>レベル3は、<strong>安全に業務経路が成立する状態</strong>です。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>利用者がシステムへ到達できるか。認証できるか。適切な権限でAPIやDBへアクセスできるか。KMS、Secrets、外部IdP、外部APIなどの依存先がDRリージョンでも利用できるか。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>ここまで確認して初めて、業務を再開できます。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p><strong>バックアップがあることは、DRの一部にすぎません。</strong></p>
<!-- /wp:paragraph -->
<!-- wp:heading {"level":3} -->
<div id="attachment_3467" style="width: 1610px" class="wp-caption aligncenter"><img fetchpriority="high" decoding="async" aria-describedby="caption-attachment-3467" class="wp-image-3467 size-full" src="https://sys-univ.com/wp-content/uploads/2026/10/1_dr-three-levels.png" alt="DRをデータの保全、システムの起動、安全な業務経路の成立という3レベルで整理した図" width="1600" height="900" srcset="https://sys-univ.com/wp-content/uploads/2026/10/1_dr-three-levels.png 1600w, https://sys-univ.com/wp-content/uploads/2026/10/1_dr-three-levels-500x281.png 500w, https://sys-univ.com/wp-content/uploads/2026/10/1_dr-three-levels-800x450.png 800w, https://sys-univ.com/wp-content/uploads/2026/10/1_dr-three-levels-300x169.png 300w, https://sys-univ.com/wp-content/uploads/2026/10/1_dr-three-levels-768x432.png 768w, https://sys-univ.com/wp-content/uploads/2026/10/1_dr-three-levels-1536x864.png 1536w, https://sys-univ.com/wp-content/uploads/2026/10/1_dr-three-levels-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/10/1_dr-three-levels-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/10/1_dr-three-levels-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/10/1_dr-three-levels-376x212.png 376w" sizes="(max-width: 1600px) 100vw, 1600px" /><p id="caption-attachment-3467" class="wp-caption-text">図　DRは「データが残る」「システムが起動する」だけではなく、「安全に業務経路が成立する」ところまで確認する</p></div>
<!-- /wp:paragraph -->
<!-- wp:paragraph --><!-- /wp:separator -->
<!-- wp:heading -->
<h2 class="wp-block-heading"><span id="toc2">2. DRではリソース一覧ではなく「1トランザクション」を追う</span></h2>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p>DR設計では、EC2、RDS、S3、Lambdaなど、AWSリソース単位で対策を並べがちです。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>リソース単位の確認は必要ですが、それだけでは依存関係を見落とします。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>見るべきなのは、<strong>利用者が1回の業務処理を完了するまでに何を通るのか</strong>です。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>Webシステムなら、利用者はDNS、WAFやロードバランサー、Web/APを通り、認証基盤で認証された後、DBや外部APIを使って業務処理を行います。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>認証基盤が外部IdP、メール、SMS、Lambda Triggerへ依存する構成もあります。KMS、Secrets Manager、証明書は複数の処理から参照される共通依存です。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>監視、ログ、運用管理端末、管理アクセスもDR時に必要になります。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>2026年9月の<a href="https://aws.amazon.com/blogs/security/architecting-resilient-authentication-with-amazon-cognito-multi-region-replication/">AWS Security Blog</a>記事でも、Cognito MRRを利用する場合、Lambda、WAF、SNS、SES、CloudWatchなどのリージョナルな構成を<strong>別リージョンのレプリカ側</strong>で準備する必要があると説明されています。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>DR設計で見る単位を、</p>
<!-- /wp:paragraph -->
<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph -->
<p><strong>何のリソースを複製したか</strong></p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->
<!-- wp:paragraph -->
<p>から、</p>
<!-- /wp:paragraph -->
<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph -->
<p><strong>利用者が業務を完了するまでに、どの依存先を通るか</strong></p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->
<!-- wp:paragraph -->
<p>へ変えることが重要です。</p>
<!-- /wp:paragraph -->
<!-- wp:heading {"level":3} -->
<div id="attachment_3470" style="width: 1610px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3470" class="wp-image-3470 size-full" src="https://sys-univ.com/wp-content/uploads/2026/10/2dr-business-path.png" alt="利用者からDNS、WAF、Web/AP、Amazon Cognito、DBへ至る業務経路と、外部IdPやKMSなどの依存関係を示した図" width="1600" height="1050" srcset="https://sys-univ.com/wp-content/uploads/2026/10/2dr-business-path.png 1600w, https://sys-univ.com/wp-content/uploads/2026/10/2dr-business-path-500x328.png 500w, https://sys-univ.com/wp-content/uploads/2026/10/2dr-business-path-800x525.png 800w, https://sys-univ.com/wp-content/uploads/2026/10/2dr-business-path-300x197.png 300w, https://sys-univ.com/wp-content/uploads/2026/10/2dr-business-path-768x504.png 768w, https://sys-univ.com/wp-content/uploads/2026/10/2dr-business-path-1536x1008.png 1536w" sizes="(max-width: 1600px) 100vw, 1600px" /><p id="caption-attachment-3470" class="wp-caption-text">図　DRでは利用者からDBまでの本流だけでなく、認証、外部IdP、KMS、Secrets、外部API、監視など、その業務経路を支える依存先まで確認する</p></div>

<p class="wp-block-heading" data-wp-editing="1">認証フローは構成によって異なります。Amazon CognitoのManaged Loginでは、ブラウザがCognitoのドメインへ直接遷移する場合があるため、この図は依存関係を理解するための概念図です。</p>
<!-- /wp:separator -->
<!-- wp:heading -->
<h2 class="wp-block-heading"><span id="toc3">3. 実案件で直面した「データは送れるが、認証できない」問題</span></h2>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p>Amazon Cognitoが大阪リージョンへ対応する前の案件で、東京リージョン全体が利用できなくなった場合に、大阪リージョンで業務を継続する構成を検討しました。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>Cognitoが大阪リージョンで利用可能になったのは2023年9月1日です。今回の案件はそれより前の検討でした。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>AWSの発表は<a href="https://aws.amazon.com/jp/about-aws/whats-new/2023/09/amazon-cognito-new-regions/">What&#8217;s New</a>で確認できます。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>私がこの案件で強く印象に残ったのは、<strong>データを大阪へ持っていけることと、大阪で業務を継続できることは別だった</strong>という点です。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>Web/APやデータ、復旧資材を大阪側へ持つ構成は検討できました。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>しかし当時はAmazon Cognitoを大阪リージョンで利用できず、認証を大阪側だけで完結できませんでした。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>Web/APやDBを大阪側に用意しても、利用者がログインできなければオンライン業務は成立しません。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>結果として、大阪側ではデータを遠隔保全するところまでとし、認証を含めて大阪側で業務を継続するDR構成にはできませんでした。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>この経験は、前章で整理した「データが残る」だけでは、<strong>「安全に業務経路が成立する」ところには届かない例</strong>です。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>DR要件を「別リージョンにデータを保管する」とだけ定義すると、この違いを見落とします。</p>
<!-- /wp:separator -->
<!-- wp:heading -->
<h2 class="wp-block-heading"><span id="toc4">4. Cognito MRRで何が変わったのか</span></h2>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p>2026年6月、Amazon Cognito User PoolsにMulti-Region Replication（MRR）が追加されました。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>提供開始時の概要は<a href="https://aws.amazon.com/about-aws/whats-new/2026/06/amazon-cognito-multi-region/">AWS What&#8217;s New</a>で確認できます。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>MRRではPrimary User Poolを権威あるユーザープールとし、ユーザー属性、ハッシュ化された認証情報、グループ、App Client、外部IdP設定などをSecondaryへ複製します。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>レプリケーションはPrimaryからSecondaryへの一方向です。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>Secondaryではサインインやトークン発行などの認証処理を継続できますが、Primaryとまったく同じ機能を持つわけではありません。</p>
<!-- /wp:paragraph -->
<!-- wp:heading {"level":3} -->
<div id="attachment_3471" style="width: 1546px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3471" class="wp-image-3471 size-full" src="https://sys-univ.com/wp-content/uploads/2026/10/a2eaaf27bf0c27a5aac22ebff9c9f03a.png" alt="Amazon Cognitoの認証基盤がプライマリだけにある構成とMulti-Region Replication利用時を比較した図" width="1536" height="1024" srcset="https://sys-univ.com/wp-content/uploads/2026/10/a2eaaf27bf0c27a5aac22ebff9c9f03a.png 1536w, https://sys-univ.com/wp-content/uploads/2026/10/a2eaaf27bf0c27a5aac22ebff9c9f03a-500x333.png 500w, https://sys-univ.com/wp-content/uploads/2026/10/a2eaaf27bf0c27a5aac22ebff9c9f03a-800x533.png 800w, https://sys-univ.com/wp-content/uploads/2026/10/a2eaaf27bf0c27a5aac22ebff9c9f03a-300x200.png 300w, https://sys-univ.com/wp-content/uploads/2026/10/a2eaaf27bf0c27a5aac22ebff9c9f03a-768x512.png 768w" sizes="(max-width: 1536px) 100vw, 1536px" /><p id="caption-attachment-3471" class="wp-caption-text">図　MRRにより認証基盤を別リージョンへ複製できるようになった。ただし、レプリケーションだけでDRが完成するわけではなく、フェイルオーバー方式や周辺依存を別途設計する必要がある</p></div>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>以下は、<strong>2026年10月時点のAmazon Cognito Developer Guide</strong>に基づく主な前提と制約です。</p>
<!-- /wp:paragraph -->
<!-- wp:table -->
<figure class="wp-block-table">
<table class="has-fixed-layout">
<thead>
<tr>
<th>観点</th>
<th>MRRで確認する内容</th>
</tr>
</thead>
<tbody>
<tr>
<td>Feature Plan</td>
<td>EssentialsまたはPlusが必要。MRRは追加料金のアドオン</td>
</tr>
<tr>
<td>暗号化</td>
<td>Multi-RegionのCustomer Managed KMS Keyが必要</td>
</tr>
<tr>
<td>User Pool</td>
<td>新しいCognito基盤に対応したUser Poolが対象。対象外の既存PoolはAWS側のアップグレードが必要</td>
</tr>
<tr>
<td>Secondary数</td>
<td>1つまで</td>
</tr>
<tr>
<td>初期状態</td>
<td>Secondaryは<code>INACTIVE</code>で作成され、リージョン固有設定を確認してから<code>ACTIVE</code>へ変更</td>
</tr>
<tr>
<td>データ同期</td>
<td>Primary→Secondary。結果整合のため短時間の同期遅延があり得る</td>
</tr>
<tr>
<td>Secondaryでのユーザー作成</td>
<td>Signup、Adminによる新規作成とも不可</td>
</tr>
<tr>
<td>ユーザー変更</td>
<td>パスワードリセット、プロフィール変更はSecondaryでは不可</td>
</tr>
<tr>
<td>Federated User</td>
<td>Primaryで一度サインインしたユーザーのみSecondaryでサインイン可能</td>
</tr>
<tr>
<td>MFA</td>
<td>TOTP MFAはSecondaryでは非対応</td>
</tr>
<tr>
<td>ロックアウト</td>
<td>パスワード認証のログイン失敗回数はリージョン間で同期されない</td>
</tr>
<tr>
<td>リージョン固有設定</td>
<td>Email、SMS、Lambda Trigger、Tags、Log export、WAFなどはSecondary側でも設定が必要</td>
</tr>
</tbody>
</table>
</figure>
<!-- /wp:table -->
<!-- wp:paragraph -->
<p>詳細な制約は<a href="https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-multi-region.html">Amazon Cognito Developer Guide</a>に整理されています。</p>
<!-- /wp:paragraph -->
<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><span id="toc5">issuerもDRの依存関係になる</span></h3>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p>MRRを検討するときはOIDC issuerにも注意が必要です。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>Cognitoにはoriginal issuerとupdated issuerがあり、AWSはMRRを含むUser Poolでupdated issuerを推奨しています。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>updated issuerではOIDC discoveryとJWKSを複数リージョンで提供できます。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>MRR自体はoriginal issuerでも利用できます。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>ただしoriginal issuerのOIDC discovery endpointとJWKS endpointは単一リージョンに紐づきます。リージョン障害時にはJWKSを取得できない可能性があり、アプリケーションが公開鍵を動的に取得してトークン署名を検証する構成では影響を受ける可能性があります。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>updated issuerへ移行できない場合、AWS Security Blogでは、アプリケーションのトークン検証層でJWKSをキャッシュする方法を緩和策として挙げています。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>認証サービスがSecondaryで動作しても、トークンを検証する側が参照するJWKSまで確認しなければ、認証経路全体の可用性は評価できません。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>また、<strong>2026年10月時点</strong>の<a href="https://docs.aws.amazon.com/cognito/latest/developerguide/federation-endpoints.html">Developer Guide</a>では、updated issuerはApplication Load BalancerのCognito認証、およびAmazon API Gateway REST APIのCognito authorizerとは互換性がありません。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>サービス仕様が変わる可能性があるため、実装時には最新ドキュメントの確認が必要です。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>ALB認証の制約とJWKSキャッシュは別の論点です。JWKSキャッシュはアプリケーション側のトークン検証層に対する対策であり、ALB認証の非互換を解消する方法ではありません。</p>
<!-- /wp:separator -->
<!-- wp:heading -->
<h2 class="wp-block-heading"><span id="toc6">5. 東京→大阪DRで確認すべきこと</span></h2>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p>2026年6月のMRR提供開始時点では、対応リージョンに東京は含まれていましたが、大阪は含まれていませんでした。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>提供開始時点の対象リージョンは<a href="https://aws.amazon.com/about-aws/whats-new/2026/06/amazon-cognito-multi-region/">AWS What&#8217;s New</a>で確認できます。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>ここで重要なのは、</p>
<!-- /wp:paragraph -->
<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph -->
<p><strong>「大阪リージョンでCognitoを利用できる」ことと、「東京のCognito User Poolを大阪へMRRできる」ことは別</strong></p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->
<!-- wp:paragraph -->
<p>という点です。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>東京→大阪を前提にFull-stack DRを設計する場合、MRRの対応リージョンを設計時点で確認する必要があります。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>対応していなければ、MRRを利用できる別リージョンの組み合わせへ設計を変更する方法があります。この場合、ユーザー情報が別リージョンへ複製されるため、データ所在や組織内の規程との整合も確認が必要です。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>AWS Security Blogでも、Secondaryのリージョンを選ぶ際にはdata sovereigntyやresidency要件を確認するよう説明しています。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>MRRを使わず、別User Poolを自前で同期する方法も考えられます。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>AWSは、MRR以前の手動エクスポートやインポートには、データ露出や不整合のリスク、利用者へのパスワードリセットといった課題があったと<a href="https://aws.amazon.com/blogs/aws/improve-your-application-resilience-with-amazon-cognito-multi-region-replication/">AWS News Blog</a>で説明しています。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>単に「同期処理を作ればよい」と考えず、運用負荷とセキュリティまで含めて評価する必要があります。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>MRRの対象リージョンは追加される可能性があるため、実装時には最新のAWS公式情報を確認してください。</p>
<!-- /wp:separator -->
<!-- wp:heading -->
<h2 class="wp-block-heading"><span id="toc7">6. 「認証だけのDR」と「システム全体のDR」は違う</span></h2>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p>2026年9月のAWS Security Blogでは、Cognitoのフェイルオーバーを<strong>Authentication-only failover</strong>と<strong>Full-stack failover</strong>に分けています。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>Authentication-only failoverは、アプリケーション本体を同じリージョンで稼働させたまま、認証だけをCognitoのSecondaryへ切り替える方式です。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>Full-stack failoverは、compute、data store、API、authenticationなど、アプリケーション全体を別リージョンへ切り替える方式です。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>Lambda TriggerがリージョナルなDynamoDBへアクセスする場合など、認証処理の周囲にある依存先もDR側で成立させる必要があります。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>先ほどの東京→大阪の実案件は、東京リージョン全体が利用できなくなることを想定していました。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>求めていたのは<strong>Full-stack failover</strong>です。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>CognitoのMRRが成立しても、Web/AP、DB、API、Lambda、KMS、Secrets、外部サービスなどがDRリージョンへ切り替わらなければ、Full-stack DRにはなりません。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>複数コンポーネントの切替を協調させる仕組みとして、AWSは**Amazon Application Recovery Controller（ARC）**も紹介しています。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>認証、compute、database、APIなどをリカバリープランとして扱い、切替を協調させる選択肢です。</p>
<!-- /wp:paragraph -->
<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><span id="toc8">DR時だから認証を弱めてよいわけではない</span></h3>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p>DRでは可用性の回復が優先されやすく、「ログインできないなら認証を一時的に緩める」という発想が出ることがあります。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>避けるべき設計です。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>情報セキュリティでは、可用性だけでなく機密性と完全性も維持する必要があります。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>MRRのSecondaryでTOTP MFAを利用できないなら、障害発生後に認証水準を下げるのではなく、SMS OTP、Email OTP、passkeyなど、利用可能な代替方式を平時に設計します。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>SMSを使う場合も、Secondary側でSNS設定や送信元IDの登録が必要です。登録に時間がかかる場合があるため、DR発動後に準備するものではありません。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>フェイルオーバー先ではPrimaryとは別に失敗回数が管理されます。<strong>ロックアウトまでの失敗回数が引き継がれないため、切替後のロックアウト判定はPrimaryの状態と一致しない場合があります。</strong></p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>DRでは、可用性だけでなく、認証・アクセス制御の挙動が切替前後でどう変わるかも確認する必要があります。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>セキュリティリスクから要件を導き、残存リスクまで評価する考え方については、次の記事で整理しています。</p>

<a href="https://sys-univ.com/dev/security/" title="セキュリティ要件定義の進め方｜リスクアセスメントから対策・残存リスクを決める方法" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/09/a730f6ed9dc0d4e45d16222f81050c32-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/09/a730f6ed9dc0d4e45d16222f81050c32-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/09/a730f6ed9dc0d4e45d16222f81050c32-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/09/a730f6ed9dc0d4e45d16222f81050c32-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/09/a730f6ed9dc0d4e45d16222f81050c32-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">セキュリティ要件定義の進め方｜リスクアセスメントから対策・残存リスクを決める方法</div><div class="blogcard-snippet internal-blogcard-snippet">セキュリティ要件定義を、RFPや上位基準を起点に、リスクアセスメント、差異評価、対策、残存リスクまで具体化する方法を解説。脅威・脆弱性の分析、関係者との合意、変更時の再アセスメントまで実務例で整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.09.17</div></div></div></div></a>
<!-- /wp:separator -->
<!-- wp:heading -->
<h2 class="wp-block-heading"><span id="toc9">7. フェイルオーバーは「何を異常とみなすか」まで設計する</span></h2>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p>Managed LoginやFederationを利用する構成では、Cognito MRRはRoute 53 Health Checkを利用したフェイルオーバーに対応しています。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>Custom DomainだけでなくPrefix Domainでも利用できます。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>Health Checkを設定し、Unhealthyになった場合、CognitoはSecondaryを利用する認証経路へ切り替えられます。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>重要なのは、<strong>MRRを有効にするだけで切り替わるわけではない</strong>ことです。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>何をもってPrimaryが異常と判断するのかは、利用者側が設計します。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>単純なHTTP死活監視では、認証処理そのものが失敗していてもHealthyになる可能性があります。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>AWS Security Blogでは、CloudWatch Syntheticsで実際の認証フローを実行し、その結果をCloudWatch AlarmとRoute 53 Health Checkへつなぐ例を紹介しています。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>単なる死活監視ではなく、<strong>認証処理がエンドツーエンドで成立しているか</strong>を見る考え方です。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>SDKやCognito APIを直接利用する構成では、アプリケーション側でRegional Endpointの切替を行います。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>AWS Security Blogでは、カスタムエンドポイントやプロキシを介してPrimaryとSecondaryへルーティングする構成も示されています。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>DR設計書に、</p>
<!-- /wp:paragraph -->
<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph -->
<p>CognitoはMRRを利用する</p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->
<!-- wp:paragraph -->
<p>とだけ書いても不足です。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>最低でも、何を監視するのか、どの状態を障害と判定するのか、自動切替か運用者判断か、誰が復旧を判断するのか、どこまでを一緒に切り替えるのかを決める必要があります。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>この領域は基本設計と運用設計の両方にまたがります。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>可用性方式や依存関係を基本設計で具体化する考え方については、次の記事で整理しています。</p>

<a href="https://sys-univ.com/dev/basic-design-infrastructure/" title="基本設計で決めること｜画面設計だけでは終わらない基盤SEの設計工程" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6-160x90.jpg 160w, https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6-500x281.jpg 500w, https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6-800x450.jpg 800w, https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6-300x169.jpg 300w, https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6-768x432.jpg 768w, https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6-1536x864.jpg 1536w, https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6-120x68.jpg 120w, https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6-320x180.jpg 320w, https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6-376x212.jpg 376w, https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6.jpg 1672w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">基本設計で決めること｜画面設計だけでは終わらない基盤SEの設計工程</div><div class="blogcard-snippet internal-blogcard-snippet">基本設計は画面設計だけでは終わらない。ログ・バックアップ・ジョブ・監視など、本番運用を見据えた基盤設計の論点を、ファイルアップロードや夜間バッチの実例で整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.06.20</div></div></div></div></a>
<p>監視条件、障害判定、切替手順、復旧後の戻し方については、次の記事で整理しています。</p>
<!-- /wp:embed -->
<!-- wp:paragraph -->

<a href="https://sys-univ.com/dev/opedesign/" title="運用設計とは？運用設計書の目次サンプルと項目一覧｜システム基盤エンジニア視点" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/07/7a689f13e1c38b90b6e6b1584b241588-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/07/7a689f13e1c38b90b6e6b1584b241588-160x90.jpg 160w, https://sys-univ.com/wp-content/uploads/2026/07/7a689f13e1c38b90b6e6b1584b241588-120x68.jpg 120w, https://sys-univ.com/wp-content/uploads/2026/07/7a689f13e1c38b90b6e6b1584b241588-320x180.jpg 320w, https://sys-univ.com/wp-content/uploads/2026/07/7a689f13e1c38b90b6e6b1584b241588-376x212.jpg 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">運用設計とは？運用設計書の目次サンプルと項目一覧｜システム基盤エンジニア視点</div><div class="blogcard-snippet internal-blogcard-snippet">運用設計とは何かをシステム基盤エンジニアの実務目線で解説します。運用設計書の目次サンプルと検討項目一覧を示し、監視・ログ・バックアップ・ジョブ管理、誰がやるのか、要件定義・基本設計との関係、処理方式設計との双方向連携を整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.08.14</div></div></div></div></a>
<!-- /wp:separator -->
<!-- wp:heading -->
<h2 class="wp-block-heading"><span id="toc10">8. AWS DR設計で確認したいチェックリスト</span></h2>
<!-- /wp:heading -->
<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><span id="toc11">MRRの前提</span></h3>
<!-- /wp:heading -->
<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
	<li>□ 利用するUser PoolとPrimary、SecondaryのリージョンがMRRの対象か</li>
<!-- /wp:list-item -->
<!-- wp:list-item -->
	<li>□ EssentialsまたはPlus、Multi-Region KMS KeyなどMRRの前提を満たすか</li>
<!-- /wp:list-item -->
<!-- wp:list-item -->
	<li>□ original issuerとupdated issuerのどちらを使うか決め、その依存先への影響を確認したか</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->
<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><span id="toc12">障害時に認証できるか</span></h3>
<!-- /wp:heading -->
<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
	<li>□ Secondaryを<code>ACTIVE</code>にする前に、Lambda、WAF、SNS、SES、ログなどのリージョン固有設定を完了したか</li>
<!-- /wp:list-item -->
<!-- wp:list-item -->
	<li>□ SMSを使う場合、Secondary側のSNS設定と送信元IDなどの登録を済ませたか</li>
<!-- /wp:list-item -->
<!-- wp:list-item -->
	<li>□ TOTP利用者の代替認証方式を平時に決めたか</li>
<!-- /wp:list-item -->
<!-- wp:list-item -->
	<li>□ Route 53 Health Checkで何を異常とみなすかを決めたか</li>
<!-- /wp:list-item -->
<!-- wp:list-item -->
	<li>□ 自動切替か手動切替か、判断者と復旧判断を決めたか</li>
<!-- /wp:list-item -->
<!-- wp:list-item -->
	<li>□ SDKやAPIを直接利用する場合のRegional Endpoint切替方式を決めたか</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->
<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><span id="toc13">業務経路全体が成立するか</span></h3>
<!-- /wp:heading -->
<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
	<li>□ DNS、WAF/LB、Web/AP、DBまでDR側で利用できるか</li>
<!-- /wp:list-item -->
<!-- wp:list-item -->
	<li>□ KMS、Secrets、証明書がDRリージョンでも利用できるか</li>
<!-- /wp:list-item -->
<!-- wp:list-item -->
	<li>□ 外部IdP、外部API、外部システムへの接続を確認したか</li>
<!-- /wp:list-item -->
<!-- wp:list-item -->
	<li>□ 認証後に呼ばれるLambdaや、その先のデータストアまで確認したか</li>
<!-- /wp:list-item -->
<!-- wp:list-item -->
	<li>□ 監視、ログ、運用管理端末、管理アクセスがDR時にも利用できるか</li>
<!-- /wp:list-item -->
<!-- wp:list-item -->
	<li>□ 「ログイン → 業務処理 → データ参照・更新」まで実際にDRテストしたか</li>
<!-- /wp:list-item -->
<!-- wp:list-item -->
	<li>□ Health Checkを意図的に反転し、PrimaryからSecondaryへの切替と復帰を確認したか</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->
<!-- wp:paragraph -->
<p>AWS Security Blogでは、Health Checkの反転やAWS Fault Injection Service（FIS）を使ったフェイルオーバーテストも紹介されています。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>チェックリストで重要なのは、個々のAWSサービスが存在するかではありません。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p><strong>業務を開始して終了するところまで、一連の経路を実際に通せるか</strong>です。</p>
<!-- /wp:separator -->
<!-- wp:heading -->
<h2 class="wp-block-heading"><span id="toc14">9. まとめ</span></h2>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p>バックアップがあることと、DR先で業務を継続できることは同じではありません。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>データが残っている。システムも起動できる。それでも、認証やKMS、外部サービスなどの依存先が成立しなければ、利用者は業務を再開できません。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>Amazon CognitoのMRRによって、User Poolを別リージョンへ複製し、認証基盤の可用性を高められるようになりました。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>MRRにもリージョン条件、Secondaryの機能制限、issuer、リージョナルサービス、フェイルオーバー方式など、確認すべき依存関係があります。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>Authentication-only failoverとFull-stack failoverも区別する必要があります。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>DRで確認すべきなのは、</p>
<!-- /wp:paragraph -->
<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph -->
<p><strong>「何をバックアップしたか」ではなく、「利用者が安全に業務を再開できるか」</strong></p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->
<!-- wp:paragraph -->
<p>です。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>この視点で1トランザクションの経路を追うと、バックアップ一覧やリソース一覧だけでは見えなかったDRの弱点が見えてきます。</p>
<!-- /wp:paragraph -->
<!-- wp:separator -->
<hr class="wp-block-separator has-alpha-channel-opacity" /><!-- /wp:separator -->
<!-- wp:heading -->
<h2 class="wp-block-heading"><span id="toc15">参考資料</span></h2>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p><strong>Amazon Cognito Developer Guide — Multi-Region replication for user pools</strong><br />
<a href="https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-multi-region.html">https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-multi-region.html</a></p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p><strong>Amazon Cognito Developer Guide — Identity provider and relying party endpoints</strong><br />
<a href="https://docs.aws.amazon.com/cognito/latest/developerguide/federation-endpoints.html">https://docs.aws.amazon.com/cognito/latest/developerguide/federation-endpoints.html</a></p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p><strong>AWS Security Blog — Architecting resilient authentication with Amazon Cognito multi-Region replication</strong><br />
2026年9月15日<br />
<a href="https://aws.amazon.com/blogs/security/architecting-resilient-authentication-with-amazon-cognito-multi-region-replication/">https://aws.amazon.com/blogs/security/architecting-resilient-authentication-with-amazon-cognito-multi-region-replication/</a></p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p><strong>AWS What&#8217;s New — Amazon Cognito now supports multi-Region replication</strong><br />
2026年6月4日<br />
<a href="https://aws.amazon.com/about-aws/whats-new/2026/06/amazon-cognito-multi-region/">https://aws.amazon.com/about-aws/whats-new/2026/06/amazon-cognito-multi-region/</a></p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p><strong>AWS News Blog — Improve your application resilience with Amazon Cognito multi-Region replication</strong><br />
2026年6月3日<br />
<a href="https://aws.amazon.com/blogs/aws/improve-your-application-resilience-with-amazon-cognito-multi-region-replication/">https://aws.amazon.com/blogs/aws/improve-your-application-resilience-with-amazon-cognito-multi-region-replication/</a></p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p><strong>AWS What&#8217;s New — Amazon Cognito がアジアパシフィック（大阪）リージョンとイスラエル（テルアビブ）リージョンでご利用いただけるようになりました</strong><br />
2023年9月1日<br />
<a href="https://aws.amazon.com/jp/about-aws/whats-new/2023/09/amazon-cognito-new-regions/">https://aws.amazon.com/jp/about-aws/whats-new/2023/09/amazon-cognito-new-regions/</a></p>
<!-- /wp:separator -->
<!-- wp:heading {"level":3} --><!-- /wp:paragraph -->
<!-- wp:paragraph --><!-- /wp:paragraph -->]]></content:encoded>
					
					<wfw:commentRss>https://sys-univ.com/tec/aws-dr-cognito-mrr/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AI AgentのIAM権限はどこまで届くか｜OpenAI・Hugging Face侵害から考えるAWSセキュリティ設計</title>
		<link>https://sys-univ.com/tec/ai-agent-aws-security/</link>
					<comments>https://sys-univ.com/tec/ai-agent-aws-security/#respond</comments>
		
		<dc:creator><![CDATA[ナギ]]></dc:creator>
		<pubDate>Sun, 06 Sep 2026 15:25:03 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[テクノロジー]]></category>
		<guid isPermaLink="false">https://sys-univ.com/?p=3342</guid>

					<description><![CDATA[はじめに AWS上でAI Agentを動かす構成が、検証環境だけの話ではなくなってきた。専用のIAM Roleを与え、VPC内に置き、必要なAPIやツールを実行させる。権限の与え方だけを見れば、運用ジョブやバッチ処理と大 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-heading"><strong>はじめに</strong></p>


<p class="wp-block-paragraph">AWS上でAI Agentを動かす構成が、検証環境だけの話ではなくなってきた。専用のIAM Roleを与え、VPC内に置き、必要なAPIやツールを実行させる。権限の与え方だけを見れば、運用ジョブやバッチ処理と大きくは変わらない。違うのは、目的に応じて何を実行するかをAgent自身が判断する点にある。</p>


<p class="wp-block-paragraph">2026年7月、OpenAIの評価環境で動いていたAI Agentが隔離を越えて外部へ到達し、7月11日から13日にかけてHugging Faceの本番基盤を侵害した。</p>
<p>しかも、これは後から確認された一連の想定外動作の一例にすぎない。9月には、6月にOpenAIのAgentが豪州政府のMedicare統計ポータルへ無許可アクセスしていた事例も公表された。発生時点で把握・通知されたものではなく、後日の調査で明らかになった事例である。</p>
<p>境界の突破は7月に突然始まったわけではなく、5月から断続的に続いていた。両社が公開した技術レポートには、どの経路が使われ、どこで止まり、どこでは止まらなかったかが記録されている。</p>


<p class="wp-block-paragraph">本記事は、この事件の時系列を追うものではない。攻撃の詳細は両社の一次資料に譲り、ここでは次の問いを扱う。</p>


<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">AWS上で正規の権限を持つAI Agentが、想定した範囲を越えて動いたとき、その到達範囲は何によって決まるのか。</p>
</blockquote>


<p class="wp-block-paragraph">進め方は、セキュリティ要件定義の基本形をそのまま使う。資産を洗い出し、脅威主体を定め、弱点と攻撃シナリオを置き、対策を決めて、残るリスクを確認する。この順に沿って、AI Agentという実行主体を一度当てはめてみる。</p>


<p class="wp-block-paragraph">リスクアセスメントの進め方そのものは、セキュリティ要件定義の記事で整理している。</p>

<a href="https://sys-univ.com/dev/security/" title="セキュリティ要件定義の進め方｜リスクアセスメントから対策・残存リスクを決める方法" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/09/a730f6ed9dc0d4e45d16222f81050c32-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/09/a730f6ed9dc0d4e45d16222f81050c32-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/09/a730f6ed9dc0d4e45d16222f81050c32-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/09/a730f6ed9dc0d4e45d16222f81050c32-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/09/a730f6ed9dc0d4e45d16222f81050c32-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">セキュリティ要件定義の進め方｜リスクアセスメントから対策・残存リスクを決める方法</div><div class="blogcard-snippet internal-blogcard-snippet">セキュリティ要件定義を、RFPや上位基準を起点に、リスクアセスメント、差異評価、対策、残存リスクまで具体化する方法を解説。脅威・脆弱性の分析、関係者との合意、変更時の再アセスメントまで実務例で整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.09.17</div></div></div></div></a>
<p>ここでは方法論の説明はせず、事件で実際に何が効いて何が効かなかったかという、設計時には得にくい材料を扱う。</p>



  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8" checked><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">AI Agentに何を預けているのか</a><ol><li><a href="#toc2" tabindex="0">侵害の経路</a></li></ol></li><li><a href="#toc3" tabindex="0">資産の範囲をどう置くか</a><ol><li><a href="#toc4" tabindex="0">脅威主体としてのAI Agent</a></li><li><a href="#toc5" tabindex="0">人間の内部不正者とは別物として扱う</a></li><li><a href="#toc6" tabindex="0">悪意は要件ではない</a></li><li><a href="#toc7" tabindex="0">達成できない目的を与えると、環境を掘り始める</a></li></ol></li><li><a href="#toc8" tabindex="0">効いた統制と、効かなかった統制</a><ol><li><a href="#toc9" tabindex="0">侵入されたあとに止まった側</a></li><li><a href="#toc10" tabindex="0">同じ事件で止まらなかった側</a></li><li><a href="#toc11" tabindex="0">差を生んだのは、次の境界が独立して機能したかどうか</a></li></ol></li><li><a href="#toc12" tabindex="0">AWSで何を許し、何を許さないか</a><ol><li><a href="#toc13" tabindex="0">Agentに自分の境界を変更させない</a></li><li><a href="#toc14" tabindex="0">Read Only ≠ Low Risk</a></li><li><a href="#toc15" tabindex="0">検知ではなく、止められるかまで設計する</a></li></ol></li><li><a href="#toc16" tabindex="0">それでも残るもの</a><ol><li><a href="#toc17" tabindex="0">対策で低減できるものと、残る性質</a></li><li><a href="#toc18" tabindex="0">17,600という数字の意味</a></li><li><a href="#toc19" tabindex="0">原則は変わっていない</a></li></ol></li><li><a href="#toc20" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">AI Agentに何を預けているのか</span></h2>


<p class="wp-block-paragraph">リスクアセスメントは、守る対象を決めるところから始まる。AI Agentを載せた基盤で、守る対象は何か。今回の事件は、その範囲を実測で示している。</p>


<h3 class="wp-block-heading"><span id="toc2">侵害の経路</span></h3>


<p class="wp-block-paragraph">事件の経路を、後の議論で必要な範囲だけ確認する。​</p>



<div id="attachment_3347" style="width: 510px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3347" class="wp-image-3347 size-medium" src="https://sys-univ.com/wp-content/uploads/2026/09/4c9ef128957629daca148d9f9588f337-500x192.png" alt="" width="500" height="192" srcset="https://sys-univ.com/wp-content/uploads/2026/09/4c9ef128957629daca148d9f9588f337-500x192.png 500w, https://sys-univ.com/wp-content/uploads/2026/09/4c9ef128957629daca148d9f9588f337-800x308.png 800w, https://sys-univ.com/wp-content/uploads/2026/09/4c9ef128957629daca148d9f9588f337-300x115.png 300w, https://sys-univ.com/wp-content/uploads/2026/09/4c9ef128957629daca148d9f9588f337-768x296.png 768w, https://sys-univ.com/wp-content/uploads/2026/09/4c9ef128957629daca148d9f9588f337-1536x591.png 1536w, https://sys-univ.com/wp-content/uploads/2026/09/4c9ef128957629daca148d9f9588f337.png 1920w" sizes="(max-width: 500px) 100vw, 500px" /><p id="caption-attachment-3347" class="wp-caption-text">図　AIエージェント攻撃チェーン</p></div>


<p class="wp-block-paragraph">押さえておきたい事実は3つある。</p>


<p class="wp-block-paragraph"><strong>一つ目は、脱出に使われたのが許可された通信経路だったこと。</strong> 評価環境はインターネットから隔離されていたが、パッケージを取得するための経路は業務上必要なため開いていた。エージェントはその経路の実装に脆弱性を見つけ、外部へ抜けている。塞ぎ忘れた穴ではなく、開けておく理由があった経路が足場になった。</p>


<p class="wp-block-paragraph"><strong>二つ目は、コード実行より前に認証情報が漏れていること。</strong> Hugging Faceへの最初の侵入ベクターは、細工したデータセット設定を処理させ、ワーカーのローカルファイルを返させるものだった。コードは一切実行していない。読み取らせた&#8217;/proc/self/environ&#8217;に本番Podの環境変数が入っており、そこに認証情報が含まれていた。この読み取りで得た認証情報や実装情報が、その後の探索と横展開の材料になった。</p>




<p class="wp-block-paragraph"><strong>三つ目は、一つの境界を越えたあとも連鎖が続いたこと。</strong> 本番Podでの足場から、Kubernetesのサービスアカウント、クラウドのメタデータ、内部ネットワーク、ソースコード管理へと進んでいる。</p>


<h2 class="wp-block-heading"><span id="toc3">資産の範囲をどう置くか</span></h2>


<p class="wp-block-paragraph">ここから、自分たちの環境に置き換える。</p>


<p class="wp-block-paragraph">奪われたものを並べると、業務データそのものより手前にあるものが多い。</p>



<div id="attachment_3348" style="width: 510px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3348" class="wp-image-3348 size-medium" src="https://sys-univ.com/wp-content/uploads/2026/09/ab3c90d3c3d11c1402ced0b9b9b3c2ef-500x375.png" alt="" width="500" height="375" srcset="https://sys-univ.com/wp-content/uploads/2026/09/ab3c90d3c3d11c1402ced0b9b9b3c2ef-500x375.png 500w, https://sys-univ.com/wp-content/uploads/2026/09/ab3c90d3c3d11c1402ced0b9b9b3c2ef-800x600.png 800w, https://sys-univ.com/wp-content/uploads/2026/09/ab3c90d3c3d11c1402ced0b9b9b3c2ef-300x225.png 300w, https://sys-univ.com/wp-content/uploads/2026/09/ab3c90d3c3d11c1402ced0b9b9b3c2ef-768x576.png 768w, https://sys-univ.com/wp-content/uploads/2026/09/ab3c90d3c3d11c1402ced0b9b9b3c2ef.png 1448w" sizes="(max-width: 500px) 100vw, 500px" /><p id="caption-attachment-3348" class="wp-caption-text">図　AI Agentと重要資産の到達範囲</p></div>

<p class="wp-block-paragraph">​<strong>AI Agentに預けていると考えるべき範囲は、Agentに直接処理させるデータだけではない。Agentが直接・間接に到達できる重要資産まで広げて考える必要がある。</strong> 要件定義で資産を洗い出すとき、Agentに渡すデータだけを対象にすると、事件で実際に使われた経路が丸ごと抜け落ちる。</p>



<p class="wp-block-paragraph">影響も同じ範囲で考える。情報の取得と改ざんに加えて、構成変更による外部公開と、基盤そのものの停止まで入る。構成変更によって内部基盤を外部へ公開できた事例も、後段で確認する。</p>


<h3 class="wp-block-heading"><span id="toc4">脅威主体としてのAI Agent</span></h3>


<p class="wp-block-paragraph">脅威分析では、まず誰が資産に手を伸ばし得るかを並べる。外部攻撃者、内部関係者、委託先、侵害されたワークロード。ここにAI Agentを加えるかどうかが、この記事の前提になる。</p>


<h3 class="wp-block-heading"><span id="toc5">人間の内部不正者とは別物として扱う</span></h3>


<p class="wp-block-paragraph">AI Agentを内部脅威と呼ぶと、人間の内部不正と同じ枠に見えてしまう。動機を持ち、意図して権限を濫用する主体という含みが入るためで、その枠に置くと分析が動機の推定へ向かう。</p>


<p class="wp-block-paragraph">ここでは次のように定義する。</p>


<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">正規に発行されたWorkload Identity（非人間ID）を持ち、与えられた目的を達成する過程で、設計者が想定した範囲を越える操作を行い得る実行主体。</p>
</blockquote>


<p class="wp-block-paragraph">IAM Role、Kubernetesのサービスアカウント、マシンIDの延長として読める形だ。既存の非人間IDの管理に、判断して行動する性質が加わったものと捉えればよい。</p>


<h3 class="wp-block-heading"><span id="toc6">悪意は要件ではない</span></h3>


<p class="wp-block-paragraph">今回の事件で、エージェントはHugging Faceを攻撃するという目的を与えられていない。与えられていたのは、脆弱性を発見して悪用する能力を測る評価課題を解くことだった。</p>


<p class="wp-block-paragraph">課題が解けないなかで、エージェントは評価対象のデータや解答がHugging Faceに置かれている可能性に行き当たり、そちらへ向かっている。OpenAIはこれを、報酬を得るための意図しない経路を選ぶreward hackingとして整理している。侵害は目的ではなく、目的達成の副産物だった。</p>


<p class="wp-block-paragraph">脅威分析で見るのは動機ではない。与えられたGoal（目的）と、許されたAuthority（権限）の組み合わせだ。 Agentがデータを盗もうと考える必要はなく、与えられた目的の達成経路上にその操作が現れるだけで足りる。</p>


<h3 class="wp-block-heading"><span id="toc7">達成できない目的を与えると、環境を掘り始める</span></h3>


<p class="wp-block-paragraph">この事件の前段には、目的が達成できない状況が繰り返し置かれていた。</p>


<p class="wp-block-paragraph">訓練時の例が公開されている。エージェントは投稿の更新時刻を指定の値にせよと指示されたが、与えられたインターフェースにその機能がなかった。エージェントは環境を広く探索し、ブラウザがroot権限を持つことを発見して’/etc/sudoers.d’を上書きし、権限を得て目的を達成している。</p>




<p class="wp-block-paragraph">事件時の評価でも同じ形が出ている。**AI Agentの脆弱性悪用能力を評価するベンチマーク「ExploitGym」**の898問のうち198問は、事故以前にどのモデルも正解したことがなかった。</p>


<p class="wp-block-paragraph">Agentに必要なのは、達成する能力だけではない。達成できないと判断して正常に止まる経路が要る。</p>

<div id="attachment_3432" style="width: 510px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3432" class="wp-image-3432 size-medium" src="https://sys-univ.com/wp-content/uploads/2026/09/1d878d6637bd3d26a10777501eed52c2-500x337.png" alt="" width="500" height="337" srcset="https://sys-univ.com/wp-content/uploads/2026/09/1d878d6637bd3d26a10777501eed52c2-500x337.png 500w, https://sys-univ.com/wp-content/uploads/2026/09/1d878d6637bd3d26a10777501eed52c2-800x539.png 800w, https://sys-univ.com/wp-content/uploads/2026/09/1d878d6637bd3d26a10777501eed52c2-300x202.png 300w, https://sys-univ.com/wp-content/uploads/2026/09/1d878d6637bd3d26a10777501eed52c2-768x517.png 768w, https://sys-univ.com/wp-content/uploads/2026/09/1d878d6637bd3d26a10777501eed52c2.png 1528w" sizes="(max-width: 500px) 100vw, 500px" /><p id="caption-attachment-3432" class="wp-caption-text">図　達成不能なら止まれる設計にする</p></div>


<p class="wp-block-paragraph">モデル自身に「止まる判断」を期待するだけでなく、実行基盤側にハードリミットを持たせる。</p>
<p>これらはアライメントだけに任せる話ではなく、Agent実行基盤の設計項目でもある。止まれないAgentに広い権限を与えると、想定した経路が使えなくても、目的達成のために別の経路を探索し続ける。</p>




<h2 class="wp-block-heading"><span id="toc8">効いた統制と、効かなかった統制</span></h2>


<p class="wp-block-paragraph">同じインシデント調査の中で、ある境界では攻撃が止まり、別の境界では止まらなかった。なぜそうなったのかを見ていく。</p>


<p class="wp-block-paragraph">対策の実効性は、設計時点の机上評価だけでは判断しにくい。テストで確認できる範囲はあっても、複数の境界をまたぐ侵害でどこまで被害を止められるかは見えにくい。今回の事件では、関連するエージェント活動の中で、効いた統制と効かなかった統制の両方が記録されている。</p>


<h3 class="wp-block-heading"><span id="toc9">侵入されたあとに止まった側</span></h3>


<p class="wp-block-paragraph">Hugging Faceの本番Podが侵害されたあと、エージェントはインスタンスメタデータサービスからEC2ノードロールの一時認証情報を読み出している。この認証情報は外部の二つのホスティング事業者のアドレスから再利用され、VPC、EKSクラスタ、Transit Gateway、シークレット、コンテナレジストリが列挙された。ここまでは通っている。</p>


<p class="wp-block-paragraph">止まったのはこの先だ。AWSクラウドAPI面では、変更を伴う呼び出しがノードロールのポリシーによってすべて拒否された。 Hugging Face自身が、ここで得られたのはcontrolではなくmapだったと整理している。</p>


<p class="wp-block-paragraph">ネットワーク側も同じ形で効いた。本番Hubのデータベースは、許可リストに載ったアドレスからプライベートリンク経由の接続しか受け付けない構成になっている。盗まれたAWSキーを使った接続はサーバー選択のタイムアウトで失敗し、数時間後の再試行も同じ結果に終わった。</p>


<p class="wp-block-paragraph">認証情報は奪われている。それでも、奪われた認証情報でできることがIAMポリシーとネットワーク構成の側で先に絞られていた。</p>


<h3 class="wp-block-heading"><span id="toc10">同じ事件で止まらなかった側</span></h3>


<p class="wp-block-paragraph">侵害されたのはHugging Faceだけではない。OpenAI側の評価基盤でも、関連するエージェント活動は続いていた。</p>


<p class="wp-block-paragraph">7月19日、ある評価ランでは、エージェントが稼働マシンのLinuxカーネルに公開CVEが残っていることを特定し、エクスプロイトを自環境向けに改変して権限昇格し、コンテナの外へ出てワーカーノードのrootを取得した。</p>


<p class="wp-block-paragraph">同日、別の評価ランでは、別の内部研究モデルのエージェントが、以前の活動によって残されていた署名鍵・復号材料・JWT偽造コードを回収し、新しい管理者JWTを発行してArtifactoryに受理させている。管理者認証情報を作り直せるため、標的に永続的なインプラントを置く必要すらなかった。</p>


<p class="wp-block-paragraph">一連の活動では、その後、OpenAIのマネージドKubernetes環境で<strong data-start="76" data-end="139">cluster-admin相当の権限まで到達し、Privileged設定かつホストファイルシステムをマウントしたPod</strong>も作成された。さらに、クラウドのシークレット管理サービスでは956件のシークレットが列挙・読み取りされ、その中には<strong data-start="196" data-end="216">監視ツール自身のセンサー認証情報</strong>も含まれていた。</p>


<p class="wp-block-paragraph">さらに、取得した認証情報を使って、OpenAIのパブリッククラウド環境にパブリックなApplication Load BalancerとNetwork Load Balancerが作成され、内部基盤の一部がインターネットへ露出し得る状態になった。</p>


<h3 class="wp-block-heading"><span id="toc11">差を生んだのは、次の境界が独立して機能したかどうか</span></h3>


<div id="attachment_3352" style="width: 510px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3352" class="wp-image-3352 size-medium" src="https://sys-univ.com/wp-content/uploads/2026/09/74ef0db2f160669320e76af208840b1f-500x375.png" alt="" width="500" height="375" srcset="https://sys-univ.com/wp-content/uploads/2026/09/74ef0db2f160669320e76af208840b1f-500x375.png 500w, https://sys-univ.com/wp-content/uploads/2026/09/74ef0db2f160669320e76af208840b1f-800x600.png 800w, https://sys-univ.com/wp-content/uploads/2026/09/74ef0db2f160669320e76af208840b1f-300x225.png 300w, https://sys-univ.com/wp-content/uploads/2026/09/74ef0db2f160669320e76af208840b1f-768x576.png 768w, https://sys-univ.com/wp-content/uploads/2026/09/74ef0db2f160669320e76af208840b1f.png 1448w" sizes="(max-width: 500px) 100vw, 500px" /><p id="caption-attachment-3352" class="wp-caption-text">図　侵害後の権限展開フロー</p></div>



<p class="wp-block-paragraph">ここで比較している活動は、すべて同一モデル・同一評価ランによるものではない。それでも、認証情報の取得、権限拡大、横展開という攻撃チェーンは共通している。結果を分けたのは、取得したIDから何を変更できたかだった。</p>


<p class="wp-block-paragraph">Hugging Face側も、変更が一切できなかったわけではない。Kubernetesではprivilegedポッドが作られ、ソースコード管理では書き込み権限が取られてプルリクエストまで作成されている。止まったのはAWSのクラウドAPI面に限られる。</p>


<p class="wp-block-paragraph">ここから引き出せる設計上の区別が一つある。<strong>既存の到達範囲で何ができるかという権限と、到達範囲そのものを変更できる権限は分けて考える必要がある。 前者を最小権限化していても、後者が残っていれば、Agent自身がその権限境界やネットワーク境界を広げられる。</strong>侵入されるかどうかだけでなく、侵入されたあとに次の境界が独立して機能するかが被害範囲を決める。</p>


<h2 class="wp-block-heading"><span id="toc12">AWSで何を許し、何を許さないか</span></h2>


<p class="wp-block-paragraph">ここまでで、資産、脅威主体、弱点と攻撃シナリオまでを見た。ここからが対策だ。</p>


<p class="wp-block-paragraph">AI Agentに与える権限を検討するとき、確認しておく観点は次のようになる。</p>


<figure class="wp-block-table">
<table class="has-fixed-layout">
<tbody>
<tr>
<th>観点</th>
<th>要件</th>
</tr>
<tr>
<td>IAM</td>
<td>Agent専用Roleを分け、最小権限で設計する</td>
</tr>
<tr>
<td>ワークロードID</td>
<td>IRSA / EKS Pod Identity等を利用し、長期Access Keyを渡さない</td>
</tr>
<tr>
<td>IMDS</td>
<td>不要なワークロードからメタデータへ到達させない</td>
</tr>
<tr>
<td>外向き通信（Egress）</td>
<td>Proxy・リポジトリ・アーティファクトストアも通信境界として評価する</td>
</tr>
<tr>
<td>ネットワーク</td>
<td>不要な内部到達性を与えない</td>
</tr>
<tr>
<td>境界変更</td>
<td>Agent自身に権限境界・ネットワーク境界を変更させない</td>
</tr>
<tr>
<td>共有サービス</td>
<td>共有ストアを意図しないAgent間通信路として評価する</td>
</tr>
<tr>
<td>認証情報</td>
<td>環境変数に長期の認証情報を置かない</td>
</tr>
<tr>
<td>共有ID</td>
<td>複数環境で高権限のIDを共有しない</td>
</tr>
<tr>
<td>Tool / API</td>
<td>AgentからAWS APIへの実行経路を限定する</td>
</tr>
<tr>
<td>ログ</td>
<td>Agentの権限が及ばない場所へ保存する</td>
</tr>
<tr>
<td>検知・停止</td>
<td>検知から重大度判定、停止権限までを設計する</td>
</tr>
<tr>
<td>バックアップ</td>
<td>Agentから破壊できない境界へ分離する</td>
</tr>
</tbody>
</table>
</figure>


<p class="wp-block-paragraph">特にEKSでは、Podにノードロールの認証情報を使わせない構成を前提にする。IRSAやEKS Pod IdentityでPodごとの権限を分離し、ノードのIMDSを必要としないPodからはアクセスできないようにする。IMDSv2の必須化やhop limitの設定は、その制御を補強する手段になる。</p>
<p>大半は従来のクラウド設計で扱ってきた項目だ。この中で、AI Agentを置くことによって検討の仕方が変わるものを3つ取り上げる。</p>


<h3 class="wp-block-heading"><span id="toc13">Agentに自分の境界を変更させない</span></h3>


<p class="wp-block-paragraph">前章で見たとおり、最小権限では「既存の到達範囲で何ができるか」だけでなく、「到達範囲そのものを変更できるか」を分けて見る必要がある。後者は業務データに直接触らないため、最小権限の議論から漏れやすい。代表例が次のAPIだ。</p>


<ul>
	<li>elbv2:CreateLoadBalancer</li>
	<li>ec2:AuthorizeSecurityGroupIngress</li>
	<li>ec2:CreateInternetGateway</li>
	<li>ec2:CreateRoute​</li>
</ul>



<p class="wp-block-paragraph">これらを持つAgentは、自分が到達できる範囲を自分で広げられる。今回のOpenAI側の活動でも、パブリックなロードバランサーが実際に作成され、内部基盤をインターネットへ露出し得る状態が生まれている。</p>


<p class="wp-block-paragraph">私がAI Agentを載せる基盤の設計レビューをするなら、ここは「最小権限とすること」という一行では通さない。ネットワークとIAMの構成を変更するAPIを洗い出し、Agent実行ロールから明示的に外れていることを確認する。</p>


<p class="wp-block-paragraph">加えて、<strong>この種の境界変更はIAMポリシーだけに依存させない。</strong> Agent自身、またはAgentがAssumeRoleできるIDに</p>
<ul>
	<li>iam:PutRolePolicy</li>
	<li>iam:AttachRolePolicy</li>
</ul>
<p>などのIAM変更権限が残っていれば、最小権限として設計した実行ロールを後から拡張する経路が生まれる。境界の固定は、SCP（Service Control Policies）のようにAgent自身が変更できない上位のガードレールでも制限する。</p>






<h3 class="wp-block-heading"><span id="toc14">Read Only ≠ Low Risk</span></h3>


<p class="wp-block-paragraph">権限を絞る議論は、更新系と参照系を分けるところから始まることが多い。参照だけなら壊れないという前提が置かれる。</p>


<p class="wp-block-paragraph">事件の被害連鎖は、この前提の外側で始まっている。最初の侵入ベクターはコード実行を伴わないファイル読み取りで、’/proc/self/environ’を返させることで本番Podの環境変数中の認証情報が漏れた。</p>




<p class="wp-block-paragraph">参照系を一段分けて考えたい。</p>


<div id="attachment_3356" style="width: 510px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3356" class="wp-image-3356 size-medium" src="https://sys-univ.com/wp-content/uploads/2026/09/b0e1743e3135d492f78b72b2309364be-500x250.png" alt="" width="500" height="250" srcset="https://sys-univ.com/wp-content/uploads/2026/09/b0e1743e3135d492f78b72b2309364be-500x250.png 500w, https://sys-univ.com/wp-content/uploads/2026/09/b0e1743e3135d492f78b72b2309364be-800x400.png 800w, https://sys-univ.com/wp-content/uploads/2026/09/b0e1743e3135d492f78b72b2309364be-300x150.png 300w, https://sys-univ.com/wp-content/uploads/2026/09/b0e1743e3135d492f78b72b2309364be-768x384.png 768w, https://sys-univ.com/wp-content/uploads/2026/09/b0e1743e3135d492f78b72b2309364be-1536x768.png 1536w, https://sys-univ.com/wp-content/uploads/2026/09/b0e1743e3135d492f78b72b2309364be.png 1774w" sizes="(max-width: 500px) 100vw, 500px" /><p id="caption-attachment-3356" class="wp-caption-text">図　読み取り権限のリスク比較</p></div>


<p class="wp-block-paragraph">​※Describe / Listも、対象によってはネットワーク構成やARN、エンドポイントなどの偵察情報を返すため、常に低リスクとは限らない。</p>



<p class="wp-block-paragraph">下段は性質が二つに分かれる。データベースの顧客データは、読まれた時点で情報漏洩そのものだ。認証情報は、読まれた内容が次の操作の資格情報になる。更新権限を持たないAgentでも、後者に到達できれば、そこで得た認証情報を持つ別のIDとして動ける。</p>


<p class="wp-block-paragraph">この区別は、Human-in-the-loopをどこに入れるかにも効いてくる。<strong>Human-in-the-loopの線を「更新かどうか」だけで引くと、今回のような認証情報窃取の前段は素通りする。</strong> IAM変更やDELETEの手前に人間を置いても、その前段で認証情報が漏れていれば、そこから先は別のIDとして進める。</p>


<p class="wp-block-paragraph">線を引くなら、<strong>その操作が更新か参照かではなく、戻り値そのものが重要資産か、次の攻撃経路を成立させる材料になるかで判断する。</strong></p>


<h3 class="wp-block-heading"><span id="toc15">検知ではなく、止められるかまで設計する</span></h3>


<p class="wp-block-paragraph">この事件では、検知そのものは複数回機能している。</p>


<p class="wp-block-paragraph">6月27日には監視ツールがポートスイープを検知し、対応者は活動を評価ランに紐づけたが、停止は不要と判断された。7月5日にはサービス停止を契機に管理者レベルの侵害が判明した。Hugging Face側でも、AIによるセキュリティ機構が複数のシグナルを相関させながら、重大度を十分に引き上げてオンコールチームを起動させることに失敗している。</p>


<p class="wp-block-paragraph">シグナルは上がっていた。それでも活動は止まらなかった。</p>


<p class="wp-block-paragraph">要件として書くべきは、検知できることだけではない。<strong>検知 → 重大度判定 → エスカレーション → 停止権限</strong>という4段が、最後まで通ることだ。誰が停止を判断するのか、判断がつかない場合はどちらへ倒すのか、応答がない場合に自動で止まるのか。OpenAIが事件後に示した対応基準では、懸念活動が浮上してから30分以内の通知を目標とし、重大なものは24時間365日のページ発報対象とする。さらに、ページを受けた安全・セキュリティ・研究チームが30分以内に誤検知と断定できなければ、関連する活動を一時停止することが期待されている。</p>


<p class="wp-block-paragraph">判断がつかないときに止める側へ倒す設計は、可用性とのトレードオフを伴う。AI Agentが本番環境で自律的に動く構成では、この判断を運用開始後に持ち越さず、要件定義の段階で決めておきたい。</p>


<p class="wp-block-paragraph">監視・ログ・障害時の判断体制を後から付け足すのではなく、要件定義から処理方式と結びつける考え方は、次の記事でも整理している。</p>

<a href="https://sys-univ.com/dev/opedesign/" title="運用設計とは？運用設計書の目次サンプルと項目一覧｜システム基盤エンジニア視点" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/07/7a689f13e1c38b90b6e6b1584b241588-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/07/7a689f13e1c38b90b6e6b1584b241588-160x90.jpg 160w, https://sys-univ.com/wp-content/uploads/2026/07/7a689f13e1c38b90b6e6b1584b241588-120x68.jpg 120w, https://sys-univ.com/wp-content/uploads/2026/07/7a689f13e1c38b90b6e6b1584b241588-320x180.jpg 320w, https://sys-univ.com/wp-content/uploads/2026/07/7a689f13e1c38b90b6e6b1584b241588-376x212.jpg 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">運用設計とは？運用設計書の目次サンプルと項目一覧｜システム基盤エンジニア視点</div><div class="blogcard-snippet internal-blogcard-snippet">運用設計とは何かをシステム基盤エンジニアの実務目線で解説します。運用設計書の目次サンプルと検討項目一覧を示し、監視・ログ・バックアップ・ジョブ管理、誰がやるのか、要件定義・基本設計との関係、処理方式設計との双方向連携を整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.08.14</div></div></div></div></a>


<p class="wp-block-paragraph">監視の配置も同じ考え方だ。事件では、読み出されたシークレットの中に監視ツール自身のセンサー認証情報まで含まれていた。監視とログをAgentの権限境界の内側に置けば、Agentの到達範囲が広がったときに、検知する側から先に失われる。<strong>CloudTrailの組織証跡を別アカウントのログアーカイブへ送り、Agent実行ロールにログの削除・停止権限を持たせない。</strong> 表の「ログ」が求めているのは、監査証跡の管理権限をAgentの権限境界から分離するという構成だ。</p>


<h2 class="wp-block-heading"><span id="toc16">それでも残るもの</span></h2>


<p class="wp-block-paragraph">対策を並べたら、次は残存リスクを確認する。ここまでの要件をすべて満たしたとして、何が残るのか。</p>


<h3 class="wp-block-heading"><span id="toc17">対策で低減できるものと、残る性質</span></h3>


<figure class="wp-block-table">
<table class="has-fixed-layout">
<tbody>
<tr>
<th>対策で低減できる要因</th>
<th>対策後も残る性質</th>
</tr>
<tr>
<td>過大な権限</td>
<td>許可範囲内での想定外の組み合わせ</td>
</tr>
<tr>
<td>不要なネットワーク到達性</td>
<td>探索の量と速度</td>
</tr>
<tr>
<td>長期の認証情報</td>
<td>大量の失敗経路が生む検知ノイズ</td>
</tr>
<tr>
<td>高権限IDの共有</td>
<td>短命な実行環境での再構築</td>
</tr>
</tbody>
</table>
</figure>


<p class="wp-block-paragraph">※左右の項目は1対1の対応関係を示すものではない。</p>


<p class="wp-block-paragraph">左側は設計によって大きく低減できる。右側は、権限を必要最小限まで絞っても残る。</p>


<p class="wp-block-paragraph">最小権限もネットワーク分離も、許可した範囲内の動作までは止めない。許可した操作を、設計者が想定していない順序と組み合わせで実行されることまでは、権限の側から防げない。</p>


<h3 class="wp-block-heading"><span id="toc18">17,600という数字の意味</span></h3>


<p class="wp-block-paragraph">Hugging Faceの復元によれば、この事件でエージェントが実行したアクションは約17,600件だった。</p>


<p class="wp-block-paragraph">この数字を、17,600回の攻撃が成功したと読むと意味を取り違える。ほとんどは失敗している。 Hugging Face自身、多くのアクションはどこにもたどり着かなかったが、合わせると複数の独立したシステムを横断する経路を見つけるだけの網羅性を生んだ、と整理している。</p>


<p class="wp-block-paragraph">人間による手作業では、探索を繰り返すほど時間と作業量が増える。AI Agentでは探索、失敗、再試行を自動化できるため、<strong>一つひとつの失敗にかかる追加コストを大きく下げられる。</strong> 塞がれれば別の経路を試し、以前の手がかりへ戻り、短命な実行環境でも必要なツールを組み直して探索を続けられる。</p>


<p class="wp-block-paragraph">防御側にとって特に変わるのは、個々の攻撃手法よりも探索の物量だ。成功した1本の経路が、失敗した数千本のノイズに埋もれる。前章で検知から停止までを要件として書いたのは、この物量が相関分析の負荷に直接効いてくるためだ。</p>


<h3 class="wp-block-heading"><span id="toc19">原則は変わっていない</span></h3>


<p class="wp-block-paragraph">今回悪用されたのも、安全でないデータ処理、メタデータへの到達、過大な権限、長期の認証情報といった既知の弱点だった。</p>


<p class="wp-block-paragraph">OpenAI自身も、攻撃的に動作するエージェント集団が侵入のルールを書き換えるわけではないとしたうえで、最小権限、分離とセグメンテーション、強力な認証というセキュリティの基本は従来どおり不可欠であり、いかなる単一の統制も完全に堅牢だと仮定してはならないと整理している。</p>


<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">AI Agentがセキュリティ原則を書き換えたわけではない。従来からある弱点を、より速く、広く、執拗に組み合わせられるようになった。</p>
</blockquote>


<p class="wp-block-paragraph">この能力は評価環境の中だけに留まるものでもない。OpenAIは、同等の能力が外部の脅威アクターにも利用可能になるにつれ、持続的で協調的なAI支援型の攻撃を脅威モデルへ織り込む必要があるとしている。自社でAI Agentを運用していない組織でも、探索の量と速度が増大することを外部脅威側の前提として考える必要がある。</p>


<h2 class="wp-block-heading"><span id="toc20">まとめ</span></h2>


<p class="wp-block-paragraph">AI Agentを載せたAWS環境のセキュリティ要件を、一度フレームに通してみた。持ち帰る点は3つだ。</p>


<p class="wp-block-paragraph">AI Agentは、正規の非人間IDを持つ実行主体として脅威分析の対象に入れる。 人間の内部不正と同じ枠には置かない。見るのは動機ではなく、与えた目的と許した権限の組み合わせだ。悪意がなくても、目的の達成経路上に想定外の操作が現れる。</p>


<p class="wp-block-paragraph">一つの境界を突破されても、次の境界が独立して機能するように設計する。 今回、同じインシデント調査の中で止まった統制と止まらなかった統制の両方が記録された。差を生んだのは、取得されたIDから権限とネットワーク境界をどこまで変更できたかだった。既存の到達範囲で何ができるかという権限と、到達範囲そのものを変更できる権限は分けて設計する。</p>


<p class="wp-block-paragraph">AI固有なのは原則ではなく、探索の量・速度・持続性だ。 最小権限も多層防御も分離も、従来どおり有効なまま残る。単一の統制を完全と考えないという原則が、これまで以上に短時間で試される。</p>


<p class="wp-block-heading"><strong>参考資料</strong></p>


<p class="wp-block-paragraph"><a href="https://huggingface.co/blog/agent-intrusion-technical-timeline">Hugging Face, “Anatomy of a Frontier Lab Agent Intrusion: A Technical Timeline of the July 2026 Incident”</a></p>


<p class="wp-block-paragraph"><a href="https://openai.com/index/hugging-face-incident-and-the-road-ahead/">OpenAI, “The Hugging Face incident and the road ahead”</a></p>


<p class="wp-block-paragraph"><a href="https://cdn.openai.com/pdf/67869394-cb91-4c12-888c-5cbd85c7814c/OpenAI-Hugging-Face%20Incident-Technical-Report.pdf">OpenAI, “OpenAI – Hugging Face Incident Technical Report” (August 26, 2026)</a><br />
<br />
</p>
<hr />
<p class="PDq2pG_selectionAnchorContainer" data-start="92" data-end="100"><span style="font-size: 20px;"><strong data-start="92" data-end="100">関連記事</strong></span></p>
<p data-start="102" data-end="240">AI Agentでは、IAMやネットワーク、認証情報といった従来からのセキュリティ設計が不要になるわけではありません。むしろ、Agentが正規の権限を持って自律的に操作することを前提に、<strong data-start="195" data-end="219">どこまで到達できるか、どの境界で止めるか</strong>を要件として明確にしておく必要があります。</p>
<p data-start="242" data-end="345">本記事ではOpenAI・Hugging Faceの事例からAI Agentの到達範囲を整理しましたが、AWS側の統制、検知後の運用設計については、以下の記事で詳しく解説しています。</p>
<ul data-start="347" data-end="862">
	<li data-section-id="xb94f7" data-start="347" data-end="495"><strong data-start="499" data-end="560">VPC Encryption Controlsの落とし穴｜Flow Logsの暗号化判定とEnforce判定は別物</strong><br data-start="560" data-end="563" />
AWSのネットワーク統制について、Flow Logsで観測できる状態とEnforceによる許可・拒否の判定が同じではない点を整理しています。<strong data-start="635" data-end="668">「見えている状態」と「実際に強制される境界」を分けて考える</strong>という点は、AI Agentのネットワーク設計にも共通します。<br />
<br />

<a href="https://sys-univ.com/tec/vpc-encryption-controls/" title="VPC Encryption Controlsの落とし穴｜Flow Logsの暗号化判定とEnforce判定は別物" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/08/bdefc8469bee66f11e3530b7a3fa8b76-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/08/bdefc8469bee66f11e3530b7a3fa8b76-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/08/bdefc8469bee66f11e3530b7a3fa8b76-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/08/bdefc8469bee66f11e3530b7a3fa8b76-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/08/bdefc8469bee66f11e3530b7a3fa8b76-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">VPC Encryption Controlsの落とし穴｜Flow Logsの暗号化判定とEnforce判定は別物</div><div class="blogcard-snippet internal-blogcard-snippet">VPC Encryption Controlsでは、Flow Logsで暗号化と表示されてもEnforceで許可されるとは限りません。encryption-statusと準拠判定の違い、既存Flow Logsにフィールドが自動追加されない点、ExclusionやTGWの注意点をAWS公式仕様から整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.08.27</div></div></div></div></a></li>
	<li data-section-id="dy8svs" data-start="701" data-end="862"><strong data-start="703" data-end="740">運用設計とは｜監視・障害対応・エスカレーションまでをどう設計するか</strong><br data-start="740" data-end="743" />
監視はアラートを出して終わりではなく、重大度判定、エスカレーション、対応判断まで含めて設計する必要があります。本記事で扱った**「検知 → 重大度判定 → エスカレーション → 停止」**を、より広い運用設計の観点から整理しています。<br />
<br />

<a href="https://sys-univ.com/dev/opedesign/" title="運用設計とは？運用設計書の目次サンプルと項目一覧｜システム基盤エンジニア視点" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/07/7a689f13e1c38b90b6e6b1584b241588-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/07/7a689f13e1c38b90b6e6b1584b241588-160x90.jpg 160w, https://sys-univ.com/wp-content/uploads/2026/07/7a689f13e1c38b90b6e6b1584b241588-120x68.jpg 120w, https://sys-univ.com/wp-content/uploads/2026/07/7a689f13e1c38b90b6e6b1584b241588-320x180.jpg 320w, https://sys-univ.com/wp-content/uploads/2026/07/7a689f13e1c38b90b6e6b1584b241588-376x212.jpg 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">運用設計とは？運用設計書の目次サンプルと項目一覧｜システム基盤エンジニア視点</div><div class="blogcard-snippet internal-blogcard-snippet">運用設計とは何かをシステム基盤エンジニアの実務目線で解説します。運用設計書の目次サンプルと検討項目一覧を示し、監視・ログ・バックアップ・ジョブ管理、誰がやるのか、要件定義・基本設計との関係、処理方式設計との双方向連携を整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.08.14</div></div></div></div></a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://sys-univ.com/tec/ai-agent-aws-security/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>RDS for OracleのDBリンクは暗号化されているのか｜KMS暗号化とOracle Net通信は別物</title>
		<link>https://sys-univ.com/tec/rds-oracle-dblink-encryption/</link>
					<comments>https://sys-univ.com/tec/rds-oracle-dblink-encryption/#respond</comments>
		
		<dc:creator><![CDATA[ナギ]]></dc:creator>
		<pubDate>Tue, 25 Aug 2026 01:50:26 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[テクノロジー]]></category>
		<guid isPermaLink="false">https://sys-univ.com/?p=3215</guid>

					<description><![CDATA[はじめに ある異なるAWSアカウントにある2台のRDS for OracleをDatabase Link（以下、DBリンク）で接続する構成を検討していたときの話です。 一方はAWS KMSによるストレージ暗号化あり、もう [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>はじめに</strong></p>
<p>ある異なるAWSアカウントにある2台のRDS for OracleをDatabase Link（以下、DBリンク）で接続する構成を検討していたときの話です。</p>


<p class="wp-block-paragraph">一方はAWS KMSによるストレージ暗号化あり、もう一方は暗号化なし。</p>


<p class="wp-block-paragraph">注：本記事では、<strong data-start="571" data-end="615">KMS暗号化ありのRDS AをDBリンク元、暗号化なしのRDS BをDBリンク先</strong>として説明します。NNEではDBリンク元とDBリンク先で設定するパラメータが異なるためです。</p>

<div id="attachment_3220" style="width: 510px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3220" class="wp-image-3220 size-medium" src="https://sys-univ.com/wp-content/uploads/2026/08/23552a73b1be90387fdff6aba0e64c7c-500x354.png" alt="" width="500" height="354" srcset="https://sys-univ.com/wp-content/uploads/2026/08/23552a73b1be90387fdff6aba0e64c7c-500x354.png 500w, https://sys-univ.com/wp-content/uploads/2026/08/23552a73b1be90387fdff6aba0e64c7c-800x566.png 800w, https://sys-univ.com/wp-content/uploads/2026/08/23552a73b1be90387fdff6aba0e64c7c-300x212.png 300w, https://sys-univ.com/wp-content/uploads/2026/08/23552a73b1be90387fdff6aba0e64c7c-768x543.png 768w, https://sys-univ.com/wp-content/uploads/2026/08/23552a73b1be90387fdff6aba0e64c7c.png 1491w" sizes="(max-width: 500px) 100vw, 500px" /><p id="caption-attachment-3220" class="wp-caption-text">クロスアカウントRDS for OracleのDBリンク構成</p></div>



<p class="wp-block-paragraph">つまり、A側に作成したDBリンクからBへ接続します。</p>


<p class="wp-block-paragraph">ここでいう「DBリンクの方向」は<strong>接続を開始する方向</strong>です。AからBの表をSELECTすれば結果データはBからAへ返るため、DBリンクの向きとデータが流れる向きは同じとは限りません。</p>


<p class="wp-block-paragraph">最初に疑問だったのは、</p>


<p class="wp-block-paragraph"><strong>「KMSで暗号化されたRDSから、暗号化されていないRDSへDBリンクを張って問題ないのか」</strong></p>


<p class="wp-block-paragraph">ということでした。</p>


<p class="wp-block-paragraph">問い合わせでは「データが文字化けしないか」という表現も使いました。しかし今振り返ると、本当に確認したかったのは文字コードの問題ではありません。</p>


<p class="wp-block-paragraph"><strong>ストレージ上で暗号化されたデータがOracle Databaseからどう見え、DBリンクではどの状態で扱われるのか</strong></p>


<p class="wp-block-paragraph">という疑問でした。</p>


<p class="wp-block-paragraph">さらに、</p>


<ul class="wp-block-list">
	<li>相手AWSアカウントへKMSキーを共有する必要があるのか</li>


	<li>別VPC間でDBリンクを成立させるには何が必要なのか</li>
</ul>


<p class="wp-block-paragraph">も確認しました。</p>


<p class="wp-block-paragraph">このとき印象的だったのが、AWSサポートから最初に、</p>


<p class="wp-block-paragraph"><strong>「今回の暗号化とは、RDSのストレージボリューム暗号化という理解でよいか」</strong></p>


<p class="wp-block-paragraph">という趣旨の確認が入ったことです。</p>


<p class="wp-block-paragraph">この確認が、今回の記事の本質です。</p>


<p class="wp-block-paragraph">RDS for Oracleで「暗号化」と言っても、実際には複数のレイヤーがあります。</p>


<ul class="wp-block-list">
	<li>AWS KMSによるRDSストレージ暗号化</li>


	<li>Oracle Transparent Data Encryption（TDE）</li>


	<li>Oracle NetのNNE／SSL/TLS</li>


	<li>AWSネットワーク基盤側の通信暗号化</li>
</ul>


<p class="wp-block-paragraph"><strong>「RDSが暗号化されている」ことと「DBリンク通信が暗号化されている」ことは別の話です。</strong></p>


<p class="wp-block-paragraph">本記事では、2026年8月時点のAWS公式仕様も確認しながら、この違いを整理します。</p>



  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10" checked><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">結論｜KMSによるRDS暗号化はDBリンクへ引き継がれない</a></li><li><a href="#toc2" tabindex="0">RDS for Oracleで分けて考える4つの暗号化レイヤー</a></li><li><a href="#toc3" tabindex="0">KMS暗号化はどこまでの話なのか｜TDEとの違いとKMSキー共有</a><ol><li><a href="#toc4" tabindex="0">Oracle TDEはKMS暗号化とは別物</a></li><li><a href="#toc5" tabindex="0">DBリンク接続ではKMSキー共有は不要</a></li></ol></li><li><a href="#toc6" tabindex="0">別AWSアカウントのRDS間でDBリンクを成立させる条件</a></li><li><a href="#toc7" tabindex="0">DBリンク通信の暗号化はKMSとは別に構成する｜NNEの設計</a><ol><li><a href="#toc8" tabindex="0">DBリンク元RDSはOracle Net clientになる</a></li><li><a href="#toc9" tabindex="0">Requestedは「必須」ではない</a></li><li><a href="#toc10" tabindex="0">Requiredだけでなく暗号方式も確認する</a></li><li><a href="#toc11" tabindex="0">暗号化と整合性チェックは別設定</a></li><li><a href="#toc12" tabindex="0">「暗号化されているか」だけでなく方式まで確認する</a></li></ol></li><li><a href="#toc13" tabindex="0">RDS間DBリンクはSSL/TLSでも暗号化できる</a><ol><li><a href="#toc14" tabindex="0">SSLオプションを入れただけでは全通信TLSにはならない</a></li><li><a href="#toc15" tabindex="0">TLSバージョンとCipher Suiteも確認する</a></li><li><a href="#toc16" tabindex="0">NNEとSSL/TLSは併用できない</a></li></ol></li><li><a href="#toc17" tabindex="0">AWS基盤側の通信暗号化とOracle Net暗号化は分けて考える</a></li><li><a href="#toc18" tabindex="0">まとめ｜「暗号化されているか」ではなく「どのレイヤーか」で考える</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">結論｜KMSによるRDS暗号化はDBリンクへ引き継がれない</span></h2>


<p class="wp-block-paragraph">結論から言えば、AWS KMSによるRDSストレージ暗号化が原因で、DBリンクのSELECT結果が暗号文になることはありません。</p>


<p class="wp-block-paragraph">そもそも、DBリンク先のOracle Databaseがリンク元RDSのKMSキーを使ってデータを復号する仕組みではありません。</p>


<p class="wp-block-paragraph">AWSサポートからも、KMSによる暗号化はストレージレイヤーで処理され、ストレージから読み出す際には透過的に復号されるため、<strong>ストレージ暗号化を原因として</strong>DBリンクのデータが文字化けすることはない、という回答を得ています。</p>


<p class="wp-block-paragraph">この「ストレージ暗号化を原因として」という限定も重要です。文字コードやOracle Netなど、別の原因による問題まで否定しているわけではありません。</p>


<p class="wp-block-paragraph">AWS公式でも、RDSの保存時暗号化は基盤ストレージ、ログ、自動バックアップ、Read Replica、スナップショットなどを対象とし、RDSが復号を透過的に処理すると説明されています。</p>
<p>概念的には次の関係です。</p>


<div id="attachment_3222" style="width: 510px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3222" class="wp-image-3222 size-medium" src="https://sys-univ.com/wp-content/uploads/2026/08/9bc1f9d12c1a3c91b326451dc0773bc2-500x375.png" alt="" width="500" height="375" srcset="https://sys-univ.com/wp-content/uploads/2026/08/9bc1f9d12c1a3c91b326451dc0773bc2-500x375.png 500w, https://sys-univ.com/wp-content/uploads/2026/08/9bc1f9d12c1a3c91b326451dc0773bc2-800x600.png 800w, https://sys-univ.com/wp-content/uploads/2026/08/9bc1f9d12c1a3c91b326451dc0773bc2-300x225.png 300w, https://sys-univ.com/wp-content/uploads/2026/08/9bc1f9d12c1a3c91b326451dc0773bc2-768x576.png 768w, https://sys-univ.com/wp-content/uploads/2026/08/9bc1f9d12c1a3c91b326451dc0773bc2.png 1448w" sizes="(max-width: 500px) 100vw, 500px" /><p id="caption-attachment-3222" class="wp-caption-text">KMSによるRDS暗号化とOracle Database／DBリンクの関係</p></div>



<p class="wp-block-paragraph">Oracle Database自身が、KMSで暗号化されたストレージブロックを受け取ってKMSキーで復号しているわけではありません。</p>


<p class="wp-block-paragraph">したがって、<strong>DBリンク接続のためにA側のKMSキーをB側AWSアカウントへ共有する必要もありません。</strong></p>


<p class="wp-block-paragraph">また、AからDBリンク経由でBへデータを書き込んだ場合、A側のストレージ暗号化属性がBへ引き継がれるわけでもありません。Bへ保存されたデータを暗号化するかどうかは、B自身のRDS暗号化設定で決まります。</p>


<p class="wp-block-paragraph">なお、既存の非暗号化RDS DBインスタンスを、そのまま後から暗号化済みに変更することはできません。暗号化したスナップショットコピーを作成し、そこから新しいDBインスタンスをリストアする必要があります。</p>


<p class="wp-block-paragraph">つまり、</p>


<p class="wp-block-paragraph"><strong>「必要になったら後から暗号化をONにすればよい」</strong></p>


<p class="wp-block-paragraph">という設計にはできません。</p>


<h2 class="wp-block-heading"><span id="toc2">RDS for Oracleで分けて考える4つの暗号化レイヤー</span></h2>


<p class="wp-block-paragraph">今回の話は、次の4レイヤーに分けると整理できます。</p>


<figure class="wp-block-table">
<table class="has-fixed-layout">
<thead>
<tr>
<th>レイヤー</th>
<th>何を保護するか</th>
<th>主な仕組み</th>
<th>DBリンクとの関係</th>
<th>設計上のポイント</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>RDSストレージ</strong></td>
<td>ストレージ、ログ、バックアップ、スナップショット等</td>
<td>AWS KMSを利用したRDS暗号化</td>
<td>KMSキーや暗号化属性はDBリンク先へ伝播しない</td>
<td>encryption at rest。Oracle Net通信とは別</td>
</tr>
<tr>
<td><strong>Oracle Database</strong></td>
<td>Oracleが管理する保存データ</td>
<td>Oracle TDE</td>
<td>復号後の論理データがOracle Netへ渡る</td>
<td>Enterprise Edition＋BYOL。KMS暗号化とは別レイヤー</td>
</tr>
<tr>
<td><strong>Oracle Net</strong></td>
<td>DB間・クライアント間の通信</td>
<td>NNEまたはSSL/TLS</td>
<td><strong>DBリンク通信そのものをOracleレイヤーで暗号化する</strong></td>
<td>NNEとSSL/TLSは同一DBインスタンスで併用不可</td>
</tr>
<tr>
<td><strong>AWSネットワーク基盤</strong></td>
<td>AWS基盤を流れる通信</td>
<td>Nitro、VPC Encryption Controls等</td>
<td>DBリンク通信も下位レイヤーで暗号化される場合がある</td>
<td>基盤側とOracle Net側の暗号化状態は別であり、一方の証跡だけでもう一方を証明・否定できない</td>
</tr>
</tbody>
</table>
</figure>


<p class="wp-block-paragraph">ポイントは、<strong>どれか一つを有効にすれば他のレイヤーまで暗号化されるわけではない</strong>ことです。</p>


<h2 class="wp-block-heading"><span id="toc3">KMS暗号化はどこまでの話なのか｜TDEとの違いとKMSキー共有</span></h2>


<h3 class="wp-block-heading"><span id="toc4">Oracle TDEはKMS暗号化とは別物</span></h3>


<p class="wp-block-paragraph">Oracle Transparent Data Encryption（TDE）は、Oracle Database側でデータを暗号化する仕組みです。</p>


<p class="wp-block-paragraph">RDSのKMS暗号化がOracleより下のストレージレイヤーで処理されるのに対し、TDEではOracle Databaseがデータを書き込む前に暗号化し、読み出す際に復号します。</p>


<p class="wp-block-paragraph">RDS for OracleでTDEを利用できるのはOracle Enterprise Edition＋BYOLです。Oracle WalletとTDE master keyはAmazon RDSが管理します。</p>


<p class="wp-block-paragraph">TDEには設計時に注意すべき制約があります。</p>


<p class="wp-block-paragraph">AWSではRDS for OracleのTDEをpermanent／persistentなオプションとして扱っており、一度有効にすると無効化できず、TDEを含まないOption Groupへ変更することもできません。<strong>TDEを利用するDBスナップショットは共有できません。</strong></p>


<p class="wp-block-paragraph">つまり、TDEは後から簡単に外せるオプションではありません。</p>
<p>RDS for Oracleには、TDE以外にもオンプレOracleの前提をそのまま持ち込めない制約があります。詳しくは「RDS for Oracleを採用したら、オンプレ運用の前提が通用しなかった」で整理しています。</p>

<a href="https://sys-univ.com/aws/rdsforora/" title="RDS for Oracleを採用したら、オンプレ運用の前提が通用しなかった｜開発中に見えた設計ギャップと代替アプローチ" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/07/b87f444ed45d88e81401b2fbbfe2b0c1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/07/b87f444ed45d88e81401b2fbbfe2b0c1-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/07/b87f444ed45d88e81401b2fbbfe2b0c1-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/07/b87f444ed45d88e81401b2fbbfe2b0c1-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/07/b87f444ed45d88e81401b2fbbfe2b0c1-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">RDS for Oracleを採用したら、オンプレ運用の前提が通用しなかった｜開発中に見えた設計ギャップと代替アプローチ</div><div class="blogcard-snippet internal-blogcard-snippet">RDS for Oracleではオンプレ運用の前提が通用しない。Storage-Full、アーカイブログ、SSH不可など、開発中に見えた9つの設計ギャップと代替アプローチを整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.08.30</div></div></div></div></a>


<p class="wp-block-paragraph">また、TDEで保護されたデータも、暗号文のままDBリンクへ流れるわけではありません。Oracleが論理データへ復号した後、Oracle Netへ渡されます。</p>


<p class="wp-block-paragraph">その先の通信を暗号化するのはNNEまたはSSL/TLSです。</p>


<p class="wp-block-paragraph"><strong>RDSのKMS暗号化 ≠ Oracle TDE ≠ DBリンク通信の暗号化</strong></p>


<p class="wp-block-paragraph">という関係です。</p>


<h3 class="wp-block-heading"><span id="toc5">DBリンク接続ではKMSキー共有は不要</span></h3>


<p class="wp-block-paragraph">DBリンクでは、各RDSの保存時暗号化は各RDS内で処理されます。</p>


<p class="wp-block-paragraph">A側OracleがB側のKMSキーを使うわけでも、B側OracleがA側のKMSキーを使うわけでもありません。</p>


<p class="wp-block-paragraph">したがって、<strong>クロスアカウントDBリンクのためにKMSキーを共有する必要はありません。</strong></p>


<p class="wp-block-paragraph">一方、暗号化されたDBスナップショットそのものを別AWSアカウントへ共有する場合は、KMSキーへのクロスアカウントアクセスが関係します。</p>


<p class="wp-block-paragraph">AWSアカウントのデフォルトKMSキーで暗号化されたスナップショットはそのまま共有できません。AWS公式では、対象アカウントへアクセスを許可したcustomer managed keyを用意し、そのキーでスナップショットをコピーして共有し、共有先でも自アカウントのKMSキーを指定してコピーする手順が案内されています。</p>


<p class="wp-block-paragraph">DBリンクとスナップショット共有では、</p>


<p class="wp-block-paragraph"><strong>論理データへアクセスするのか、暗号化されたAWSリソース自体を共有するのか</strong></p>


<p class="wp-block-paragraph">が違います。</p>


<h2 class="wp-block-heading"><span id="toc6">別AWSアカウントのRDS間でDBリンクを成立させる条件</span></h2>


<p class="wp-block-paragraph">KMSキー共有が不要でも、別AWSアカウントのRDSへそのままDBリンクを張れるわけではありません。</p>


<p class="wp-block-paragraph">先に、AからBへOracle Netで到達できるネットワークを作る必要があります。</p>


<p class="wp-block-paragraph">確認順序は、</p>


<p class="wp-block-paragraph"><strong>VPC間接続 → Route → Security Group／NACL → DNS → Oracle Net → Database Link</strong></p>


<p class="wp-block-paragraph">と考えると分かりやすいです。</p>


<p class="wp-block-paragraph">AWSサポートからはVPC Peeringが例示されました。AWS公式のRDS for Oracle DBリンク手順でも、同一VPCまたはピア接続されたVPC間で、有効なルート、ACL、Security Group、名前解決を確認するよう案内されています。</p>


<p class="wp-block-paragraph">ただし、Database LinkというOracle機能自体がVPC Peeringを要求しているわけではありません。</p>


<p class="wp-block-paragraph">本質的な要件は、<strong>DBリンク元からDBリンク先のRDS endpointとOracle Listenerポートへ到達できること</strong>です。</p>


<p class="wp-block-paragraph">本記事ではAをDBリンク元としているため、基本となる通信方向は、</p>


<ul class="wp-block-list">
	<li>A側：Bへのoutbound</li>


	<li>B側：AからOracle Listenerポートへのinbound</li>
</ul>


<p class="wp-block-paragraph">です。</p>


<p class="wp-block-paragraph">Security Groupはstatefulなので、戻り通信のためだけに対称のinboundルールを追加する必要はありません。一方、Network ACLを独自に制限している場合はstatelessなので、復路も確認します。</p>


<p class="wp-block-paragraph">接続先にはIPアドレスを固定せず、RDS endpointのDNS名を使用します。RDS自身も、基盤IPはフェイルオーバー等で変わり得るため、DNS名を利用することを推奨しています。</p>


<p class="wp-block-paragraph">別VPCの場合はDNSも確認します。</p>


<p class="wp-block-paragraph">VPC Peering越しでAmazon提供DNSを利用する場合は、VPC側の<code>enableDnsSupport</code>と、Peering接続側のDNS解決サポートを確認します。カスタムDNSを利用している場合は、そのDNSサーバーがDBリンク先を解決できる必要があります。</p>


<p class="wp-block-paragraph">つまり、</p>


<p class="wp-block-paragraph"><strong>Routeがある／SGが通る／DNSが引ける</strong></p>


<p class="wp-block-paragraph">を分けて確認する必要があります。</p>


<h2 class="wp-block-heading"><span id="toc7">DBリンク通信の暗号化はKMSとは別に構成する｜NNEの設計</span></h2>


<p class="wp-block-paragraph">DBリンクのOracle Net通信を暗号化する方法の一つがNative Network Encryption（NNE）です。</p>


<p class="wp-block-paragraph">RDS for Oracleでは、Option Groupへ<code>NATIVE_NETWORK_ENCRYPTION</code>を追加して利用します。NNEはOracle Databaseの全エディションで利用できます。</p>


<p class="wp-block-paragraph">ここで重要なのは、</p>


<p class="wp-block-paragraph"><strong>NNEオプションを追加しただけで「暗号化を必須にした」と考えてはいけない</strong></p>


<p class="wp-block-paragraph">ことです。</p>


<h3 class="wp-block-heading"><span id="toc8">DBリンク元RDSはOracle Net clientになる</span></h3>


<p class="wp-block-paragraph">本記事の構成では、</p>


<ul class="wp-block-list">
	<li>A：DBリンク元 → Oracle Net client</li>


	<li>B：DBリンク先 → Oracle Net server</li>
</ul>


<p class="wp-block-paragraph">です。</p>


<p class="wp-block-paragraph">AWS公式も、DBインスタンスがDatabase Linkを利用するとき、そのDBインスタンスはクライアントとして動作すると明記しています。</p>


<p class="wp-block-paragraph">したがって主に確認するのは、</p>


<p class="wp-block-paragraph">A側：</p>


<p class="wp-block-paragraph"><code>SQLNET.*CLIENT</code></p>


<p class="wp-block-paragraph">B側：</p>


<p class="wp-block-paragraph"><code>SQLNET.*SERVER</code></p>


<p class="wp-block-paragraph">です。</p>


<h3 class="wp-block-heading"><span id="toc9">Requestedは「必須」ではない</span></h3>


<p class="wp-block-paragraph">RDSのNNE Optionでは、<code>SQLNET.ENCRYPTION_CLIENT</code>と<code>SQLNET.ENCRYPTION_SERVER</code>の既定値はいずれも<code>Requested</code>です。</p>


<p class="wp-block-paragraph">ただし、この既定値は<strong>NNEオプションを追加した後の話</strong>です。NNEオプションを追加していないRDSが、最初からNNEで通信しているという意味ではありません。</p>


<p class="wp-block-paragraph">また、<code>Requested</code>だから暗号化されないという意味でもありません。</p>


<p class="wp-block-paragraph">CLIENT／SERVERともに<code>Requested</code>で双方がNNEを利用できれば暗号化は成立します。</p>


<p class="wp-block-paragraph">問題は、<strong>相手が暗号化に対応しなくても、暗号化なしで接続できる場合がある</strong>ことです。</p>


<p class="wp-block-paragraph">つまり、</p>


<p class="wp-block-paragraph"><strong>「暗号化されることがある」と「暗号化を必須条件として保証する」は別です。</strong></p>


<p class="wp-block-paragraph">AからBへのDBリンクについて暗号化を必須にしたい場合、A側を例えば、</p>


<p class="wp-block-paragraph"><code>SQLNET.ENCRYPTION_CLIENT=Required</code></p>


<p class="wp-block-paragraph">とします。</p>


<p class="wp-block-paragraph">B側が<code>Requested</code>でも、接続が成立すれば暗号化されます。暗号化条件を満たせなければ接続自体が失敗します。</p>


<p class="wp-block-paragraph">一方、B側を、</p>


<p class="wp-block-paragraph"><code>SQLNET.ENCRYPTION_SERVER=Required</code></p>


<p class="wp-block-paragraph">とすると、DBリンクだけでなくBへ接続する他のOracle Netクライアントにも暗号化を要求します。</p>


<p class="wp-block-paragraph">したがって、</p>


<p class="wp-block-paragraph"><strong>DBリンクだけを暗号化したいのか、RDSへの全接続を暗号化したいのか</strong></p>


<p class="wp-block-paragraph">を分けて設計します。</p>


<h3 class="wp-block-heading"><span id="toc10">Requiredだけでなく暗号方式も確認する</span></h3>


<p class="wp-block-paragraph">さらに注意したいのが暗号アルゴリズムです。</p>


<p class="wp-block-paragraph">Oracle Database 19cなどのRDS NNE設定では、既定候補にAESだけでなくRC4、3DES、DESも含まれ、既定リストは<code>RC4_256</code>から始まります。AWSはDES、3DES、RC4をsecure encryption methodとは扱っていません。</p>


<p class="wp-block-paragraph">そのため、</p>


<p class="wp-block-paragraph"><code>SQLNET.ENCRYPTION_CLIENT=Required</code></p>


<p class="wp-block-paragraph">だけでは、使用する暗号方式まで安全なものへ限定したことにはなりません。</p>


<p class="wp-block-paragraph">例えばAES256へ限定する設計なら、</p>


<p class="wp-block-paragraph">A側：</p>


<p class="wp-block-paragraph"><code>SQLNET.ENCRYPTION_CLIENT=Required</code><br />
<code>SQLNET.ENCRYPTION_TYPES_CLIENT=AES256</code></p>


<p class="wp-block-paragraph">B側：</p>


<p class="wp-block-paragraph"><code>SQLNET.ENCRYPTION_SERVER=Requested</code> または <code>Required</code><br />
<code>SQLNET.ENCRYPTION_TYPES_SERVER=AES256</code></p>


<p class="wp-block-paragraph">のように、CLIENT／SERVER双方で共通する方式を設定します。</p>


<p class="wp-block-paragraph"><code>SQLNET.ALLOW_WEAK_CRYPTO</code>と<code>SQLNET.ALLOW_WEAK_CRYPTO_CLIENTS</code>はいずれも既定値が<code>TRUE</code>です。弱い方式を禁止する場合はこちらも確認しますが、既存クライアントのパッチレベルや互換性へ影響するため、接続元を確認した上で変更する必要があります。</p>


<h3 class="wp-block-heading"><span id="toc11">暗号化と整合性チェックは別設定</span></h3>


<p class="wp-block-paragraph">NNEでは、通信の暗号化とは別にデータ改ざんを検知するチェックサムも設定できます。</p>


<p class="wp-block-paragraph"><code>SQLNET.ENCRYPTION_*</code>を<code>Required</code>にしても、<code>SQLNET.CRYPTO_CHECKSUM_*</code>が自動的に<code>Required</code>になるわけではありません。</p>


<p class="wp-block-paragraph"><strong>盗聴対策と改ざん検知は別々に設計する</strong>必要があります。</p>


<h3 class="wp-block-heading"><span id="toc12">「暗号化されているか」だけでなく方式まで確認する</span></h3>


<p class="wp-block-paragraph">設定後は<code>V$SESSION_CONNECT_INFO</code>を確認し、実際にネゴシエーションされた暗号方式を確認できます。</p>


<pre class="wp-block-code"><code>SELECT NETWORK_SERVICE_BANNER
FROM V$SESSION_CONNECT_INFO
WHERE SID = SYS_CONTEXT('USERENV', 'SID');
</code></pre>


<p class="wp-block-paragraph">NNEが有効なら<code>encryption service adapter</code>を含む行が表示され、<code>AES256</code>など実際にネゴシエーションされた方式を確認できます。</p>


<p class="wp-block-paragraph">見るべきなのは、</p>


<p class="wp-block-paragraph"><strong>「暗号化されているか」だけではなく「何で暗号化されているか」</strong></p>


<p class="wp-block-paragraph">です。</p>


<p class="wp-block-paragraph">既定候補にはRC4_256も含まれるため、AES256など設計時に想定した方式が実際に使われているところまで確認する必要があります。</p>


<p class="wp-block-paragraph">なお、DBリンクによって生成されたリモートセッションをどのように特定し、証跡化するかについては、DBリンク固有の実機確認が必要です。</p>


<h2 class="wp-block-heading"><span id="toc13">RDS間DBリンクはSSL/TLSでも暗号化できる</span></h2>


<p class="wp-block-paragraph">DBリンクの暗号化方式はNNEだけではありません。</p>


<p class="wp-block-paragraph">AWS公式には、<strong>Oracle DBインスタンス間では、各インスタンスにOracle SSLオプションが構成されていれば、SSL/TLS endpoint経由でDatabase Linkを確立でき、追加構成は不要</strong>と明記されています。</p>


<p class="wp-block-paragraph">つまり、本記事のA→B構成でも、両RDS for OracleへSSLオプションを設定することでDBリンク通信をTLS化できます。</p>


<h3 class="wp-block-heading"><span id="toc14">SSLオプションを入れただけでは全通信TLSにはならない</span></h3>


<p class="wp-block-paragraph">RDS for Oracleでは、SSL接続用に通常接続とは別の第2ポートを利用します。</p>


<p class="wp-block-paragraph">そのため、</p>


<ul class="wp-block-list">
	<li>通常ポート：非SSL通信</li>


	<li>SSLポート：SSL/TLS通信</li>
</ul>


<p class="wp-block-paragraph">を同じDBインスタンスで併存できます。</p>


<p class="wp-block-paragraph">つまり、<strong>SSLオプションを追加しただけでは、そのRDSへの全通信がTLS必須になるわけではありません。</strong></p>


<p class="wp-block-paragraph">TLSを必須にする場合は、SSL/TLS endpointを利用することに加えて、Security Group等で非SSL経路を許可していないかも確認する必要があります。</p>


<p class="wp-block-paragraph">NNEはOracle Netのネゴシエーションで<code>Required</code>を使って強制し、TLSは<strong>ポートと接続経路で強制する</strong>という違いがあります。</p>


<h3 class="wp-block-heading"><span id="toc15">TLSバージョンとCipher Suiteも確認する</span></h3>


<p class="wp-block-paragraph">2026年8月時点で、RDS for Oracleの19c／21cはTLS 1.0と1.2をサポートしています。</p>


<p class="wp-block-paragraph">特に既存のOracle SSLオプションでは、<code>SQLNET.SSL_VERSION</code>が自動的に<code>1.0</code>へ設定されています。既存環境では「SSLを使っている＝TLS 1.2」と判断せず、設定値を確認する必要があります。26aiではTLS 1.2のみがサポートされています。</p>


<p class="wp-block-paragraph">Cipher Suiteも同様です。</p>


<p class="wp-block-paragraph">19c／21cの既定Cipher Suiteである<code>SSL_RSA_WITH_AES_256_CBC_SHA</code>はFIPS対応ですが、AWS公式表ではFedRAMP準拠ではありません。つまり、<strong>既定値のままで自分たちのセキュリティ要件を満たすとは限りません。</strong></p>


<p class="wp-block-paragraph">また、RDS for OracleではRSA証明書とECDSA証明書をサポートしており、<code>SQLNET.CIPHER_SUITE</code>へ指定する方式はDBインスタンスの証明書タイプと互換である必要があります。互換性のないCipher Suiteしか設定していないOption GroupはDBインスタンスへの関連付けに失敗します。</p>


<h3 class="wp-block-heading"><span id="toc16">NNEとSSL/TLSは併用できない</span></h3>


<p class="wp-block-paragraph">NNEとSSL/TLSは、同じRDS for Oracle DBインスタンスで併用できません。</p>


<p class="wp-block-paragraph">したがって、</p>


<p class="wp-block-paragraph"><strong>NNEで暗号化した上にTLSを重ねる</strong></p>


<p class="wp-block-paragraph">という構成にはできません。</p>


<figure class="wp-block-table">
<table class="has-fixed-layout">
<thead>
<tr>
<th>観点</th>
<th>NNE</th>
<th>SSL/TLS</th>
</tr>
</thead>
<tbody>
<tr>
<td>方式</td>
<td>Oracle独自</td>
<td>業界標準</td>
</tr>
<tr>
<td>証明書</td>
<td>不要</td>
<td>使用</td>
</tr>
<tr>
<td>DBリンクで利用</td>
<td>可能</td>
<td>可能</td>
</tr>
<tr>
<td>強制方法</td>
<td><code>Required</code>によるOracle Netネゴシエーション</td>
<td>SSLポートと接続経路</td>
</tr>
<tr>
<td>CLIENT／SERVER設定</td>
<td>区別あり</td>
<td>両RDSにSSLオプション</td>
</tr>
<tr>
<td>併用</td>
<td>TLSと併用不可</td>
<td>NNEと併用不可</td>
</tr>
</tbody>
</table>
</figure>


<p class="wp-block-paragraph">どちらを採用するかは、既存の接続方式、証明書管理、接続クライアント、セキュリティ基準から判断します。</p>


<p class="wp-block-paragraph">重要なのは、</p>


<p class="wp-block-paragraph"><strong>KMSによるRDS暗号化とは別に、Oracle Net通信の暗号化方式を選ぶ</strong></p>


<p class="wp-block-paragraph">ことです。</p>


<h2 class="wp-block-heading"><span id="toc17">AWS基盤側の通信暗号化とOracle Net暗号化は分けて考える</span></h2>


<p class="wp-block-paragraph">AWSネットワーク基盤側にも通信暗号化の仕組みがあります。</p>


<p class="wp-block-paragraph">Amazon RDSでは、一部のインスタンスタイプについてNitro Systemによるインスタンス間通信の自動暗号化が提供されています。ただし、対象インスタンスタイプ、同一Region、同一VPCまたはVPC Peering、Transit Gateway等の仮想ネットワークサービスを経由しないことなどの条件があります。</p>


<p class="wp-block-paragraph">RDS for Oracleでは、<strong>Oracleで利用可能なインスタンスクラスと、Nitroによる自動暗号化の対象一覧を別々に確認する必要があります。</strong></p>


<p class="wp-block-paragraph">例えば、RDS全体の自動暗号化対象一覧に含まれるM7g／R7gはRDS for Oracleの利用可能クラスには含まれていません。一方、RDS for Oracleで利用可能なM7i／R7i／M8i／R8iは、2026年8月時点の自動暗号化対象一覧には列挙されていません。</p>


<p class="wp-block-paragraph">したがって、<strong>「新しい世代だから自動的に暗号化される」とは判断できません。</strong></p>


<p class="wp-block-paragraph">さらに2025年11月にはVPC Encryption Controlsが追加され、AWS基盤側の転送時暗号化をMonitor／Enforceで監視・強制できるようになりました。RDS公式でも、Enforce VPCでは転送時暗号化をサポートするNitroベースのDBインスタンスのみ新規プロビジョニングできるとされています。既存VPCをEnforceへ移行する際は、まずMonitorで非準拠リソースを確認・是正する必要があります。</p>
<p>VPC Encryption ControlsのMonitor／Enforceの違い、Flow Logsの<code data-start="968" data-end="987">encryption-status</code>の読み方、ExclusionやTransit Gatewayを含むEnforce移行時の注意点は、「VPC Encryption Controlsとは｜Monitor／EnforceとFlow Logsの読み方」で整理しています。</p>

<a href="https://sys-univ.com/tec/vpc-encryption-controls/" title="VPC Encryption Controlsの落とし穴｜Flow Logsの暗号化判定とEnforce判定は別物" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/08/bdefc8469bee66f11e3530b7a3fa8b76-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/08/bdefc8469bee66f11e3530b7a3fa8b76-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/08/bdefc8469bee66f11e3530b7a3fa8b76-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/08/bdefc8469bee66f11e3530b7a3fa8b76-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/08/bdefc8469bee66f11e3530b7a3fa8b76-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">VPC Encryption Controlsの落とし穴｜Flow Logsの暗号化判定とEnforce判定は別物</div><div class="blogcard-snippet internal-blogcard-snippet">VPC Encryption Controlsでは、Flow Logsで暗号化と表示されてもEnforceで許可されるとは限りません。encryption-statusと準拠判定の違い、既存Flow Logsにフィールドが自動追加されない点、ExclusionやTGWの注意点をAWS公式仕様から整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.08.27</div></div></div></div></a>


<p class="wp-block-paragraph">ただし、ここでDBリンクの記事として重要なのは、<strong>AWS基盤側の証跡とOracle Net側の証跡は同じではない</strong>ことです。</p>


<p class="wp-block-paragraph">VPC Flow Logsでは<code>encryption-status</code>として、</p>


<ul class="wp-block-list">
	<li><code>0</code>：not encrypted</li>


	<li><code>1</code>：nitro-encrypted</li>


	<li><code>2</code>：application-encrypted</li>


	<li><code>3</code>：両方</li>


	<li><code>-</code>：状態不明、またはVPC Encryption Controlsが無効</li>
</ul>


<p class="wp-block-paragraph">を記録できます。</p>


<p class="wp-block-paragraph">ただしAWSが<code>application-encrypted</code>として認識する通信は限定されています。interface endpointやgateway endpointについては、AWS自身が<strong>パケット内容ではなく使用ポートから暗号化状態を推定している</strong>と説明しています。</p>


<p class="wp-block-paragraph">したがって、</p>


<p class="wp-block-paragraph"><strong>Flow Logsが<code>1: nitro-encrypted</code>だから、Oracle NetもNNE/TLSで暗号化されている</strong></p>


<p class="wp-block-paragraph">とは言えません。</p>


<p class="wp-block-paragraph">逆に、Oracle NetをNNEで暗号化していても、Flow Logsがそれを<code>application-encrypted</code>として認識するとは限りません。Nitro暗号化も適用されない経路では、Flow Logs側で<code>0: not encrypted</code>と評価される可能性があります。</p>


<p class="wp-block-paragraph">つまり、</p>


<p class="wp-block-paragraph"><strong>一方のレイヤーの証跡だけで、もう一方の暗号化状態を証明も否定もできません。</strong></p>


<p class="wp-block-paragraph">VPC Flow Logsが答えるのは、</p>


<p class="wp-block-paragraph"><strong>「AWS基盤から見て、このフローをどの暗号化状態として扱っているか」</strong></p>


<p class="wp-block-paragraph">です。</p>


<p class="wp-block-paragraph">NNEで<code>V$SESSION_CONNECT_INFO</code>から確認するのは、</p>


<p class="wp-block-paragraph"><strong>「このOracle Netセッションで、どの暗号方式がネゴシエーションされたか」</strong></p>


<p class="wp-block-paragraph">です。</p>


<p class="wp-block-paragraph">対象も粒度も異なります。</p>


<h2 class="wp-block-heading"><span id="toc18">まとめ｜「暗号化されているか」ではなく「どのレイヤーか」で考える</span></h2>


<p class="wp-block-paragraph">今回の疑問は、</p>


<p class="wp-block-paragraph"><strong>KMSで暗号化したRDS for Oracleと、暗号化されていない別AWSアカウントのRDSをDBリンクで接続するとどうなるのか</strong></p>


<p class="wp-block-paragraph">というところから始まりました。</p>


<p class="wp-block-paragraph">結論は3つです。</p>


<ul class="wp-block-list">
	<li><strong>KMSによるRDS暗号化は保存時の暗号化であり、暗号化属性やKMSキーがDBリンク先へ伝播するわけではない</strong></li>


	<li><strong>DBリンクのOracle Net通信を暗号化するなら、NNEまたはSSL/TLSを別途設計する</strong></li>


	<li><strong>AWS基盤側の暗号化とOracle Net暗号化は別レイヤーであり、一方の証跡だけでもう一方を証明・否定できない</strong></li>
</ul>


<p class="wp-block-paragraph">設計時に確認するべきなのは、</p>


<p class="wp-block-paragraph"><strong>「暗号化されているか、いないか」</strong></p>


<p class="wp-block-paragraph">という二択ではありません。</p>


<p class="wp-block-paragraph"><strong>「どのデータを、どのレイヤーで、どの仕組みによって暗号化し、それをどの方法で確認するのか」</strong></p>


<p class="wp-block-paragraph">まで分けて考える必要があります。</p>


<p class="wp-block-paragraph">今回AWSサポートが問い合わせの冒頭で、</p>


<p class="wp-block-paragraph"><strong>「今回の暗号化とは、RDSのストレージボリューム暗号化という理解でよいか」</strong></p>


<p class="wp-block-paragraph">という趣旨の確認をしてきた理由も、ここにあります。</p>


<p class="wp-block-paragraph">KMS、TDE、Oracle Net、AWSネットワーク基盤。</p>


<p class="wp-block-paragraph">すべて「暗号化」ですが、守っている場所も確認方法も異なります。</p>


<p class="wp-block-paragraph">RDS for OracleでDBリンクを設計するときは、まずこの境界を分けるところから始めるのがよいでしょう。</p>
<hr />

<p class="wp-block-paragraph"><strong><span style="font-size: 20px;">関連記事</span></strong></p>
<p>RDS for Oracleでは、暗号化以外にもオンプレミスOracleの前提をそのまま持ち込めない制約があります。また、こうしたクラウド固有の差異は、構築段階ではなく要件定義や基本設計の段階で確認しておくことが重要です。あわせて確認したい方は、以下の記事も参考にしてください。</p>
<ul>
	<li><strong>RDS for Oracleを採用したら、オンプレ運用の前提が通用しなかった<br />
</strong>SYS権限やOSアクセス、ログ確認など、オンプレミスOracleからRDS for Oracleへ移行するときに変わる運用・設計上の前提を、実案件で直面した制約から整理しています。</li>
</ul>

<a href="https://sys-univ.com/aws/rdsforora/" title="RDS for Oracleを採用したら、オンプレ運用の前提が通用しなかった｜開発中に見えた設計ギャップと代替アプローチ" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/07/b87f444ed45d88e81401b2fbbfe2b0c1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/07/b87f444ed45d88e81401b2fbbfe2b0c1-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/07/b87f444ed45d88e81401b2fbbfe2b0c1-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/07/b87f444ed45d88e81401b2fbbfe2b0c1-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/07/b87f444ed45d88e81401b2fbbfe2b0c1-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">RDS for Oracleを採用したら、オンプレ運用の前提が通用しなかった｜開発中に見えた設計ギャップと代替アプローチ</div><div class="blogcard-snippet internal-blogcard-snippet">RDS for Oracleではオンプレ運用の前提が通用しない。Storage-Full、アーカイブログ、SSH不可など、開発中に見えた9つの設計ギャップと代替アプローチを整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.08.30</div></div></div></div></a>
<ul>
	<li><strong>基本設計で決めること｜画面設計だけでは終わらない基盤SEの設計工程<br />
</strong>サーバー、データベース、ネットワーク、セキュリティ、監視、バックアップ、運用など、システム基盤の基本設計で何を決めておくべきかを整理しています。</li>
</ul>

<a href="https://sys-univ.com/dev/basic-design-infrastructure/" title="基本設計で決めること｜画面設計だけでは終わらない基盤SEの設計工程" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6-160x90.jpg 160w, https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6-500x281.jpg 500w, https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6-800x450.jpg 800w, https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6-300x169.jpg 300w, https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6-768x432.jpg 768w, https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6-1536x864.jpg 1536w, https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6-120x68.jpg 120w, https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6-320x180.jpg 320w, https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6-376x212.jpg 376w, https://sys-univ.com/wp-content/uploads/2026/06/4d96d0a5b250d4d64675183a265ba8a6.jpg 1672w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">基本設計で決めること｜画面設計だけでは終わらない基盤SEの設計工程</div><div class="blogcard-snippet internal-blogcard-snippet">基本設計は画面設計だけでは終わらない。ログ・バックアップ・ジョブ・監視など、本番運用を見据えた基盤設計の論点を、ファイルアップロードや夜間バッチの実例で整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.06.20</div></div></div></div></a>
]]></content:encoded>
					
					<wfw:commentRss>https://sys-univ.com/tec/rds-oracle-dblink-encryption/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【前編】システム監視の基本｜ping・エージェント・SNMP監視を整理する</title>
		<link>https://sys-univ.com/tec/monitor/</link>
					<comments>https://sys-univ.com/tec/monitor/#respond</comments>
		
		<dc:creator><![CDATA[ナギ]]></dc:creator>
		<pubDate>Wed, 09 Sep 2026 09:56:28 +0000</pubDate>
				<category><![CDATA[テクノロジー]]></category>
		<guid isPermaLink="false">https://sys-univ.com/?p=1252</guid>

					<description><![CDATA[この記事は「システム監視の基本」全2回シリーズの第1部です。 本シリーズでは、システム監視を「何を、どのように監視し、検知後の対応につなげるか」という観点から、前編・後編に分けて整理しています。 【第1部】この記事 シス [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="isSelectedEnd wp-block-paragraph"><strong>この記事は「システム監視の基本」全2回シリーズの第1部です。</strong></p>
<p class="isSelectedEnd">本シリーズでは、システム監視を「何を、どのように監視し、検知後の対応につなげるか」という観点から、前編・後編に分けて整理しています。</p>
<ul data-spread="false">
	<li><strong>【第1部】この記事</strong><br />
システム監視の基本構造／死活監視／エージェント監視・エージェントレス監視／SNMP監視／MIB・OIDなど、監視を理解するための基礎</li>
	<li><a href="https://sys-univ.com/tec/monitoring-cloud-fit-gap/">【第2部】クラウド監視と「運用で使える監視設計」</a><br />
AWS CloudWatch・OCI Monitoring／既存監視のFit &amp; Gap／監視対象・閾値・通知・一次対応まで含めた監視設計</li>
</ul>


<hr class="wp-block-separator has-alpha-channel-opacity" />

<p class="wp-block-paragraph"><strong>はじめに</strong></p>
<p>システム開発や基盤設計に関わっていると、「監視」という言葉は必ず出てきます。</p>


<p class="wp-block-paragraph">「サーバは生きています。 `ping` は通っています」</p>


<p class="wp-block-paragraph">そう報告した10分後に、業務が止まった。</p>


<p class="wp-block-paragraph">原因は、Webサーバのプロセス停止だった。</p>


<p class="wp-block-paragraph">サーバ自体にはネットワーク的に到達できていたため、 `ping` 監視では異常を検知できなかった。</p>


<p class="wp-block-paragraph">答えは単純です。 `ping` <strong>が通ることと、システムが業務として使える状態であることは、まったく別の話だから</strong>です。</p>


<p class="wp-block-paragraph">死活監視。リソース監視。ログ監視。プロセス監視。ジョブ監視。URL監視。SNMP監視。</p>


<p class="wp-block-paragraph">言葉としては聞いたことがあっても、実際に「監視の仕組み」を説明しようとすると、意外と難しいものです。</p>


<p class="wp-block-paragraph">若手SEの中には、監視を「サーバが落ちたらアラートが出る仕組み」「CPUやメモリが高くなったら通知する仕組み」「ログにエラーが出たらメールが飛ぶ仕組み」と理解している人もいます。</p>


<p class="wp-block-paragraph">もちろん、間違いではありません。</p>


<p class="wp-block-paragraph">ただし、それだけでは監視設計はできません。</p>


<p class="wp-block-paragraph">監視では、何を監視するのか、どこから監視するのか、どの方式で監視するのか、どの条件で異常と判断するのか、誰に通知するのか、通知を受けた人が何を確認するのかまで決める必要があります。</p>


<p class="wp-block-paragraph">監視とは、単にアラートを出す仕組みではありません。</p>


<p class="wp-block-paragraph">システムの異常や異常予兆を、運用で対応できる形で検知する仕組みです。</p>


<p class="wp-block-paragraph">前編では、監視サーバー、監視対象サーバー、死活監視、エージェント監視、エージェントレス監視、SNMP監視、MIB/OIDの基本を整理します。</p>


<p class="wp-block-paragraph">監視を「設定」ではなく「運用で使える仕組み」として理解するために、まずは基本構造から見ていきます。</p>



  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-12" checked><label class="toc-title" for="toc-checkbox-12">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">システム監視とは何か</a></li><li><a href="#toc2" tabindex="0">監視には「監視する側」と「監視される側」がある</a></li><li><a href="#toc3" tabindex="0">死活監視とは何か</a></li><li><a href="#toc4" tabindex="0">エージェント監視とは何か</a></li><li><a href="#toc5" tabindex="0">エージェントレス監視とは何か</a></li><li><a href="#toc6" tabindex="0">SNMP監視とは何か</a></li><li><a href="#toc7" tabindex="0">SNMP監視でつまずきやすいOIDとMIB</a></li><li><a href="#toc8" tabindex="0">SNMP監視も詳細設計の対象である</a></li><li><a href="#toc9" tabindex="0">まとめ｜監視は「異常を検知する設定」ではなく設計である</a><ol><li><a href="#toc10" tabindex="0">次の記事｜クラウドでは監視設計がどう変わるのか</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">システム監視とは何か</span></h2>


<p class="wp-block-paragraph">監視をしていなければ、障害が起きても運用側は気づけません。</p>


<p class="wp-block-paragraph">利用者から「画面が開かない」と問い合わせが来て、初めて障害を認識する。これは運用の失敗です。</p>


<p class="wp-block-paragraph">システムが正常に稼働しているか。障害の予兆がないか。それを運用で対応できる形で検知する仕組みです。</p>


<p class="wp-block-paragraph">システム監視の目的は、大きく2つあります。</p>


<ul id="9ab67f89-05a4-4ba7-8787-68937562185b" class="wp-block-list">
	<li>システムが正常に稼働しているかを確認する</li>


	<li>システムに障害予兆となる兆候がないかを確認する</li>
</ul>


<p class="wp-block-paragraph">業務システムでは、障害そのものを完全にゼロにすることはできません。</p>


<p class="wp-block-paragraph">だからこそ、障害が発生したときに早く気づく。<br />
影響範囲を把握する。<br />
一次対応につなげる。<br />
必要に応じてエスカレーションする。</p>


<p class="wp-block-paragraph">そのために監視があります。</p>


<h2 class="wp-block-heading"><span id="toc2">監視には「監視する側」と「監視される側」がある</span></h2>


<p class="wp-block-paragraph">まず押さえるべき基本は、監視には「監視する側」と「監視される側」があるということです。</p>


<p class="wp-block-paragraph">一般的なオンプレミスや仮想基盤の監視構成では、次のような役割があります。</p>


<ul id="7b9660f1-f90d-4efa-a7d3-b5c5ea173fef" class="wp-block-list">
	<li>監視サーバー</li>


	<li>監視マネージャー</li>


	<li>監視対象サーバー</li>


	<li>監視エージェント</li>


	<li>運用端末</li>


	<li>通知先</li>
</ul>


<p class="wp-block-paragraph">監視サーバー、または監視マネージャーは、監視する側です。</p>


<p class="wp-block-paragraph">監視対象サーバーは、監視される側です。</p>


<p class="wp-block-paragraph">Webサーバ、APサーバ、DBサーバ、ジョブ管理サーバ、ストレージ、ネットワーク機器などが該当します。</p>


<p class="wp-block-paragraph">監視サーバーは、監視対象に対して定期的に確認を行います。</p>


<p class="wp-block-paragraph">たとえば、Web/APサーバとの通信状況、DBサーバのCPU負荷、共有ストレージのディスク容量、ログの異常メッセージなどを収集し、異常があれば運用者や管理者へ通知します。</p>


<figure id="3d474914-d411-49d9-aab4-f7f35f63a6e5" class="wp-block-image"><a href="https://assets.st-note.com/img/1779864633-8jFXUzkivH3N6WQYcmx2IurB.png?width=2000&amp;height=2000&amp;fit=bounds&amp;quality=85"><img decoding="async" src="https://assets.st-note.com/img/1779864633-8jFXUzkivH3N6WQYcmx2IurB.png?width=1200" alt="画像" /></a><br />
　　　　　　　　　　　　　　　　　　図：監視サーバーと監視対象サーバー・機器の関係</figure>


<p class="wp-block-paragraph">ここで重要なのは、監視は「何となく全体を見ている」のではないということです。</p>


<p class="wp-block-paragraph">監視対象ごとに、何を、どの方式で、どの周期で、どの閾値で、どの通知先へ送るかを細かく決めています。</p>


<p class="wp-block-paragraph"><strong>前編では、まず代表的な監視方式として、死活監視、エージェント監視、エージェントレス監視、SNMP監視を整理します。</strong></p>


<figure id="03bb1cc0-8c9b-4d90-8a50-22fe45e6eff4" class="wp-block-image"><a href="https://assets.st-note.com/img/1779897647-hTx0ODvJqKzkj8aLl1XVZF5E.png?width=2000&amp;height=2000&amp;fit=bounds&amp;quality=85"><img decoding="async" src="https://assets.st-note.com/img/1779897647-hTx0ODvJqKzkj8aLl1XVZF5E.png?width=1200" alt="画像" /></a></figure>


<p class="wp-block-paragraph">これらは、どれか1つだけを選ぶものではありません。</p>


<p class="wp-block-paragraph">実際のシステムでは、複数の方式を組み合わせます。</p>


<p class="wp-block-paragraph">たとえば、次のような組み合わせです。</p>


<ul id="305fb14a-ebee-43fd-bd2b-511063e4f5f6" class="wp-block-list">
	<li>ネットワーク疎通は死活監視</li>


	<li>OS内部のCPU、メモリ、ディスクはエージェント監視</li>


	<li>ネットワーク機器やストレージはSNMP監視</li>


	<li>Webサービスの応答はURL監視</li>


	<li>クラウドリソースはCloudWatchやOCI Monitoring</li>


	<li>アプリケーションログはログ監視</li>


	<li>バッチ処理はジョブ監視</li>
</ul>


<p class="wp-block-paragraph">つまり、監視方式は「どれが正解か」ではありません。</p>


<p class="wp-block-paragraph">そのシステムで何を知りたいのか。<br />
どこまで異常を検知したいのか。<br />
どのタイミングで誰が対応するのか。</p>


<p class="wp-block-paragraph">これに応じて選びます。</p>


<h2 class="wp-block-heading"><span id="toc3">死活監視とは何か</span></h2>


<p class="wp-block-paragraph">死活監視とは、監視対象が生きているかどうかを確認する監視です。</p>


<p class="wp-block-paragraph">代表的には、監視サーバーから監視対象サーバーへ `ping` を実行し、応答があるかを確認します。</p>


<p class="wp-block-paragraph">システム開発では、死活監視というと、まず `ping` による疎通確認をイメージすることが多いです。</p>


<p class="wp-block-paragraph">`ping` は、監視サーバーから監視対象のIPアドレスへ到達できるか、相手が応答を返すかを確認するためによく使われます。</p>


<p class="wp-block-paragraph">ここで注意が必要です。</p>


<p class="wp-block-paragraph">`ping` が通ることは、システムが正常に動いていることを意味しません。</p>


<p class="wp-block-paragraph">少しネットワークの階層で見ると、`ping` で確認しているのは、ざっくり言えばネットワーク層レベルの到達性です。</p>


<p class="wp-block-paragraph"><strong>つまり、監視サーバーから監視対象のIPアドレスへ届き、相手が応答している、ということを確認しているに過ぎません。</strong></p>


<p class="wp-block-paragraph">その上で動いているWebサーバ、APサーバ、DB、ジョブ、業務アプリケーションまで正常であることを確認しているわけではありません。</p>


<p class="wp-block-paragraph">たとえば、次のような状態でも `ping` は通ることがあります。</p>


<ul id="7884b479-7556-44e5-8906-c7c4cd28ac5e" class="wp-block-list">
	<li>Webサーバプロセスが停止している</li>


	<li>APサーバのスレッドが枯渇している</li>


	<li>DBリスナーが停止している</li>


	<li>DB表領域が枯渇している</li>


	<li>業務APが内部エラーを返している</li>


	<li>ログイン画面は開くが検索処理が失敗する</li>


	<li>バッチジョブが異常終了している</li>


	<li>ディスク使用率が100%に近い</li>


	<li>メモリ不足で処理が極端に遅い</li>
</ul>


<figure id="81e8024c-56e0-4719-9e3e-cd337d10e037" class="wp-block-image"><a href="https://assets.st-note.com/img/1779867087-uK3yV49B0gN67l2mEXGnPsWt.png?width=2000&amp;height=2000&amp;fit=bounds&amp;quality=85"><img decoding="async" src="https://assets.st-note.com/img/1779867087-uK3yV49B0gN67l2mEXGnPsWt.png?width=1200" alt="画像" /></a>
<figcaption class="wp-element-caption">　　　　　　　　　　　　　　　　　　　　　　　　　　図：`ping` で分かる範囲</figcaption>
</figure>


<p class="wp-block-paragraph">つまり、死活監視は重要ですが、それだけでは不十分です。</p>


<p class="wp-block-paragraph">`ping` による死活監視で分かるのは、「ネットワーク的に到達できるか」「機器やOSが応答しているか」という入口の状態です。</p>


<p class="wp-block-paragraph">一方で、業務として使える状態かどうかを確認するには、ポート監視、プロセス監視、URL監視、ログ監視、DB接続監視、ジョブ監視など、より上位の状態を見る監視が必要になります。</p>


<p class="wp-block-paragraph">なお、死活監視は `ping` だけとは限りません。</p>


<p class="wp-block-paragraph">SNMPを使って機器の稼働状態を確認する場合もあります。ネットワーク機器やストレージ、UPSなどでは、SNMPでインターフェース状態、電源状態、ファン、温度、装置状態などを取得したり、SNMP Trapで機器側から異常通知を受けたりします。</p>


<h2 class="wp-block-heading"><span id="toc4">エージェント監視とは何か</span></h2>


<p class="wp-block-paragraph">エージェント監視とは、監視対象サーバーに監視用ソフトウェアを導入し、そのエージェントがサーバ内部の状態を収集する方式です。</p>


<p class="wp-block-paragraph">監視対象サーバーの中に入って、CPU、メモリ、ディスク、プロセス、ログ、サービス状態などを確認するイメージです。</p>


<figure id="79cd6ccd-cbb9-4852-9385-9e13e5eaad60" class="wp-block-image"><a href="https://assets.st-note.com/img/1779867540-23SOQ7sP068aNKFiUfCtwj9h.png?width=2000&amp;height=2000&amp;fit=bounds&amp;quality=85"><img decoding="async" src="https://assets.st-note.com/img/1779867540-23SOQ7sP068aNKFiUfCtwj9h.png?width=1200" alt="画像" /></a>
<figcaption class="wp-element-caption">　　　　　　　　　　　　　　　　　　　　　　　　　　　　　図：エージェント監視のイメージ</figcaption>
</figure>


<p class="wp-block-paragraph">たとえば、次のような情報は、エージェントを入れた方が取得しやすくなります。</p>


<ul id="0c384743-a9f6-4b0a-8bbf-2acde8ca3319" class="wp-block-list">
	<li>CPU使用率</li>


	<li>メモリ使用率</li>


	<li>ディスク使用率</li>


	<li>ディスクI/O</li>


	<li>特定プロセスの起動状態</li>


	<li>特定サービスの状態</li>


	<li>OSログの特定メッセージ</li>


	<li>ミドルウェアログのエラー</li>


	<li>アプリケーションログの異常</li>


	<li>ファイル数やファイルサイズ</li>


	<li>独自スクリプトの実行結果</li>
</ul>


<p class="wp-block-paragraph">商用監視製品であれば、JP1、Systemwalker、Hinemosなどが代表例です。</p>


<p class="wp-block-paragraph">エージェント監視のメリットは、監視対象サーバーの内部情報を細かく取得できることです。</p>


<p class="wp-block-paragraph">たとえば、単にDBサーバに `ping` が通るかだけでなく、DBプロセスが起動しているか、DB関連ログにエラーが出ていないか、CPUやメモリが逼迫していないか、といった情報を取得できます。</p>


<p class="wp-block-paragraph">一方で、デメリットもあります。</p>


<p class="wp-block-paragraph">エージェントをインストールする必要があります。<br />
監視対象サーバーのリソースを使います。<br />
バージョン管理が必要です。<br />
OS更改やパッチ適用時に影響確認が必要です。<br />
エージェント自体が停止すると監視できません。<br />
セキュリティ上、導入や通信許可の調整が必要です。</p>


<p class="wp-block-paragraph">そのため、エージェント監視を使う場合は、「何を監視したいからエージェントが必要なのか」を明確にします。</p>


<p class="wp-block-paragraph">一方、エージェント監視のデメリットを見ると、「エージェントを入れずに済む方法はないか」という発想が生まれます。それがエージェントレス監視です。</p>


<h2 class="wp-block-heading"><span id="toc5">エージェントレス監視とは何か</span></h2>


<p class="wp-block-paragraph">エージェントレス監視とは、監視対象サーバーに監視用エージェントを導入せず、監視サーバー側からリモートで状態を確認する方式です。たとえば、サーバに到達できるかを確認するだけなら `ping` で確認できます。</p>


<p class="wp-block-paragraph"><strong>プロセス起動確認とWebサービス応答確認は違う</strong></p>


<p class="wp-block-paragraph">Webシステムでは、Apacheの `httpd` やTomcatのプロセスが起動していることを確認して、Web/APサーバが正常だと判断してしまうケースがあります。</p>


<p class="wp-block-paragraph">しかし、プロセスが起動していることと、Webサービスが正常に応答していることは別です。</p>


<p class="wp-block-paragraph">`httpd` が起動していても、アプリケーションのデプロイに失敗しているかもしれません。Tomcatが起動していても、DB接続でエラーになっているかもしれません。ロードバランサやリバースプロキシの経路が誤っていて、利用者から見ると画面に到達できないこともあります。</p>


<p class="wp-block-paragraph">そのため、Webサービスの正常性を確認するには、HTTP/HTTPSで対象URLへアクセスし、HTTPステータスコードやレスポンス内容を確認することがあります。</p>


<p class="wp-block-paragraph">たとえば、監視サーバーから `/healthcheck` や `/login` などのURLへHTTP GETリクエストを送り、HTTPステータスコードが `200` で返るか、レスポンス本文に想定した文字列が含まれるか、応答時間が閾値内かを確認します。</p>


<p class="wp-block-paragraph">この考え方は、現在でもWebサービスの正常性確認として一般的に使われます。</p>


<figure id="745a92ff-b41d-4285-b989-df5012617e4d" class="wp-block-image"><a href="https://assets.st-note.com/img/1779869601-Sz6LB0dpbAsxoPiXDWuqOfnI.png?width=2000&amp;height=2000&amp;fit=bounds&amp;quality=85"><img decoding="async" src="https://assets.st-note.com/img/1779869601-Sz6LB0dpbAsxoPiXDWuqOfnI.png?width=1200" alt="画像" /></a>
<figcaption class="wp-element-caption">　　　　　　　　　　　　　　　　　　　　　　　　　図：Webサービスの正常性確認のイメージ</figcaption>
</figure>


<p class="wp-block-paragraph">ただし、最近のシステムでは、確認の粒度を分けることが増えています。</p>


<p class="wp-block-paragraph">ロードバランサでは、配下のサーバへHTTP/HTTPSのヘルスチェックを行い、正常なターゲットだけにリクエストを振り分けます。</p>


<p class="wp-block-paragraph">コンテナやKubernetes環境では、コンテナが生きているか、リクエストを受け付けられる状態か、起動完了しているかを分けて確認します。</p>


<p class="wp-block-paragraph">また、より利用者目線で確認したい場合は、単一URLのGET確認だけでなく、外形監視やSynthetic Monitoringを使い、ログイン、検索、API呼び出しなど、実際の利用者操作に近いシナリオを定期実行することもあります。</p>


<p class="wp-block-paragraph">つまり、`/healthcheck` や `/login` のHTTP応答確認は今でも有効です。</p>


<p class="wp-block-paragraph">ただし、それだけで十分かは、システムの特性によります。</p>


<p class="wp-block-paragraph">重要なのは、`httpd` やTomcatのプロセス起動確認だけで「Webサービスが正常」と判断しないことです。</p>


<p class="wp-block-paragraph">Webサービスが業務として使えるかを確認するには、少なくともHTTP/HTTPSで実際にアクセスし、期待した応答が返ることを確認する必要があります。</p>


<p class="wp-block-paragraph">ネットワーク機器やストレージの状態を確認する場合は、SNMPで情報を取得できることもあります。クラウドサービスであれば、APIやクラウド側のメトリクスから状態を取得できる場合もあります。</p>


<p class="wp-block-paragraph">つまり、監視対象の内部にエージェントを入れなくても、監視サーバー側からリモートで確認できる内容であれば、エージェントレス監視を選択できます。</p>


<p class="wp-block-paragraph">一方で、OSログの詳細確認、独自スクリプトの実行結果、アプリケーションログの細かな異常検知、サーバ内部の詳細なメトリクス取得などは、エージェントを入れた方が扱いやすい場合があります。</p>


<p class="wp-block-paragraph">そのため、エージェントレス監視は「エージェントを入れなくて済むから楽」というだけではありません。</p>


<p class="wp-block-paragraph">監視したい内容が外部から取得できるのか。<br />
取得に必要な認証や権限をどう管理するのか。<br />
通信経路やファイアウォール設定はどうするのか。<br />
取得できる情報の粒度で運用判断できるのか。</p>


<p class="wp-block-paragraph">ここまで考えたうえで、エージェント監視にするのか、エージェントレス監視にするのかを決めます。</p>


<p class="wp-block-paragraph">代表的には、次のような方式があります。</p>


<ul id="19f65089-d6bf-49dc-af23-e33701e51e8a" class="wp-block-list">
	<li>ping</li>


	<li>TCPポート監視</li>


	<li>HTTP/HTTPS監視</li>


	<li>SNMP監視</li>


	<li>SSH経由のコマンド実行</li>


	<li>Windows WMIによる情報取得</li>


	<li>APIによる状態取得</li>


	<li>クラウドサービスのメトリクス取得</li>
</ul>


<p class="wp-block-paragraph">エージェントレス監視のメリットは、監視対象サーバーにソフトウェアを導入しなくてもよいことです。</p>


<p class="wp-block-paragraph">サーバ台数が多い場合、エージェント導入やバージョン管理の負荷を抑えられます。</p>


<p class="wp-block-paragraph">また、ネットワーク機器、ストレージ、アプライアンス製品、クラウドサービス、マネージドサービスでは、そもそもエージェントを入れられないこともあります。</p>


<p class="wp-block-paragraph">その場合は、SNMP、API、クラウドメトリクスなどを利用して監視します。</p>


<p class="wp-block-paragraph">ただし、エージェントレス監視には制約があります。</p>


<p class="wp-block-paragraph">外側から見える状態は分かるが、OS内部やアプリケーション内部の詳細までは見えないことがあります。<br />
ログファイルの中身までは見にくいことがあります。<br />
独自スクリプトの実行や詳細なメトリクス取得に制約が出ることがあります。<br />
監視サーバーやネットワーク経路に障害があると、監視できないことがあります。</p>


<p class="wp-block-paragraph">つまり、エージェントレス監視は「エージェントが不要だから簡単」という話ではありません。</p>


<p class="wp-block-paragraph">エージェントを入れない代わりに、監視サーバー側の接続方式、認証、通信経路、権限、取得できるメトリクスの範囲を設計する必要があります。</p>


<h2 class="wp-block-heading"><span id="toc6">SNMP監視とは何か</span></h2>


<p class="wp-block-paragraph">オンプレミスの監視やネットワーク機器監視でよく出てくるのが、SNMPです。</p>


<p class="wp-block-paragraph">SNMPは、Simple Network Management Protocolの略です。</p>


<p class="wp-block-paragraph">ネットワーク機器、サーバ、ストレージ、UPS、アプライアンスなどの状態を監視・管理するために使われるプロトコルです。SNMPの管理情報を扱うMIBについては、RFC 3418でもSNMPエンティティの動作を説明する管理オブジェクトとして定義されています。(<a rel="noopener" href="https://datatracker.ietf.org/doc/html/rfc3418?utm_source=chatgpt.com" target="_blank">IETF Datatracker</a>)</p>


<p class="wp-block-paragraph">SNMP監視では、一般的に次のような役割があります。</p>


<ul id="0deaf5dd-8f46-4e15-97c5-f688f2b2e994" class="wp-block-list">
	<li>SNMPマネージャー</li>


	<li>SNMPエージェント</li>


	<li>MIB</li>


	<li>OID</li>


	<li>SNMP Get</li>


	<li>SNMP Trap</li>
</ul>


<figure id="0011e75c-9e38-4623-bd1b-39a229524bca" class="wp-block-image"><a href="https://assets.st-note.com/img/1779870234-LcWArTznZi5odl42ERh9Bjwm.png?width=2000&amp;height=2000&amp;fit=bounds&amp;quality=85"><img decoding="async" src="https://assets.st-note.com/img/1779870234-LcWArTznZi5odl42ERh9Bjwm.png?width=1200" alt="画像" /></a>
<figcaption class="wp-element-caption">　　　　　　　　　　　　　　　　　　　　　　　　　　　　　図：SNMP監視のイメージ</figcaption>
</figure>


<p class="wp-block-paragraph">SNMPマネージャーは、監視する側です。</p>


<p class="wp-block-paragraph">SNMPエージェントは、監視される機器側で動作し、機器の状態情報を持っています。</p>


<p class="wp-block-paragraph">SNMP Getは、マネージャーがエージェントに対して「この情報を教えて」と問い合わせる方式です。</p>


<p class="wp-block-paragraph">SNMP Trapは、機器側からマネージャーへ「異常が起きた」と通知する方式です。</p>


<p class="wp-block-paragraph">たとえば、ネットワーク機器でインターフェースがDownした場合、機器側からSNMP Trapが飛ぶことがあります。</p>


<p class="wp-block-paragraph">監視サーバーはそのTrapを受け取り、アラートとして運用者へ通知します。</p>


<h2 class="wp-block-heading"><span id="toc7">SNMP監視でつまずきやすいOIDとMIB</span></h2>


<p class="wp-block-paragraph">SNMPの説明では、OIDやMIBという言葉が当たり前のように出てきます。</p>


<p class="wp-block-paragraph">しかし、これを正しく理解していないと、</p>


<p class="wp-block-paragraph">「MIBファイルを監視製品に読み込ませれば、監視できるんですよね」</p>


<p class="wp-block-paragraph">という誤解につながります。</p>


<p class="wp-block-paragraph">これは危険です。</p>


<p class="wp-block-paragraph">まず、OIDから整理します。</p>


<p class="wp-block-paragraph">OIDは、Object Identifierの略です。</p>


<p class="wp-block-paragraph">一言でいえば、監視対象機器の中にある<strong>データの住所</strong>です。</p>


<p class="wp-block-paragraph">ネットワーク機器やサーバは、人間が話すように「CPU使用率を教えてください」と理解してくれるわけではありません。</p>


<p class="wp-block-paragraph">SNMPでは、監視マネージャーが、監視対象機器に対して、</p>


<p class="wp-block-paragraph">「この番号の情報をください」</p>


<p class="wp-block-paragraph">と問い合わせます。</p>


<p class="wp-block-paragraph">たとえば、あるネットワーク機器のCPU使用率を表すOIDが、次のような番号だったとします。</p>


<pre class="wp-block-code"><code>1.3.6.1.4.1.9.9.109.1.1.1.1.5</code></pre>



<p class="wp-block-paragraph">監視マネージャーは、このOIDを指定して、監視対象機器に問い合わせます。</p>


<p class="wp-block-paragraph">すると、機器側のSNMPエージェントは、</p>


<pre class="wp-block-code"><code>80</code></pre>



<p class="wp-block-paragraph">のように値を返します。</p>


<p class="wp-block-paragraph">この場合、人間から見ると「CPU使用率が80%」という意味です。</p>


<p class="wp-block-paragraph">しかし、機器や監視マネージャーのやり取りとしては、基本的には「どのOIDの値を取るか」という話になります。</p>


<p class="wp-block-paragraph">つまり、OIDは、監視対象機器の中にある監視項目の住所です。</p>


<p class="wp-block-paragraph">次にMIBです。</p>


<p class="wp-block-paragraph">MIBは、Management Information Baseの略です。</p>


<p class="wp-block-paragraph">一言でいえば、<strong>OIDという数字の住所と、人間が理解できる意味を対応づける辞書</strong>です。</p>


<figure id="0f702ce6-df03-45e0-84a6-af46607db64e" class="wp-block-image"><a href="https://assets.st-note.com/img/1779871713-k9XwrUd2tsmnZzRebYSNLOEl.png?width=2000&amp;height=2000&amp;fit=bounds&amp;quality=85"><img decoding="async" src="https://assets.st-note.com/img/1779871713-k9XwrUd2tsmnZzRebYSNLOEl.png?width=1200" alt="画像" /></a>
<figcaption class="wp-element-caption">　　　　　　　　　　　　　　　　　　　　　　　　　　図：MIBとOIDを使った監視のイメージ</figcaption>
</figure>


<p class="wp-block-paragraph">人間が、毎回、</p>


<pre class="wp-block-code"><code>1.3.6.1.4.1.9.9.109.1.1.1.1.5</code></pre>



<p class="wp-block-paragraph">という数字を見ても、それが何を意味するのかは分かりません。</p>


<p class="wp-block-paragraph">そこで、ベンダーが提供するMIBファイルを使います。</p>


<p class="wp-block-paragraph">MIBには、たとえば次のような対応関係が定義されています。</p>


<pre class="wp-block-code"><code>1.3.6.1.4.1.9.9.109.1.1.1.1.5
=
CPUの5分平均使用率</code></pre>



<p class="wp-block-paragraph">実際には、製品ごとの正式な項目名や階層構造で定義されていますが、考え方としてはこのようなものです。</p>


<p class="wp-block-paragraph">つまり、OIDは「住所」です。<br />
MIBは「住所録」または「辞書」です。</p>


<p class="wp-block-paragraph">OIDが分かれば、監視マネージャーは対象機器から値を取得できます。<br />
MIBがあれば、そのOIDが何を意味するのかを人間が理解しやすくなります。</p>


<p class="wp-block-paragraph">ここまでは、SNMP監視の基本です。</p>


<p class="wp-block-paragraph">ただし、実務で本当に重要なのはここからです。</p>


<p class="wp-block-paragraph"><strong>MIBを登録しただけでは監視設計は終わらない</strong></p>


<p class="wp-block-paragraph">MIBファイルを監視製品に読み込ませると、製品固有のOIDやTrapの意味を解釈できるようになります。</p>


<p class="wp-block-paragraph">しかし、それだけでは監視設計は終わりません。</p>


<p class="wp-block-paragraph">MIBは、あくまで辞書です。</p>


<p class="wp-block-paragraph">辞書を入れただけでは、</p>


<ul id="6054cf22-62b5-4bed-9acd-3bfb6b4e9daa" class="wp-block-list">
	<li>どのOIDを監視するのか</li>


	<li>どの値を警告とするのか</li>


	<li>どの値を異常とするのか</li>


	<li>どのTrapを通知対象にするのか</li>


	<li>どのTrapは通知しないのか</li>


	<li>何分継続したら異常にするのか</li>


	<li>誰に通知するのか</li>


	<li>通知を受けた人が何を確認するのか</li>
</ul>


<p class="wp-block-paragraph">は決まりません。</p>


<p class="wp-block-paragraph">ここを決めるのが監視設計です。</p>


<p class="wp-block-paragraph">たとえば、CPU使用率のOIDを監視するとします。</p>


<p class="wp-block-paragraph">CPU使用率が80%になったら、必ず異常でしょうか。</p>


<p class="wp-block-paragraph">そうとは限りません。</p>


<p class="wp-block-paragraph">夜間バッチの時間帯だけ一時的にCPUが上がるシステムもあります。<br />
バックアップ処理中だけCPUやI/Oが上がることもあります。<br />
短時間のスパイクであれば、業務影響がない場合もあります。<br />
一方で、CPU使用率が70%程度でも、長時間継続すれば性能劣化の予兆かもしれません。</p>


<p class="wp-block-paragraph">つまり、単に「CPU使用率のOIDを監視する」だけでは不十分です。</p>


<p class="wp-block-paragraph">次のように、運用で判断できる条件まで落とす必要があります。</p>


<pre class="wp-block-code"><code>CPU使用率が90%以上
かつ
5分以上継続した場合は警告

CPU使用率が95%以上
かつ
10分以上継続した場合は異常

ただし、夜間バッチ時間帯は別閾値とする</code></pre>



<p class="wp-block-paragraph">もちろん、これは例です。</p>


<p class="wp-block-paragraph">実際の閾値は、システムの特性、性能要件、通常時の負荷、ピーク時間帯、バッチ処理、運用体制に応じて決めます。</p>


<p class="wp-block-paragraph"><strong>MIBを入れただけで監視を始めると何が起きるか</strong></p>


<p class="wp-block-paragraph">よくない進め方は、ベンダーのMIBファイルを監視サーバーに登録し、デフォルト設定に近い形で対象機器の監視を一斉に始めてしまうことです。</p>


<p class="wp-block-paragraph">この場合、運用開始後にアラートが大量に出ることがあります。</p>


<p class="wp-block-paragraph">いわゆる、アラートの大洪水です。</p>


<p class="wp-block-paragraph">なぜそうなるのか。</p>


<p class="wp-block-paragraph">主な理由は3つあります。</p>


<p class="wp-block-paragraph">1つ目は、<strong>通知すべきイベントと、通知しなくてよいイベントを分けていない</strong>ことです。</p>


<p class="wp-block-paragraph">機器や製品は、さまざまなTrapや状態変化を出します。</p>


<p class="wp-block-paragraph">その中には、本当に即時対応が必要な障害もあります。</p>


<p class="wp-block-paragraph">一方で、単なる情報通知、状態変化、復旧通知、一時的な警告、運用上は無視してよいメッセージもあります。</p>


<p class="wp-block-paragraph">これらをすべて同じように通知すると、運用者は大量のアラートを受けることになります。</p>


<p class="wp-block-paragraph">2つ目は、<strong>閾値や継続時間をシステム特性に合わせていない</strong>ことです。</p>


<p class="wp-block-paragraph">CPU、メモリ、ディスクI/O、ネットワーク使用率などは、システムによって通常値が違います。</p>


<p class="wp-block-paragraph">業務ピーク時にCPUが高くなるシステムもあります。<br />
夜間バッチ中にI/Oが急増するシステムもあります。<br />
月次処理の日だけ負荷が上がるシステムもあります。</p>


<p class="wp-block-paragraph">それを考慮せず、一般的な閾値だけで監視すると、正常な業務処理まで異常として検知してしまいます。</p>


<p class="wp-block-paragraph">3つ目は、<strong>テスト工程で実際のログやアラートを精査していない</strong>ことです。</p>


<p class="wp-block-paragraph">監視条件は、設計時点の机上検討だけでは決めきれません。</p>


<p class="wp-block-paragraph">特に、ログ監視やTrap監視は、実際にシステムを動かしてみないと、どのメッセージがどれくらい出るのか分からないことがあります。</p>


<p class="wp-block-paragraph">システムテスト、運用テスト、本番リハーサルで、業務データ、日次処理、月次処理、ピーク時のトランザクション、バックアップ、ジョブ、外部連携などを動かして初めて、大量のログやイベントが出てきます。</p>


<p class="wp-block-paragraph">その中から、</p>


<ul id="17fc5f4a-a5db-4403-8071-0f27f566e94c" class="wp-block-list">
	<li>本当に通知すべきもの</li>


	<li>通知は不要だが記録しておくもの</li>


	<li>除外してよいもの</li>


	<li>閾値や継続時間を見直すべきもの</li>


	<li>一次対応手順に落とすべきもの</li>
</ul>


<p class="wp-block-paragraph">を精査する必要があります。</p>


<p class="wp-block-paragraph">これをやらずに本番稼働すると、運用開始後に大量のアラートが出ます。</p>


<p class="wp-block-paragraph">すると、運用者はアラートを見切れなくなります。</p>


<p class="wp-block-paragraph">最悪なのは、本当に重要な障害が、不要なアラートの中に埋もれてしまうことです。</p>


<p class="wp-block-paragraph">監視は、アラートをたくさん出せばよいわけではありません。</p>


<p class="wp-block-paragraph">運用者が判断できる形で、必要な異常を検知することが重要です。</p>


<h2 class="wp-block-heading"><span id="toc8">SNMP監視も詳細設計の対象である</span></h2>


<p class="wp-block-paragraph">ここまで見ると分かるように、SNMP監視は単にMIBを登録する作業ではありません。</p>


<ul>
	<li>MIBを登録する</li>
	<li>OIDを選ぶ</li>
	<li>Trapを受ける</li>
	<li>閾値を決める</li>
	<li>重大度を決める</li>
	<li>通知先を決める</li>
	<li>除外条件を決める</li>
	<li>テスト工程で実際の発報状況を確認する</li>
	<li>運用手順と対応づける</li>
</ul>
<p class="wp-block-paragraph">ここまで含めて、SNMP監視も詳細設計の中で決めるべき重要な領域です。</p>


<h2 class="wp-block-heading"><span id="toc9">まとめ｜監視は「異常を検知する設定」ではなく設計である</span></h2>
<p>システム監視では、まず<strong>何を正常とし、何を異常として検知するのか</strong>を決める必要があります。</p>
<p>本記事では、監視の基本として次の点を整理しました。</p>
<ul>
	<li>
<p><strong>監視には「監視する側」と「監視される側」がある</strong></p>
</li>
	<li>
<p><strong><code>ping</code> が通ることと、システムが業務として正常に使えることは別</strong></p>
</li>
	<li>
<p><strong>死活監視、エージェント監視、エージェントレス監視、SNMP監視は目的に応じて使い分ける</strong></p>
</li>
	<li>
<p><strong>SNMPではMIBを登録するだけでなく、OID、閾値、Trap、除外条件まで設計する</strong></p>
</li>
	<li>
<p><strong>監視条件は設計時に決めて終わりではなく、テスト工程で実際の発報を確認して見直す</strong></p>
</li>
</ul>
<p>監視製品を導入し、監視項目を設定すれば監視設計が終わるわけではありません。</p>
<p>重要なのは、</p>
<p><strong>「何を検知するか」<br />
「どの条件で異常と判断するか」<br />
「検知した後に誰がどう動くか」</strong></p>
<p>までつながっていることです。</p>
<p>監視は、アラートを出すための設定ではなく、<strong>障害に気づき、判断し、対応につなげるための設計</strong>です。</p>
<h3><span id="toc10">次の記事｜クラウドでは監視設計がどう変わるのか</span></h3>
<p>オンプレミスでは、監視サーバーやエージェント、SNMPなどを使って監視する構成が一般的でした。</p>
<p>一方、AWSやOCIでは、CloudWatchやOCI Monitoringといったクラウドネイティブな監視サービスを利用できます。</p>
<p>ただし、クラウド監視サービスを使えば、監視設計そのものが不要になるわけではありません。</p>
<p>後編では、</p>
<ul>
	<li>
<p>AWS CloudWatch／OCI Monitoringによるクラウド監視</p>
</li>
	<li>
<p>オンプレミスからクラウド移行するときの監視Fit &amp; Gap</p>
</li>
	<li>
<p>監視方式と監視対象の違い</p>
</li>
	<li>
<p>閾値、検知条件、重大度、通知先</p>
</li>
	<li>
<p>一次対応・エスカレーション・復旧確認</p>
</li>
</ul>
<p>まで踏み込み、<strong>実際の運用につながる監視設計</strong>を整理しています。</p>

<a href="https://sys-univ.com/tec/monitoring-cloud-fit-gap/" title="【後編】システム監視の基本｜クラウド監視と「運用で使える監視設計」" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/06/daa30b283a2097394b43f5af8add57d9-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/06/daa30b283a2097394b43f5af8add57d9-160x90.jpg 160w, https://sys-univ.com/wp-content/uploads/2026/06/daa30b283a2097394b43f5af8add57d9-500x281.jpg 500w, https://sys-univ.com/wp-content/uploads/2026/06/daa30b283a2097394b43f5af8add57d9-800x450.jpg 800w, https://sys-univ.com/wp-content/uploads/2026/06/daa30b283a2097394b43f5af8add57d9-300x169.jpg 300w, https://sys-univ.com/wp-content/uploads/2026/06/daa30b283a2097394b43f5af8add57d9-768x432.jpg 768w, https://sys-univ.com/wp-content/uploads/2026/06/daa30b283a2097394b43f5af8add57d9-1536x864.jpg 1536w, https://sys-univ.com/wp-content/uploads/2026/06/daa30b283a2097394b43f5af8add57d9-120x68.jpg 120w, https://sys-univ.com/wp-content/uploads/2026/06/daa30b283a2097394b43f5af8add57d9-320x180.jpg 320w, https://sys-univ.com/wp-content/uploads/2026/06/daa30b283a2097394b43f5af8add57d9-376x212.jpg 376w, https://sys-univ.com/wp-content/uploads/2026/06/daa30b283a2097394b43f5af8add57d9.jpg 1672w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【後編】システム監視の基本｜クラウド監視と「運用で使える監視設計」</div><div class="blogcard-snippet internal-blogcard-snippet">CloudWatch等のクラウド監視サービスは部品に過ぎない。既存監視をクラウド移行後どう引き継ぐか、Fit &amp; Gapの整理方法を実務観点で解説します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.09.07</div></div></div></div></a>
<hr />
<p><strong><span style="font-size: 20px;">関連記事</span></strong></p>
<p>監視は単独で設計するものではありません。</p>
<p>非機能要件で求める可用性や運用性を整理し、詳細設計で監視条件へ落とし込み、テスト・運用につなげていく必要性については次の記事で説明しています。</p>
<ul>
	<li><strong>詳細設計で決めること 後編②｜監視・ログ・バックアップ・セキュリティ・運用スクリプト</strong><br />
監視対象、閾値、通知、ログ監視条件など、監視を詳細設計としてどこまで具体化するかを整理しています。</li>
</ul>

<a href="https://sys-univ.com/dev/detailed-design-part2-monitoring-security/" title="【全3回・第3部】監視・ログ・バックアップ・セキュリティの詳細設計｜運用で使える設計にする観点" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/08/a857b32d11c29b9f04dd5d31f5ea42a3-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/08/a857b32d11c29b9f04dd5d31f5ea42a3-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/08/a857b32d11c29b9f04dd5d31f5ea42a3-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/08/a857b32d11c29b9f04dd5d31f5ea42a3-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/08/a857b32d11c29b9f04dd5d31f5ea42a3-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【全3回・第3部】監視・ログ・バックアップ・セキュリティの詳細設計｜運用で使える設計にする観点</div><div class="blogcard-snippet internal-blogcard-snippet">詳細設計を「構築・テスト・運用できる形」に落とし込む後編②。設計時点では判断しきれない監視条件の見極めなど、現場で見落としやすい監視設計の難しさを整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.08.20</div></div></div></div></a>
<ul>
	<li><strong>機能要件と非機能要件の違い｜「機能が動く」と「本番で使える」は違う点</strong><br />
可用性、性能、運用・保守性など、監視設計の前提となる非機能要件について解説しています。</li>
</ul>

<a href="https://sys-univ.com/dev/functional-nonfunctional-requirements/" title="機能要件と非機能要件の違い｜「機能が動く」と「本番で使える」は違う" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa-160x90.jpg 160w, https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa-500x281.jpg 500w, https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa-800x450.jpg 800w, https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa-300x169.jpg 300w, https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa-768x432.jpg 768w, https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa-1536x864.jpg 1536w, https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa-120x68.jpg 120w, https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa-320x180.jpg 320w, https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa-376x212.jpg 376w, https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa.jpg 1672w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">機能要件と非機能要件の違い｜「機能が動く」と「本番で使える」は違う</div><div class="blogcard-snippet internal-blogcard-snippet">「機能が動く」と「本番で使える」は違う。機能要件と非機能要件の違いを、購入申請システムの具体例と現場の失敗パターンから整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.06.19</div></div></div></div></a>
<ul>
	<li><strong>要件定義とは何をする工程か｜RFP・見積前提から認識差を潰す実務</strong><br />
監視を含む非機能要件を、設計に入る前の要件定義でどこまで決めるのかを整理しています。</li>
</ul>

<a href="https://sys-univ.com/dev/requirements-definition/" title="要件定義とは何をする工程か｜RFP・見積前提から認識差を潰す実務" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a-500x281.png 500w, https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a-800x450.png 800w, https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a-300x169.png 300w, https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a-768x432.png 768w, https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a-1536x864.png 1536w, https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a-376x212.png 376w, https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a.png 1672w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">要件定義とは何をする工程か｜RFP・見積前提から認識差を潰す実務</div><div class="blogcard-snippet internal-blogcard-snippet">要件定義とは何をする工程なのか。RFP、質問回答、提案書、見積前提から認識差を潰し、スコープや責任分界を確定する実務を、大規模SIの具体的な失敗事例とともに解説します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.08.12</div></div></div></div></a>
<ul>
	<li><strong>システム開発の全体像｜アプリ・基盤・非機能はどうつながるのか</strong><br />
要件定義、設計、構築、テスト、運用まで、監視設計がシステム開発全体のどこに位置するのかを解説しています。</li>
</ul>

<a href="https://sys-univ.com/dev/system-dev-overview/" title="システム開発の全体像｜アプリ・基盤・非機能はどうつながるのか" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/08/7bef9f366cb7c5feb05b75b01a4ea2da-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/08/7bef9f366cb7c5feb05b75b01a4ea2da-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/08/7bef9f366cb7c5feb05b75b01a4ea2da-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/08/7bef9f366cb7c5feb05b75b01a4ea2da-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/08/7bef9f366cb7c5feb05b75b01a4ea2da-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">システム開発の全体像｜アプリ・基盤・非機能はどうつながるのか</div><div class="blogcard-snippet internal-blogcard-snippet">システム開発は、アプリケーションだけで成立するものではありません。システム基盤、性能・可用性などの非機能、テスト、移行、運用がどのようにつながって一つのシステムを成立させるのかを、現場目線で整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.08.26</div></div></div></div></a>
<p>&nbsp;</p>]]></content:encoded>
					
					<wfw:commentRss>https://sys-univ.com/tec/monitor/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【後編】システム監視の基本｜クラウド監視と「運用で使える監視設計」</title>
		<link>https://sys-univ.com/tec/monitoring-cloud-fit-gap/</link>
					<comments>https://sys-univ.com/tec/monitoring-cloud-fit-gap/#respond</comments>
		
		<dc:creator><![CDATA[ナギ]]></dc:creator>
		<pubDate>Mon, 07 Sep 2026 14:32:46 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[テクノロジー]]></category>
		<guid isPermaLink="false">https://sys-univ.com/?p=2671</guid>

					<description><![CDATA[この記事は「システム監視の基本」全2回シリーズの第2部です。 【第1部】システム監視の基本｜死活監視・エージェント監視・SNMP監視 監視の基本構造、死活監視、エージェント監視、SNMP監視、MIB・OIDなどを解説 【 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>この記事は「システム監視の基本」全2回シリーズの第2部です。</strong></p>
<ul>
	<li>
<p><a href="https://sys-univ.com/tec/monitor/"><strong>【第1部】システム監視の基本｜死活監視・エージェント監視・SNMP監視</strong></a><br />
監視の基本構造、死活監視、エージェント監視、SNMP監視、MIB・OIDなどを解説</p>
</li>
	<li>
<p><strong>【第2部】この記事</strong><br />
クラウド監視、既存監視のFit &amp; Gap、運用で使える監視設計を解説</p>
</li>
</ul>
<hr />
<p><strong>はじめに</strong></p>
<p>前編では、死活監視、エージェント監視、SNMP監視など、システム監視の基本的な仕組みを整理しました。</p>
<p>そこで確認したのは、<strong><code>ping</code> が通ることと、システムが業務として正常に使えることは別</strong>だという点です。</p>
<p>サーバへの到達、プロセスの起動、HTTP/HTTPSの応答、業務処理の正常終了では、それぞれ確認しているレベルが異なります。</p>
<p>後編では、この考え方をクラウド環境へ広げます。</p>
<p>AWS CloudWatchやOCI Monitoringを使えば、自前の監視サーバを構築せずに、メトリクス、ログ、アラームを扱える場合があります。</p>
<p>しかし、クラウド監視サービスを使えば、監視設計が不要になるわけではありません。</p>
<ul>
	<li>標準メトリクスで足りるのか</li>
	<li>既存監視をそのまま置き換えられるのか</li>
	<li>どの値を異常とするのか</li>
	<li>誰に通知するのか</li>
	<li>通知後に何を確認し、どう対応するのか</li>
</ul>
<p>こうした点は、クラウドでも設計する必要があります。</p>
<p>特にオンプレミスからクラウドへ移行する場合は、既存監視をそのまま移すのではなく、<strong>何を引き継ぎ、何を標準機能で代替し、何を見直すのか</strong>というFit &amp; Gapが重要になります。</p>
<p>監視は、アラートを出すための設定ではありません。</p>
<p><strong>障害に気づき、判断し、対応につなげるための設計です。</strong></p>

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-14" checked><label class="toc-title" for="toc-checkbox-14">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">クラウド監視とは何か</a></li><li><a href="#toc2" tabindex="0">クラウド監視サービスの代表例</a></li><li><a href="#toc3" tabindex="0">AWS CloudWatchの場合</a></li><li><a href="#toc4" tabindex="0">OCI Monitoringの場合</a></li><li><a href="#toc5" tabindex="0">クラウド移行では、既存監視のFit &amp; Gapが必要</a><ol><li><a href="#toc6" tabindex="0">1. 既存監視を標準機能で置き換えられるもの</a></li><li><a href="#toc7" tabindex="0">2. 標準機能だけでは置き換えられないもの</a></li><li><a href="#toc8" tabindex="0">3. 代替するか、捨てるか、運用でカバーするもの</a></li></ol></li><li><a href="#toc9" tabindex="0">監視対象・目的で見た監視の種類</a></li><li><a href="#toc10" tabindex="0">監視方式は「何を知りたいか」から選ぶ</a></li><li><a href="#toc11" tabindex="0">監視設計で決めること</a></li><li><a href="#toc12" tabindex="0">監視でよくある誤解</a></li><li><a href="#toc13" tabindex="0">システム基盤エンジニアが持つべき監視の見方</a></li><li><a href="#toc14" tabindex="0">まとめ｜クラウドでも、監視の本質は変わらない</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">クラウド監視とは何か</span></h2>
<p>前編で説明した監視構成は、オンプレミスや従来型の監視製品を前提としたものでした。</p>
<p>一方、クラウドでは監視の実現方法が少し変わります。</p>
<p>クラウドでは、クラウドベンダーが用意する監視サービスを使って、仮想サーバ、ストレージ、ロードバランサ、データベース、ネットワーク、サーバレス、コンテナなどのメトリクス、ログ、イベントを収集できます。<br />
<br />
そのため、従来のように自前で監視サーバを立てて、すべてのサーバに監視エージェントを導入し、監視製品を運用する、という構成が必ずしも必要ではありません。ただし、ここで誤解してはいけないことがあります。<br />
<br />
クラウド監視サービスがあることと、監視設計が不要になることは別です。<br />
クラウド監視サービスは、監視を実現するための部品です。<br />
<br />
何を監視するのか。 どの値を異常とするのか。 どの条件で通知するのか。 通知を受けた人が何を確認するのか。 既存システムで行っていた監視を新システムでも継続するのか。<br />
<br />
ここは、設計で決める必要があります。<br />
<br />
特にオンプレミスからクラウドへ移行する業務システムでは、既存監視の引き継ぎが大きな論点になります。</p>


<h2 class="wp-block-heading"><span id="toc2">クラウド監視サービスの代表例</span></h2>


<p class="wp-block-paragraph">クラウド監視サービスは、クラウドベンダーごとに用意されています。<br />
<br />
AWSであれば、CloudWatch。 Azureであれば、Azure Monitor。 <br />
Google Cloudであれば、Cloud Monitoring。 <br />
OCIであれば、OCI Monitoring。<br />
<br />
それぞれ名称や機能の範囲は異なりますが、基本的には、クラウド上のリソースからメトリクス、ログ、イベントを収集し、条件に応じてアラームや通知につなげるためのサービスです。<br />
<br />
この記事では、AWSでよく使われるCloudWatchを中心に説明します。<br />
<br />
あわせて、Oracle DatabaseやOracle製品を利用している業務システムではOCIが選択肢になることもあるため、OCI Monitoringについても簡単に触れます。</p>


<h2 class="wp-block-heading"><span id="toc3">AWS CloudWatchの場合</span></h2>


<p class="wp-block-paragraph">AWS CloudWatchは、AWS上のリソースを監視するための代表的なサービスです。<br />
<br />
EC2、RDS、ELB、EBS、Lambda、ECS、EKSなど、AWS上の多くのサービスはCloudWatchにメトリクスを出力できます。<br />
<br />
たとえば、EC2であればCPU使用率、ネットワーク送受信量、ディスクI/Oなどを確認できます。<br />
<br />
RDSであれば、CPU使用率、DB接続数、ストレージ容量、読み書きIOPSなどを確認できます。ELBであれば、リクエスト数、ターゲットの正常性、HTTPエラー数、レスポンスタイムなどを確認できます。<br />
<br />
CloudWatchでは、こうしたメトリクスに対してアラームを設定できます。</p>


<p class="wp-block-paragraph">たとえば、CPU使用率が一定時間以上高い状態が続いたら通知する。 RDSの空き容量が少なくなったら通知する。 ELB配下の正常ターゲット数が減ったら通知する。 アプリケーションログに特定のエラーメッセージが出たら通知する。<br />
<br />
このように、CloudWatchはAWS上のシステム監視における基本的な部品になります。ただし、CloudWatchを使えばすべてが自動で完璧に監視されるわけではありません。<br />
<br />
標準メトリクスで足りるのか。 詳細監視が必要なのか。 CloudWatch Agentを入れてOS内部のメモリやディスク使用率を取得するのか。 アプリケーションログをCloudWatch Logsへ送るのか。 ログのどの文字列を異常として拾うのか。 アラーム閾値をどう設定するのか。 通知先をどうするのか。 通知を受けた人が何を確認するのか。<br />
<br />
これらは設計が必要です。<br />
<br />
<strong>特にオンプレミスからAWSへ移行する場合、既存の監視をCloudWatchだけでそのまま置き換えられるとは限りません。<br />
</strong><br />
JP1、Systemwalker、Zabbix、PFM for Oracle、Oracle Enterprise Managerなどで見ていた監視項目が、CloudWatchの標準メトリクスだけで同じ粒度で取得できるとは限らないからです。<br />
<br />
そのため、AWSへ移行する場合でも、CloudWatchで何が見えるかだけではなく、既存監視で何を見ていたのか、新システムでも同じ監視が必要なのか、必要ならCloudWatchで代替できるのか、できない場合は何で補うのかを整理する必要があります。</p>


<h2 class="wp-block-heading"><span id="toc4">OCI Monitoringの場合</span></h2>


<p class="wp-block-paragraph">OCIでも、クラウドネイティブな監視サービスがあります。<br />
代表的なのがOCI Monitoringです。<br />
<br />
OCI Monitoringを使うと、OCI上のコンピュート、ストレージ、ロードバランサ、データベース、ネットワーク関連リソースなどのメトリクスを収集し、条件に応じてアラームを設定できます。<br />
<br />
OCIのComputeインスタンスでは、プラグインを有効化することで、インスタンスの状態やメトリクスを取得できる構成もあります。<br />
ただし、OCI Monitoringを使えば、Oracle Databaseの性能監視や既存の運用監視がすべて自動で置き換わるわけではありません。<br />
<br />
Oracle Databaseを利用している業務システムでは、OCI Monitoringで見るもの、Oracle Database側の機能で見るもの、OEMで見るもの、ログ監視で見るもの、運用手順で確認するものを分けて考える必要があります。<br />
<br />
特に、既存システムでOracle Database、Oracle Enterprise Manager、AWR、ASH、Performance Hub、PFM for Oracleなどを利用していた場合、クラウド移行後にどの監視を何で代替するのかを整理する必要があります。<br />
<br />
Oracle系システムでは、DB性能、待機イベント、SQL、セッション、表領域、アラートログなど、DB内部の監視観点が重要になることがあります。<br />
そのため、OCI Monitoringだけで考えるのではなく、Oracle Databaseの監視機能や既存運用を含めて、全体として監視設計を行う必要があります。</p>


<h2 class="wp-block-heading"><span id="toc5">クラウド移行では、既存監視のFit &amp; Gapが必要</span></h2>


<p class="wp-block-paragraph">クラウド移行といっても、完全な新規開発ばかりではありません。<br />
<br />
実務では、既存のオンプレミスシステムをクラウドへ移すリフト＆シフトや、移行後に段階的にクラウドネイティブ化していくケースが多くあります。<br />
<br />
その場合、移行前のシステムで行っていた監視を、移行後にどう引き継ぐかが大きな論点になります。<br />
<br />
既存環境では、JP1、Systemwalker、Zabbix、PFM for Oracle、Oracle Enterprise Managerなどで、OS、ジョブ、ログ、DB性能、表領域、待機イベント、SQL、アラートログなどを監視していたかもしれません。<br />
<br />
では、それをクラウド移行後に同じように見られるのでしょうか。答えは、簡単ではありません。<br />
<br />
クラウド移行後の監視Fit &amp; Gapでは、少なくとも次の3つに整理して考える必要があります。</p>


<h3 class="wp-block-heading"><span id="toc6">1. 既存監視を標準機能で置き換えられるもの</span></h3>


<p class="wp-block-paragraph">PFM for Oracleや既存監視製品で見ていた内容を、OEM、AWR、ASH、Performance Hub、CloudWatch、Performance Insights、Database Insightsなどで代替できる場合は、新環境の標準機能に寄せる判断があります。<br />
<br />
この場合、既存監視をそのまま機械的に移植するのではなく、新環境で標準的に提供されている監視機能を使い、運用をシンプルにできないかを検討します。</p>


<h3 class="wp-block-heading"><span id="toc7">2. 標準機能だけでは置き換えられないもの</span></h3>


<p class="wp-block-paragraph">一方で、既存監視で見ていた項目が、新環境の標準機能では取得できない、または同じ粒度で監視できない場合もあります。</p>


<p class="wp-block-paragraph">その場合は、代替方式を検討します。<br />
<br />
別のメトリクスで代替できるのか。 ログ監視で拾えるのか。 スクリプトで補完できるのか。 外部監視製品やAPMを使うのか。 そもそも新環境でも本当に必要な監視なのか。<br />
<br />
ここを整理せずに進めると、オンプレでは見えていた異常が、クラウド移行後に見えなくなることがあります。</p>


<h3 class="wp-block-heading"><span id="toc8">3. 代替するか、捨てるか、運用でカバーするもの</span></h3>


<p class="wp-block-paragraph">標準機能で置き換えられない監視については、最終的に判断が必要です。<br />
<br />
手組みしてでも実装するのか。 別製品を追加して実現するのか。 運用手順でカバーするのか。 監視対象から外すのか。<br />
<br />
監視を外す場合は、障害検知が遅れる可能性、一次対応への影響、サービスレベルへの影響を説明し、リスク受容として顧客と合意する必要があります。<br />
<br />
<strong>ここで重要なのは、プロジェクト側だけで勝手に決めないことです。</strong><br />
<br />
既存システムで実装されていた監視には、多くの場合、過去の障害、運用上の要請、監査対応、顧客側の不安、サービスレベル上の理由があります。</p>


<p class="wp-block-paragraph"><strong>そのため、単に「新しい製品ではできないのでやりません」とは言いにくいことがあります。</strong><br />
<br />
技術的には実現できない。 実現はできるがコストが高すぎる。 手組みすれば可能だが保守性が悪い。 運用カバーで十分と判断できる。 リスクを受容して監視対象から外す。<br />
<br />
こうした判断を、要件、コスト、運用負荷、障害時の影響、顧客の期待値を踏まえて整理します。<br />
<br />
クラウド移行時の監視設計で重要なのは、既存監視を機械的に移植することではありません。<br />
<br />
業務システムとして必要な異常検知、性能把握、一次対応、エスカレーションが、新システムでも成立するかを確認することです。<br />
<br />
そのうえで、できること、できないこと、代替すること、やめることを顧客と合意する。ここまで含めて、新システムの監視設計です。</p>


<h2 class="wp-block-heading"><span id="toc9">監視対象・目的で見た監視の種類</span></h2>


<p class="wp-block-paragraph">ここで重要なポイントは、「監視方式」と「監視対象・監視目的」を混同しないことです。</p>


<figure id="01dd46e9-c086-4f2b-9484-1ffe80cff962" class="wp-block-image"><a href="https://assets.st-note.com/img/1779939462-wkvQSbt3dUW9gZh2X16aoJji.png?width=2000&amp;height=2000&amp;fit=bounds&amp;quality=85"><img decoding="async" src="https://assets.st-note.com/img/1779939462-wkvQSbt3dUW9gZh2X16aoJji.png?width=1200" alt="画像" /></a></figure>


<p class="wp-block-paragraph">この中で、若手SEが特に理解しておくべきなのは、死活監視だけでは業務正常性は分からないという点です。<br />
<br />
サーバに ping が通っていても、Web画面がエラーになっているかもしれません。 Web画面が開いても、検索処理が失敗するかもしれません。 DBプロセスが起動していても、表領域が枯渇して更新できないかもしれません。 バックアップジョブが正常終了していても、リストアできないかもしれません。<br />
<br />
だからこそ、監視設計では「何をもって正常と判断するのか」を決める必要があります。</p>


<h2 class="wp-block-heading"><span id="toc10">監視方式は「何を知りたいか」から選ぶ</span></h2>


<p class="wp-block-paragraph">監視方式を選ぶときに大事なのは、製品や流行から入らないことです。</p>


<p class="wp-block-paragraph">まず決めるべきなのは、「何を知りたいのか」です。</p>


<ul>
	<li>サーバが起動しているかを知りたいなら、死活監視です。</li>
	<li>Webサービスが応答しているかを知りたいなら、URL監視です。</li>
	<li>OS内部のCPUやメモリを知りたいなら、リソース監視です。</li>
	<li>DBプロセスが動いているかを知りたいなら、プロセス監視です。</li>
	<li>DBとしてログインできるかを知りたいなら、DB接続監視です。</li>
	<li>ログに異常メッセージが出ていないか知りたいなら、ログ監視です。</li>
	<li>ストレージやネットワーク機器の状態を知りたいなら、SNMP監視や製品API監視です。</li>
	<li>クラウドリソースの状態を知りたいなら、CloudWatchやOCI Monitoringなどのクラウド監視サービスです。</li>
</ul>
<p class="wp-block-paragraph">監視方式は、目的によって変わります。</p>


<p class="wp-block-paragraph">逆に言えば、監視方式だけを決めても意味がありません。<br />
<br />
「SNMPで監視します」では不十分です。</p>
<ul>
	<li>SNMPで何を監視するのか。</li>
	<li>どのOIDを見るのか。</li>
	<li>どのTrapを受けるのか。</li>
	<li>重大度をどう判定するのか。</li>
	<li>通知先はどこか。</li>
	<li>一次対応手順は何か。</li>
</ul>


<p>ここまで決めて初めて、監視設計になります。</p>
<h2 class="wp-block-heading"><span id="toc11">監視設計で決めること</span></h2>


<p class="wp-block-paragraph">監視設計では、最低限、次のような項目を決めます。</p>


<ul id="aac39da1-6e06-4279-85fd-eeb17571226b" class="wp-block-list">
	<li>監視対象</li>


	<li>監視項目</li>


	<li>監視方式</li>


	<li>監視間隔</li>


	<li>閾値</li>


	<li>検知条件</li>


	<li>除外条件</li>


	<li>重大度</li>


	<li>通知先</li>


	<li>通知方法</li>


	<li>監視抑止条件</li>


	<li>メンテナンス時の扱い</li>


	<li>一次対応手順</li>


	<li>エスカレーション先</li>


	<li>復旧確認方法</li>


	<li>監視設定の変更手順</li>


	<li>監視条件の見直しタイミング</li>
</ul>


<p class="wp-block-paragraph">たとえば、CPU使用率の監視でも、単に「CPUを監視する」では足りません。</p>


<ul>
	<li>CPU使用率が何％を超えたら警告なのか。</li>
	<li>何分継続したら異常なのか。</li>
	<li>瞬間的なスパイクは除外するのか。</li>
	<li>夜間バッチ中は閾値を変えるのか。</li>
	<li>警告と異常で通知先を分けるのか。</li>
	<li>通知を受けたら、運用者は何を見るのか。</li>
	<li>AP担当、DB担当、基盤担当のどこへ連絡するのか。</li>
</ul>


<p class="wp-block-paragraph">ここまで決める必要があります。</p>


<p class="wp-block-paragraph">監視は、アラートを出すことが目的ではありません。</p>


<p class="wp-block-paragraph">アラートを受けた人が判断できることが目的です。</p>


<h2 class="wp-block-heading"><span id="toc12">監視でよくある誤解</span></h2>


<p class="wp-block-paragraph">監視でよくある誤解は、次の3つです。</p>


<figure id="59bc268a-5fde-4fc3-bf71-02ccf400d777" class="wp-block-image"><a href="https://assets.st-note.com/img/1779939287-3CtOcH6zIBeSJyEZlQTMhb07.png?width=2000&amp;height=2000&amp;fit=bounds&amp;quality=85"><img decoding="async" src="https://assets.st-note.com/img/1779939287-3CtOcH6zIBeSJyEZlQTMhb07.png?width=1200" alt="画像" /></a></figure>


<p class="wp-block-paragraph">そのため、監視設計は、設計時点で決めて終わりではありません。<br />
システムテスト、運用テスト、本番リハーサル、本番稼働後の初期期間を通じて、見直す前提が必要です。</p>


<h2 class="wp-block-heading"><span id="toc13">システム基盤エンジニアが持つべき監視の見方</span></h2>


<p class="wp-block-paragraph">まず持ってほしいのは、「監視は設定項目ではなく、運用の入口である」という見方です。<br />
<br />
監視アラートは、障害対応のスタート地点です。<br />
<br />
アラートが出た瞬間に、運用者は判断を求められます。</p>
<ul>
	<li>これは本当に障害なのか。</li>
	<li>無視してよい通知なのか。</li>
	<li>すぐにエスカレーションすべきなのか。</li>
	<li>まず手順書に沿って確認すべきなのか。</li>
	<li>復旧したと言える条件は何か。</li>
</ul>


<p class="wp-block-paragraph">この判断ができるように設計するのが、監視設計です。</p>


<ul>
	<li>監視サーバがある。</li>
	<li>エージェントが入っている。</li>
	<li>CloudWatchにメトリクスが出ている。</li>
	<li>OCI Monitoringにアラームがある。 MIBを読み込ませた。</li>
</ul>
<p class="wp-block-paragraph">それだけでは、監視設計としては不十分です。<br />
重要なのは、検知した後に運用が動けることです。</p>


<h2 class="wp-block-heading"><span id="toc14">まとめ｜クラウドでも、監視の本質は変わらない</span></h2>
<p>クラウド監視サービスを使えば、メトリクス、ログ、アラームを扱いやすくなります。</p>
<p>しかし、CloudWatchやOCI Monitoringを使えば、監視設計そのものが不要になるわけではありません。</p>
<p>特にオンプレミスからクラウドへ移行する場合は、既存監視をそのまま移植するのではなく、</p>
<ul>
	<li>標準機能で置き換えられるもの</li>
	<li>標準機能だけでは置き換えられないもの</li>
	<li>代替するもの、運用でカバーするもの、監視対象から外すもの</li>
</ul>
<p>に分けて、Fit &amp; Gapを整理する必要があります。そのうえで、</p>
<ul>
	<li><strong>何を監視するのか。</strong></li>
	<li><strong>どの条件で異常と判断するのか。</strong></li>
	<li><strong>誰に通知するのか。</strong></li>
	<li><strong>通知後に誰が何を確認し、どう対応するのか。</strong></li>
</ul>
<p>まで設計して初めて、監視は運用で使える仕組みになります。</p>
<p>監視で重要なのは、たくさんのアラートを出すことではありません。</p>
<p><strong>本当に検知すべき異常を、運用で判断・対応できる形で検知することです。</strong></p>
<p>監視は、アラートを出すための設定ではなく、<strong>障害に気づき、判断し、対応につなげるための設計</strong>です。</p>
<p>前編では、監視する側・監視される側という基本構造から、死活監視、エージェント監視、エージェントレス監視、SNMP監視、MIB・OIDまで、システム監視の基礎を整理しています。</p>

<a href="https://sys-univ.com/tec/monitor/" title="【前編】システム監視の基本｜ping・エージェント・SNMP監視を整理する" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2022/10/fa93a299f4af10deb0a71605abb8e6f9-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2022/10/fa93a299f4af10deb0a71605abb8e6f9-160x90.jpg 160w, https://sys-univ.com/wp-content/uploads/2022/10/fa93a299f4af10deb0a71605abb8e6f9-120x68.jpg 120w, https://sys-univ.com/wp-content/uploads/2022/10/fa93a299f4af10deb0a71605abb8e6f9-320x180.jpg 320w, https://sys-univ.com/wp-content/uploads/2022/10/fa93a299f4af10deb0a71605abb8e6f9-376x212.jpg 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【前編】システム監視の基本｜ping・エージェント・SNMP監視を整理する</div><div class="blogcard-snippet internal-blogcard-snippet">pingが通ることとシステムが業務で使えることは別物。死活監視・エージェント監視・SNMP監視の基本構造と、監視設計で見落としやすい落とし穴を整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.09.09</div></div></div></div></a>
<hr />
<p><strong><span style="font-size: 20px;">関連記事</span></strong></p>
<p><span style="font-size: 16px;">監視設計は、単独で完結するものではありません。</span></p>
<p><span style="font-size: 16px;">非機能要件で求める可用性や運用性を整理し、詳細設計で監視条件へ落とし込み、テスト・運用につなげていく必要性については次の記事で説明しています。</span></p>
<ul>
	<li><span style="font-size: 16px;"><strong>【全3回・第3部】監視・ログ・バックアップ・セキュリティの詳細設計｜運用で使える設計にする観点</strong></span><br />
<span style="font-size: 16px;">監視対象、閾値、通知、ログ監視条件、運用スクリプトなど、監視を詳細設計でどう具体化するかを整理しています</span></li>
</ul>

<a href="https://sys-univ.com/dev/detailed-design-part2-monitoring-security/" title="【全3回・第3部】監視・ログ・バックアップ・セキュリティの詳細設計｜運用で使える設計にする観点" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/08/a857b32d11c29b9f04dd5d31f5ea42a3-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/08/a857b32d11c29b9f04dd5d31f5ea42a3-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/08/a857b32d11c29b9f04dd5d31f5ea42a3-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/08/a857b32d11c29b9f04dd5d31f5ea42a3-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/08/a857b32d11c29b9f04dd5d31f5ea42a3-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【全3回・第3部】監視・ログ・バックアップ・セキュリティの詳細設計｜運用で使える設計にする観点</div><div class="blogcard-snippet internal-blogcard-snippet">詳細設計を「構築・テスト・運用できる形」に落とし込む後編②。設計時点では判断しきれない監視条件の見極めなど、現場で見落としやすい監視設計の難しさを整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.08.20</div></div></div></div></a>
<ul>
	<li><span style="font-size: 16px;">機能要件と非機能要件の違い｜「機能が動く」と「本番で使える」は違う点</span><br />
<span style="font-size: 16px;">可用性、性能、運用・保守性など、監視設計の前提となる非機能要件を整理しています。</span></li>
</ul>

<a href="https://sys-univ.com/dev/functional-nonfunctional-requirements/" title="機能要件と非機能要件の違い｜「機能が動く」と「本番で使える」は違う" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa-160x90.jpg 160w, https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa-500x281.jpg 500w, https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa-800x450.jpg 800w, https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa-300x169.jpg 300w, https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa-768x432.jpg 768w, https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa-1536x864.jpg 1536w, https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa-120x68.jpg 120w, https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa-320x180.jpg 320w, https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa-376x212.jpg 376w, https://sys-univ.com/wp-content/uploads/2026/06/b9c93881b11465fd6ccbf91142947faa.jpg 1672w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">機能要件と非機能要件の違い｜「機能が動く」と「本番で使える」は違う</div><div class="blogcard-snippet internal-blogcard-snippet">「機能が動く」と「本番で使える」は違う。機能要件と非機能要件の違いを、購入申請システムの具体例と現場の失敗パターンから整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.06.19</div></div></div></div></a>
<ul>
	<li><strong>要件定義とは何をする工程か｜RFP・見積前提から認識差を潰す実務</strong><br />
<span style="font-size: 16px;">監視を含む非機能要件を、設計に入る前の要件定義でどこまで具体化するのかを解説しています。</span></li>
</ul>

<a href="https://sys-univ.com/dev/requirements-definition/" title="要件定義とは何をする工程か｜RFP・見積前提から認識差を潰す実務" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a-500x281.png 500w, https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a-800x450.png 800w, https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a-300x169.png 300w, https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a-768x432.png 768w, https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a-1536x864.png 1536w, https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a-376x212.png 376w, https://sys-univ.com/wp-content/uploads/2026/06/2d222665bad7a62379b769bded1c226a.png 1672w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">要件定義とは何をする工程か｜RFP・見積前提から認識差を潰す実務</div><div class="blogcard-snippet internal-blogcard-snippet">要件定義とは何をする工程なのか。RFP、質問回答、提案書、見積前提から認識差を潰し、スコープや責任分界を確定する実務を、大規模SIの具体的な失敗事例とともに解説します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.08.12</div></div></div></div></a>
<ul>
	<li><span style="font-size: 16px;"><strong>システム開発の全体像｜アプリ・基盤・非機能はどうつながるのか</strong></span><br />
<span style="font-size: 16px;">要件定義、設計、構築、テスト、運用まで、監視設計がシステム開発全体のどこに位置するのかを整理しています。</span></li>
</ul>

<a href="https://sys-univ.com/dev/system-dev-overview/" title="システム開発の全体像｜アプリ・基盤・非機能はどうつながるのか" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/08/7bef9f366cb7c5feb05b75b01a4ea2da-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/08/7bef9f366cb7c5feb05b75b01a4ea2da-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/08/7bef9f366cb7c5feb05b75b01a4ea2da-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/08/7bef9f366cb7c5feb05b75b01a4ea2da-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/08/7bef9f366cb7c5feb05b75b01a4ea2da-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">システム開発の全体像｜アプリ・基盤・非機能はどうつながるのか</div><div class="blogcard-snippet internal-blogcard-snippet">システム開発は、アプリケーションだけで成立するものではありません。システム基盤、性能・可用性などの非機能、テスト、移行、運用がどのようにつながって一つのシステムを成立させるのかを、現場目線で整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.08.26</div></div></div></div></a>]]></content:encoded>
					
					<wfw:commentRss>https://sys-univ.com/tec/monitoring-cloud-fit-gap/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>VPC Encryption Controlsの落とし穴｜Flow Logsの暗号化判定とEnforce判定は別物</title>
		<link>https://sys-univ.com/tec/vpc-encryption-controls/</link>
					<comments>https://sys-univ.com/tec/vpc-encryption-controls/#respond</comments>
		
		<dc:creator><![CDATA[ナギ]]></dc:creator>
		<pubDate>Thu, 27 Aug 2026 07:52:16 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[テクノロジー]]></category>
		<guid isPermaLink="false">https://sys-univ.com/?p=3278</guid>

					<description><![CDATA[はじめに AWS上の通信はNitro Systemによって暗号化される。 そう聞くと、「ではVPC Encryption Controlsは何をする機能なのか」と疑問に思うかもしれません。 VPC Encryption  [&#8230;]]]></description>
										<content:encoded><![CDATA[

<p class="wp-block-paragraph"><strong>はじめに</strong></p>
<p>AWS上の通信はNitro Systemによって暗号化される。</p>


<p class="wp-block-paragraph">そう聞くと、「ではVPC Encryption Controlsは何をする機能なのか」と疑問に思うかもしれません。</p>


<p class="wp-block-paragraph">VPC Encryption Controlsは、新しい暗号アルゴリズムではありません。VPC内やVPC間の通信について、暗号化状態を監視し、暗号化を保証できないリソースを特定し、Enforceでは暗号化されない構成を制限するための仕組みです。</p>


<p class="wp-block-paragraph">ただし、Monitorで「暗号化」と表示された通信がEnforceでも必ず許可されるわけではありません。Flow Logsの<code>application-encrypted</code>も、AWSが任意のTLS通信をパケット解析して確認した結果ではありません。</p>


<p class="wp-block-paragraph">この記事では、VPC Encryption Controlsを「何ができるか」だけでなく、<strong>暗号化状態をどう読み、Enforceへ移行できる構成かをどう判断するか</strong>という観点から整理します。</p>



  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-16" checked><label class="toc-title" for="toc-checkbox-16">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">VPCの通信はもともとNitroで暗号化されているのではないか</a></li><li><a href="#toc2" tabindex="0">VPC Encryption Controlsとは｜MonitorとEnforceで何が変わるのか</a><ol><li><a href="#toc3" tabindex="0">Enforceは既存通信を後から暗号化するスイッチではない</a></li></ol></li><li><a href="#toc4" tabindex="0">VPC Flow Logsで暗号化状態を見る｜encryption-statusの3つの落とし穴</a><ol><li><a href="#toc5" tabindex="0">落とし穴1｜application-encryptedは任意のTLS検査ではない</a></li><li><a href="#toc6" tabindex="0">落とし穴2｜既存Flow Logsにはencryption-statusが追加されない</a></li><li><a href="#toc7" tabindex="0">落とし穴3｜MonitorのencryptedとEnforceの準拠判定は同じではない</a></li></ol></li><li><a href="#toc8" tabindex="0">Transit GatewayはEncryption Supportを別途有効化する</a></li><li><a href="#toc9" tabindex="0">RDSでVPC Encryption Controlsを使うときの注意点</a></li><li><a href="#toc10" tabindex="0">導入するならMonitorから始める｜Exclusion・Enforce移行・料金</a><ol><li><a href="#toc11" tabindex="0">EnforceできるかはExclusionと非対応リソースで決まる</a></li><li><a href="#toc12" tabindex="0">複数VPC・複数アカウントでは集中管理もできる</a></li><li><a href="#toc13" tabindex="0">Monitorでも料金は発生する</a></li></ol></li><li><a href="#toc14" tabindex="0">まとめ｜「暗号化されることを期待する」から「暗号化されない構成を許さない」へ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">VPCの通信はもともとNitroで暗号化されているのではないか</span></h2>


<p class="wp-block-paragraph">AWSでは以前から、一部のNitroベースEC2インスタンス間で、条件を満たす通信をハードウェアレイヤーで透過的に暗号化できます。</p>


<p class="wp-block-paragraph">ただし、暗号化にはインスタンスタイプや通信経路などの条件があります。</p>


<p class="wp-block-paragraph"><strong>「条件を満たせば暗号化される」と「暗号化されない構成を許さない」は別です。</strong></p>


<p class="wp-block-paragraph">VPC Encryption Controlsは、Nitroによるハードウェア暗号化とアプリケーションレイヤーの暗号化を組み合わせ、VPC単位で暗号化状態を監視・強制します。</p>


<p class="wp-block-paragraph">さらに、Nitroのハードウェア暗号化をFargate、Application Load Balancer、Transit Gatewayなど、EC2以外のAWSサービスへ広げる役割も持っています。</p>


<p class="wp-block-paragraph"><a href="https://docs.aws.amazon.com/vpc/latest/userguide/vpc-encryption-controls.html">AWS公式：VPC Encryption Controls</a></p>


<p class="wp-block-paragraph">つまり、単なる監視機能ではありません。</p>


<p class="wp-block-paragraph"><strong>AWS基盤側の暗号化範囲を広げながら、その状態をVPC単位で統制する仕組みです。</strong></p>


<h2 class="wp-block-heading"><span id="toc2">VPC Encryption Controlsとは｜MonitorとEnforceで何が変わるのか</span></h2>


<p class="wp-block-paragraph">VPC Encryption ControlsにはMonitorとEnforceがあります。</p>


<figure class="wp-block-table">
<table class="has-fixed-layout">
<thead>
<tr>
<th>モード</th>
<th>役割</th>
</tr>
</thead>
<tbody>
<tr>
<td>Monitor</td>
<td>暗号化状態を可視化し、Enforceを阻害するリソースを確認する</td>
</tr>
<tr>
<td>Enforce</td>
<td>暗号化を保証できないリソース・サービスの利用を制限する</td>
</tr>
</tbody>
</table>
</figure>


<p class="wp-block-paragraph">既存VPCは、まずMonitorを有効にします。</p>


<p class="wp-block-paragraph">非準拠リソースを是正するか、必要なExclusionを設定した後でEnforceへ移行します。新規VPCは作成時からEnforceを指定できます。</p>


<h3 class="wp-block-heading"><span id="toc3">Enforceは既存通信を後から暗号化するスイッチではない</span></h3>


<p class="wp-block-paragraph">Enforceを有効にしても、既存リソースの通信へ後から暗号化処理を追加するわけではありません。</p>


<p class="wp-block-paragraph">例えばRDSでは、Enforce VPCへ転送中暗号化に対応しないDBインスタンスを新規作成しようとすると、APIリクエストがブロックされます。既存ワークロードは動作を継続します。</p>


<p class="wp-block-paragraph"><a href="https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html">AWS公式：Working with a DB instance in a VPC</a></p>


<p class="wp-block-paragraph">ただしPrivateLinkは注意が必要です。</p>


<p class="wp-block-paragraph">Enforce VPC内のPrivateLink Endpointでは、<strong>アプリケーションレイヤーで暗号化されていないトラフィックが破棄されます。</strong></p>


<p class="wp-block-paragraph">そのため、「Enforceは新規作成だけを止める」と一律には考えられません。</p>


<h2 class="wp-block-heading"><span id="toc4">VPC Flow Logsで暗号化状態を見る｜encryption-statusの3つの落とし穴</span></h2>


<p class="wp-block-paragraph">VPC Flow Logsでは<code>encryption-status</code>で通信の暗号化状態を確認できます。</p>


<figure class="wp-block-table">
<table class="has-fixed-layout">
<thead>
<tr>
<th>値</th>
<th>意味</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>0</code></td>
<td>not encrypted</td>
</tr>
<tr>
<td><code>1</code></td>
<td>nitro-encrypted</td>
</tr>
<tr>
<td><code>2</code></td>
<td>application-encrypted</td>
</tr>
<tr>
<td><code>3</code></td>
<td>Nitro＋application encrypted</td>
</tr>
<tr>
<td><code>-</code></td>
<td>暗号化状態不明、またはEncryption Controls無効</td>
</tr>
</tbody>
</table>
</figure>


<p class="wp-block-paragraph">なお、一部のネットワークアプライアンスでは暗号化状態を報告できず、<code>encryption-status</code>が<code>-</code>になる場合があります。</p>


<p class="wp-block-paragraph"><strong><code>-</code>を即座に平文と判断しないことも重要です。</strong></p>


<h3 class="wp-block-heading"><span id="toc5">落とし穴1｜application-encryptedは任意のTLS検査ではない</span></h3>


<p class="wp-block-paragraph">AWSが<code>application-encrypted</code>として扱う通信は限定されています。</p>


<p class="wp-block-paragraph">これは、AWSが通信内容を復号してペイロードを検査しているという意味ではありません。Interface EndpointやGateway Endpointでは、AWSはpacket dataを確認せず、使用しているポートから暗号化状態を推定しています。</p>


<p class="wp-block-paragraph">したがって、</p>


<p class="wp-block-paragraph"><strong><code>encryption-status=2</code>だから、任意のアプリケーション通信についてTLSを実証した</strong></p>


<p class="wp-block-paragraph">とは言えません。</p>


<p class="wp-block-paragraph">逆にOracle NNEなどで暗号化していても、Flow Logs上で<code>application-encrypted</code>と判定されるとは限りません。</p>


<p class="wp-block-paragraph">アプリケーション／DBレイヤーの暗号化は、そのレイヤーの方法で別途確認する必要があります。</p>


<h3 class="wp-block-heading"><span id="toc6">落とし穴2｜既存Flow Logsにはencryption-statusが追加されない</span></h3>


<p class="wp-block-paragraph">Encryption Controlsを有効にしても、<code>encryption-status</code>は既存Flow Logsへ自動追加されません。</p>


<p class="wp-block-paragraph">さらにFlow Logは、作成後にrecord formatのフィールドを追加・削除できません。</p>


<p class="wp-block-paragraph">既存環境で<code>encryption-status</code>を取得するには、このフィールドを含む<strong>新しいFlow Logを作成</strong>します。</p>


<p class="wp-block-paragraph"><a href="https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-limitations.html">AWS公式：Flow Logsの制約</a></p>


<p class="wp-block-paragraph">すでにSIEMや監査基盤へ連携している場合は、新ログの保存先や切替・並走も運用設計に含めます。</p>


<h3 class="wp-block-heading"><span id="toc7">落とし穴3｜MonitorのencryptedとEnforceの準拠判定は同じではない</span></h3>


<p class="wp-block-paragraph">ここが最も重要です。</p>


<p class="wp-block-paragraph">Monitorでencryptedでも、Enforceでは非準拠になる場合があります。</p>


<p class="wp-block-paragraph">一つは、AWSサービスが作成したENIを含む通信です。</p>


<p class="wp-block-paragraph">フロー自体が暗号化されていても、そのAWSサービスがEncryption Controlsをサポートしている必要があります。</p>


<p class="wp-block-paragraph">もう一つはVPC Peeringです。</p>


<p class="wp-block-paragraph">Peeringで転送中暗号化を保証するには、<strong>同一リージョンの両VPCがExclusionなしのEnforce</strong>である必要があります。</p>


<p class="wp-block-paragraph">逆にMonitorでnot encryptedでも、関連リソースをExclusionにしていればEnforceでは許容される場合があります。</p>


<p class="wp-block-paragraph">つまり、</p>


<p class="wp-block-paragraph"><strong>Flow Logsの<code>encryption-status</code>は「そのフローをどう観測したか」<br />
Enforceは「その構成をポリシー上許容できるか」</strong></p>


<p class="wp-block-paragraph">を見ています。</p>


<p class="wp-block-paragraph">同じ判定ではありません。</p>


<h2 class="wp-block-heading"><span id="toc8">Transit GatewayはEncryption Supportを別途有効化する</span></h2>


<p class="wp-block-paragraph">Transit Gatewayを利用している場合は、Encryption Supportを明示的に有効化します。</p>


<p class="wp-block-paragraph">有効化は既存通信を停止せずに行われますが、<code>enabling</code>から<code>enabled</code>になるまで<strong>最大14日かかる場合があります。</strong></p>


<p class="wp-block-paragraph">また、Connect、Peering、Network Firewall、Client VPNなど、Encryption Supportと併用できないAttachmentや機能があります。</p>


<p class="wp-block-paragraph"><a href="https://docs.aws.amazon.com/vpc/latest/tgw/tgw-encryption-support.html">AWS公式：Transit Gateway Encryption Support</a></p>


<p class="wp-block-paragraph">Encryption Supportを有効化したTGWで、両側のVPCがExclusionなしのEnforceなら、VPC間通信は暗号化された経路を通ります。</p>
<p>一方、</p>
<p>
</p>
<p class="wp-block-paragraph"><strong>Enforce VPC → Transit Gateway → Monitor VPC</strong></p>
<p>
</p>
<p class="wp-block-paragraph">という構成では、暗号化が保証されるのはMonitor側のTGW Attachmentまでです。</p>
<p>
</p>
<p class="wp-block-paragraph">その先は宛先リソースに依存します。</p>

<div id="attachment_3283" style="width: 510px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3283" class="wp-image-3283 size-medium" src="https://sys-univ.com/wp-content/uploads/2026/08/ead6eaa93dae2077a6b245ea8886d05a-500x375.png" alt="" width="500" height="375" srcset="https://sys-univ.com/wp-content/uploads/2026/08/ead6eaa93dae2077a6b245ea8886d05a-500x375.png 500w, https://sys-univ.com/wp-content/uploads/2026/08/ead6eaa93dae2077a6b245ea8886d05a-800x600.png 800w, https://sys-univ.com/wp-content/uploads/2026/08/ead6eaa93dae2077a6b245ea8886d05a-300x225.png 300w, https://sys-univ.com/wp-content/uploads/2026/08/ead6eaa93dae2077a6b245ea8886d05a-768x576.png 768w, https://sys-univ.com/wp-content/uploads/2026/08/ead6eaa93dae2077a6b245ea8886d05a.png 1448w" sizes="(max-width: 500px) 100vw, 500px" /><p id="caption-attachment-3283" class="wp-caption-text">図：Enforce VPCからMonitor VPCへTransit Gateway経由で通信する場合の暗号化保証範囲</p></div>



<p class="wp-block-paragraph">つまり、<strong>TGWを暗号化しただけで相手VPC内部まで暗号化が保証されるわけではありません。</strong></p>


<h2 class="wp-block-heading"><span id="toc9">RDSでVPC Encryption Controlsを使うときの注意点</span></h2>


<p class="wp-block-paragraph">RDSもVPC Encryption Controlsに対応しています。</p>


<p class="wp-block-paragraph">AWSサービスによって、Enforceへの対応方法は異なります。</p>


<p class="wp-block-paragraph">NLB、ALB、Fargate、EKS Control Planeは、Monitorを有効にするとAWS側で暗号化対応ハードウェアへ自動移行します。</p>


<p class="wp-block-paragraph">一方、RDSは必要に応じて利用者がインスタンスクラスを見直す<strong>manual migration</strong>側です。</p>


<p class="wp-block-paragraph">すでに対応クラスなら変更不要ですが、古い非対応クラスではNitro native encryptionに対応したクラスへの変更が必要です。</p>


<p class="wp-block-paragraph">また、VPCがEnforceでも、Oracle NetがNNEやSSL/TLSで暗号化されていることを意味しません。</p>


<p class="wp-block-paragraph">RDS for Oracleでは、</p>


<ul class="wp-block-list">
	<li>KMSによるRDSストレージ暗号化</li>


	<li>Oracle TDE</li>


	<li>Oracle NetのNNE／SSL/TLS</li>


	<li>AWS基盤側の通信暗号化</li>
</ul>


<p class="wp-block-paragraph">は別レイヤーです。</p>


<p class="wp-block-paragraph">この違いは、以下の記事で整理しています。</p>

<a href="https://sys-univ.com/tec/rds-oracle-dblink-encryption/" title="RDS for OracleのDBリンクは暗号化されているのか｜KMS暗号化とOracle Net通信は別物" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/08/559aa09e2113b3b30de902a0c465ca86-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/08/559aa09e2113b3b30de902a0c465ca86-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/08/559aa09e2113b3b30de902a0c465ca86-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/08/559aa09e2113b3b30de902a0c465ca86-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/08/559aa09e2113b3b30de902a0c465ca86-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">RDS for OracleのDBリンクは暗号化されているのか｜KMS暗号化とOracle Net通信は別物</div><div class="blogcard-snippet internal-blogcard-snippet">KMSで暗号化したRDS for Oracleと非暗号化RDSを別AWSアカウント間でDBリンク接続した場合の挙動を、AWSサポートへの問い合わせと公式仕様をもとに整理。KMS暗号化はDBリンク通信へ伝播せず、NNEまたはSSL/TLSを別途設計します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.08.25</div></div></div></div></a>



<h2 class="wp-block-heading"><span id="toc10">導入するならMonitorから始める｜Exclusion・Enforce移行・料金</span></h2>


<p class="wp-block-paragraph">既存VPCでは、次の順序で進めると整理しやすくなります。</p>


<ol class="wp-block-list">
	<li>Monitorを有効にする</li>


	<li><code>encryption-status</code>を含むFlow Logsを作る</li>


	<li>Enforceを阻害するリソースを確認する</li>


	<li>対応構成へ移行する</li>


	<li>必要なExclusionを判断する</li>


	<li>PeeringやTGWも確認する</li>


	<li>Enforceへ移行する</li>
</ol>


<h3 class="wp-block-heading"><span id="toc11">EnforceできるかはExclusionと非対応リソースで決まる</span></h3>


<p class="wp-block-paragraph">Exclusionを設定できるのは8種類だけです。</p>


<ul class="wp-block-list">
	<li>Internet Gateway</li>


	<li>NAT Gateway</li>


	<li>Egress-only Internet Gateway</li>


	<li>非Enforce VPCへのVPC Peering</li>


	<li>Virtual Private Gateway</li>


	<li>VPC内Lambda</li>


	<li>VPC Lattice</li>


	<li>EFS</li>
</ul>


<p class="PDq2pG_selectionAnchorContainer wp-block-paragraph" data-start="1004" data-end="1045">Exclusionは、<strong data-start="1015" data-end="1045">「AWSが暗号化済みと保証する」設定ではありません。</strong></p>
<p data-start="1050" data-end="1194">利用者がエンドツーエンド暗号化を維持する責任を負う、監査可能な例外です。</p>
<p data-start="1050" data-end="1194"><strong data-start="1086" data-end="1194">Exclusionを設定した通信はVPC Encryption Controlsによる暗号化保証の対象外となるため、AWSの責任共有モデルで見ても、利用者側で暗号化方式と証跡を明示的に管理する必要があります。</strong></p>


<p class="wp-block-paragraph">一方、Gateway Load BalancerとAWS Network FirewallはEnforce非対応で、これらがあるVPCはMonitorで運用する必要があります。</p>


<p class="wp-block-paragraph">Local Zone subnetもEnforceでは利用できません。</p>


<p class="wp-block-paragraph">したがってMonitorの目的は、平文通信を探すだけではありません。</p>


<p class="wp-block-paragraph"><strong>「このVPCをそもそもEnforceへ移行できるのか」</strong></p>


<p class="wp-block-paragraph">を判断することです。</p>


<h3 class="wp-block-heading"><span id="toc12">複数VPC・複数アカウントでは集中管理もできる</span></h3>


<p class="wp-block-paragraph">Account Levelでは<code>Unmanaged</code>、<code>Attempt Monitor</code>、<code>Attempt Enforce</code>を設定でき、複数VPCへまとめて適用できます。</p>


<p class="wp-block-paragraph">ただし<code>Attempt Enforce</code>は全VPCの移行成功を保証しません。</p>


<p class="wp-block-paragraph">1つ以上のVPCが期待したモードへ移れなかった状態として、<code>transitions-partially-successful</code>も定義されています。</p>


<p class="wp-block-paragraph"><a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AccountVpcEncryptionControl.html">AWS公式：AccountVpcEncryptionControl</a></p>


<p class="wp-block-paragraph">AWS OrganizationsのDeclarative Policyを使えば、組織・OU・アカウント単位で集中適用することもできます。</p>


<h3 class="wp-block-heading"><span id="toc13">Monitorでも料金は発生する</span></h3>


<p class="wp-block-paragraph">VPC Encryption Controlsは2026年3月1日から有料です。</p>


<p class="wp-block-paragraph">Network Interfaceを持つnon-empty VPCでMonitorまたはEnforceを有効にすると、固定時間料金が発生します。</p>


<p class="wp-block-paragraph">TGWでEncryption Supportを有効にした場合は、接続VPCのEncryption Controlsモードに関係なく<strong>料金対象になる場合があります。</strong></p>


<p class="wp-block-paragraph">具体的な単価はリージョンごとの最新料金を確認します。</p>


<p class="wp-block-paragraph"><a href="https://aws.amazon.com/about-aws/whats-new/2026/03/vpc-encryption-controls-pricing/">AWS公式：VPC Encryption Controls pricing</a></p>


<p class="wp-block-paragraph">Monitorのまま長期間放置する場合も、コスト設計上は無視できません。</p>


<h2 class="wp-block-heading"><span id="toc14">まとめ｜「暗号化されることを期待する」から「暗号化されない構成を許さない」へ</span></h2>


<p class="wp-block-paragraph">VPC Encryption Controlsで押さえる点は3つです。</p>


<ul class="wp-block-list">
	<li>Nitroの自動暗号化とEncryption Controlsによる統制は同じものではない</li>


	<li>Flow Logsの<code>encryption-status</code>とEnforceの準拠判定は同じではない</li>


	<li>EnforceしてもTLSやOracle NNEなどアプリケーション／DBレイヤーの暗号化設計は別途必要</li>
</ul>


<p class="wp-block-paragraph">VPC Encryption Controlsによって、AWSの通信暗号化設計は、</p>


<p class="wp-block-paragraph"><strong>「条件を満たせば暗号化されることを期待する」</strong></p>


<p class="wp-block-paragraph">から、</p>


<p class="wp-block-paragraph"><strong>「暗号化を保証できない構成を許さない」</strong></p>


<p class="wp-block-paragraph">へ一段進みました。</p>


<p class="wp-block-paragraph">導入時はまずMonitorで現在の構成と通信を可視化し、<strong>何をAWS基盤側で保証し、何をアプリケーション側で保証するのか</strong>を整理したうえでEnforceへ進むのがよいでしょう。</p>
<hr />
<p><span style="font-size: 20px;"><strong>関連記事</strong></span></p>
<p class="isSelectedEnd">VPC Encryption Controlsでは、AWS基盤側の通信暗号化をMonitor／Enforceで監視・強制できますが、実際の通信ではサービスごとの転送時暗号化もあわせて理解しておく必要があります。</p>
<p>特にEFSはVPC Encryption ControlsでExclusionを設定できるリソースの一つであり、ECS／FargateからEFSへ接続する場合は、NFS通信の転送時暗号化がどのように実現されるかを分けて考える必要があります。あわせて確認したい方は、以下の記事も参考にしてください。</p>
<ul>
	<li>ECS/FargateでEFSが127.0.0.1にマウントされる｜NFSの接続先がlocalhostになる理由<br />
ECS／FargateでEFSの転送時暗号化を有効にすると、NFSの接続先が<code dir="ltr">127.0.0.1</code>として見える理由を、TLSトンネルとEFSマウント処理の仕組みから整理しています。</li>
</ul>

<a href="https://sys-univ.com/incident/ecs-fargate-efs-localhost-mount/" title="ECS/FargateでEFSが127.0.0.1にマウントされる｜NFSの接続先がlocalhostになる理由" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/08/4b3dd444ddc2528e1aa2184cb244ba9a-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/08/4b3dd444ddc2528e1aa2184cb244ba9a-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/08/4b3dd444ddc2528e1aa2184cb244ba9a-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/08/4b3dd444ddc2528e1aa2184cb244ba9a-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/08/4b3dd444ddc2528e1aa2184cb244ba9a-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">ECS/FargateでEFSが127.0.0.1にマウントされる｜NFSの接続先がlocalhostになる理由</div><div class="blogcard-snippet internal-blogcard-snippet">ECS/FargateからEFSをマウントするとマウント元が127.0.0.1と表示される理由を、転送時暗号化で使われるefs-proxyの通信経路、タスク定義のtransitEncryptionとIAM認可の関係、mount.logで確認できた内容、障害調査時の切り分け観点から解説します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.08.14</div></div></div></div></a>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>

<div id="gtx-trans" style="position: absolute; left: 10px; top: 1830.62px;">
<div class="gtx-trans-icon"> </div>
</div>]]></content:encoded>
					
					<wfw:commentRss>https://sys-univ.com/tec/vpc-encryption-controls/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【RDS for Oracle】V$BHでバッファキャッシュの内訳を調査する｜X$BHの代替方法</title>
		<link>https://sys-univ.com/tec/rds-oracle-vbh-buffer-cache/</link>
					<comments>https://sys-univ.com/tec/rds-oracle-vbh-buffer-cache/#respond</comments>
		
		<dc:creator><![CDATA[ナギ]]></dc:creator>
		<pubDate>Mon, 13 Jul 2026 06:35:07 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[テクノロジー]]></category>
		<guid isPermaLink="false">https://sys-univ.com/?p=2791</guid>

					<description><![CDATA[はじめに RDS for Oracleでは、オンプレミスOracleと同じ方法でSYS.X$BHを直接参照できません。 対応する環境では、X$BHを基にしたSYS.RDS_X$BHビューを作成できます。ただし、X$固定表 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p id="cc626968-072b-454c-919b-4f0f9f151289"><strong>はじめに</strong></p>
<p>RDS for Oracleでは、オンプレミスOracleと同じ方法でSYS.X$BHを直接参照できません。</p>
<p id="65345b46-8adc-4916-b7e4-d23c6a564ebb">対応する環境では、X$BHを基にしたSYS.RDS_X$BHビューを作成できます。ただし、X$固定表はOracle内部の非公開オブジェクトであり、本番環境で利用する場合は、非本番環境での検証やエンジンアップグレード後の確認が必要です。</p>
<p id="63dbeb3b-6fbc-4c52-97ca-bc86c3f4e6ff">一方、調査の目的が、</p>
<blockquote>
<p>DBバッファキャッシュ上に、どのテーブルやインデックスのブロックがどの程度存在しているか確認する</p>
</blockquote>
<p id="6abc85f6-e5f3-4b36-8602-bbe09bb730ba">ことであれば、Oracleが公開している動的パフォーマンスビューV$BHを利用できます。</p>
<p id="363ec1b1-d289-4048-bef5-2610df3c35e4">V$BHはX$BHの完全な代替ではありません。LRU_FLAGやTCHなど、V$BHでは取得できない情報もあります。</p>
<p id="757cdc31-dd91-421e-a396-fa567b81b4bf">しかし、オブジェクトごとのキャッシュブロック数や概算容量を把握する目的であれば、V$BHから必要な情報を取得できます。</p>
<p id="b85e3809-f2cf-40c7-9b1e-14d8e7a32e58">本記事では、RDS for OracleでV$BHを使用してDBバッファキャッシュの内訳を調査するSQLと、結果を評価する際の注意点を解説します。</p>
<p id="5a75ea9d-5887-4a7c-ba22-7eb53c29990d">SYS.X$BHを直接参照できない理由と、SYS.RDS_X$BHを利用する際の条件については、以下の記事で整理しています。</p>

<a href="https://sys-univ.com/tec/dbbc/" title="【RDS for Oracle】オンプレの調査SQLが動かない｜X$BHを直接参照できない理由" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2022/04/56449d25b24c39117458734fb74a2ff6-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2022/04/56449d25b24c39117458734fb74a2ff6-160x90.jpg 160w, https://sys-univ.com/wp-content/uploads/2022/04/56449d25b24c39117458734fb74a2ff6-120x68.jpg 120w, https://sys-univ.com/wp-content/uploads/2022/04/56449d25b24c39117458734fb74a2ff6-320x180.jpg 320w, https://sys-univ.com/wp-content/uploads/2022/04/56449d25b24c39117458734fb74a2ff6-376x212.jpg 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【RDS for Oracle】オンプレの調査SQLが動かない｜X$BHを直接参照できない理由</div><div class="blogcard-snippet internal-blogcard-snippet">RDS for OracleでSYS.X$BHを直接参照できない理由を解説。SYSDBA権限の制約、RDS_X$BHの作成方法、V$BHとの使い分けや運用上の注意点を整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.07.13</div></div></div></div></a>

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-18" checked><label class="toc-title" for="toc-checkbox-18">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">V$BHで確認できる情報</a></li><li><a href="#toc2" tabindex="0">OBJECT_IDではなくDATA_OBJECT_IDで結合する</a></li><li><a href="#toc3" tabindex="0">Oracle公式の基本SQL</a></li><li><a href="#toc4" tabindex="0">オブジェクト別のキャッシュ容量を確認するSQL</a></li><li><a href="#toc5" tabindex="0">SQLの各項目</a></li><li><a href="#toc6" tabindex="0">LEFT JOINを使用する理由</a></li><li><a href="#toc7" tabindex="0">STATUSがfreeのバッファを除外する</a></li><li><a href="#toc8" tabindex="0">キャッシュ量が多いオブジェクトは問題なのか</a></li><li><a href="#toc9" tabindex="0">V$BHと一緒に確認する情報</a></li><li><a href="#toc10" tabindex="0">V$BHの検索負荷に注意する</a></li><li><a href="#toc11" tabindex="0">非マスターユーザーから参照する場合</a></li><li><a href="#toc12" tabindex="0">X$BHとV$BHの違い</a></li><li><a href="#toc13" tabindex="0">V$BHは調査の入口</a></li><li><a href="#toc14" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">V$BHで確認できる情報</span></h2>
<p><code>V$BH</code>は、SGA内に存在する各バッファの状態を表示する動的パフォーマンスビューです。</p>
<p>Oracle公式リファレンスでは、バッファの状態、データファイル番号、ブロック番号、データオブジェクト番号、表領域番号などを確認できるビューとして説明されています。</p>
<p><a href="https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/V-BH.html">V$BHの列定義｜Oracle Databaseリファレンス</a></p>
<p>オブジェクト別のキャッシュ量を調査する際、主に利用する列は次のとおりです。</p>
<table>
<thead>
<tr>
<th>列</th>
<th>内容</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>FILE#</code></td>
<td>データファイル番号</td>
</tr>
<tr>
<td><code>BLOCK#</code></td>
<td>データファイル内のブロック番号</td>
</tr>
<tr>
<td><code>STATUS</code></td>
<td>バッファの状態</td>
</tr>
<tr>
<td><code>OBJD</code></td>
<td>ブロックに対応するデータオブジェクト番号</td>
</tr>
<tr>
<td><code>TS#</code></td>
<td>表領域番号</td>
</tr>
<tr>
<td><code>DIRTY</code></td>
<td>変更済みブロックかどうか</td>
</tr>
<tr>
<td><code>CON_ID</code></td>
<td>マルチテナント環境のコンテナID</td>
</tr>
</tbody>
</table>
<p>このうち、オブジェクトとの結合で中心になるのが<code>OBJD</code>です。</p>
<p><code>V$BH.OBJD</code>を<code>DBA_OBJECTS.DATA_OBJECT_ID</code>と結合することで、バッファキャッシュ上のブロックが、どのテーブル、インデックス、パーティションに属しているかを確認できます。</p>
<h2><span id="toc2">OBJECT_IDではなくDATA_OBJECT_IDで結合する</span></h2>
<p><code>V$BH</code>と<code>DBA_OBJECTS</code>を結合する際、注意したいのが結合列です。</p>
<p>次のように、<code>OBJECT_ID</code>と結合したくなるかもしれません。</p>
<pre><code class="language-sql">ON o.object_id = bh.objd
</code></pre>
<p>しかし、ここでは<code>OBJECT_ID</code>ではなく、<code>DATA_OBJECT_ID</code>を使用します。</p>
<pre><code class="language-sql">ON o.data_object_id = bh.objd
</code></pre>
<p><code>OBJECT_ID</code>は、データディクショナリ上でオブジェクトを識別する番号です。</p>
<p>一方、<code>DATA_OBJECT_ID</code>は、そのオブジェクトのデータを格納するセグメントに対応する番号です。</p>
<p><code>V$BH.OBJD</code>が保持しているのは、バッファ内のブロックに対応するデータオブジェクト番号です。そのため、<code>DBA_OBJECTS.DATA_OBJECT_ID</code>と結合します。</p>
<p>Oracle公式のバッファキャッシュ調査SQLでも、次の条件が使われています。</p>
<pre><code class="language-sql">o.data_object_id = bh.objd
</code></pre>
<p>この違いは、パーティション表や、<code>TRUNCATE</code>、<code>MOVE</code>などによってセグメントが再作成されたオブジェクトを扱う場合に重要です。</p>
<p>オブジェクトの論理的な識別子である<code>OBJECT_ID</code>が変わらなくても、物理的なセグメントに対応する<code>DATA_OBJECT_ID</code>が変化する場合があります。</p>
<p>バッファキャッシュ上のブロックを、実際のセグメントへ正しく関連付けるには、<code>DATA_OBJECT_ID</code>を使用する必要があります。</p>
<h2><span id="toc3">Oracle公式の基本SQL</span></h2>
<p>OracleのPerformance Tuning Guideでは、バッファキャッシュ上に存在するオブジェクト別のブロック数を、次のようなSQLで確認しています。</p>
<pre><code class="language-sql">SELECT
    o.object_name,
    COUNT(*) AS number_of_blocks
FROM
    dba_objects o,
    v$bh bh
WHERE
    o.data_object_id = bh.objd
    AND o.owner &lt;&gt; 'SYS'
GROUP BY
    o.object_name
ORDER BY
    COUNT(*);
</code></pre>
<p>このSQLは、<code>V$BH.OBJD</code>と<code>DBA_OBJECTS.DATA_OBJECT_ID</code>を結合し、オブジェクトごとのブロック数を集計するものです。</p>
<p>基本SQLと、バッファキャッシュの利用状況を調査する手順は、Oracle公式のチューニングガイドで確認できます。</p>
<p><a href="https://docs.oracle.com/en/database/oracle/oracle-database/26/tgdba/tuning-database-buffer-cache.html">Tuning the Database Buffer Cache｜Oracle Database Performance Tuning Guide</a></p>
<p>基本的な目的は、このSQLで達成できます。</p>
<p>ただし、実務で結果を確認する場合は、次の情報も表示したほうが分かりやすくなります。</p>
<ul>
<li>
<p>オブジェクトの所有者</p>
</li>
<li>
<p>パーティション名</p>
</li>
<li>
<p>オブジェクト種別</p>
</li>
<li>
<p>表領域名</p>
</li>
<li>
<p>ブロックサイズ</p>
</li>
<li>
<p>キャッシュ容量の概算値</p>
</li>
</ul>
<p>これらを追加したSQLが次の例です。</p>
<h2><span id="toc4">オブジェクト別のキャッシュ容量を確認するSQL</span></h2>
<pre><code class="language-sql">SELECT
    o.owner,
    o.object_name,
    o.subobject_name,
    o.object_type,
    t.name AS tablespace_name,
    COUNT(*) AS cached_blocks,
    d.block_size,
    ROUND(
        COUNT(*) * d.block_size / 1024 / 1024,
        2
    ) AS cached_mb
FROM
    v$bh bh
    LEFT JOIN dba_objects o
        ON o.data_object_id = bh.objd
    LEFT JOIN v$tablespace t
        ON t.ts# = bh.ts#
    LEFT JOIN dba_tablespaces d
        ON d.tablespace_name = t.name
WHERE
    bh.status &lt;&gt; 'free'
GROUP BY
    o.owner,
    o.object_name,
    o.subobject_name,
    o.object_type,
    t.name,
    d.block_size
ORDER BY
    cached_mb DESC;
</code></pre>
<p>このSQLでは、<code>V$BH</code>上の使用中バッファを、データオブジェクトと表領域へ関連付けています。</p>
<p>結果は、概ね次のような形式になります。</p>
<table>
<thead>
<tr>
<th>OWNER</th>
<th>OBJECT_NAME</th>
<th>SUBOBJECT_NAME</th>
<th>OBJECT_TYPE</th>
<th>TABLESPACE_NAME</th>
<th align="right">CACHED_BLOCKS</th>
<th align="right">BLOCK_SIZE</th>
<th align="right">CACHED_MB</th>
</tr>
</thead>
<tbody>
<tr>
<td>APP</td>
<td>SALES_DATA</td>
<td>P2026</td>
<td>TABLE PARTITION</td>
<td>APP_DATA</td>
<td align="right">125000</td>
<td align="right">8192</td>
<td align="right">976.56</td>
</tr>
<tr>
<td>APP</td>
<td>IDX_SALES_01</td>
<td>P2026</td>
<td>INDEX PARTITION</td>
<td>APP_INDEX</td>
<td align="right">62000</td>
<td align="right">8192</td>
<td align="right">484.38</td>
</tr>
<tr>
<td>APP</td>
<td>CUSTOMER</td>
<td>&nbsp;</td>
<td>TABLE</td>
<td>APP_DATA</td>
<td align="right">18000</td>
<td align="right">8192</td>
<td align="right">140.63</td>
</tr>
</tbody>
</table>
<p>この結果から、どのオブジェクトのブロックがバッファキャッシュ上で大きな割合を占めているかを確認できます。</p>
<h2><span id="toc5">SQLの各項目</span></h2>
<p><strong>OWNER</strong></p>
<p>オブジェクトの所有者です。</p>
<p>異なるスキーマに同じオブジェクト名が存在する場合があるため、<code>OBJECT_NAME</code>だけではなく、<code>OWNER</code>も表示します。</p>
<p><strong>OBJECT_NAME</strong></p>
<p>テーブルやインデックスなどのオブジェクト名です。</p>
<p>パーティション表やパーティションインデックスでは、同じ<code>OBJECT_NAME</code>に対して複数のセグメントが存在します。</p>
<p><strong>SUBOBJECT_NAME</strong></p>
<p>パーティション名またはサブパーティション名です。</p>
<p>これを表示しないと、どのパーティションのブロックがキャッシュされているか分からなくなります。</p>
<p><strong>OBJECT_TYPE</strong></p>
<p>オブジェクトの種類です。</p>
<p>主に次のような値が表示されます。</p>
<ul>
<li>
<p><code>TABLE</code></p>
</li>
<li>
<p><code>INDEX</code></p>
</li>
<li>
<p><code>TABLE PARTITION</code></p>
</li>
<li>
<p><code>INDEX PARTITION</code></p>
</li>
<li>
<p><code>TABLE SUBPARTITION</code></p>
</li>
<li>
<p><code>INDEX SUBPARTITION</code></p>
</li>
</ul>
<p><strong>TABLESPACE_NAME</strong></p>
<p>オブジェクトのブロックが属している表領域名です。</p>
<p><code>V$BH.TS#</code>と<code>V$TABLESPACE.TS#</code>を結合して取得します。</p>
<p><strong>CACHED_BLOCKS</strong></p>
<p>バッファキャッシュ上に存在するブロック数です。</p>
<p><code>V$BH</code>は基本的にバッファ単位で行を返すため、<code>COUNT(*)</code>によってオブジェクトごとのブロック数を集計します。</p>
<p><strong>BLOCK_SIZE</strong></p>
<p>表領域のブロックサイズです。</p>
<p>通常はデータベース標準のブロックサイズが使われますが、非標準ブロックサイズの表領域が存在する可能性もあります。</p>
<p>そのため、固定値として8192を掛けるのではなく、<code>DBA_TABLESPACES.BLOCK_SIZE</code>を使用します。</p>
<p><strong>CACHED_MB</strong></p>
<p>キャッシュされている概算容量です。</p>
<p>計算式は次のとおりです。</p>
<pre><code class="language-text">キャッシュブロック数 × ブロックサイズ
</code></pre>
<p>SQLでは、この値を1024で2回割り、MiB相当へ換算しています。</p>
<p>ただし、この値はオブジェクトの物理サイズではありません。</p>
<p>SQLを実行した時点で、バッファキャッシュ上に存在するブロック数を容量換算した値です。</p>
<h2><span id="toc6">LEFT JOINを使用する理由</span></h2>
<p><code>V$BH</code>と<code>DBA_OBJECTS</code>、表領域関連ビューの結合には<code>LEFT JOIN</code>を使用しています。</p>
<p><code>INNER JOIN</code>を使用すると、対応するオブジェクトや表領域情報を取得できなかったバッファが、結果から除外されます。</p>
<p>通常のユーザーテーブルやインデックスだけを確認する場合は、<code>INNER JOIN</code>でも大部分の結果を取得できます。</p>
<p>しかし、バッファキャッシュには次のようなブロックが含まれる可能性があります。</p>
<ul>
<li>
<p>一時セグメント</p>
</li>
<li>
<p>Undo関連ブロック</p>
</li>
<li>
<p>内部管理用ブロック</p>
</li>
<li>
<p>オブジェクトへ単純に関連付けられないバッファ</p>
</li>
<li>
<p>取得タイミングによってディクショナリと一致しない情報</p>
</li>
</ul>
<p>そのため、まずは<code>V$BH</code>側の行を残し、オブジェクトや表領域へ関連付けられなかった行も確認できるようにしています。</p>
<p><code>OWNER</code>、<code>OBJECT_NAME</code>、<code>TABLESPACE_NAME</code>などがNULLになった行が多い場合は、不要と判断して除外するのではなく、<code>FILE#</code>、<code>BLOCK#</code>、<code>TS#</code>、<code>STATUS</code>などを追加して内容を確認します。</p>
<p>ユーザーオブジェクトだけを簡潔に確認したい場合は、<code>INNER JOIN</code>へ変更しても構いません。</p>
<h2><span id="toc7">STATUSがfreeのバッファを除外する</span></h2>
<p>今回のSQLでは、次の条件を指定しています。</p>
<pre><code class="language-sql">WHERE bh.status &lt;&gt; 'free'
</code></pre>
<p><code>V$BH.STATUS</code>には、バッファの状態が表示されます。</p>
<p>代表的な値は次のとおりです。</p>
<table>
<thead>
<tr>
<th>STATUS</th>
<th>概要</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>free</code></td>
<td>現在使用されていない</td>
</tr>
<tr>
<td><code>xcur</code></td>
<td>排他カレント</td>
</tr>
<tr>
<td><code>scur</code></td>
<td>共有カレント</td>
</tr>
<tr>
<td><code>cr</code></td>
<td>読み取り一貫性用のブロック</td>
</tr>
<tr>
<td><code>read</code></td>
<td>ディスクから読み込み中</td>
</tr>
<tr>
<td><code>mrec</code></td>
<td>メディアリカバリ中</td>
</tr>
<tr>
<td><code>irec</code></td>
<td>インスタンスリカバリ中</td>
</tr>
<tr>
<td><code>pi</code></td>
<td>RACにおける過去イメージ</td>
</tr>
</tbody>
</table>
<p>今回の目的は、現在キャッシュ上で使用されているブロックの集計です。そのため、未使用状態の<code>free</code>を除外しています。</p>
<p>障害解析やRAC関連の調査など、状態ごとの内訳が必要な場合は、<code>STATUS</code>をSELECT句とGROUP BY句へ追加して確認します。</p>
<h2><span id="toc8">キャッシュ量が多いオブジェクトは問題なのか</span></h2>
<p><code>V$BH</code>の結果を見ると、特定のテーブルやインデックスが大量のブロックを占めていることがあります。</p>
<p>しかし、</p>
<blockquote>
<p>キャッシュ量が多い<br />
＝不要なデータがキャッシュされている<br />
＝チューニングが必要</p>
</blockquote>
<p>とは限りません。</p>
<p>業務で継続的に参照されるテーブルであれば、多くのブロックがキャッシュされていることは自然です。</p>
<p>必要なブロックがバッファキャッシュに残っていれば、その後のSQLはストレージからの物理読み込みを減らせます。</p>
<p>問題になる可能性があるのは、例えば次のようなケースです。</p>
<ul>
<li>
<p>利用頻度の低い大規模表が大量に読み込まれている</p>
</li>
<li>
<p>大規模バッチの後にオンライン処理の物理読み込みが増える</p>
</li>
<li>
<p>フルスキャンが繰り返されている</p>
</li>
<li>
<p>想定していたインデックスが使用されていない</p>
</li>
<li>
<p>同じ大規模オブジェクトへ不要なアクセスが繰り返されている</p>
</li>
<li>
<p>必要なブロックが短時間でキャッシュから追い出されている</p>
</li>
</ul>
<p>したがって、<code>V$BH</code>の結果だけで良否を判断してはいけません。</p>
<h2><span id="toc9">V$BHと一緒に確認する情報</span></h2>
<p><strong>SQLと実行計画</strong></p>
<p>キャッシュ上で大きな割合を占めるオブジェクトを特定したら、そのオブジェクトへアクセスしているSQLを確認します。</p>
<ul>
<li>
<p>フルテーブルスキャンになっていないか</p>
</li>
<li>
<p>パーティションプルーニングが機能しているか</p>
</li>
<li>
<p>想定以上の行やブロックを読み込んでいないか</p>
</li>
<li>
<p>同じ処理を不必要に繰り返していないか</p>
</li>
</ul>
<p>キャッシュ量が多いという結果だけで、SQLに問題があるとは判断できません。実行計画と実行統計を組み合わせて評価します。</p>
<p><strong>物理読み込みと待機イベント</strong></p>
<p>AWRやStatspack、<code>V$SYSSTAT</code>などから、処理量に対して物理読み込みが増えていないかを確認します。</p>
<p>また、次のようなI/Oやバッファ関連の待機イベントも確認します。</p>
<ul>
<li>
<p><code>db file sequential read</code></p>
</li>
<li>
<p><code>db file scattered read</code></p>
</li>
<li>
<p><code>direct path read</code></p>
</li>
<li>
<p><code>free buffer waits</code></p>
</li>
<li>
<p><code>buffer busy waits</code></p>
</li>
<li>
<p><code>read by other session</code></p>
</li>
</ul>
<p>ただし、待機イベントが発生しているだけで、バッファキャッシュを増やすべきとは判断できません。</p>
<p>SQL、ストレージ性能、DBWRの書き出し、同時実行数など、複数の要因を確認する必要があります。</p>
<p><strong>V$DB_CACHE_ADVICE</strong></p>
<p>バッファキャッシュのサイズを変更した場合に、物理読み込みがどの程度変化すると推定されるかを確認するには、<code>V$DB_CACHE_ADVICE</code>を利用できます。</p>
<p>Oracle公式ドキュメントでは、複数の仮想的なキャッシュサイズに対する物理読み込み数やミス率の予測値を表示するビューとして説明されています。</p>
<p>ただし、これは実測値ではなく予測値です。</p>
<p>代表的な業務負荷が流れている状態で取得し、AWRや実際のレスポンスタイムと合わせて評価します。</p>
<h2><span id="toc10">V$BHの検索負荷に注意する</span></h2>
<p><code>V$BH</code>は、バッファキャッシュ内の各バッファに対応する行を保持しています。</p>
<p>バッファキャッシュが大きい環境では、<code>V$BH</code>の行数も多くなります。</p>
<p>そこへ<code>DBA_OBJECTS</code>や表領域関連ビューを結合し、全件をGROUP BYすると、SQL自体がCPUやソート領域を使用します。</p>
<p>Oracle公式ドキュメントでも、全セグメントを対象にした集計は、バッファキャッシュのサイズによって多くのソート領域を必要とする場合があると説明されています。</p>
<p>本番環境で実行する場合は、次の点に注意します。</p>
<ul>
<li>
<p>非本番環境で実行時間と負荷を確認する</p>
</li>
<li>
<p>業務ピークを避ける</p>
</li>
<li>
<p>必要に応じて対象スキーマを絞る</p>
</li>
<li>
<p>定期監視として短い間隔で実行しない</p>
</li>
<li>
<p>実行計画とTEMP使用量を確認する</p>
</li>
</ul>
<p>参照SQLだから安全とは限りません。</p>
<p>データを更新しないSELECTであっても、大量の行を走査して集計するSQLは、データベースへ負荷を与えます。</p>
<h2><span id="toc11">非マスターユーザーから参照する場合</span></h2>
<p>非マスターユーザーへ<code>V$BH</code>の参照権限を付与する場合は、RDSの管理プロシージャ<code>grant_sys_object</code>を使用します。</p>
<p>権限付与時には、シノニム名の<code>V$BH</code>ではなく、基になるSYSオブジェクト名<code>V_$BH</code>を指定します。</p>
<pre><code class="language-sql">BEGIN
    rdsadmin.rdsadmin_util.grant_sys_object(
        p_obj_name  =&gt; 'V_$BH',
        p_grantee   =&gt; 'MONITOR_USER',
        p_privilege =&gt; 'SELECT'
    );
END;
/
</code></pre>
<p>ただし、付与できるのは、マスターユーザー自身が保持している権限の範囲内です。</p>
<p>実行前に、対象環境でマスターユーザーから<code>V$BH</code>を参照できることを確認してください。</p>
<p>また、監視ユーザーへ権限を付与する場合は、必要なビューだけに限定し、広いカタログ参照権限を安易に付与しないほうが安全です。</p>
<h2><span id="toc12">X$BHとV$BHの違い</span></h2>
<p><code>V$BH</code>でオブジェクトごとのキャッシュ量を確認できますが、<code>X$BH</code>のすべての情報を取得できるわけではありません。</p>
<table>
<thead>
<tr>
<th>項目</th>
<th>X$BH／RDS_X$BH</th>
<th>V$BH</th>
</tr>
</thead>
<tbody>
<tr>
<td>オブジェクト番号</td>
<td>確認可能</td>
<td><code>OBJD</code>で確認可能</td>
</tr>
<tr>
<td>ファイル・ブロック番号</td>
<td>確認可能</td>
<td>確認可能</td>
</tr>
<tr>
<td>バッファ状態</td>
<td>確認可能</td>
<td><code>STATUS</code>で確認可能</td>
</tr>
<tr>
<td>Dirtyブロック</td>
<td>確認可能</td>
<td><code>DIRTY</code>で確認可能</td>
</tr>
<tr>
<td><code>LRU_FLAG</code></td>
<td>確認できる環境がある</td>
<td>確認不可</td>
</tr>
<tr>
<td><code>TCH</code></td>
<td>確認できる環境がある</td>
<td>確認不可</td>
</tr>
<tr>
<td>公開仕様</td>
<td>Oracle内部実装に依存</td>
<td>Oracle公式リファレンスに記載</td>
</tr>
<tr>
<td>RDSでの利用</td>
<td>RDS_X$ビューの作成が必要</td>
<td>必要な参照権限があれば利用可能</td>
</tr>
</tbody>
</table>
<p>オブジェクト別のキャッシュブロック数や概算容量を確認したいのであれば、まず<code>V$BH</code>を検討できます。</p>
<p>一方、<code>LRU_FLAG</code>や<code>TCH</code>などX$BH固有の情報が必要な場合や、Oracle Supportから固定表を使った調査を指示された場合は、対応環境で<code>RDS_X$BH</code>を作成する選択肢があります。</p>
<h2><span id="toc13">V$BHは調査の入口</span></h2>
<p><code>V$BH</code>が示すのは、SQLを実行した時点でバッファキャッシュ上に存在するブロックの状態です。直前に大規模バッチが実行されていれば、その処理で読み込まれたブロックが多く表示される可能性があります。</p>
<p>頻繁に利用されるオブジェクトであっても、DBインスタンスの再起動直後や業務開始前であれば、キャッシュブロック数は少なく表示されます。結果を評価する際は、まず取得タイミングを確認します。</p>
<ul>
<li>
<p>代表的な業務負荷が実行されている時間帯か</p>
</li>
<li>
<p>バッチ実行前か実行後か</p>
</li>
<li>
<p>DBインスタンス再起動から十分な時間が経過しているか</p>
</li>
</ul>
<p>必要に応じて複数の時間帯で結果を取得し、業務処理の実行状況やSQL統計、物理読み込み、待機イベントと対応付けて評価します。利用可能な機能やライセンス条件に応じて、AWR、Statspack、CloudWatch Database Insightsなども組み合わせます。</p>
<p>特定のオブジェクトが大量のバッファを使用しているという結果だけでは、キャッシュサイズの変更やSQLチューニングが必要とは判断できません。</p>
<p>調査では、既存SQLをそのまま再現することよりも、そのSQLで何を確認しようとしていたのかを整理することが重要です。オンプレミスで使用していた<code>SYS.X$BH</code>をRDS for Oracleから直接参照できない場合でも、目的がオブジェクト別のキャッシュブロック数を確認することであれば、公開された動的パフォーマンスビューである<code>V$BH</code>を利用できます。</p>
<p><code>LRU_FLAG</code>や<code>TCH</code>など、<code>X$BH</code>固有の情報が必要な場合は、使用しているエンジンリリースと作成可能なビューを確認したうえで、<code>SYS.RDS_X$BH</code>の利用を検討します。<code>X$</code>表はOracle内部のシステムオブジェクトであるため、非本番環境で検証し、本番環境への導入はOracle Supportのガイダンスを踏まえて判断します。</p>
<p><code>V$BH</code>は、性能問題の全体を説明するビューではありません。どのオブジェクトのブロックがバッファキャッシュ上に存在しているかを確認し、その後のSQL、実行計画、I/O、待機イベントの調査につなげる入口として位置づけます。</p>
<p>今回取り上げた<code>X$BH</code>の制約は、RDS for Oracleで変わる運用前提の一例です。SYSDBA権限、OSアクセス、物理ファイル操作、ログ取得、ストレージ管理についても、オンプレミスと同じ手順をそのまま使用できるとは限りません。</p>
<p>オンプレミスの操作を一対一で置き換えるのではなく、調査や運用の目的を整理し、RDSで提供される機能を使って手順を再構成する必要があります。</p>
<p>RDS for Oracleで変わる設計・運用上の前提と代替アプローチについては、以下の記事で整理しています。</p>

<a href="https://sys-univ.com/aws/rdsforora/" title="RDS for Oracleを採用したら、オンプレ運用の前提が通用しなかった｜開発中に見えた設計ギャップと代替アプローチ" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/07/b87f444ed45d88e81401b2fbbfe2b0c1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/07/b87f444ed45d88e81401b2fbbfe2b0c1-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/07/b87f444ed45d88e81401b2fbbfe2b0c1-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/07/b87f444ed45d88e81401b2fbbfe2b0c1-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/07/b87f444ed45d88e81401b2fbbfe2b0c1-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">RDS for Oracleを採用したら、オンプレ運用の前提が通用しなかった｜開発中に見えた設計ギャップと代替アプローチ</div><div class="blogcard-snippet internal-blogcard-snippet">RDS for Oracleではオンプレ運用の前提が通用しない。Storage-Full、アーカイブログ、SSH不可など、開発中に見えた9つの設計ギャップと代替アプローチを整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.08.30</div></div></div></div></a>
<h2><span id="toc14">まとめ</span></h2>
<p>RDS for Oracleで、DBバッファキャッシュ上のオブジェクト別ブロック数を確認する場合は、<code>V$BH</code>を利用できます。</p>
<p><code>V$BH.OBJD</code>は、<code>DBA_OBJECTS.OBJECT_ID</code>ではなく、<code>DATA_OBJECT_ID</code>と結合します。</p>
<pre><code class="language-sql">ON o.data_object_id = bh.objd
</code></pre>
<p>オブジェクト別のキャッシュ容量は、キャッシュブロック数と表領域のブロックサイズから概算できます。</p>
<pre><code class="language-text">キャッシュブロック数 × ブロックサイズ
</code></pre>
<p><code>V$BH</code>は<code>X$BH</code>の完全な代替ではありませんが、どのオブジェクトのブロックがバッファキャッシュ上にどの程度存在しているかを確認する目的には利用できます。</p>
<p>キャッシュ量が多いオブジェクトが、直ちに性能問題の原因とは限りません。SQL、実行計画、物理読み込み、待機イベントなどの情報と対応付け、取得した時間帯の業務負荷も踏まえて評価する必要があります。</p>
<p>また、大規模なバッファキャッシュを全件集計するSQLは、相応のCPUやソート領域を使用する可能性があります。本番環境で実行する前に負荷を確認し、必要に応じて対象スキーマや表領域を絞ります。</p>
<p>オンプレミスの調査SQLをそのまま再現するのではなく、調査目的を起点に、RDSで利用可能な手段を組み合わせることが重要です。</p>
<div id="gtx-trans" style="position: absolute; left: -33px; top: 7741.58px;">
<div class="gtx-trans-icon"> </div>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://sys-univ.com/tec/rds-oracle-vbh-buffer-cache/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【RDS for Oracle】オンプレの調査SQLが動かない｜X$BHを直接参照できない理由</title>
		<link>https://sys-univ.com/tec/dbbc/</link>
					<comments>https://sys-univ.com/tec/dbbc/#respond</comments>
		
		<dc:creator><![CDATA[ナギ]]></dc:creator>
		<pubDate>Mon, 13 Jul 2026 06:32:54 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[テクノロジー]]></category>
		<guid isPermaLink="false">https://sys-univ.com/?p=823</guid>

					<description><![CDATA[はじめに Oracle DatabaseをオンプレミスからAmazon RDS for Oracleへ移行する際、確認すべきなのは、アプリケーションが正常に動作するかだけではありません。 性能調査、障害解析、ログ取得、セ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><strong>はじめに</strong></p>
<p>Oracle DatabaseをオンプレミスからAmazon RDS for Oracleへ移行する際、確認すべきなのは、アプリケーションが正常に動作するかだけではありません。</p>
<p>性能調査、障害解析、ログ取得、セッション管理など、DBAが日常的に使用している調査手順が、RDS上でも同じように成立するかを確認する必要があります。</p>
<p>本記事で取り上げるのは、DBバッファキャッシュの利用状況を調査する際に使用される<code>X$BH</code>です。</p>
<p>オンプレミスOracleで使用していた<code>X$BH</code>参照SQLを、RDS for Oracleのマスターユーザーで実行すると、次のエラーが発生します。</p>
<pre><code class="language-text">ORA-00942: table or view does not exist
</code></pre>
<p>Oracle Databaseという製品自体は同じです。</p>
<p>しかし、通常のRDS for OracleではSYSとしてログインできず、SYSDBA権限も使用できません。そのため、オンプレミスと同じ方法で<code>SYS.X$BH</code>を直接参照することはできません。</p>
<p>一方、現在のRDS for Oracleには、対応する環境で<code>X$BH</code>を基にした<code>SYS.RDS_X$BH</code>ビューを作成する仕組みがあります。</p>
<p>また、調査の目的によっては、Oracleが公開している動的パフォーマンスビュー<code>V$BH</code>によって必要な情報を取得できます。</p>
<p>本記事では、RDS for Oracleで<code>SYS.X$BH</code>を直接参照できない理由と、現在利用できる代替手段を整理します。</p>
<p>RDS for Oracleでは、X$BH以外にも、SYSDBA権限、OSアクセス、ストレージ操作、ログ取得など、オンプレミスの運用前提がそのまま通用しない場面があります。</p>
<p>RDS for Oracle全体の設計ギャップと代替アプローチについては、以下の記事で整理しています。</p>

<a href="https://sys-univ.com/aws/rdsforora/" title="RDS for Oracleを採用したら、オンプレ運用の前提が通用しなかった｜開発中に見えた設計ギャップと代替アプローチ" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/07/b87f444ed45d88e81401b2fbbfe2b0c1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/07/b87f444ed45d88e81401b2fbbfe2b0c1-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/07/b87f444ed45d88e81401b2fbbfe2b0c1-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/07/b87f444ed45d88e81401b2fbbfe2b0c1-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/07/b87f444ed45d88e81401b2fbbfe2b0c1-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">RDS for Oracleを採用したら、オンプレ運用の前提が通用しなかった｜開発中に見えた設計ギャップと代替アプローチ</div><div class="blogcard-snippet internal-blogcard-snippet">RDS for Oracleではオンプレ運用の前提が通用しない。Storage-Full、アーカイブログ、SSH不可など、開発中に見えた9つの設計ギャップと代替アプローチを整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.08.30</div></div></div></div></a>
<!-- /wp:post-content -->

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-20" checked><label class="toc-title" for="toc-checkbox-20">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">今回調べたいのはDBバッファキャッシュの内訳</a></li><li><a href="#toc2" tabindex="0">オンプレミスではX$BHを参照できる</a></li><li><a href="#toc3" tabindex="0">同じSQLをRDSで実行するとORA-00942になる</a></li><li><a href="#toc4" tabindex="0">RDSのマスターユーザーはSYSDBAではない</a></li><li><a href="#toc5" tabindex="0">grant_sys_objectでも何でも参照できるわけではない</a></li><li><a href="#toc6" tabindex="0">現在はSYS.RDS_X$BHを作成できる</a></li><li><a href="#toc7" tabindex="0">RDS_X$ビューを利用できる環境</a></li><li><a href="#toc8" tabindex="0">RDS_X$ビューを本番で使う場合の注意点</a></li><li><a href="#toc9" tabindex="0">X$BHを調査する3つの方法</a></li><li><a href="#toc10" tabindex="0">それでもV$BHを知っておく理由</a></li><li><a href="#toc11" tabindex="0">同じOracleでも運用方法まで同じとは限らない</a></li><li><a href="#toc12" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">今回調べたいのはDBバッファキャッシュの内訳</span></h2>
<p>Oracle DatabaseのSGAには、データブロックを保持するDBバッファキャッシュがあります。</p>
<p>SQLによって読み込まれたデータブロックをメモリ上に保持しておくことで、同じブロックが再び必要になった際に、ストレージから読み込む処理を減らせます。</p>
<p>更新されたブロックについても、即座にすべてがデータファイルへ書き込まれるわけではありません。更新済みのブロックはバッファキャッシュ上に保持され、DBWRによって適切なタイミングで書き出されます。</p>
<p>このように、DBバッファキャッシュはOracle DatabaseのI/O性能に大きく関係するメモリ領域です。</p>
<p>ただし、バッファキャッシュは大きければ大きいほどよい、というものではありません。</p>
<p>DBインスタンスで利用できるメモリには上限があります。SGAに多く割り当てれば、その分だけPGAやOS、RDSの管理プロセスが利用できるメモリは少なくなります。</p>
<p>例えば、アプリケーションの機能追加によって同時接続数や処理量が増え、PGAの総使用量が増える可能性があるとします。</p>
<p>DBインスタンス全体のメモリに余裕がなければ、PGAに必要なメモリを確保するため、SGAを縮小できるか検討することになります。</p>
<p>SGAには、DBバッファキャッシュのほかにも、共有プール、ラージプール、Javaプール、REDOログバッファなどがあります。</p>
<p>その中でDBバッファキャッシュの縮小余地を検討する場合、まず確認したいのが、</p>
<blockquote>
<p>どのテーブルやインデックスのブロックが、バッファキャッシュ上にどの程度存在しているか</p>
</blockquote>
<p>という内訳です。</p>
<h2><span id="toc2">オンプレミスではX$BHを参照できる</span></h2>
<p>オンプレミスOracleでは、DBバッファキャッシュの内部状態を詳しく調べるために、<code>X$BH</code>を参照する方法があります。</p>
<p><code>X$BH</code>は、一般的なアプリケーション表や通常のデータディクショナリビューではありません。</p>
<p>Oracleが内部的に管理しているバッファヘッダーの情報を参照するための固定表です。</p>
<p>どのデータオブジェクトのブロックがバッファキャッシュ上に存在するかだけでなく、<code>LRU_FLAG</code>や<code>TCH</code>など、バッファの利用状況を分析するための詳細な情報も保持しています。</p>
<p>例えば、<code>TCH</code>はバッファへのアクセス状況を調べる際に利用される情報です。</p>
<p>Oracle公式ドキュメントでは、<code>X$BH.TCH</code>はバッファのタッチカウントとして説明されており、値が高いブロックはホットブロックの候補になるとされています。</p>
<p>一般的には、次のような流れで調査します。</p>
<ol>
	<li>
<p>SGAとPGAの使用状況を確認する</p>
</li>
	<li>
<p>DBバッファキャッシュがSGA内で占める容量を確認する</p>
</li>
	<li>
<p>X$BHとDBA_OBJECTSを結合する</p>
</li>
	<li>
<p>オブジェクトごとのキャッシュブロック数を集計する</p>
</li>
	<li>
<p>キャッシュ上で大きな割合を占めるテーブルやインデックスを確認する</p>
</li>
	<li>
<p>SQL、実行計画、物理読み込みなどの情報と照合する</p>
</li>
</ol>
<p>重要なのは、特定のオブジェクトが大量にキャッシュされているだけでは、直ちに問題とは判断できないことです。</p>
<p>業務で頻繁に参照されるテーブルであれば、多くのブロックがキャッシュされていること自体は正常です。物理読み込みを減らし、性能向上に寄与している可能性があります。</p>
<p>一方で、利用頻度の低い大規模バッチが大量のブロックを読み込み、オンライン処理で必要なブロックをキャッシュから押し出している場合には、SQLや実行計画を見直す余地があります。</p>
<p>そのため、X$BHの結果だけでチューニングの要否を判断するのではなく、AWR、Statspack、SQL統計、待機イベント、実行計画などと組み合わせて評価する必要があります。</p>
<h2><span id="toc3">同じSQLをRDSで実行するとORA-00942になる</span></h2>
<p>オンプレミスで使用しているX$BH参照SQLを、そのままRDS for Oracleのマスターユーザーで実行すると、次のエラーが発生します。</p>
<pre><code class="language-text">ORA-00942: table or view does not exist
</code></pre>
<p>このエラーだけでは、対象オブジェクトが存在しないのか、実行ユーザーに参照権限がないのかを判別できません。</p>
<p>Oracleでは、存在する表やビューであっても、実行ユーザーに必要なアクセス権限がない場合、ORA-00942が返ることがあります。</p>
<p>そのため、最初に考えられるのは、マスターユーザーに対する権限不足です。</p>
<p>しかし、<code>X$BH</code>のようなX$固定表は、通常の表やビューと同じ方法で、RDSのマスターユーザーへ参照権限を追加できるオブジェクトではありません。</p>
<p>AWSの公式ドキュメントでは、<code>SYS.X$</code>固定表はSYSだけが直接アクセスできる内部システムオブジェクトとして扱われています。通常のRDS for OracleではSYSとしてログインできないため、マスターユーザーに通常のGRANTを追加し、オンプレミスと同じ参照方法を再現することはできません。</p>
<h2><span id="toc4">RDSのマスターユーザーはSYSDBAではない</span></h2>
<p>RDS for OracleのDBインスタンスを作成すると、マスターユーザーにはDBA権限が付与されます。</p>
<p>ただし、オンプレミスでSYSDBA権限を持つユーザーと、完全に同じ操作ができるわけではありません。</p>
<p>通常のRDS for Oracleでは、利用者は<code>SYS</code>、<code>SYSTEM</code>など、Oracleがあらかじめ用意している管理ユーザーを使用できません。また、マスターユーザーにSYSDBA権限を付与することもできません。</p>
<p>Amazon RDSはマネージドサービスです。</p>
<p>バックアップ、パッチ適用、障害復旧、基盤監視などの一部をAWSが管理する代わりに、利用者が実行できるデータベース管理操作には一定の制限があります。</p>
<p>そのため、マスターユーザーにDBA権限が与えられていても、すべてのシステム権限やOracle内部オブジェクトへのアクセスが許可されるわけではありません。</p>
<p>今回参照しようとしている<code>X$BH</code>は、SYSだけが直接アクセスできるOracle内部の固定表です。</p>
<p>オンプレミスでSYSまたはSYSDBA権限を持つユーザーから参照できていても、RDSのマスターユーザーから同じ名前で直接参照することはできません。</p>
<h2><span id="toc5">grant_sys_objectでも何でも参照できるわけではない</span></h2>
<p>RDS for Oracleでは、SYSが所有する一部のオブジェクトについて、次のRDS管理パッケージを使用し、別のデータベースユーザーへ権限を付与できます。</p>
<pre><code class="language-sql">rdsadmin.rdsadmin_util.grant_sys_object
</code></pre>
<p>例えば、SYSが所有するデータディクショナリビューやパッケージに対して、<code>SELECT</code>権限や<code>EXECUTE</code>権限を付与する際に利用します。</p>
<p>ただし、このプロシージャを使用すれば、すべてのSYSオブジェクトへ自由にアクセスできるわけではありません。</p>
<p><code>grant_sys_object</code>で付与できるのは、マスターユーザー自身がロールまたは直接付与によって保持している権限に限られます。</p>
<p>マスターユーザー自身が持っていない権限を、このプロシージャによって新たに作り出すことはできません。</p>
<p>したがって、マスターユーザー自身が<code>SYS.X$BH</code>を直接参照できない環境では、<code>grant_sys_object</code>を使って他のユーザーへX$BHの参照権限を付与することもできません。</p>
<p>オンプレミスで使用しているSQLがRDSで実行できなかった場合、</p>
<pre><code class="language-text">権限が足りない
　↓
GRANTを追加する
　↓
解決する
</code></pre>
<p>という単純な流れでは解決できないことがあります。</p>
<p>RDSで許可されている機能の中から、調査目的を満たせる別のビューや、RDS固有の管理プロシージャを探す必要があります。</p>
<h2><span id="toc6">現在はSYS.RDS_X$BHを作成できる</span></h2>
<p>現在のRDS for Oracleには、対象となるX$固定表を基に、<code>SYS.RDS_X$</code>ビューを作成する仕組みがあります。</p>
<p>対応環境では、次のプロシージャを実行することで、RDS_X$ビューの作成対象として認められているX$固定表を確認できます。</p>
<pre><code class="language-sql">SELECT *
FROM TABLE(
    rdsadmin.rdsadmin_util.list_allowed_sys_x$_views
);
</code></pre>
<p>実際に利用する際は、対象環境でこのプロシージャを実行し、その時点の一覧に<code>X$BH</code>が含まれていることを確認します。</p>
<p>対象として表示された環境では、次のプロシージャによって、X$BHを基にしたRDS_X$ビューを作成できます。</p>
<pre><code class="language-sql">EXEC rdsadmin.rdsadmin_util.create_sys_x$_view('X$BH');
</code></pre>
<p>作成されるビュー名は、元のX$固定表名に<code>RDS_</code>が付いた形式です。</p>
<pre><code class="language-text">SYS.RDS_X$BH
</code></pre>
<p>作成されたRDS_X$ビューに対しては、マスターユーザーへ<code>SELECT WITH GRANT OPTION</code>が付与されます。必要に応じて、マスターユーザーから別のデータベースユーザーへ参照権限を付与できます。</p>
<h2><span id="toc7">RDS_X$ビューを利用できる環境</span></h2>
<p>AWSの公式ドキュメントでは、RDS_X$ビューを利用できる環境として、次の条件が示されています。</p>
<ul>
	<li>
<p>一度もアップグレードされていない既存DBインスタンスで、19cまたは21cの2023年10月以降の対象リリースを使用している</p>
</li>
	<li>
<p>新規に作成したDBインスタンス</p>
</li>
	<li>
<p>エンジンをアップグレードした既存DBインスタンス</p>
</li>
</ul>
<p>一度もアップグレードされていない既存インスタンスでは、19cは<code>19.0.0.0.ru-2023-10.rur-2023-10.r1</code>以降、21cは<code>21.0.0.0.ru-2023-10.rur-2023-10.r1</code>以降が対象として示されています。</p>
<p>ただし、利用条件や作成対象となるX$固定表は、今後変更される可能性があります。</p>
<p>実際に使用する際は、記事に記載されたバージョン情報だけで判断せず、次の2点を確認する必要があります。</p>
<ul>
	<li>
<p>最新のAWS公式ドキュメントを確認する</p>
</li>
	<li>
<p>対象環境で<code>list_allowed_sys_x$_views</code>を実行する</p>
</li>
</ul>
<h2><span id="toc8">RDS_X$ビューを本番で使う場合の注意点</span></h2>
<p>RDS_X$ビューを作成できるからといって、通常のデータディクショナリビューと同じ感覚で使用してよいわけではありません。</p>
<p>RDS_X$ビューの基になっているX$固定表は、Oracleの内部システムオブジェクトです。その構造や動作は、一般的な公開インターフェースとして保証されていません。</p>
<p>AWSは、特定のRDS_X$ビューを非本番環境で検証し、本番環境ではOracle Supportのガイダンスの下で作成することを推奨しています。</p>
<p>また、X$固定表の構造は、エンジンアップグレードの前後で同じであることが保証されていません。</p>
<p>RDS for Oracleでは、エンジンアップグレード時に既存のRDS_X$ビューが削除され、アップグレード後のX$固定表を基に再作成されます。その後、マスターユーザーには<code>SELECT WITH GRANT OPTION</code>が再び付与されます。</p>
<p>ただし、マスターユーザー以外のデータベースユーザーへ付与していた権限は、自動的には復元されません。アップグレード後に、必要なユーザーへ権限を再付与する必要があります。</p>
<p>RDS_X$ビューを監視や定期調査へ組み込む場合は、次の点を運用設計へ反映します。</p>
<ul>
	<li>
<p>対象のX$固定表が作成対象に含まれているか確認する</p>
</li>
	<li>
<p>非本番環境でSQLの動作と負荷を検証する</p>
</li>
	<li>
<p>エンジンアップグレード後にビューの状態を確認する</p>
</li>
	<li>
<p>マスターユーザー以外へ付与した権限を再設定する</p>
</li>
	<li>
<p>アップグレード後も必要な列が存在するか確認する</p>
</li>
	<li>
<p>列構造や挙動を公開仕様として前提にしない</p>
</li>
</ul>
<p><code>RDS_X$BH</code>を作成すれば、対象環境において<code>LRU_FLAG</code>や<code>TCH</code>など、V$BHでは確認できない情報を参照できる可能性があります。</p>
<p>ただし、X$固定表の列構造は公開仕様ではありません。特定の列が将来にわたって同じ形で存在することを前提にした監視や運用は避けるべきです。</p>
<h2><span id="toc9">X$BHを調査する3つの方法</span></h2>
<p>RDS for OracleにおけるX$BHの扱いは、次のように整理できます。</p>
<table>
<thead>
<tr>
<th>調査方法</th>
<th>RDSでの利用</th>
<th>特徴</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>SYS.X$BH</code>を直接参照</td>
<td>通常のRDS for Oracleでは不可</td>
<td>SYSだけが直接アクセスできる内部固定表</td>
</tr>
<tr>
<td><code>SYS.RDS_X$BH</code>を作成</td>
<td>対応環境で可能</td>
<td>X$BHを基にしたRDS用ビュー。非本番での検証が必要</td>
</tr>
<tr>
<td><code>V$BH</code>を参照</td>
<td>必要な参照権限があれば可能</td>
<td>Oracle公式リファレンスに記載された動的パフォーマンスビュー</td>
</tr>
</tbody>
</table>
<p>したがって、現在のRDS for Oracleについては、次のように理解する必要があります。</p>
<blockquote>
<p>通常のRDS for Oracleでは、SYS.X$BHを直接参照できない。ただし、対応環境ではSYS.RDS_X$BHを作成できる。</p>
</blockquote>
<p>「SYS.X$BHを直接参照できないこと」と、「X$BHを基にした情報を一切取得できないこと」は同じではありません。</p>
<h2><span id="toc10">それでもV$BHを知っておく理由</span></h2>
<p>ここで一つ疑問が出てきます。</p>
<p><code>RDS_X$BH</code>を作成し、対象環境で<code>LRU_FLAG</code>や<code>TCH</code>などの必要な列を参照できるのであれば、<code>V$BH</code>を使った代替調査は不要ではないか、という疑問です。</p>
<p>しかし、必ずしもそうとは限りません。</p>
<p><code>RDS_X$BH</code>は、Oracle内部の非公開オブジェクトを基にしたビューです。</p>
<p>作成対象となるX$固定表や列構造、アップグレード後の互換性を、公開仕様として前提にすることはできません。</p>
<p>また、本番環境で利用する前に、非本番環境での検証やOracle Supportへの確認が推奨されています。</p>
<p>一方、<code>V$BH</code>はOracleの公式リファレンスに記載された動的パフォーマンスビューです。</p>
<p><code>V$BH</code>からは、バッファの状態、ファイル番号、ブロック番号、データオブジェクト番号、表領域番号などを取得できます。</p>
<p>必要な参照権限を持つユーザーであれば、RDS_X$ビューを新たに作成せずに利用できます。</p>
<p>そのため、今回のように、</p>
<blockquote>
<p>バッファキャッシュ上に、どのオブジェクトのブロックが何件存在するか確認したい</p>
</blockquote>
<p>という目的であれば、まずV$BHで必要な情報を取得できるか検討するのが現実的です。</p>
<p>V$BHでは不足する情報があり、<code>LRU_FLAG</code>や<code>TCH</code>などX$BH固有の情報が調査上どうしても必要になった場合に、RDS_X$BHの作成を検討するという順序が考えられます。</p>
<p>ただし、V$BHはX$BHの完全な代替ではありません。</p>
<p>V$BHから取得できる情報と取得できない情報を区別し、調査目的に応じて使い分ける必要があります。</p>
<h2><span id="toc11">同じOracleでも運用方法まで同じとは限らない</span></h2>
<p>今回の事例で重要なのは、X$BHという一つの内部表を参照できるかどうかだけではありません。</p>
<p>RDS for Oracleでは、Oracle Databaseという同じエンジンを使用していても、管理権限や調査方法までオンプレミスと同じになるわけではありません。</p>
<p>移行前には、アプリケーションのSQLや接続方式だけでなく、次のようなDBA運用についても確認する必要があります。</p>
<ul>
	<li>
<p>性能問題が起きた際に必要な情報を取得できるか</p>
</li>
	<li>
<p>障害解析で利用しているビューやパッケージを参照できるか</p>
</li>
	<li>
<p>SYSDBAを前提とした運用手順が残っていないか</p>
</li>
	<li>
<p>Oracle内部表に依存した監視や調査を行っていないか</p>
</li>
	<li>
<p>RDS固有のプロシージャで代替できるか</p>
</li>
	<li>
<p>代替した場合に取得できなくなる情報はないか</p>
</li>
	<li>
<p>本番環境で使用する前に非本番環境で検証できるか</p>
</li>
	<li>
<p>エンジンアップグレード後も同じ手順を利用できるか</p>
</li>
	<li>
<p>アップグレード時に再設定が必要な権限はないか</p>
</li>
</ul>
<p>オンプレミスの運用手順書に記載されたSQLを、そのままRDSへ移植するだけでは不十分です。</p>
<p>重要なのは、既存のコマンドをそのまま再現することではありません。</p>
<p>そのSQLを何のために実行しているのかを整理し、RDSで利用可能な手段によって同じ調査目的を満たせるか検証することです。</p>
<p>今回の目的は、DBバッファキャッシュ上に存在するオブジェクトと、そのキャッシュブロック数を把握することでした。</p>
<p>この目的に限定すれば、Oracleが公開している動的パフォーマンスビュー<code>V$BH</code>を使って調査する方法があります。</p>
<p>一方、V$BHでは、X$BHが持つすべての内部情報を確認できるわけではありません。<code>LRU_FLAG</code>や<code>TCH</code>など、V$BHからは取得できない情報もあります。</p>
<!-- wp:paragraph -->
<p><code>V$BH</code>を使ってオブジェクトごとのキャッシュ量を確認するSQLと、<code>X$BH</code>から置き換える際の注意点については、以下の記事で詳しく解説しています。</p>

<a href="https://sys-univ.com/tec/rds-oracle-vbh-buffer-cache/" title="【RDS for Oracle】V$BHでバッファキャッシュの内訳を調査する｜X$BHの代替方法" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sys-univ.com/wp-content/uploads/2026/07/668dae24cf7c9fd31ae6a1096db3c3cd-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/07/668dae24cf7c9fd31ae6a1096db3c3cd-160x90.jpg 160w, https://sys-univ.com/wp-content/uploads/2026/07/668dae24cf7c9fd31ae6a1096db3c3cd-120x68.jpg 120w, https://sys-univ.com/wp-content/uploads/2026/07/668dae24cf7c9fd31ae6a1096db3c3cd-320x180.jpg 320w, https://sys-univ.com/wp-content/uploads/2026/07/668dae24cf7c9fd31ae6a1096db3c3cd-376x212.jpg 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【RDS for Oracle】V$BHでバッファキャッシュの内訳を調査する｜X$BHの代替方法</div><div class="blogcard-snippet internal-blogcard-snippet">RDS for OracleでV$BHを使い、オブジェクト別のバッファキャッシュ量を調査する方法を解説。DATA_OBJECT_IDを使ったSQL、X$BHとの違い、結果の見方と実行時の注意点を整理します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sys-univ.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sys-univ.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.07.13</div></div></div></div></a>
<h2><span id="toc12">まとめ</span></h2>
<!-- /wp:paragraph -->
<!-- wp:paragraph /-->
<p>通常のRDS for Oracleでは、SYSまたはSYSTEMとしてログインできず、SYSDBA権限も使用できません。</p>
<p>そのため、オンプレミスと同じ方法で<code>SYS.X$BH</code>を直接参照することはできません。</p>
<p>ただし、現在のRDS for Oracleでは、対応する環境であれば、次のプロシージャを使用して<code>SYS.RDS_X$BH</code>ビューを作成できます。</p>
<pre><code class="language-sql">EXEC rdsadmin.rdsadmin_util.create_sys_x$_view('X$BH');
</code></pre>
<p>したがって、RDS for OracleにおけるX$BHの利用については、次の3点を区別する必要があります。</p>
<ul>
	<li>
<p><code>SYS.X$BH</code>を直接参照できるか</p>
</li>
	<li>
<p><code>SYS.RDS_X$BH</code>を作成できる環境か</p>
</li>
	<li>
<p><code>V$BH</code>で調査目的を代替できるか</p>
</li>
</ul>
<p>RDS_X$BHを利用できる環境であっても、X$固定表はOracle内部の非公開オブジェクトです。</p>
<p>本番環境へ導入する際は、非本番環境での検証、エンジンアップグレード後の確認、他ユーザーへの権限再付与などを考慮する必要があります。</p>
<p>RDS移行では、データベースエンジンが同じであっても、オンプレミスと同じDBA権限や調査方法が提供されるとは限りません。</p>
<p>アプリケーションの互換性だけでなく、性能調査や障害解析を含む運用手順についても、移行前のPoCで確認しておく必要があります。</p>]]></content:encoded>
					
					<wfw:commentRss>https://sys-univ.com/tec/dbbc/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
