<?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>AWS | ナギ｜システム基盤エンジニアの知見録</title>
	<atom:link href="https://sys-univ.com/category/aws/feed/" rel="self" type="application/rss+xml" />
	<link>https://sys-univ.com</link>
	<description>大手SIer20年超｜要件定義から設計・構築・試験・移行・運用まで、実務で使える知見を発信</description>
	<lastBuildDate>Wed, 04 Nov 2026 06:39:52 +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/aws/feed/"/>
	<item>
		<title>CodeConnectionsでGitLab Self-Managedに閉域接続する｜Invalid host endpoint providedの原因とVPC・証明書・認証の設計ポイント</title>
		<link>https://sys-univ.com/aws/codeconnections-gitlab-self-managed-vpc-error/</link>
					<comments>https://sys-univ.com/aws/codeconnections-gitlab-self-managed-vpc-error/#respond</comments>
		
		<dc:creator><![CDATA[ナギ]]></dc:creator>
		<pubDate>Wed, 04 Nov 2026 06:38:58 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<guid isPermaLink="false">https://sys-univ.com/?p=3597</guid>

					<description><![CDATA[AWS CodeBuildとGitLab Self-Managedを連携させる。AWSのマネージドサービスを利用すれば、比較的簡単に実現できそうに思えます。 しかし、GitLabがプライベートネットワーク内にあり、AWS [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">AWS CodeBuildとGitLab Self-Managedを連携させる。AWSのマネージドサービスを利用すれば、比較的簡単に実現できそうに思えます。</p>


<p class="wp-block-paragraph">しかし、GitLabがプライベートネットワーク内にあり、AWSアカウントも異なるとなると、話はそう単純ではありません。</p>


<p class="wp-block-paragraph">今回、EC2上のGitLab Self-ManagedとCodeBuildを連携するため、AWS CodeConnectionsの設定を進める過程で、次のエラーが問題となりました。</p>


<p class="wp-block-paragraph"><code>Invalid host endpoint provided.</code></p>


<p class="wp-block-paragraph">当初は、Transit Gateway（TGW）でVPC間の通信経路を確保すれば、あとはCodeConnectionsの設定だけで済むと考えていました。ところが、AWSサポートへの問い合わせを通じて、VPC接続、自己署名証明書、GitLabの認証、さらにCodeBuildのソース取得方式まで、切り分けるべき論点が次々と出てきました。</p>


<p class="wp-block-paragraph">本記事では、この事例を基に、閉域環境でCodeConnectionsを利用する際の設計ポイントを整理します。</p>


<h3 class="wp-block-heading"><span id="toc1">本記事の検証範囲</span></h3>


<figure class="wp-block-table">
<table>
<thead>
<tr>
<th>区分</th>
<th>内容</th>
</tr>
</thead>
<tbody>
<tr>
<td>確認済み</td>
<td><code>Invalid host endpoint provided.</code> の発生、AWSサポートの回答、CodeConnectionsのAvailable表示</td>
</tr>
<tr>
<td>サポート回答に基づく経緯</td>
<td>VPC無効の状態でプライベートIPを指定するとエラーとなり、VPC設定の有効化によって接続可能になった</td>
</tr>
<tr>
<td>未検証</td>
<td>CodeBuildからのソース取得・ビルド実行、CodeBuild側の追加VPC・TLS設定の要否</td>
</tr>
</tbody>
</table>
</figure>



  <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"><ol><li><a href="#toc1" tabindex="0">本記事の検証範囲</a></li></ol></li><li><a href="#toc2" tabindex="0">1. GitLabとCodeBuildを別AWSアカウントで連携する</a></li><li><a href="#toc3" tabindex="0">2. CodeConnectionsの「ホスト」と「接続」は別物</a><ol><li><a href="#toc4" tabindex="0">PATはホストの認可に使用する</a></li></ol></li><li><a href="#toc5" tabindex="0">3. Invalid host endpoint provided. とVPC設定の関係</a><ol><li><a href="#toc6" tabindex="0">プライベートIPのGitLabにはVPC接続を検討する</a></li><li><a href="#toc7" tabindex="0">エラーが発生した場合の切り分け</a></li></ol></li><li><a href="#toc8" tabindex="0">4. 閉域接続では、作業端末からのアクセスも必要になる</a></li><li><a href="#toc9" tabindex="0">5. TGW経由の通信と自己署名証明書をどう扱うか</a><ol><li><a href="#toc10" tabindex="0">自己署名証明書の設定先</a></li></ol></li><li><a href="#toc11" tabindex="0">6. CodeBuild側にもVPCや証明書の設定が必要なのか</a><ol><li><a href="#toc12" tabindex="0">ビルド環境からGitLabへ接続するならVPC設定が必要</a></li><li><a href="#toc13" tabindex="0">GetConnectionTokenから読み取れること</a></li><li><a href="#toc14" tabindex="0">証明書検証を無効化すればよいのか</a></li><li><a href="#toc15" tabindex="0">実際の通信元をどう調べるか</a></li></ol></li><li><a href="#toc16" tabindex="0">7. AWSサポートへの問い合わせで重要なのは、設定値より前提条件</a></li><li><a href="#toc17" tabindex="0">8. まとめ｜マネージドサービスでも基盤設計は不要にならない</a><ol><li><a href="#toc18" tabindex="0">参考資料</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc2">1. GitLabとCodeBuildを別AWSアカウントで連携する</span></h2>


<p class="wp-block-paragraph">今回の構成は、次のとおりです。</p>


<figure class="wp-block-table">
<table>
<thead>
<tr>
<th>項目</th>
<th>構成</th>
</tr>
</thead>
<tbody>
<tr>
<td>ソースコード管理</td>
<td>GitLab Self-Managed</td>
</tr>
<tr>
<td>GitLabの稼働環境</td>
<td>Amazon EC2</td>
</tr>
<tr>
<td>ビルドサービス</td>
<td>AWS CodeBuild</td>
</tr>
<tr>
<td>AWSアカウント</td>
<td>GitLabとCodeBuildで別アカウント</td>
</tr>
<tr>
<td>VPC間接続</td>
<td>Transit Gateway</td>
</tr>
<tr>
<td>GitLabの公開範囲</td>
<td>プライベートネットワークのみ</td>
</tr>
<tr>
<td>通信プロトコル</td>
<td>HTTPS</td>
</tr>
<tr>
<td>TLS証明書</td>
<td>自己署名証明書</td>
</tr>
<tr>
<td>接続サービス</td>
<td>AWS CodeConnections</td>
</tr>
</tbody>
</table>
</figure>


<p class="wp-block-paragraph">GitLabにはパブリックIPアドレスがなく、インターネットから直接アクセスできない構成です。</p>


<p class="wp-block-paragraph">VPC間はTGWで接続されていますが、TGWの接続が存在することと、CodeConnectionsからGitLabへ通信できることは別の話です。</p>


<p class="wp-block-paragraph">さらに、CodeConnectionsの接続設定、GitLab側での認可、CodeBuildによるソース取得では、それぞれ異なる通信や権限が関係します。</p>


<p class="wp-block-paragraph">最初はネットワークの問題だと思っていたものが、調べていくと認証や証明書の問題にも広がっていく。複数のAWSサービスを組み合わせる際に、こうした切り分けの難しさを感じる場面は少なくありません。</p>


<h2 class="wp-block-heading"><span id="toc3">2. CodeConnectionsの「ホスト」と「接続」は別物</span></h2>


<p class="wp-block-paragraph">エラーの原因を考える前に、CodeConnectionsの仕組みを整理しておきます。</p>


<p class="wp-block-paragraph">GitLab Self-Managedとの連携では、「ホスト」と「接続」という2種類のリソースを扱います。</p>


<p class="wp-block-paragraph"><strong>ホストはGitLabの設置環境を表すリソース</strong>で、GitLabのURL、VPC、サブネット、セキュリティグループ、必要に応じたTLS証明書などを設定します。</p>


<p class="wp-block-paragraph">一方、<strong>接続はGitLabアカウントによる認可を受け、AWSサービスからリポジトリへアクセスするためのリソース</strong>です。</p>


<p class="wp-block-paragraph">両者を区別すると、ネットワークや証明書の設定と、GitLabへのアクセス認可を分けて考えられます。</p>


<h3 class="wp-block-heading"><span id="toc4">PATはホストの認可に使用する</span></h3>


<p class="wp-block-paragraph">GitLab Self-Managedのホストをセットアップする際には、Personal Access Token（PAT）を使用します。</p>


<p class="wp-block-paragraph">AWS公式ドキュメントによれば、PATには次の要件があります。</p>


<ul class="wp-block-list">
	<li>GitLab管理者が作成・使用する</li>


	<li><code>api</code>スコープが必要</li>


	<li>GitLabのAdmin Modeが有効な場合は<code>admin_mode</code>も必要</li>


	<li>PATはホストの認可に使用され、接続では保存・使用されない</li>


	<li>ホストのセットアップ後にPATを削除できる</li>
</ul>


<p class="wp-block-paragraph">つまり、ホストの認可に使用したPATを、そのまま継続的なリポジトリアクセス用の認証情報として保持する必要はありません。</p>


<p class="wp-block-paragraph">参考：<a href="https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-gitlab-managed.html">AWS公式｜GitLab Self-Managedへの接続作成</a></p>


<h2 class="wp-block-heading"><span id="toc5">3. Invalid host endpoint provided. とVPC設定の関係</span></h2>


<p class="wp-block-paragraph">今回のエラーは、CodeConnectionsでGitLab Self-Managedのエンドポイントを設定する際に発生したものです。</p>


<p class="wp-block-paragraph"><code>Invalid host endpoint provided.</code></p>


<p class="wp-block-paragraph">AWSサポートからは、<strong>「VPCを使用する」が無効の状態でプライベートIPを指定すると、このエラーが発生する</strong>という説明がありました。</p>


<p class="wp-block-paragraph">また、VPC接続を有効にして必要なネットワーク設定を行うことで、Availableに至ったという経緯も示されています。</p>


<p class="wp-block-paragraph">このため、今回のエラーを切り分けるうえでは、接続先URLだけでなく、VPC接続の設定が有力な確認ポイントになります。</p>


<h3 class="wp-block-heading"><span id="toc6">プライベートIPのGitLabにはVPC接続を検討する</span></h3>


<p class="wp-block-paragraph">AWS公式ドキュメントでは、GitLab Self-Managedがプライベートネットワーク内に存在する場合、ホストの作成時に「Use a VPC」を選択する構成が示されています。</p>


<p class="wp-block-paragraph">設定する主な項目は、VPC ID、サブネットID、セキュリティグループIDです。</p>


<p class="wp-block-paragraph">ここで注意したいのは、GitLabが稼働するVPCと、CodeConnectionsに設定するVPCが必ずしも同一とは限らないことです。</p>


<p class="wp-block-paragraph">AWS公式手順では、VPNやDirect Connectを経由してGitLabへアクセスできるVPCの例が示されています。一方、今回のような別アカウント間のTGW構成については、同じ手順の中で明示的な例示がありません。</p>


<p class="wp-block-paragraph">今回の構成ではTGWを利用し、CodeConnectionsのAvailable表示まで到達しています。ただし、これだけでTGW経由のあらゆる構成がサポートされると判断することはできません。</p>


<h3 class="wp-block-heading"><span id="toc7">エラーが発生した場合の切り分け</span></h3>


<p class="wp-block-paragraph">同じエラーに遭遇した場合、まず次の4点を調べます。</p>


<ol class="wp-block-list">
	<li>GitLabのエンドポイントURLが適切か</li>


	<li>プライベートIPへの接続に対応したVPC設定になっているか</li>


	<li>設定したVPC・サブネットからGitLabへの経路があるか</li>


	<li>HTTPSの証明書が接続先と整合しているか</li>
</ol>


<p class="wp-block-paragraph">特に、プライベートIPを指定しているにもかかわらずVPC接続を使用していない場合は、最初に見直したい設定です。</p>


<h2 class="wp-block-heading"><span id="toc8">4. 閉域接続では、作業端末からのアクセスも必要になる</span></h2>


<p class="wp-block-paragraph">AWSからGitLabへのネットワーク疎通を考える際、見落としやすいのが接続の認可操作です。</p>


<p class="wp-block-paragraph">CodeConnectionsの公式手順では、接続を作成した後、ブラウザでGitLabにサインインし、「Authorize」を選択して認可します。</p>


<p class="wp-block-paragraph">AWS CLIやCloudFormationで接続リソースを作成した場合も、初期状態はPENDINGとなり、コンソールで認可を完了させる必要があります。</p>


<p class="wp-block-paragraph">ここで問題になるのが、<strong>設定作業を行う端末からGitLabへアクセスできるか</strong>という点です。</p>


<p class="wp-block-paragraph">例えば、AWS側のVPCからGitLabへ通信できても、作業PCが社内ネットワーク外にあり、GitLabのプライベートIPに到達できなければ、ブラウザで認可操作を進められない可能性があります。</p>


<p class="wp-block-paragraph">この場合は、社内VPNや管理用端末など、GitLabへアクセスできる正規の操作環境を用意する必要があります。</p>


<p class="wp-block-paragraph">AWSサービス間の通信経路だけを考えていたところに、作業端末からのアクセスという別の問題が出てくる。閉域ネットワークの設計では、こうした運用面まで含めて考える必要があります。</p>


<h2 class="wp-block-heading"><span id="toc9">5. TGW経由の通信と自己署名証明書をどう扱うか</span></h2>


<p class="wp-block-paragraph">今回の構成では、GitLabとCodeBuildが異なるAWSアカウントに存在します。</p>


<p class="wp-block-paragraph">VPC間はTGWで接続されていますが、TGWが存在するだけでは通信は成立しません。</p>


<p class="wp-block-paragraph">少なくとも、次の項目を整理する必要があります。</p>


<figure class="wp-block-table">
<table>
<thead>
<tr>
<th>対象</th>
<th>設計上の論点</th>
</tr>
</thead>
<tbody>
<tr>
<td>VPCルートテーブル</td>
<td>GitLab側ネットワークへの経路</td>
</tr>
<tr>
<td>TGWルートテーブル</td>
<td>接続元・接続先への転送経路</td>
</tr>
<tr>
<td>戻り経路</td>
<td>GitLabから接続元へ応答できるか</td>
</tr>
<tr>
<td>セキュリティグループ</td>
<td>HTTPS通信の接続元を許可しているか</td>
</tr>
<tr>
<td>ネットワークACL</td>
<td>必要な通信が遮断されていないか</td>
</tr>
</tbody>
</table>
</figure>


<p class="wp-block-paragraph">特に、CodeConnectionsとCodeBuildを同じ通信元として扱わないことが大切です。</p>


<p class="wp-block-paragraph">どのコンポーネントがGitLabに接続するかによって、必要なネットワーク設定は変わります。</p>


<h3 class="wp-block-heading"><span id="toc10">自己署名証明書の設定先</span></h3>


<p class="wp-block-paragraph">今回のGitLabでは、HTTPS通信に自己署名証明書を使用しています。</p>


<p class="wp-block-paragraph">AWS CodeConnectionsには、非公開認証局を利用する環境向けにTLS証明書を指定する設定があります。</p>


<p class="wp-block-paragraph">ただし、証明書を登録することと、TLS接続が正常に検証されることは同じではありません。</p>


<p class="wp-block-paragraph">接続先としてIPアドレスを使用する場合、証明書のSubject Alternative Name（SAN）に、そのIPアドレスが登録されているかが論点になります。</p>


<p class="wp-block-paragraph">証明書を信頼できても、接続先のIPアドレスが証明書と一致しなければ、ホスト名検証で失敗する可能性があります。</p>


<p class="wp-block-paragraph">この点は、実際の証明書を<code>openssl x509 -text</code>などで調べることで確認できます。</p>


<h2 class="wp-block-heading"><span id="toc11">6. CodeBuild側にもVPCや証明書の設定が必要なのか</span></h2>


<p class="wp-block-paragraph">今回、最も気になったのが、CodeBuild側の証明書設定に関するAWSサポートの回答です。</p>


<p class="wp-block-paragraph">サポートからは、CodeConnections側で証明書を設定していれば、CodeBuild側に特別な証明書設定は必要ないという趣旨の説明がありました。</p>


<p class="wp-block-paragraph">当初は、CodeConnectionsがGitLabとの通信を担うのであれば、その説明で理解できそうに思えました。しかし、CodeBuildの公式仕様を調べていくと、一つ疑問が残りました。</p>


<p class="wp-block-paragraph"><strong>CodeBuildが実際にGitLabからソースを取得する際、HTTPS通信はどのコンポーネントが実行するのでしょうか。</strong></p>


<p class="wp-block-paragraph">この点を整理しないまま、CodeBuild側の証明書設定が不要と判断するのは早いと感じました。</p>


<h3 class="wp-block-heading"><span id="toc12">ビルド環境からGitLabへ接続するならVPC設定が必要</span></h3>


<p class="wp-block-paragraph">CodeBuildのビルド環境から直接GitLabへGit cloneを実行する方式であれば、プライベートIPしか持たないGitLabへ到達できるネットワーク経路が必要です。</p>


<p class="wp-block-paragraph">通常、VPC設定のないCodeBuildのビルド環境はAWS管理のネットワークで動作するため、TGWで接続されたプライベートVPCへ、そのままアクセスできるわけではありません。</p>


<p class="wp-block-paragraph">したがって、<strong>ビルド環境が直接GitLabへ接続する方式なら、CodeBuild側にも到達可能なVPC設定と通信経路が必要</strong>になります。</p>


<p class="wp-block-paragraph">一方、CodeConnections側の仕組みでソース取得が完結する方式なら、必要なネットワーク構成は異なります。</p>


<p class="wp-block-paragraph">残る論点は、今回のCodeConnectionsを利用したソース取得が、どちらの方式で動作するかです。</p>


<h3 class="wp-block-heading"><span id="toc13">GetConnectionTokenから読み取れること</span></h3>


<p class="wp-block-paragraph">AWSのCodeBuild向けGitHub App接続手順では、サービスロールに次のIAM権限を付与する例が示されています。</p>


<pre class="wp-block-code"><code>{
  "Effect": "Allow",
  "Action": [
    "codeconnections:GetConnectionToken",
    "codeconnections:GetConnection"
  ],
  "Resource": "arn:aws:codeconnections:&lt;region&gt;:&lt;account-id&gt;:connection/&lt;id&gt;"
}</code></pre>


<p class="wp-block-paragraph"><code>GetConnectionToken</code>は、接続に関連する認証トークンを取得するためのアクションです。</p>


<p class="wp-block-paragraph">この仕組みから、CodeBuildが接続を通じて認証情報を取得し、ソース取得処理に利用する構成が考えられます。</p>


<p class="wp-block-paragraph">ただし、認証トークンを取得することと、ビルド環境から直接GitLabへ通信することは同義ではありません。IAM権限だけで実際の通信元を特定することはできません。</p>


<p class="wp-block-paragraph">なお、上記はGitHub App向け公式手順を基にした説明用のポリシー例です。実際のGitLab Self-Managed構成では、接続方式と必要権限に合わせて調整する必要があります。</p>


<p class="wp-block-paragraph">参考：<a href="https://docs.aws.amazon.com/codebuild/latest/userguide/connections-github-app.html">AWS公式｜GitHub App connections</a></p>


<h3 class="wp-block-heading"><span id="toc14">証明書検証を無効化すればよいのか</span></h3>


<p class="wp-block-paragraph">CodeBuildの<code>ProjectSource</code> APIには、<code>insecureSsl</code>という設定項目があります。</p>


<p class="wp-block-paragraph">ただし、この設定はCodeConnectionsのホスト側で実施するTLS検証とは別のものです。今回のGitLab Self-Managed＋CodeConnections構成に適用できるかも、ソース取得方式によって異なります。</p>


<p class="wp-block-paragraph">AWSサポートからは、CodeConnections側のTLS証明書検証を無効化することはできないとの説明がありました。</p>


<p class="wp-block-paragraph">いずれにしても、証明書検証を無効化してエラーを回避するのは、セキュリティ上望ましい対応ではありません。</p>


<p class="wp-block-paragraph">自己署名証明書を使用する場合でも、適切なCA証明書の信頼設定と、接続先のホスト名またはIPアドレスとの整合性を確保することが基本です。</p>


<h3 class="wp-block-heading"><span id="toc15">実際の通信元をどう調べるか</span></h3>


<p class="wp-block-paragraph">CodeBuildの実行結果が得られるなら、まず<code>DOWNLOAD_SOURCE</code>フェーズのログを調べます。</p>


<p class="wp-block-paragraph">ソース取得の段階で失敗しているのか、取得後のビルド処理で失敗しているのかを分けるためです。</p>


<p class="wp-block-paragraph">さらに、GitLab側のVPC Flow Logsを利用し、通信元IPアドレスを調べる方法があります。</p>


<p class="wp-block-paragraph">通信元IPとENIの対応関係を照合すれば、CodeConnections側のネットワークコンポーネントからの通信なのか、CodeBuild側からの通信なのかを判断する手掛かりになります。</p>


<p class="wp-block-paragraph">必要に応じてGitLab側のアクセスログとも突き合わせれば、より具体的に切り分けられます。</p>


<p class="wp-block-paragraph">今回、CodeBuildの実行検証はできていませんが、設計段階では次の4点を整理しておきたいところです。</p>


<figure class="wp-block-table">
<table>
<thead>
<tr>
<th>確認項目</th>
<th>調査する内容</th>
</tr>
</thead>
<tbody>
<tr>
<td>ソース取得方式</td>
<td>GitLabへの通信をどのコンポーネントが実行するか</td>
</tr>
<tr>
<td>ネットワーク</td>
<td>CodeBuild側にVPC・TGW経路が必要か</td>
</tr>
<tr>
<td>TLS証明書</td>
<td>どの実行環境で証明書を信頼させる必要があるか</td>
</tr>
<tr>
<td>IAM権限</td>
<td>接続の利用に必要な権限が付与されているか</td>
</tr>
</tbody>
</table>
</figure>


<h2 class="wp-block-heading"><span id="toc16">7. AWSサポートへの問い合わせで重要なのは、設定値より前提条件</span></h2>


<p class="wp-block-paragraph">今回の問い合わせを整理する中で、改めて感じたのは、<strong>エラーメッセージだけを伝えても、問題の本質にはなかなかたどり着けない</strong>ということです。</p>


<p class="wp-block-paragraph">最初は「GitLabに接続できない」という問題でも、構成を整理すると、プライベートIP、TGW、自己署名証明書、GitLabの認可など、複数の条件が関係しています。</p>


<p class="wp-block-paragraph">そこで、問い合わせの前提として、次の情報を整理することが有効になります。</p>


<ul class="wp-block-list">
	<li>GitLab Self-ManagedがEC2上で稼働している</li>


	<li>GitLabはプライベートIPのみを使用している</li>


	<li>AWSアカウント間をTGWで接続している</li>


	<li>HTTPSには自己署名証明書を使用している</li>


	<li>CodeConnectionsのエンドポイント設定時にエラーが発生している</li>
</ul>


<p class="wp-block-paragraph">このように整理すると、単なる接続エラーではなく、どのコンポーネント間の通信に問題があるのかを議論しやすくなります。</p>


<p class="wp-block-paragraph">さらに、AWSサポートには設定方法だけでなく、設定が必要になる条件まで尋ねたいところです。</p>


<p class="wp-block-paragraph">例えば、CodeBuild側の証明書設定について疑問が残るなら、次のように質問します。</p>


<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">GitLab Self-Managedへのソース取得にCodeConnectionsを利用する場合、GitLabへのHTTPS通信はどのコンポーネントが実行するのでしょうか。CodeBuild側にVPC設定やCA証明書の登録が必要になる条件を教えてください。</p>
</blockquote>


<p class="wp-block-paragraph">これは、単に「CodeBuild側の証明書設定は必要ですか」と聞くよりも、通信経路と責任分界を明確にできる質問です。</p>


<p class="wp-block-paragraph">長年、基盤設計やシステム間連携に関わってきましたが、複数の製品やサービスが絡む問題では、個々の設定よりも、サービス間の境界に原因が潜んでいることが少なくありません。</p>


<p class="wp-block-paragraph">今回のCodeConnectionsも、そうした視点で考える必要がある事例でした。</p>


<h2 class="wp-block-heading"><span id="toc17">8. まとめ｜マネージドサービスでも基盤設計は不要にならない</span></h2>


<p class="wp-block-paragraph">今回、CodeConnectionsでGitLab Self-Managedへの閉域接続を構成する過程で、<code>Invalid host endpoint provided.</code> というエラーが問題となりました。</p>


<p class="wp-block-paragraph">AWSサポートからは、プライベートIPを使用する場合のVPC接続設定が有力な原因として示され、CodeConnectionsのAvailable表示まで到達しています。</p>


<p class="wp-block-paragraph">今回の検討から得られる教訓は、次の3つです。</p>


<p class="wp-block-paragraph"><strong>第一に、AWSサービス間の接続でも通信経路を明確にする必要があります。</strong> TGWが接続されているだけでは不十分で、ルートテーブル、セキュリティグループ、通信元の整理が欠かせません。</p>


<p class="wp-block-paragraph"><strong>第二に、ネットワークと認証は別の問題です。</strong> AWS側からGitLabへ到達できても、作業端末から認可画面へアクセスできなければ、接続のセットアップを完了できない場合があります。</p>


<p class="wp-block-paragraph"><strong>第三に、接続ステータスと実際の処理成功は区別します。</strong> CodeConnectionsがAvailableでも、CodeBuildのソース取得やビルド成功まで保証されたわけではありません。</p>


<p class="wp-block-paragraph">AWSのマネージドサービスは、インフラの構築・運用負担を減らしてくれます。しかし、複数サービスを組み合わせた際の通信経路、認証、TLS証明書、IAM権限まで自動的に設計してくれるわけではありません。</p>


<p class="wp-block-paragraph"><strong>マネージドサービスを利用することと、基盤設計が不要になることは別の話です。</strong></p>


<p class="wp-block-paragraph">今回の事例は、その基本を改めて考える機会になりました。</p>


<hr class="wp-block-separator has-alpha-channel-opacity" />

<h3 class="wp-block-heading"><span id="toc18">参考資料</span></h3>


<ul class="wp-block-list">
	<li><a href="https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-gitlab-managed.html">AWS公式｜GitLab Self-Managedへの接続作成</a></li>


	<li><a href="https://docs.aws.amazon.com/codebuild/latest/userguide/access-tokens-gitlab-overview.html">AWS公式｜GitLab access in CodeBuild</a></li>


	<li><a href="https://docs.aws.amazon.com/codebuild/latest/userguide/connections-github-app.html">AWS公式｜GitHub App connections</a></li>


	<li><a href="https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ProjectSource.html">AWS公式｜CodeBuild ProjectSource API</a></li>
</ul>

<p>&nbsp;</p>]]></content:encoded>
					
					<wfw:commentRss>https://sys-univ.com/aws/codeconnections-gitlab-self-managed-vpc-error/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ECS/FargateでDockerfileのchownが効かない｜非rootコンテナがPermission deniedになる理由</title>
		<link>https://sys-univ.com/incident/ecs-fargate-permission-denied/</link>
					<comments>https://sys-univ.com/incident/ecs-fargate-permission-denied/#respond</comments>
		
		<dc:creator><![CDATA[ナギ]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 01:18:51 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[トラブル]]></category>
		<guid isPermaLink="false">https://sys-univ.com/?p=3094</guid>

					<description><![CDATA[はじめに ECS/Fargateでコンテナを非rootユーザーとして実行したところ、ログ出力先のディレクトリでPermission deniedが発生したことがありました。 Dockerfileでは、ログ出力先のディレク [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><span style="font-size: 18px;"><strong>はじめに</strong></span></p>
<p>ECS/Fargateでコンテナを非rootユーザーとして実行したところ、ログ出力先のディレクトリで<code>Permission denied</code>が発生したことがありました。</p>
<p>Dockerfileでは、ログ出力先のディレクトリを作成し、アプリケーションを実行するユーザーへ<code>chown</code>していました。Dockerイメージだけを見ると、書き込みできるように設定されています。</p>
<p>問題が起きたのは、アプリケーションコンテナとFluent Bitコンテナでログ用のVolumeを共有する構成にしたときでした。</p>
<p>原因を調べていくと、Dockerfileの設定が常に無効になるという単純な話ではありませんでした。Dockerfile、ECSタスク定義、Volumeを個別に確認するだけではなく、<strong>それらを組み合わせた実行時の最終状態まで設計対象にできていたか</strong>という問題に行き着きました。</p>
<p>この記事では、実際に発生した事象と採用した対策を、AWS公式ドキュメントで確認できる仕様と照らし合わせて整理します。採用しなかった対策候補との違いも明確にしながら、設計段階で見落とした点と、事前のPoCで確認すべきだった内容を振り返ります。</p>

  <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">ECS/FargateでPermission deniedが発生した</a></li><li><a href="#toc2" tabindex="0">Dockerfileでchownしたのに、なぜ書き込めなかったのか</a><ol><li><a href="#toc3" tabindex="0">DockerfileのVOLUMEとcontainerPathが一致する場合</a></li><li><a href="#toc4" tabindex="0">実効ユーザーもDockerfileだけで確認しない</a></li></ol></li><li><a href="#toc5" tabindex="0">対策はchownの方法だけで考えない</a><ol><li><a href="#toc6" tabindex="0">共有Volume自体をなくせないか</a></li><li><a href="#toc7" tabindex="0">VOLUMEディレクティブを利用する方法</a></li><li><a href="#toc8" tabindex="0">補足：configuredAtLaunchはbind mountの設定ではない</a></li><li><a href="#toc9" tabindex="0">権限設定用コンテナを先行して実行する</a></li><li><a href="#toc10" tabindex="0">rootユーザーで実行する</a></li><li><a href="#toc11" tabindex="0">技術的に動く対策と、プロジェクトで採用できる対策は違う</a></li></ol></li><li><a href="#toc12" tabindex="0">なぜ設計段階で気づけなかったのか</a><ol><li><a href="#toc13" tabindex="0">「担当者が知らなかった」で終わらせない</a></li></ol></li><li><a href="#toc14" tabindex="0">事前PoCでは、ここまで確認すべきだった</a></li><li><a href="#toc15" tabindex="0">今回の事象から得た3つの学び</a></li><li><a href="#toc16" tabindex="0">参考にしたAWS公式ドキュメント</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">ECS/FargateでPermission deniedが発生した</span></h2>
<p>今回の構成を単純化すると、アプリケーションがファイルへログを書き込み、同じVolumeをマウントしたFluent Bitがそのログを読み取る構成でした。</p>
<pre><code class="language-text">Application Container
非rootユーザー
        │
        │ ログ書き込み
        ↓
    Shared Volume
        │
        │ ログ読み込み
        ↓
Fluent Bit Container
</code></pre>
<p>ECSのタスク定義では、Volumeを定義し、アプリケーションコンテナとFluent Bitコンテナの双方へマウントしていました。</p>
<p>本記事では、タスク定義でボリューム名を定義した空のデータVolumeを、AWS公式ドキュメントに合わせて<strong>bind mount</strong>と呼びます。AWS公式でも、bind mountの用途として、1つ以上のコンテナにマウントする空のデータVolumeが示されています。Fargateでは、bind mountにタスクへ割り当てられたエフェメラルストレージが利用されます。</p>
<p>詳細は、<a href="https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/bind-mounts.html">AWS公式「Amazon ECSでのバインドマウントの使用」</a>と<a href="https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/fargate-task-storage.html">AWS公式「Amazon ECS向けのFargateタスクエフェメラルストレージ」</a>で確認できます。</p>
<p>アプリケーションコンテナは非rootユーザーで動作させていました。Dockerfileでは、概念的には次のようにログ出力先を作成し、所有者を変更しています。</p>
<pre><code class="language-dockerfile">RUN mkdir -p /app/logs
RUN chown appuser:appgroup /app/logs

USER appuser
</code></pre>
<p>タスク定義側の<code>user</code>による上書きはなく、実行ユーザーはDockerfileの<code>USER</code>で指定した非rootユーザーでした。</p>
<p>このDockerイメージだけを見ると、<code>appuser</code>が<code>/app/logs</code>へ書き込めるように見えます。</p>
<p>ところがECS/Fargate上でタスクを起動すると、アプリケーションがログを書き込む際に<code>Permission denied</code>が発生しました。</p>
<h2><span id="toc2">Dockerfileでchownしたのに、なぜ書き込めなかったのか</span></h2>
<p>問題のポイントは、<strong>Dockerfileで<code>chown</code>したディレクトリと、ECS/Fargate上でアプリケーションが実際に書き込むディレクトリが、Volumeマウント後は同じものではなかったこと</strong>です。</p>
<p>Dockerイメージ内では、<code>/app/logs</code>の所有者を<code>appuser</code>へ変更していました。</p>
<pre class="wp-block-code"><code>Docker Image
    │
    └─ /app/logs
         owner = appuser</code></pre>
<p>この状態だけを見れば、<code>appuser</code>は<code>/app/logs</code>へ書き込めるように見えます。</p>
<p>ECSで同じ<code>/app/logs</code>へVolumeをマウントすると、イメージ内のディレクトリはマウントによって覆い隠されます。実行中のコンテナから見えるのは、Dockerfileで<code>chown</code>したイメージ側の<code>/app/logs</code>ではなく、<strong>Volume側の<code>/app/logs</code></strong>です。</p>
<pre class="wp-block-code"><code>Docker Image
/app/logs
owner = appuser
        │
        │ ECS Task起動
        ↓
Volumeを /app/logs へmount
        │
        ↓
イメージ側の /app/logs は隠蔽
        │
        ↓
コンテナから見える /app/logs
＝ Volume側</code></pre>
<p>Dockerfileで設定したディレクトリが削除されたわけではありません。同じパスへVolumeをマウントしたことで、イメージ側のディレクトリが実行中のコンテナから見えなくなっています。</p>
<p><strong>Dockerfileで<code>chown</code>していても、Volumeマウント後の<code>/app/logs</code>が同じ所有者・権限になるとは限りません。</strong></p>
<p>今回見落としていたのは、この<strong>「イメージ作成時の権限」と「Volumeマウント後の実効権限」の違い</strong>でした。</p>
<h3><span id="toc3">DockerfileのVOLUMEとcontainerPathが一致する場合</span></h3>
<p>ここまでだけを見ると、「VolumeをマウントするとDockerfile側の権限設定は使われない」と考えたくなります。</p>
<p>Amazon ECSには、もう一つ重要な仕様があります。</p>
<p>Dockerfileの<code>VOLUME</code>で指定した絶対パスと、タスク定義の<code>containerPath</code>が一致する場合、ECSはそのパス内のデータをデータVolumeへコピーします。</p>
<p>AWS公式ドキュメントには、非rootユーザー向けに対象ディレクトリを<code>chown</code>し、<code>USER</code>を指定した後に<code>VOLUME</code>を宣言する例も掲載されています。この説明の中では、既定のVolume権限を<code>0755</code>、所有者を<code>root</code>とし、Dockerfileでカスタマイズできることも示されています。</p>
<p>詳細は、<a href="https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/bind-mounts.html">AWS公式「Amazon ECSでのバインドマウントの使用」</a>を参照してください。</p>
<p>概念的には次のような記述です。</p>
<pre class="wp-block-code"><code>RUN mkdir -p /app/logs
RUN chown appuser:appgroup /app/logs

USER appuser
VOLUME ["/app/logs"]</code></pre>
<p>今回使用していたDockerfileには、<strong>ログ出力先を<code>VOLUME</code>として宣言する記述はありませんでした。</strong></p>
<pre class="wp-block-code"><code>Dockerfile
/app/logs を appuser に chown
        │
        ↓
ECSで同じパスへVolumeをmount
        │
        ↓
イメージ側の /app/logs は隠蔽
        │
        ↓
VOLUME宣言なし
        │
        ↓
Volumeマウント後の権限で
書き込み可否が決まる</code></pre>
<p class="PDq2pG_selectionAnchorContainer" data-start="308" data-end="485">今回の構成では、Dockerfileで<code data-start="327" data-end="334">chown</code>した<code data-start="336" data-end="347">/app/logs</code>へVolumeをマウントしたことで、イメージ側のディレクトリは隠蔽されました。また、Dockerfileに対象パスの<code data-start="405" data-end="413">VOLUME</code>宣言がなく、<code data-start="419" data-end="427">VOLUME</code>と<code data-start="428" data-end="443">containerPath</code>を一致させてイメージ側の状態をVolumeへ引き継ぐ仕組みも利用していませんでした。</p>
<p data-start="490" data-end="566">当時は、この<strong data-start="496" data-end="547">DockerfileとECS Volumeを組み合わせた後に、実行時にどのような状態になるのか</strong>を設計観点として持っていませんでした。</p>
<p data-start="571" data-end="712"><code data-start="571" data-end="579">VOLUME</code>宣言がなかったことだけで、Permission deniedの原因をすべて説明できるわけではありません。実際の書き込み可否は、Volumeマウント後のowner、group、modeと、アプリケーションの実効UID/GID、書き込み対象パスの組み合わせで決まります。</p>
<p>今回の問題で重要だったのは、<strong>Dockerfileで<code>chown</code>したという設定だけを見て書き込み可能と判断し、Volumeマウント後にどの所有者・権限になるのかを確認していなかったこと</strong>です。</p>
<p>今回の案件では<code>VOLUME</code>を利用する方法は採用していないため、ここではAWS公式仕様から確認できる対策候補の一つとして扱います。</p>
<h3 data-section-id="ouun3s" data-start="2343" data-end="2372"><span id="toc4">実効ユーザーもDockerfileだけで確認しない</span></h3>
<p data-start="2374" data-end="2434">ファイルやディレクトリの権限とあわせて確認する必要があるのが、<strong data-start="2405" data-end="2431">コンテナを実際にどのユーザーで実行しているか</strong>です。</p>
<p data-start="2436" data-end="2529">ECSでは、Dockerfileの<code data-start="2453" data-end="2459">USER</code>とは別に、タスク定義の<code data-start="2470" data-end="2476">user</code>でも実行ユーザーを指定できます。このパラメータはDockerの<code data-start="2507" data-end="2513">User</code>や<code data-start="2514" data-end="2522">--user</code>に対応します。</p>
<p data-start="2531" data-end="2591">今回のタスク定義では<code data-start="2541" data-end="2547">user</code>を指定しておらず、Dockerfileの<code data-start="2567" data-end="2573">USER</code>を上書きする設定はありませんでした。</p>
<p data-start="2593" data-end="2652">設計レビューで確認すべきなのは、「Dockerfileに<code data-start="2621" data-end="2635">USER appuser</code>と書いてある」ことではありません。</p>
<p data-start="2654" data-end="2731"><strong data-start="2654" data-end="2717">ECS上で最終的にどのUID/GIDでプロセスが動き、そのユーザーがVolumeマウント後のパスへ必要な操作をできるか</strong>まで確認する必要があります。</p>
<p data-start="2733" data-end="2814">Volumeの権限と同じく、Dockerfileやタスク定義を個別に見るだけでは不十分です。設計対象にすべきなのは、それらを組み合わせた後の実行時の最終状態です。</p>
<p data-start="2816" data-end="2977"><code data-start="2816" data-end="2822">user</code>パラメータの仕様は、<a class="decorated-link" href="https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/task_definition_parameters.html" target="_new" data-start="2832" data-end="2969">AWS公式「FargateでのAmazon ECSタスク定義パラメータ」</a>で確認できます。</p>
<h2><span id="toc5">対策はchownの方法だけで考えない</span></h2>
<p>Permission deniedが発生すると、<code>chmod</code>や<code>chown</code>の方法から考えたくなります。</p>
<p>今回の構成を設計の観点から見直すと、その前に確認すべきことがあります。</p>
<p><strong>アプリケーションコンテナとFluent Bitの間に、そもそも共有Volumeが必要なのか。</strong></p>
<p>権限をどう合わせるかだけではなく、権限調整が必要になる境界そのものをなくせないかを最初に検討します。</p>
<h3><span id="toc6">共有Volume自体をなくせないか</span></h3>
<p>今回の構成は次のようになっていました。</p>
<pre><code class="language-text">Application
    ↓ file
Shared Volume
    ↓ file
Fluent Bit
</code></pre>
<p>ログ出力要件が許せば、アプリケーションのログをファイルへ出力せず、<code>awsfirelens</code>ログドライバ経由でFluent Bitへ渡す構成も考えられます。</p>
<p>FireLensでは、アプリケーションコンテナに<code>awsfirelens</code>ログドライバを設定し、Fluent BitまたはFluentdをログルーターとして利用できます。</p>
<p>詳細は、<a href="https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/firelens-taskdef.html">AWS公式「Amazon ECSタスク定義の例：FireLensにログをルーティングする」</a>を参照してください。</p>
<pre><code class="language-text">Application
    ↓ awsfirelens
Fluent Bit
</code></pre>
<p>この構成に変更できれば、アプリケーションとFluent Bitの間でログファイルを共有するVolumeをなくせる可能性があります。Volumeに付随するowner、group、mode、UID/GID、マウント後の権限といった設計項目も減らせます。</p>
<p>実案件でも、ログ出力方式そのものを変更して共有Volumeをなくす案を検討しました。既存のログ出力方式を変更するとAP側での改修と再テストが必要になるため、今回は共有Volumeを残したうえで権限設定方法を変更する判断としました。</p>
<p><strong>設計として上位の選択肢を検討しても、変更影響やプロジェクト条件によって採用できないことがあります。</strong></p>
<p>重要なのは、「権限エラーをどう直すか」から始めるのではなく、「その権限設計自体をなくせないか」を一度確認したうえで、案件条件に合った方法を選ぶことです。</p>
<h3><span id="toc7">VOLUMEディレクティブを利用する方法</span></h3>
<p>共有Volumeを残す場合には、前述したDockerfileの<code>VOLUME</code>と<code>containerPath</code>の仕様を利用する方法も候補になります。</p>
<p>この方法ではDockerfile、すなわちコンテナイメージそのものを変更します。ECS上の課題を解決する目的で<code>VOLUME</code>を追加しても、同じイメージを別の環境で実行した場合の挙動にも影響します。</p>
<p>今回の環境ではこの方法を追加検証していないため、AWS公式仕様から確認できる対策候補としての紹介に留めます。</p>
<h3><span id="toc8">補足：configuredAtLaunchはbind mountの設定ではない</span></h3>
<p>対策を調べる過程では、ECSのVolumeに関する情報を複数確認しました。その中で紛らわしかったのが<code>configuredAtLaunch</code>です。</p>
<p>名称からはVolumeの初期設定に使えるようにも見えますが、<code>configuredAtLaunch=true</code>は、ECSのデプロイ時にAmazon EBS Volumeを構成するための設定です。今回利用していたbind mountの権限を変更するためのオプションではありません。</p>
<p><a href="https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/configure-ebs-volume.html">AWS公式「Amazon ECSのデプロイ時にAmazon EBSボリューム設定を指定する」</a>でも、<code>configuredAtLaunch</code>を<code>true</code>に設定したタスク定義に対して、デプロイ時にAmazon EBS Volumeを構成する仕組みとして説明されています。</p>
<p><strong>同じ「Volume」という言葉で扱われていても、bind mount、EBS、EFSでは仕様も設定方法も異なります。目にした情報をそのまま設計判断に使うのではなく、自分が利用しているVolume方式を特定したうえで、該当する公式ドキュメントを確認する必要があります。</strong></p>
<h3><span id="toc9">権限設定用コンテナを先行して実行する</span></h3>
<p>別の方法として、Volumeの所有者や権限を設定するコンテナを先に実行し、正常終了した後にアプリケーションコンテナを起動する構成があります。</p>
<p>ECSでは<code>dependsOn</code>でコンテナ間の起動依存関係を設定できます。<code>SUCCESS</code>を指定すると、依存先コンテナが終了コード0で完了するまで後続コンテナを開始しません。<code>SUCCESS</code>と<code>COMPLETE</code>の依存先にはessential containerを指定できません。</p>
<p>詳細は、<a href="https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/task_definition_parameters.html">AWS公式「FargateでのAmazon ECSタスク定義パラメータ」</a>を参照してください。</p>
<pre><code class="language-text">Permission Setting Container
        │
        │ Volumeの所有者・権限を設定
        │ exit 0
        ↓
Application Container
        ↓
Fluent Bit Container
</code></pre>
<p class="PDq2pG_selectionAnchorContainer" data-start="131" data-end="212">権限設定用コンテナには、共有Volumeへ必要な所有者・権限を設定できる権限を持たせます。アプリケーションコンテナ自体は従来どおり非rootユーザーで実行します。</p>
<p data-start="217" data-end="269">この方法であれば、アプリケーションイメージを変更せず、タスク定義を中心とした基盤側の変更で対応できます。</p>
<p data-start="274" data-end="446"><strong data-start="274" data-end="446">なお、権限設定用コンテナでVolumeの初期権限を整えても、その後アプリケーションが生成するファイルを別コンテナから読めるとは限りません。TomcatとFluent BitでVolumeを共有した際に実際に発生したPermission deniedと、UID/GID・setgid・umaskを含む権限設計について、続編で整理しました。</strong></p>

<a href="https://sys-univ.com/dev/ecs-fargate-fluent-bit-permission-denied/" title="Fluent BitがPermission deniedでログを読めない｜ECS/Fargate共有VolumeのUID/GID設計" 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/c93b625ff36561072a4ad9fa2e52e6a8-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/08/c93b625ff36561072a4ad9fa2e52e6a8-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/08/c93b625ff36561072a4ad9fa2e52e6a8-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/08/c93b625ff36561072a4ad9fa2e52e6a8-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/08/c93b625ff36561072a4ad9fa2e52e6a8-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Fluent BitがPermission deniedでログを読めない｜ECS/Fargate共有VolumeのUID/GID設計</div><div class="blogcard-snippet internal-blogcard-snippet">ECS/FargateでTomcatとFluent Bitが共有Volumeを利用する構成でPermission deniedが発生。Fluent BitのUID/GID、setgid、umask、read-onlyマウントなど、Dockerコンテナ間でログを共有する際の権限設計を実例から解説します。</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.24</div></div></div></div></a>
<h3><span id="toc10">rootユーザーで実行する</span></h3>
<p>アプリケーションコンテナ自体をrootユーザーで実行する方法もあります。</p>
<p>権限問題は回避しやすくなりますが、非root実行を前提としていたセキュリティ設計との整合を確認する必要があります。動作するかどうかだけではなく、なぜ非rootユーザーで実行する設計にしていたのかまで戻って判断する必要があります。</p>
<h3><span id="toc11">技術的に動く対策と、プロジェクトで採用できる対策は違う</span></h3>
<p>今回検討した方法を、変更対象まで含めて整理すると次のようになります。</p>
<table>
<thead>
<tr>
<th>対策</th>
<th>主な変更対象</th>
<th>実務上の論点</th>
</tr>
</thead>
<tbody>
<tr>
<td>共有Volumeをなくす</td>
<td>アプリケーション／ログ出力設定／タスク定義</td>
<td>既存のログ出力方式を変更できるか</td>
</tr>
<tr>
<td><code>VOLUME</code>を利用</td>
<td>Dockerfile／コンテナイメージ</td>
<td>AP側成果物の変更と再テストが必要</td>
</tr>
<tr>
<td>権限設定用コンテナ</td>
<td>タスク定義</td>
<td>基盤側で完結しやすいが構成要素が増える</td>
</tr>
<tr>
<td>rootで実行</td>
<td>実行ユーザー／セキュリティ設計</td>
<td>非root要件との整合が必要</td>
</tr>
</tbody>
</table>
<p><strong>最終的には、権限設定用コンテナを先行して実行する構成を採用しました。</strong></p>
<p>アプリケーション側を修正したりログ出力仕様を変更したりする場合、AP側での改修とテストが必要になります。権限設定用コンテナの追加であれば、タスク定義を管理する基盤側で変更を完結でき、既存のコンテナイメージにも影響を与えません。</p>
<p><strong>変更範囲を基盤側に限定できることから、この方式を採用しました。</strong> この構成への変更後は、非rootユーザーで実行するアプリケーションからログを正常に書き込めるようになり、Permission deniedは解消しました。</p>
<p>技術的に成立する対策と、プロジェクトとして採用しやすい対策は同じとは限りません。変更主体、責任分界、変更影響、追加試験の範囲まで含めて対策を決める必要があります。</p>
<h2><span id="toc12">なぜ設計段階で気づけなかったのか</span></h2>
<p>今回の問題で重要なのは、ECSのVolume仕様を知っていたかどうかだけではありません。</p>
<p>結果として、Dockerfileで設定した権限と、ECSがVolumeをマウントした後の実効権限との接続部分を、設計時に十分確認できていませんでした。</p>
<p>Dockerfileだけを見れば、確認対象は次の範囲です。</p>
<pre><code class="language-text">Dockerfile
 ├ mkdir
 ├ chown
 └ USER
</code></pre>
<p>実際には、その後ろまで設計する必要があります。</p>
<pre><code class="language-text">Docker Image
      ↓
ECS Task Definition
      ↓
Volume生成
      ↓
containerPathへmount
      ↓
実効UID/GID
      ↓
Applicationからwrite
      ↓
Fluent Bitからread
</code></pre>
<p><strong>「Dockerfileで対象ディレクトリをchownしたこと」と、「Volumeをマウントした実行環境でアプリケーションユーザーが書き込めること」は同じではありません。</strong></p>
<p>前者は設定内容です。設計で最終的に保証したいのは後者です。</p>
<h3><span id="toc13">「担当者が知らなかった」で終わらせない</span></h3>
<p>今回のECS Volumeの仕様を知っている担当者であれば、設計段階で問題に気づけた可能性があります。</p>
<p>原因を「担当者が仕様を知らなかった」で終わらせても、次の案件で同じ問題を防ぐ仕組みにはなりません。</p>
<p>クラウドでは、自分たちがDockerfileや設定ファイルへ直接記述するものだけでなく、クラウドサービスが実行時に生成、マウント、変更するものがあります。必要なのは、それらを含めた<strong>実行時の最終状態を設計する観点</strong>です。</p>
<p>今回であれば、設計レビューでは次のような項目を確認すべきでした。</p>
<table>
<thead>
<tr>
<th>設計項目</th>
<th>確認する内容</th>
</tr>
</thead>
<tbody>
<tr>
<td>Volume方式</td>
<td>bind mount、EBS、EFSなど、どの方式を利用するか</td>
</tr>
<tr>
<td>Volume生成</td>
<td>誰が、いつ生成するか</td>
</tr>
<tr>
<td><code>containerPath</code></td>
<td>どのパスへマウントするか</td>
</tr>
<tr>
<td>Dockerfile <code>VOLUME</code></td>
<td>定義の有無と<code>containerPath</code>との関係</td>
</tr>
<tr>
<td>実効UID/GID</td>
<td>Dockerfileの<code>USER</code>、タスク定義の<code>user</code>を踏まえて誰が実行するか</td>
</tr>
<tr>
<td>Application側権限</td>
<td>誰が、どのパスへwriteするか</td>
</tr>
<tr>
<td>Fluent Bit側権限</td>
<td>誰が、どのパスをreadするか</td>
</tr>
<tr>
<td>owner/group/mode</td>
<td>Volumeマウント後にどうなるべきか</td>
</tr>
<tr>
<td>起動順</td>
<td>権限設定が必要な場合、いつ実施するか</td>
</tr>
<tr>
<td>Volumeライフサイクル</td>
<td>タスク停止・再作成時にデータや設定がどうなるか</td>
</tr>
<tr>
<td>変更主体</td>
<td>Dockerfile、タスク定義、ログ設定の誰が変更するか</td>
</tr>
</tbody>
</table>
<p>Fargateで利用するbind mountはタスクのエフェメラルストレージ上にあり、bind mountを使用するすべてのコンテナが停止するとデータは削除されます。今回のようなFargateタスクでは、タスク停止時のライフサイクルまで含めて設計する必要があります。</p>
<p>詳細は、<a href="https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/bind-mounts.html">AWS公式「Amazon ECSでのバインドマウントの使用」</a>を参照してください。</p>
<p><strong>設計書に「Dockerfileでchownする」と書くだけでは足りません。Volumeをマウントした後に、どのUID/GIDが、どのパスへ、どの権限でアクセスできるのかを定義する必要があります。</strong></p>
<p>ここまで書いて、初めて実行時の権限設計になります。</p>
<p>この考え方は、ECSだけに限りません。基本設計で決めた方式を、構築・テストできる状態までどう落とすかについては、次の記事で詳しく整理しています。</p>
<ul>
<li><a href="https://sys-univ.com/dev/basic-design-infrastructure/">基本設計で決めること｜画面設計だけでは終わらない基盤SEの設計工程</a></li>
<li><a href="https://sys-univ.com/dev/detailed-design-overview/">【前編】詳細設計で決めること｜基本設計を「構築・テスト・運用できる形」に落とし込む工程</a></li>
</ul>
<h2><span id="toc14">事前PoCでは、ここまで確認すべきだった</span></h2>
<p>今回の問題は、設計段階のPoCで発見できた可能性があります。</p>
<p>ECSでコンテナが起動することだけを確認するPoCでは足りません。</p>
<p>今回のPermission deniedを検出するだけなら、大掛かりな試験は必要ありませんでした。本番と同じ非rootユーザーとVolume構成でタスクを起動し、次の範囲を確認すれば、書き込み権限の問題を設計段階で検出できた可能性があります。</p>
<pre><code class="language-text">ECS Task起動
      ↓
実効UID/GIDを確認
      ↓
Volume mount後のowner/group/modeを確認
      ↓
Applicationからファイル作成
      ↓
Applicationからディレクトリ作成
</code></pre>
<p>これが、今回の問題を発見するために必要だった<strong>最低限のPoC</strong>です。</p>
<p>ログ機構全体の成立性まで確認するのであれば、その先にFluent Bitからの読み取り、ログ転送、Task再作成後の動作まで確認します。</p>
<pre><code class="language-text">Applicationからwrite
      ↓
Fluent Bitからread
      ↓
ログ転送
      ↓
Task再作成後も成立するか
</code></pre>
<p>設計レビュー表とPoCで似た項目を確認するのには理由があります。</p>
<p><strong>設計では、実行時に成立すべき状態を定義する。PoCでは、その状態が実際の環境で成立することを確認する。</strong></p>
<p>今回なら、設計では「非rootのアプリケーションユーザーがVolumeマウント後のログ出力先へwriteできる」と定義します。PoCでは、本番相当のユーザーとVolume構成で実際にファイルを作成して確認します。</p>
<p>PoCは「AWSのサービスが使えるか」を試すだけの工程ではありません。</p>
<p><strong>本番と同じ境界を通したときに、設計したシステムが成立するかを確認する工程です。</strong></p>
<p>クラウドリフトでも、AWSサービス単体の機能確認だけを行い、オンプレミスからクラウドへ移した後の実際の処理や運用まで通さなければ、問題が後工程で表面化します。今回のVolume権限も規模は小さいものの、構造は同じでした。</p>
<p>クラウドリフトでPoCに何を含めるべきかは、次の記事で詳しく整理しています。</p>
<ul style="list-style-type: disc;">
<li><a href="https://sys-univ.com/dev/cloudlift/">クラウドリフトの失敗は構築前に始まっている｜PoC不足が手戻り・コスト超過・納期遅延を招く理由</a></li>
<li><a href="https://sys-univ.com/dev/cloudlift-poc-risk-1/">クラウドリフトPoCで「動いた」は確認できた。しかし業務では使えなかった｜10の設計リスク① 可用性・性能・ストレージ・バックアップ・監視</a></li>
</ul>
<h2><span id="toc15">今回の事象から得た3つの学び</span></h2>
<p>一つ目は、<strong>Dockerfileは設定であって、実行時の最終状態ではない</strong>ことです。</p>
<p>Dockerfileで<code>USER</code>や<code>chown</code>を指定しても、それだけでECS上の実効ユーザーやVolumeマウント後の権限は確定しません。設計で確認するべきなのは、各設定をECS上で組み合わせた後の最終状態です。</p>
<p>二つ目は、<strong>設計で抜けやすいのはコンポーネント単体ではなく、その接続部分である</strong>ことです。</p>
<p>Dockerfileの設定もECSのVolume定義も、それぞれ単体で存在しています。今回確認できていなかったのは、DockerイメージとECS Volumeを接続した後に、どのユーザーがどのファイルシステムへアクセスするのかという実行時の状態でした。</p>
<p>三つ目は、<strong>PoCでは本番と同じ境界を通す必要がある</strong>ことです。</p>
<p>コンテナが起動したことだけでは、システムとして成立したことにはなりません。本番と同じUID/GID、Volume、マウントポイント、サイドカーを含めて実際の処理を通し、設計した状態が成立することを確認する必要があります。</p>
<p>今回の事象を振り返ると、</p>
<p><strong>「Dockerfileでchownした」ではなく、「Volumeをマウントした後に、必要なユーザーが必要な操作をできる」まで確認して初めて権限設計は完了する</strong></p>
<p>ということになります。</p>
<p>クラウドでは、自分たちが直接構築・設定したものだけを見るのでは足りません。クラウドサービスが実行時に生成、変更、接続するものまで含めて最終状態を設計し、不確実性が残る境界は事前PoCで実際に通す。</p>
<p>今回のPermission deniedは小さな権限エラーでしたが、クラウド設計とPoCで何を確認するべきかを改めて考えるきっかけになりました。</p>
<h2><span id="toc16">参考にしたAWS公式ドキュメント</span></h2>
<ul>
<li>
<p><a href="https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/bind-mounts.html">Amazon ECSでのバインドマウントの使用</a></p>
</li>
<li>
<p><a href="https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/fargate-task-storage.html">Amazon ECS向けのFargateタスクエフェメラルストレージ</a></p>
</li>
<li>
<p><a href="https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/task_definition_parameters.html">FargateでのAmazon ECSタスク定義パラメータ</a></p>
</li>
<li>
<p><a href="https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/configure-ebs-volume.html">Amazon ECSのデプロイ時にAmazon EBSボリューム設定を指定する</a></p>
</li>
<li>
<p><a href="https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/firelens-taskdef.html">Amazon ECSタスク定義の例：FireLensにログをルーティングする</a></p>
</li>
</ul>
<hr />
<p><span style="font-size: 18px;"><strong>関連記事</strong></span></p>
<p class="PDq2pG_selectionAnchorContainer" data-start="49" data-end="112">ECS/Fargateの権限問題を、設計レビューで何を確認するかという観点を、運用設計や要件定義の工程まで広げて確認したい方は、以下の記事も参考にしてください。</p>
<ul data-start="114" data-end="193">
<li data-section-id="hata0n" data-start="114" data-end="193"><strong>運用設計とは？運用設計書の目次サンプルと項目一覧｜基盤SE視点</strong><br />
ログ、監視、ジョブ、バックアップ、障害対応など、本番運用を成立させるために設計しておくべき項目を整理しています。</li>
</ul>

<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 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 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>
<ul data-start="231" data-end="312">
<li data-section-id="x4krsd" data-start="231" data-end="312"><strong>要件定義とは何をする工程か｜RFP・見積前提から認識差を潰す実務</strong><br />
RFPや提案内容を前提に、スコープや責任分界を確定し、設計・構築・テストできる水準まで具体化する実務を解説しています。</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 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>
]]></content:encoded>
					
					<wfw:commentRss>https://sys-univ.com/incident/ecs-fargate-permission-denied/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 loading="lazy" 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>【AWS】別AZで起動したWindowsが通信不能に｜原因はVPCではなく「OS内のルート情報」だった</title>
		<link>https://sys-univ.com/incident/addroute/</link>
					<comments>https://sys-univ.com/incident/addroute/#respond</comments>
		
		<dc:creator><![CDATA[ナギ]]></dc:creator>
		<pubDate>Sun, 12 Jul 2026 03:00:28 +0000</pubDate>
				<category><![CDATA[トラブル]]></category>
		<category><![CDATA[AWS]]></category>
		<guid isPermaLink="false">https://sys-univ.com/?p=1493</guid>

					<description><![CDATA[はじめに セキュリティグループも見た。 NACLも見た。 VPCルートテーブルも見た。 それでも通信できない。 そんなとき、原因はAWSコンソールの中ではなく、OSの中にあるかもしれません。 今回扱うのは、EC2を別AZ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p id="520c1fbf-2ede-41b1-994c-13ebd9a6950e"><strong>はじめに</strong></p>
<p>セキュリティグループも見た。<br />
NACLも見た。<br />
VPCルートテーブルも見た。</p>
<p id="bdf24a40-c78c-4282-a5dd-f17d3711dca3">それでも通信できない。</p>
<p id="54740cae-ca78-4bfe-a5b6-705cfb958d64">そんなとき、原因はAWSコンソールの中ではなく、OSの中にあるかもしれません。</p>
<p id="e309d140-47b7-4e48-9bfa-f53bd87488d2">今回扱うのは、EC2を別AZで起動した際に、Windows ServerのOS内ルート情報が更新されず、通信できなくなった事象です。</p>
<p id="2443481b-b38c-4cd5-9218-cd644f43373a">この記事では、単なるルート設定の話ではなく、EC2Launch、User Data、AMI再利用、DR設計で見落としやすい「起動後のOS状態」について整理します。</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">EC2は起動した。でも通信できない</a></li><li><a href="#toc2" tabindex="0">AZ移動後、Windowsサーバが通信できない</a></li><li><a href="#toc3" tabindex="0">原因はEC2Launchの起動時処理だった</a></li><li><a href="#toc4" tabindex="0">対策は「OS起動ごとに必要な処理を実行させる」こと</a></li><li><a href="#toc5" tabindex="0">AWS側の設定だけ見ても足りない</a></li><li><a href="#toc6" tabindex="0">これはルーティングだけの話ではない</a></li><li><a href="#toc7" tabindex="0">なぜクラウドはOS設定を書き換えるのか</a></li><li><a href="#toc8" tabindex="0">DR設計では「起動できる」だけでは足りない</a></li><li><a href="#toc9" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 id="c8671a81-fd99-4eed-8b0b-16236561ffb3" tabindex="-1"><span id="toc1">EC2は起動した。でも通信できない</span></h2>
<p id="ac9bf7a0-d792-4e16-b53c-53a92e61f89b">EC2インスタンスを別AZで起動した。</p>
<p id="56009cfd-145a-4a49-a20c-ec797d51d345">インスタンスの起動は成功している。<br />
OSも上がっている。<br />
しかし、通信できない。</p>
<p id="33d27af2-9d34-4b3e-9f5d-007a1e39d3ed">このような事象が起きると、まずAWS側の設定を疑うと思います。</p>
<p id="f122f626-784b-427d-b739-6aa4455103b4">セキュリティグループがおかしいのか。<br />
NACLで止められているのか。<br />
サブネットのルートテーブルが間違っているのか。</p>
<p id="6fd185d9-7227-4a8d-b05b-3524bf620ee8">もちろん、それらは確認すべきです。</p>
<p id="97be70f4-ab23-4f38-b041-1e5864d48c7c">しかし、今回の原因はそこではありませんでした。</p>
<p id="7128f477-a6cd-4887-831f-b67500912c9c">問題は、Windows OS内のルーティング情報が、移動先AZに合わせて更新されていなかったことでした。</p>
<h2 id="a3a5eaa4-c886-4635-bde5-7da292d728fd" tabindex="-1"><span id="toc2">AZ移動後、Windowsサーバが通信できない</span></h2>
<p id="8be28339-3a1a-4d0a-9219-76da3f8698d7">今回の事象は、AZ障害時の切替を想定した環境で発生しました。</p>
<p id="59bb9556-58f5-43f8-88c8-322329457d7e">通常時は、あるAZでWindows ServerのEC2インスタンスを稼働させています。</p>
<p id="da117454-26d7-4584-bed8-181589631070">障害時には、別AZでインスタンスを起動し、業務を継続する想定でした。</p>
<p id="99a6c266-c60f-4a74-b71f-f4ec02836cc9">構成としては、クラウドではよくある考え方です。</p>
<figure id="c4b2b1e1-5f67-43f6-bc8a-0236391e1678">
<div style="width: 630px" class="wp-caption aligncenter"><a href="https://assets.st-note.com/img/1780473466-Rbf2paQvm8dgSjYeAcN19LlP.png?width=2000&amp;height=2000&amp;fit=bounds&amp;quality=85" aria-label="画像を拡大表示"><img loading="lazy" decoding="async" class="is-slide" src="https://assets.st-note.com/img/1780473466-Rbf2paQvm8dgSjYeAcN19LlP.png?width=1200" alt="画像" width="620" height="439" data-modal="true" /></a><p class="wp-caption-text">図　別AZでEC2を起動できても、起動後に通信できるとは限らない</p></div><br />
</figure>
<p id="c1be95ca-8ac6-4547-b9ff-57afc1258861">ただし、この構成で注意すべきなのは、「別AZでEC2が起動できること」と「起動後に業務通信が成立すること」は別問題だという点です。</p>
<p id="f2598e8d-5c12-42cd-88f0-be155b8b78ff">今回も、インスタンスの起動自体は成功していました。</p>
<p id="695718a0-cbf9-4a6e-b4eb-866039f64326">OSも起動していました。</p>
<p id="f8eacf54-fb85-415b-a364-3dbabf6d0731">ところが、正常なネットワーク通信ができませんでした。</p>
<p id="d3d10523-d178-4f61-bfa1-e114d517222b">AWS側の設定だけを見れば、サブネット、セキュリティグループ、NACL、VPCルートテーブルを疑いたくなります。</p>
<p id="1df1b1ab-d696-4ef8-a1a8-acb0c2d8ea39">しかし、調査していくと、問題はWindows OS内部のルーティング情報にありました。</p>
<p id="66ba10a6-bae5-4343-ae15-8c486fa08344">移動先AZで必要となるルート情報が、OS起動時に追加されていなかったのです。</p>
<p id="dfc6dca6-adf2-4a12-9188-a28a1c22db3d">ここで重要なのは、VPCのルートテーブルではなく、Windows OS内のルート情報だという点です。</p>
<p id="33322f9d-1790-43cf-aa11-e1863b2d4044">では、なぜOS内にルート情報が必要になるのでしょうか。</p>
<p id="8c305441-a343-4c47-8ae7-007810946f97">たとえば、次のような構成を考えてみます。</p>
<p id="4cdbe14f-e1d8-4b46-bd7e-6fbd6f755d0c">通常の業務通信は、デフォルトゲートウェイから出す。<br />
一方で、監視サーバ向けのセグメント 172.16.10.0/24 には、2枚目のNIC、つまり別ENI側の経路を使って通信させる。</p>
<p id="98542b5a-80a3-47db-9711-5d897318ef13">この場合、Windows OS内には、</p>
<div class="code-block-container">
<pre id="46d69c23-cf13-40a2-8ebb-c072fbf2aee7" data-name="preCode"><code class="hljs" data-name="code">172.16.10.0/24 は、2枚目のNIC側の経路へ向ける
</code></pre>
<div class="a-button__inner" data-v-00506f85="">というスタティックルートが必要になります。</div>
</div>
<p id="558bd618-473e-4872-b4f1-c98941fdd35e">VPCルートテーブルが正しくても、Windows OS内にこのルートがなければ、監視サーバ向けの通信は期待した経路に流れません。</p>
<p id="d28e64a9-5ed9-4074-811c-634190aecfa4">EC2はクラウド上の仮想サーバです。</p>
<p id="6420f64d-4848-4fcc-b51d-885a1590558c">しかし、サーバである以上、OSの中にもネットワーク設定があります。</p>
<p id="287de988-c449-45bd-933f-f4daa1edf4b4">クラウド側の設定だけでは、通信は完結しません。</p>
<p id="714591fe-82e4-43d5-a195-bcbebdccdcce">さらに、別AZで起動すると、通常は起動先のサブネットも変わります。</p>
<p id="c67abc63-67e0-435e-b423-e1903ea6e1af">サブネットやENI構成が変われば、OS内のスタティックルートで前提にしていたネクストホップ（次に経由するルーターやゲートウェイのIPアドレス）　　やインターフェースが、移動先の環境と合わなくなることがあります。</p>
<p id="2e61561a-0f65-42b6-b5b9-713341bd8895">しかし、AMIを取得した時点のOS内ルート情報には、旧環境を前提にした経路が残っている場合があります。</p>
<p id="b24f9cda-53c0-47b5-8c77-eb1426745f06">そのまま別AZで起動すると、ルートのエントリは存在しているのに、実際には期待した経路へ到達できない。</p>
<p id="6c8da315-1f88-4c00-b62e-8e52f9d0880a">これが、</p>
<p id="de020489-a57e-4e8b-849d-4db0decf00a5">「設定した覚えはあるのに通信できない」</p>
<p id="04d9981e-06be-48eb-9e9c-eba36d62f716">という事象の正体です。</p>
<h2 id="99877098-61b6-496c-848d-5dd548e51304" tabindex="-1"><span id="toc3">原因はEC2Launchの起動時処理だった</span></h2>
<p id="b48b74a5-65a3-4e18-9b13-bda3220b0a70">原因は、Windows Serverの起動時に動く初期化処理でした。</p>
<p id="18317afc-79f3-4f82-a242-aed5963f82af">Windows Server 2012 R2以前では、EC2Configというサービスが使われていました。</p>
<p id="ac3131f8-dfdc-4399-a5dd-b3c6834e78d7">一方、Windows Server 2016 / 2019では、EC2Launch v1が使われる構成があります。</p>
<p id="8d0a940b-bc2d-4b5d-a36f-27b49ffb694b">ここで見落としやすいのは、</p>
<p id="48da3542-dbca-4370-9abe-edd7ecdc348a">「Windows Serverなら、起動時に毎回同じ初期化処理が走る」</p>
<p id="858ea04d-9c9a-43ba-9a03-e9bc1e26eca1">とは限らないことです。</p>
<p id="4c1c9119-37e9-4b70-8d94-a8cb3f4e45f8">今回のポイントはここです。</p>
<p id="041b0076-981e-4bad-9489-1765f91126a6">AMIを取得する前のインスタンスで、すでに初回起動時の処理が終わっている。<br />
その状態をAMIとして固める。<br />
そのAMIから別AZで起動する。<br />
しかし、OSや初期化エージェントの状態としては、必要な処理が「初回起動時のみ実行済み」と扱われる。<br />
その結果、別AZで起動したときに、ルート追加処理が走らない。</p>
<p id="41cc4ac3-908f-4b8b-8fb7-18b291af7f98">このような流れになると、EC2自体は起動しているのに、OS内のルート情報が移動先AZに合わないまま残ります。</p>
<p id="290b3c4f-ad31-4814-be17-76c2d6054a39">その結果、サーバは起動したのに通信できない、という状態になります。</p>
<p id="41d6073d-d6ec-47c3-81a0-db5ec5d68053">若手SEがここで学ぶべきなのは、OSの設定そのものだけではありません。</p>
<p id="0db4176e-26e0-42cc-a8c0-ea7c85ded38a">「その設定は、いつ、どの仕組みによって入るのか」</p>
<p id="89352f38-55e4-4543-9e66-648f12fbfa74">を見る必要があるということです。</p>
<p id="46863647-a47d-4a45-b7a0-99eb63d5563a"><strong>EC2Config、EC2Launch v1、EC2Launch v2をざっくり押さえる</strong></p>
<p id="c6e08fd5-bcb1-42c3-b0f4-69a1e9e4bb19">細かい仕様をすべて暗記する必要はありません。</p>
<p id="618b2056-2e7a-4003-8d36-db5d1f9e9707">ただ、Windows EC2の初期化エージェントには世代差があることは押さえておくべきです。</p>
<div class="code-block-container">
<pre id="215f7c23-ee25-42a0-b706-21d6c14f0329" data-name="preCode"><code class="hljs" data-name="code">Windows Server 2012 R2以前
  → EC2Config

Windows Server 2016 / 2019の一部AMI
  → EC2Launch v1

Windows Server 2022 / 2025、
一部のWindows Server 2016 / 2019 AMI
  → EC2Launch v2
</code></pre>
<div class="a-button__inner" data-v-00506f85="">現在は、EC2Launch v2への移行が進んでいます。</div>
</div>
<p id="0cbdd46c-2d54-4c1c-ad7b-25048e174389">EC2Launch v2では、「どのタスクを、どのステージで、どの頻度で実行するか」を管理する考え方になります。</p>
<p id="56e59873-f8b1-4f9e-9428-6c2b298e2a85">見るべきポイントは、バージョン名そのものではありません。</p>
<p id="8916d201-98b3-4ee3-84a0-3fcde6a88e2b">実務では、以下を確認します。</p>
<div class="code-block-container">
<pre id="4bbbaade-a532-4ed3-b45d-9601e4422c4f" data-name="preCode"><code class="hljs" data-name="code">・対象OSは何か
・EC2Config、EC2Launch v1、EC2Launch v2のどれか
・User Dataは初回だけか、毎回か
・起動時タスクは有効か
・タスクの実行頻度は once か always か
・初期化処理のログにエラーは出ていないか
</code></pre>
<div class="a-button__inner" data-v-00506f85="">特にEC2Launch v2では、User Dataもタスクとして扱われるため、実行頻度が once なのか always なのかを確認する必要があります。</div>
</div>
<p id="2434891b-d0f2-4600-897d-a014256aabb0">ここを確認しないままDR設計や移行設計を進めると、机上では成立しているのに、切替時に通信できないサーバが立ち上がることがあります。</p>
<p id="48dd7e54-4fbf-4684-a2c2-b8a735faddc2">なお、EC2Launch v2には agent-config.yml などの設定ファイルがありますが、この記事では詳細な設定手順までは踏み込みません。</p>
<p id="9236ab5f-5d3b-4392-b644-d9a4dd5b615e">ここで重要なのは、ファイル名を暗記することではなく、起動時に実行されるタスクと実行頻度を確認する、という考え方です。</p>
<p id="5e6fb7ed-ef69-4bb7-8d94-1a669b884a22"><strong>なぜ永続ルートではなく、起動ごとの処理なのか</strong></p>
<p id="13927e36-ea3c-4e62-a312-d57257a46815">ここで、こう思う人もいるかもしれません。</p>
<p id="3666f2cf-9f9e-4b60-b988-7b15a9961709">「Windowsなら route add -p で永続ルートにすればよいのでは？」</p>
<p id="50f1ad2d-7685-4627-b4dc-4491a3121ad9">たしかに、固定的な経路であれば、それで済む場合もあります。</p>
<p id="09e30b34-392f-4089-854c-8e0a56a90a7f">route add -p は、Windowsで再起動後も残るルートを登録する方法です。</p>
<p id="c1bc12c6-6759-4387-abd1-f8ece513f74f">しかし、クラウド移行やAZ切替では、単純な永続ルートだけでは不十分な場合があります。</p>
<p id="b16c09d2-221c-457a-b387-e34f7e44bcc1">なぜなら、起動先のAZ、サブネット、ENI構成、ゲートウェイ、経路設計によって、追加すべきルートが変わることがあるからです。</p>
<p id="672a0c0f-57b1-4f93-8326-28f5d4815a21">AMIに固定ルートを焼き込んでしまうと、元のAZでは正しくても、別AZでは古い経路を引きずる可能性があります。</p>
<p id="defa0de7-9de4-4b96-b717-63719bece69d">たとえば、元の環境では `10.0.1.1` 側を通る前提でOS内にルートを持っていたとします。</p>
<p id="2f1e7c26-126f-41ab-b46d-65fd68a70832">しかし、別AZで起動した後は、サブネットやENI構成が変わり、`10.0.2.1` 側を通すべき構成になっているかもしれません。</p>
<p id="f6adfcbc-97ec-40c2-a19c-850f7dd3340a">このとき、OS内に旧環境のルートが残ったままだと、設定は存在しているのに、移動先環境では正しい経路に通信が流れません。</p>
<p id="c0f012db-e45f-4526-a8e7-84fc922b3805">一方、起動ごとのスクリプトでルートを追加する方式なら、起動先の環境に合わせて必要なルートを入れ直す設計にできます。</p>
<p id="fdfd37e4-556b-491d-9966-08f4b296a18b">もちろん、その分だけスクリプト設計は慎重に行う必要があります。</p>
<p id="272f33d3-2e68-4fcd-a812-c24db7c26af6">特に重要なのが、冪等性です。</p>
<p id="c66f034f-4e56-426a-9401-23e0235104a5">冪等性とは<strong>「同じ処理を何度実行しても、結果が壊れず同じ状態に収まる性質のこと」</strong>です。</p>
<p id="83472d99-91b3-472a-b240-2ea13f788f0d">起動のたびに実行される処理は、何度実行しても壊れないように作る必要があります。</p>
<p id="4c7ca025-bd64-4f21-bcc9-fd6f6cd9f7eb">たとえば、同じルートを毎回追加しようとしてエラーになる。<br />
既存設定を無条件で上書きしてしまう。<br />
途中で失敗したときに中途半端な状態が残る。</p>
<p id="595cc8a9-9868-46e0-bb64-254f2601bf48">こうした作りになっていると、初期化処理そのものが新しい障害原因になります。</p>
<h2 id="ffb4b76d-d9d7-4cd8-ac35-4ea4923847d2" tabindex="-1"><span id="toc4">対策は「OS起動ごとに必要な処理を実行させる」こと</span></h2>
<p id="b99140a8-5071-4048-ba68-94bf2247b63a">今回の対策は、OS起動ごとに必要なルート追加処理が実行されるようにすることでした。</p>
<p id="d9074ce8-8323-4a49-98dc-1ddfdc458a6d">EC2Launch v1の場合、単に「起動すれば自動で全部整う」と考えるのではなく、起動時に必要な処理が実行される状態になっているかを確認する必要があります。</p>
<p id="2ca816d6-31b8-44a9-bf5b-239ca6df67de">たとえば、今回のようなルート追加であれば、User DataからEC2Launchのモジュールを読み込み、`Add-Routes` を呼び出す方法があります。</p>
<div class="code-block-container">
<pre id="3c15d7d2-f4b4-4fbd-bff8-b73d09d6d9da" data-name="preCode"><code class="hljs ruby" data-name="code">Import-Module (Join-Path $env<span class="hljs-symbol">:ProgramData</span> <span class="hljs-string">'Amazon\EC2-Windows\Launch\Module\Ec2Launch.psd1'</span>)
Add-Routes</code></pre>
<div class="a-button__inner" data-v-00506f85="">さらに、User Dataを起動ごとに実行したい場合は、persist を有効にします。</div>
</div>
<div class="code-block-container">
<pre id="fc69529c-b693-4730-9298-0452a352f91e" data-name="preCode"><code class="hljs javascript" data-name="code">&lt;persist&gt;<span class="hljs-literal">true</span>&lt;<span class="hljs-regexp">/persist&gt;</span></code></pre>
<div class="a-button__inner" data-v-00506f85="">これにより、インスタンス起動時にUser Dataの処理が繰り返し実行され、移動先環境に合わせたルート追加処理を走らせることができます。</div>
</div>
<p id="ebfe3831-d78c-4893-bf03-78d06e21cb52">重要なのは、コマンドそのものを暗記することではありません。</p>
<p id="cce9e892-0477-43e2-920e-934e57f50d92">タスクスケジューラ、User Data、EC2Launchのどの仕組みによって、起動時の処理を実行させているのかを理解することです。</p>
<p id="f01fcead-b950-40a8-bbd7-63ae65fbff3b">EC2Launch v2では、この種の起動時タスクの扱いが整理されており、同じ問題が起きにくい構成になっています。</p>
<p id="49cb7bbc-6b39-4a46-b3b3-d1077715a9ee">ただし、実際の挙動は、AMIの世代、EC2Launchのバージョン、User Data、タスクの実行頻度に依存します。</p>
<p id="454bb55a-a98e-48f6-a49f-b2ba01163394">そのため、v2だから確認不要、とは考えない方が安全です。</p>
<p id="9546e064-917d-45a0-98e6-6e575ffea0c9">環境によって確認ポイントは変わります。</p>
<p id="a1d6843a-1495-48f5-ae71-174cb79e8f15">しかし、共通する考え方は同じです。</p>
<p id="fe9f05a2-93ed-42d5-afce-876646e15a59">「起動時に、必要なOS設定が、確実に反映される状態になっているか」</p>
<p id="5f4a3331-5b6a-4ff0-991c-3d41e67d7027">ここを確認する必要があります。</p>
<h2 id="a646f83e-76e1-4a3d-9fdf-5207130cc22e" tabindex="-1"><span id="toc5">AWS側の設定だけ見ても足りない</span></h2>
<p id="9cd7c1d7-ec90-419e-8ba4-2800e2e09d7c">若手SEにとって、EC2の通信不可というと、どうしてもAWS側の設定に目が行きます。</p>
<p id="eb2369b5-f961-4003-9a70-46c60b5bba5a">それ自体は間違いではありません。</p>
<p id="1cf8e9b7-0c39-4958-8d5e-1c4dd771fbd5">実際、通信不可の原因として、セキュリティグループ、NACL、VPCルートテーブル、サブネット、ENI、DNS設定などはよくあります。</p>
<p id="bb05981f-4562-4edd-b493-22f488800052">しかし、それだけでは足りません。</p>
<p id="8b8feb07-8fb6-4dc9-9b56-1ebcca31342c">今回のように、OS内部の設定が原因になることもあります。</p>
<p id="70f08156-abe7-412c-8fd0-8122ff77b59c">今回の切り分けは、3つの層で見ると整理しやすくなります。</p>
<div class="code-block-container">
<pre id="b657639a-00e7-41bc-a6c0-708533387c30" data-name="preCode"><code class="hljs" data-name="code">AWSインフラ層
  → セキュリティグループ、NACL、VPCルートテーブルを見る

初期化エージェント層
  → EC2LaunchやUser Dataが期待どおり実行されたかを見る

OS設定層
  → Windowsのルーティングテーブルが移動先環境に合っているかを見る
</code></pre>
<div class="a-button__inner" data-v-00506f85="">今回の原因は、AWSインフラ層ではなく、初期化エージェント層とOS設定層の間にありました。</div>
</div>
<p id="008ff45d-0f6d-4718-876c-921dbe2ac2e2">EC2の通信確認では、AWS側の設定、クラウド初期化処理、OS内部の設定を一連の流れとして見る必要があります。</p>
<figure id="34ae7188-7c91-481f-b108-8c5b3bed636f">
<div style="width: 630px" class="wp-caption aligncenter"><a href="https://assets.st-note.com/img/1780473510-jpmDS8wUoYf6e4PZRXhbilrK.png?width=2000&amp;height=2000&amp;fit=bounds&amp;quality=85" aria-label="画像を拡大表示"><img loading="lazy" decoding="async" class="is-slide" src="https://assets.st-note.com/img/1780473510-jpmDS8wUoYf6e4PZRXhbilrK.png?width=1200" alt="画像" width="620" height="439" data-modal="true" /></a><p class="wp-caption-text">図　AWS側の設定だけ見ても足りない</p></div><figcaption></figcaption></figure>
<p id="b7610046-233b-42f1-bfec-c32ee4771b31">この図で言いたいのは、EC2が起動した時点で確認が終わるわけではない、ということです。</p>
<p id="e8bd6263-71e5-47d2-bd61-a81e6efae9c3">AWS側の設定が正しく、インスタンスが起動していても、その後に動く初期化処理やOS内部の設定が想定どおりでなければ、業務通信は成立しません。</p>
<p id="a433a55b-2556-4ce8-bcff-6360b67c154c">サーバが起動していることと、業務通信が成立していることは別です。</p>
<p id="944bd7c5-1a7c-4b0b-a392-5a53b6845d77">ここを混同すると、DRテストや移行リハーサルで痛い目を見ます。</p>
<h2 id="88eefb7d-79fc-49c6-a6f2-2becfa26dfe3" tabindex="-1"><span id="toc6">これはルーティングだけの話ではない</span></h2>
<p id="b497ca4f-e0f8-4987-8d88-7c06627610d7">今回の事象は、Windows Serverのルーティング情報が更新されなかった、という個別トラブルに見えます。</p>
<p id="b5187475-b14b-4be9-930e-2fc920563bba">しかし、これはルーティングだけの話ではありません。</p>
<p id="c8fd7ac7-e7f6-473b-a32b-382e493bb8c0">以前扱ったような、MTU設定が戻る、SSHでログインできない、OS起動後に想定した設定になっていない、といった事象にも共通する構造があります。</p>
<p id="e48a4680-2290-4c0f-b16d-332b33aa3e16">共通しているのは、初期化エージェントがOS設定を書き換える、または書き換えないことで、起動後のOS状態が想定とずれる点です。</p>
<p id="e0ca0382-7430-4122-a56e-d4da26079a32">ある設定は、初期化エージェントによって上書きされます。</p>
<p id="7f3b890b-44f6-43bf-9d76-02ffedd1bcc3">別の設定は、初期化エージェントが実行されないために更新されません。</p>
<p id="a72179eb-5b83-4733-9aa9-a9bcd559fad8">つまり、</p>
<p id="9e46566e-43e3-496b-a39f-cf69a57d9efe">「書き換えられて困る」</p>
<p id="cc4dbf88-fc42-4ff6-af57-eba774015879">場合もあれば、</p>
<p id="5868f75e-2a3d-411e-ab45-1ab4d8565d1c">「書き換えてほしいのに書き換わらない」</p>
<p id="bfe239b1-65a2-4b53-9f94-a1f495208493">場合もあります。</p>
<p id="53112035-682e-4cf2-90b3-f101574ce9dd">どちらも、クラウド初期化処理がOS設定に関与していることを理解していないと、原因にたどり着きにくくなります。</p>
<h2 id="dcdadf47-4d5e-4dce-a98a-1a1492e0fc38" tabindex="-1"><span id="toc7">なぜクラウドはOS設定を書き換えるのか</span></h2>
<p id="bbeff4ac-5424-42b8-ab0a-6a307b935a90">では、なぜクラウド環境では、起動時にOS設定へ手を入れるのでしょうか。</p>
<p id="58d5f910-b76e-487d-ab97-293c79dbb820">理由は大きく3つあります。</p>
<p id="b6c55e9e-0fe0-4c4d-92ca-22e64e4833c0">1つ目は、セキュリティです。</p>
<p id="fcb37893-80de-4380-b1e7-cd7ae76ff846">クラウド環境では、インターネットや社内ネットワークから到達可能なサーバを短時間で作成できます。</p>
<p id="6d53b24d-3481-46ab-a6b0-f532e7144bf0">そのため、初期状態をできるだけ安全側に寄せる必要があります。</p>
<p id="84296913-9871-4a5a-90fb-eddaba2fa80f">SSHのパスワード認証を無効にし、公開鍵認証を前提にするような考え方は、その典型です。</p>
<p id="84a5be44-9c7f-41ff-9c54-5f29122d3230">パスワード総当たり攻撃の入口を減らすためです。</p>
<p id="c708c9e1-ca21-4ac9-bb86-ad5a74f9ef80">これは、クラウド環境におけるベストプラクティスに寄せた挙動と考えると理解しやすいです。</p>
<p id="edea57d0-7873-44a6-b2ab-05acc0a6add7">2つ目は、クラウド環境に合わせてOSを自動適応させるためです。</p>
<p id="7ce72a7a-dc57-464e-bdad-25fb05d79ced">EC2インスタンスは、起動時にインスタンスメタデータ、User Data、ネットワーク情報などを利用します。</p>
<p id="4ac540b9-3bf1-4074-b261-717feb53e0d3">OSは、起動した場所、割り当てられたIP、ホスト名、初期化スクリプトなどをもとに、クラウド上で動ける状態に整えられます。</p>
<p id="0a9081b5-8ac6-4e2f-8a59-715d9edf847d">3つ目は、AMIを再利用するためです。</p>
<p id="6c15de6b-8039-46ad-8a09-0a0693308b8d">AMIは、ある時点のOS状態を固めたものです。</p>
<p id="5ad2e64b-b093-46e1-acc2-736f84bd576c">しかし、そのAMIから起動されるインスタンスは、元の環境と同じとは限りません。</p>
<p id="b6bfb5bd-75c8-4069-8c9f-647670e014e4">別AZかもしれません。<br />
別サブネットかもしれません。<br />
別IPかもしれません。<br />
別用途のサーバとして起動されるかもしれません。</p>
<p id="378eaf36-6e37-457d-8b0f-10597b76aa4f">そのため、AMIに残っているOS設定をそのまま信じるだけでは危険です。</p>
<p id="8969a507-91c0-4c74-937f-a00445e05ca1">クラウドでは、起動時にメタデータやUser Dataを参照し、起動先の環境に合わせて初期化する仕組みが用意されています。</p>
<p id="7edb6bb8-fc76-4064-b0aa-3622d63f9413">ただし、その初期化処理が「いつ」「どの条件で」「何を」実行するかは、OS、エージェント、設定によって変わります。</p>
<p id="0af63280-b917-4939-b3ef-073b2b8886e0">ここを理解していないと、</p>
<div class="code-block-container">
<pre id="b0ac7176-e1d2-44f3-ba45-16fbbeb48224" data-name="preCode"><code class="hljs" data-name="code">設定したはずなのに戻った
自動で入ると思っていたのに入らなかった
AMIから起動したら前の状態を引きずった
</code></pre>
<div class="a-button__inner" data-v-00506f85="">という事象が起こります。</div>
</div>
<h2 id="b7c0ad2b-c423-4958-afa9-7e572f0397e9" tabindex="-1"><span id="toc8">DR設計では「起動できる」だけでは足りない</span></h2>
<p id="afc653c5-4207-47b0-a738-535870392c7b">今回の話は、DR設計やAZ障害時の切替設計にも直結します。</p>
<p id="c2c4b579-673b-495e-98fe-3a17340222b6">DR設計では、次のような確認をしがちです。</p>
<div class="code-block-container">
<pre id="f4c89edf-77dc-429b-b9c6-b920af551280" data-name="preCode"><code class="hljs" data-name="code">・別AZでEC2が起動できる
・AMIからインスタンスを作成できる
・EBSを付け替えられる
・IPやDNSを切り替えられる
</code></pre>
<div class="a-button__inner" data-v-00506f85="">もちろん、これらは重要です。</div>
</div>
<p id="ddc3a103-b93b-45fb-8caa-0dbc7eab78a4">しかし、これだけでは不十分です。</p>
<p id="1fdcd319-d5ff-4c51-b638-4167d25baded">本当に確認すべきなのは、起動後に業務通信が成立するかです。</p>
<p id="2c4f0a7c-ae0a-4b07-8ca2-214a0f14de29">実務では、少なくとも以下を確認した方がよいです。</p>
<div class="code-block-container">
<pre id="8c663d5a-3d2d-470a-9c70-75d2c24301ff" data-name="preCode"><code class="hljs" data-name="code">・OS内のルート情報は正しいか
・DNS名前解決はできるか
・ADや認証基盤へ到達できるか
・業務アプリの接続先へ通信できるか
・監視、バックアップ、ジョブ管理エージェントは動くか
・User Dataや起動時スクリプトは期待どおり実行されたか
・初期化処理のログにエラーは出ていないか
</code></pre>
<div class="a-button__inner" data-v-00506f85="">DRテストで見るべきなのは、インスタンスの起動成功ではありません。</div>
</div>
<p id="379cbc44-b2bc-41a5-9ea6-7e07a84e199d">業務として使える状態になったかどうかです。</p>
<p id="fbff3646-bde5-4ded-8371-a0b34e6dd069">ここを間違えると、テストでは成功したように見えても、本番障害時に通信できないサーバが立ち上がることになります。</p>
<h2 id="83a8c398-c306-41d8-80e1-51081f7e5856" tabindex="-1"><span id="toc9">まとめ</span></h2>
<p id="34fed3d6-cb18-4f15-bdf5-a17a80deb49f">今回は、EC2を別AZで起動した際に、Windows Serverのルーティング情報が更新されず、通信できなくなった事象を扱いました。</p>
<p id="44c32348-a128-4031-8d0a-ecb02e906184">原因は、AWS側のセキュリティグループやVPCルートテーブルではなく、OS内部のルート情報でした。</p>
<p id="86459391-867b-46b3-91ce-30bc7f9c85f9">そして、その背景には、EC2Config、EC2Launch、EC2Launch v2といったクラウド初期化エージェントの挙動差がありました。</p>
<p id="48b161c5-54db-4119-9265-4b695fe8f2ba">クラウドでは、サーバを起動するだけなら簡単です。</p>
<p id="0c7a2496-9c90-4c6b-ad64-66cf3d3315f0">しかし、起動したサーバが業務として使える状態になっているかは、別の問題です。</p>
<p id="0b4034bf-072e-4182-a173-6b62449b2431">若手SEは、EC2が起動したかどうかだけで安心してはいけません。</p>
<p id="7a7fab07-c8c1-4567-9597-8d002965293a">見るべきなのは、起動後に、どの設定が、どのタイミングで、どの仕組みによって反映されるのかです。</p>
<p id="a76a836c-421f-499b-b667-c3be5c8485ce">サーバは起動した。<br />
でも通信できない。</p>
<p id="3441d922-79bb-40c4-b038-e0ea5edd8f60">その原因は、AWS側ではなく、OSの中にあるかもしれません。</p>
<hr id="fd9b46d7-9522-49ac-8bb8-743c2079c671" />
<p id="bad0c73b-5e79-4e8d-8a38-c9d8c1a681bc"><strong>関連記事</strong></p>
<p>今回のようなトラブルは、AWSやOSの設定だけを個別に見るのではなく、切替後にシステム全体が業務として使える状態になっているかまで確認する必要があります。</p>
<p><strong>システム基盤・クラウドエンジニアの仕事</strong><br />
サーバー、OS、監視、バックアップ、可用性、クラウドなどを横断し、<br />
システムを「整える・保つ・戻す」ための基盤設計・運用・障害対応を解説しています。</p>

<a href="https://sys-univ.com/dev/system-infrastructure-engineer/" 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/769693434e6531947a35f1606041df3d-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/08/769693434e6531947a35f1606041df3d-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/08/769693434e6531947a35f1606041df3d-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/08/769693434e6531947a35f1606041df3d-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/08/769693434e6531947a35f1606041df3d-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">システム基盤エンジニアの仕事内容を、インフラエンジニアとの違いから実務まで解説。サイジング、標準化、監視、可用性、バックアップ、AWS移行、障害対応を大規模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.17</div></div></div></div></a>
<p><strong>詳細設計とは何を決める工程か｜パラメータ表で終わらせないための設計の考え方</strong><br />
基本設計で決めた内容を、構築・テスト・運用できる具体的な設定や手順へどう落とし込むかを整理しています。</p>

<a href="https://sys-univ.com/dev/detailed-design-overview/" title="【全3回・第1部】詳細設計とは何を決める工程か｜パラメータ表で終わらせないための設計の考え方" 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/a6c056b838ba24669f57a7e23dae134f-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/06/a6c056b838ba24669f57a7e23dae134f-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/06/a6c056b838ba24669f57a7e23dae134f-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/06/a6c056b838ba24669f57a7e23dae134f-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/06/a6c056b838ba24669f57a7e23dae134f-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回・第1部】詳細設計とは何を決める工程か｜パラメータ表で終わらせないための設計の考え方</div><div class="blogcard-snippet internal-blogcard-snippet">詳細設計とは、基本設計で決めた方式を構築・テスト・運用できる粒度に落とし込む工程です。OS、ミドルウェア、DB、ジョブ、監視、バックアップなどを、単なるパラメータ表ではなく品質保証ストーリーとして設計する考え方を基盤SEの目線で解説します。</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>
<p><strong>シリーズ全体は「実務で使えるシステム開発方法論」マガジンにまとめています。</strong></p>

<a rel="noopener" href="https://note.com/k_s7906/m/mc19593a012e2" title="実務で使えるシステム開発方法論｜ナギ ＠ 氷河期SEの知見録｜note" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://sys-univ.com/wp-content/uploads/cocoon-resources/blog-card-cache/0f32eea23c3fec6193dcd0147c80e86d.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">実務で使えるシステム開発方法論｜ナギ ＠ 氷河期SEの知見録｜note</div><div class="blogcard-snippet external-blogcard-snippet">要件定義、基本設計、詳細設計、テスト、移行、運用保守まで、システム開発の流れを実務目線で体系化するマガジンです。教科書には書かれにくい、設計漏れ、手戻り、品質保証、運用で詰まるポイントを、現場経験に基づいて整理します。若手SEだけでなく、開ReadMore...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://note.com/k_s7906/m/mc19593a012e2" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">note.com</div></div></div></div></a>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sys-univ.com/incident/addroute/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>RDS for Oracleを採用したら、オンプレ運用の前提が通用しなかった｜開発中に見えた設計ギャップと代替アプローチ</title>
		<link>https://sys-univ.com/aws/rdsforora/</link>
					<comments>https://sys-univ.com/aws/rdsforora/#respond</comments>
		
		<dc:creator><![CDATA[ナギ]]></dc:creator>
		<pubDate>Sun, 30 Aug 2026 07:20:26 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<guid isPermaLink="false">https://sys-univ.com/?p=1558</guid>

					<description><![CDATA[はじめに オンプレのOracleで長く運用してきたDBAが、RDS for Oracleに移行したとき、最初に戸惑うのは性能ではなく「いつもの操作ができない」ことでした。 SSHでログインしようとしても入れない。 ALT [&#8230;]]]></description>
										<content:encoded><![CDATA[<p id="23e59adf-d553-487c-9724-95924024db01"><strong>はじめに</strong></p>
<p>オンプレのOracleで長く運用してきたDBAが、RDS for Oracleに移行したとき、最初に戸惑うのは性能ではなく「いつもの操作ができない」ことでした。</p>
<p id="6185da3e-ec9c-40ee-92d4-5f65693648d1">SSHでログインしようとしても入れない。<br />
ALTER SYSTEM を実行しようとしても通らない。<br />
オンプレで使っていた SYSDBA 前提の操作が、そのまま使えない。</p>
<p id="572200ef-f301-4659-aaa0-ea4f279768db">サーバーは動いている。Oracleも動いている。なのに、これまで当たり前に使っていた運用手順が通用しない。</p>
<p id="05e3217c-867a-4719-9b8b-d94ba5bc5a52">原因は、DBの設定ミスでも権限設定の漏れでもありませんでした。</p>
<p id="b34f0091-1d01-458c-b6d0-e7b48293d34d">RDSがマネージドサービスとして設計された構造上、<strong>オンプレで「当たり前」だった低レイヤーへのアクセスが、そもそも提供されていない</strong>のです。</p>
<p id="1d9661d7-0a3c-45b3-b544-64ce5e2b27dc">今回の記事で伝えたいのは、RDSが劣っているという話ではありません。</p>
<p id="87c84e1e-73a8-48b6-a6d2-21c62850e118"><strong>マネージドの恩恵とトレードオフは表裏一体です。RDSを選ぶ時点で、オンプレの運用設計をそのまま持ち込まない前提が必要になります。</strong></p>
<p id="474543b0-d2f0-45d0-8d12-024ccc0f28b5">ここがポイントです。</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">なぜRDSではオンプレと同じ運用ができないのか</a></li><li><a href="#toc2" tabindex="0">開発中に見えた設計ギャップ</a><ol><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">④ オンプレで当たり前だった管理操作が、別の手段に置き換わる</a></li><li><a href="#toc7" tabindex="0">⑤ 障害時に必要なファイルを、OS上から直接集められない</a></li><li><a href="#toc8" tabindex="0">⑥ 監査ログや診断ファイルは、出力したまま放置すると障害要因になる</a></li><li><a href="#toc9" tabindex="0">⑦ DBのタイムゾーン設定だけでは、Schedulerジョブの時刻は保証できない</a></li><li><a href="#toc10" tabindex="0">⑧ Multi-AZは、配置が変わる前提で性能と運用を設計する</a></li><li><a href="#toc11" tabindex="0">⑨ 停止したRDSも、7日後には自動で起動する</a></li></ol></li><li><a href="#toc12" tabindex="0">代替アプローチ：RDSでの運用をどう設計するか</a><ol><li><a href="#toc13" tabindex="0">CloudWatch Database Insights / Performance Insights：AWR/ASHの代替として使う</a></li><li><a href="#toc14" tabindex="0">パラメータグループ：init.oraの代替として使う</a></li><li><a href="#toc15" tabindex="0">拡張モニタリング：OSメトリクスの代替として使う</a></li><li><a href="#toc16" tabindex="0">スケールアップ：チューニングより先に試す選択肢</a></li><li><a href="#toc17" tabindex="0">SQLチューニング：最も重要な主戦場</a></li></ol></li><li><a href="#toc18" tabindex="0">示唆：RDS採用時に設計へ織り込むべきこと</a></li><li><a href="#toc19" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 id="dfe8c07f-febf-4183-a222-ee1ce1866274" tabindex="-1"><span id="toc1">なぜRDSではオンプレと同じ運用ができないのか</span></h2>
<p id="52f6fcfc-5a04-4a40-add4-b24b50eb27cb">RDSは、AWSがOSとDB基盤の管理を代行するサービスです。</p>
<p id="d54f800b-6b41-49fa-ac15-ae7280ad853c">パッチ適用、バックアップ、フェイルオーバー、レプリケーション。これらをAWS側に任せられる一方で、ユーザーはOSやDBの深いレイヤーに直接触れることができません。</p>
<p id="994d7d31-87d4-4bc4-8ee3-f408977beda5">オンプレのOracle運用では、DBAがOSにログインしてリソースを確認し、カーネルパラメータを見直し、SYSDBA権限でDBの内部状態を操作することがあります。しかし、RDS for Oracleではその前提が根本から変わります。</p>
<p id="f1508f73-2f2e-4510-acf0-7ff874cd2dcb">これは単なる制限ではなく、<strong>マネージドサービスとしての設計上の選択</strong>です。ただし、事前に把握していないと、開発中に次々と壁にぶつかります。</p>
<p id="c7dfebf3-0cf3-4ef0-b3a7-758f9261cbd1">今回、開発中に見えてきたギャップを整理すると、大きく以下の領域に分かれます。</p>
<figure id="19c88944-4aec-48bb-9d80-22cc6b50bb53"><a href="https://assets.st-note.com/img/1781594776-CgkyVLjhDuq7EpbdM9W3f045.png?width=2000&amp;height=2000&amp;fit=bounds&amp;quality=85" aria-label="画像を拡大表示"><img loading="lazy" decoding="async" class="is-slide" src="https://assets.st-note.com/img/1781594776-CgkyVLjhDuq7EpbdM9W3f045.png?width=1200" alt="画像" width="620" height="439" data-modal="true" /></a><figcaption></figcaption></figure>
<p id="6939640e-587e-4e5c-8ef3-55fcc3e63b96">「オンプレの感覚と、RDSで必要になる考え方」</p>
<p id="1b976eef-5bcc-41ab-9f76-1439e506ac2c">上の図は、オンプレでの感覚と、RDSで必要になる考え方の違いを整理したものです。</p>
<p id="1815f8dc-3603-4bba-aca1-5200a6f57f17">ここからは、開発中に実際に表面化した設計ギャップを、具体的に見ていきます。</p>
<h2 id="cb69c14b-8c2c-4402-b9f2-9b43451eb83f" tabindex="-1"><span id="toc2">開発中に見えた設計ギャップ</span></h2>
<h3 id="50b4b0c9-f229-4003-896e-449cd9949922" tabindex="-1"><span id="toc3">① ストレージは「空き容量」だけを見ていると詰まる</span></h3>
<p class="PDq2pG_selectionAnchorContainer" data-start="46" data-end="122">この案件では、REDOログ・ファイルのサイズを大きく設定していたこともあり、空き容量が少なくなった局面で<code data-start="98" data-end="112">Storage-Full</code>が発生しました。</p>
<p data-start="129" data-end="199"><code data-start="129" data-end="143">Storage-Full</code>になると、インスタンス操作やSQL*Plusでの接続にも影響し、通常の手順では復旧しづらい状態になります。</p>
<p data-start="206" data-end="295">注意したいのは、<strong data-start="214" data-end="245">「空き容量がまだ少し残っているから大丈夫」とは限らない</strong>点です。空き容量が限界に近づいた時点で、復旧作業そのものに必要な操作ができなくなる可能性があります。</p>
<p id="11112d0a-04f2-4661-be3a-90c75277b82c">オンプレであれば、OSにログインして一時的に領域を空ける逃げ道があります。しかし、RDS for OracleではOS上で直接ファイルを操作できません。容量が詰まってから「中に入って何とかする」ことはできず、ストレージ拡張など、RDSとして提供されている操作で対応する必要があります。</p>
<p id="ad2c3c5e-0d05-4f2a-a8e2-cacd7a74b6ff">そのため、REDOログやアーカイブログのサイズ、生成量、一時的な蓄積を含めてストレージ容量を設計する必要があります。REDOログのサイズを不用意に大きくすると、容量の小さい環境では問題が表面化しやすくなります。本番環境よりも開発環境で先に問題が出るパターンです。</p>
<h3 id="e7907eec-6098-46bc-bdbd-9a38a256ff15" tabindex="-1"><span id="toc4">② アーカイブログは「出した後」の挙動まで設計する</span></h3>
<p id="6ea9ac92-fb24-4be5-ba4a-cfab89144970">この案件では、アーカイブログが一度RDS側のストレージに出力され、その後S3へ転送される構成でした。ただし、S3へ転送されるまで、また転送後にRDS側から削除されるまでにはタイムラグがあります。アーカイブログは生成後すぐに容量影響がゼロになるわけではありません。</p>
<p id="a0f5e283-74ca-4cf2-849d-0847ff9c10df">退避先を用意していても、転送されるまでの間、削除されるまでの間はRDS側のストレージを使います。</p>
<p id="5f4365ae-2f00-4622-807a-bb78489dc796">生成量が多いタイミングでは、特に容量の小さい開発環境で、この一時的な蓄積によって Storage-Full になるケースがありました。</p>
<p id="dfb84e75-b3c1-40a8-86b1-94136ac982c7">アーカイブログは「出したら終わり」ではありません。RDSでは、<strong>出力、転送、削除まで含めて容量設計する</strong>必要があります。</p>
<h3 id="a56dd6c5-c5d7-4544-ad96-6a85f640ffb2" tabindex="-1"><span id="toc5">③ ストレージは増やせるが、必要な分を即座に増やせるわけではない</span></h3>
<p id="3d489901-b916-41de-9008-9c7c33d8d54c">ストレージを拡張する際、以下の2点に注意が必要です。</p>
<p id="ca1d5aa5-5d11-4639-bf5e-4360e75f5f86"><strong>拡張サイズは現在の割り当てから10%以上でないとエラーになる</strong><br />
小刻みな拡張はできません。10%未満の増量を指定するとエラーで拒否されます。開発環境のように小さい容量で構築していると、この制約が意外と効いてきます。</p>
<p id="cb4ef364-8b33-4710-9fc3-feda623956bd"><strong>ストレージ変更後、一定時間は再度の変更ができない</strong><br />
拡張後は `storage-optimization`（ストレージ最適化）ステータスになり、完了まで数時間から数十時間かかります。ストレージ最適化が完了するか、変更から6時間が経過するまでのいずれか長い方が経過するまで、次のストレージ変更はできません。</p>
<p id="15699ebb-d9a1-42fd-82b3-53a7aed0f313">使用量が急増するケースでは、連続した拡張ができないため、<strong>「足りなくなったら少しずつ増やせばよい」という考え方が通用しない</strong>場合があります。初期サイジングを余裕を持って設計することが重要です。</p>
<h3 id="c5cdb212-0ae0-4438-a986-a7cbeb357e1c" tabindex="-1"><span id="toc6">④ オンプレで当たり前だった管理操作が、別の手段に置き換わる</span></h3>
<p id="1e936cdd-873f-438b-9fcd-1667bcff23f8">RDS for Oracleでは、オンプレのように SYSDBA で接続してDB全体を自由に操作する前提ではありません。代わりに以下の2つが用意されています。</p>
<p id="a576b522-f4b7-4236-817a-48df05816dcc"><strong>RDSのマスターユーザー（master_user）</strong><br />
DBA権限を持ちますが、システム変更に関する一部操作が制限されます。オンプレと同じSQLをそのまま実行できない場合があります。</p>
<p id="f37d9439-ee7f-442d-9338-2da5a17d2853"><strong>RDSADMINユーザー</strong><br />
ユーザーが直接使用することはできません。ただし、AWSが用意したパッケージやプロシージャを経由することで、システム変更に関する操作が可能です。</p>
<p id="4477bd25-6834-4c9c-9729-7131d09ee257">たとえばログスイッチは、以下のように変わります。</p>
<div class="code-block-container">
<pre id="ef8672b2-6f5f-45d6-be80-a26dfa861cd0" data-name="preCode"><code class="hljs php" data-name="code">-- オンプレ
ALTER SYSTEM <span class="hljs-keyword">SWITCH</span> LOGFILE;

-- RDS <span class="hljs-keyword">for</span> Oracle
EXEC rdsadmin.rdsadmin_util.switch_logfile;
</code></pre>
<div class="a-button__inner" data-v-00506f85=""><span data-v-80ab2cbc=""><span class="visually-hidden" data-v-80ab2cbc="">copy</span><i class="a-icon a-icon--copy a-icon--size_small" aria-hidden="true" data-v-80ab2cbc=""></i></span></div>
</div>
<p id="73d66936-d51c-42d7-960e-a3d4619a1f1b">対応コマンドは少しずつ増えていますが、現時点でもカバーされていない操作があります。「いつものコマンドが通らない」という場面は、移行後に発生し得る前提で考えておくべきです。移行前に、オンプレで使っているコマンド・操作の棚卸しとRDS側の代替確認が必須です。</p>
<h3 id="2b44d47a-94b9-4125-90e7-902fd5427263" tabindex="-1"><span id="toc7">⑤ 障害時に必要なファイルを、OS上から直接集められない</span></h3>
<p id="54db997b-e920-48be-b8b0-43a06eec8eb8">RDSではOSへのSSHログインができないため、ファイルへのアクセスは「Amazon RDSプロシージャ」経由に限定されます。</p>
<p id="605ddd83-ec41-4df1-9599-5629c5262b1e">DATA_PUMP_DIR 配下のファイルなど、マネジメントコンソールからダウンロードできないファイルは、RDSプロシージャを使って一旦S3にアップロードしてからダウンロードする手順が必要です。</p>
<p id="7dc41305-579c-4baa-85bd-9f26565f04bc">特に注意が必要なのがADRディレクトリです。オンプレであれば、障害時にADR配下のファイルを確認してOracleサポートへ提供することがあります。しかし、RDS for Oracleでは「サポートから言われたファイルをOS上で探してzip化する」というオンプレの感覚では動けません。</p>
<p id="f18791a6-5a54-4c11-be52-f2697d64e272">RDS for Oracleでは rdsadmin.rdsadmin_adrci_util などを通じてADR関連の情報取得やインシデントパッケージ作成の手段が用意されていますが、オンプレのようにOSログインでファイルを直接収集できるわけではありません。</p>
<p id="4928d6f0-29ba-4fe6-89dd-4705b99be554">OracleサポートやAWSサポートに調査資料の提供を求められた場合、何をどの手順で提供できるかは事前に確認しておく必要があります。本番障害が起きてから手順を確立しようとしても遅いです。</p>
<h3 id="7b5e9360-fddc-44a6-9b16-0c2e3abd81e5" tabindex="-1"><span id="toc8">⑥ 監査ログや診断ファイルは、出力したまま放置すると障害要因になる</span></h3>
<p id="69414185-1bdb-49bf-9592-835dbe59ca65">オンプレでは、監査ログやトレースファイルをOS上に出力し、必要に応じて整理・退避する運用を組めます。しかし、RDSではOS上で直接ファイル操作ができません。</p>
<p id="8408122d-a03a-4ed1-9446-603c3f449708">この案件では、Oracleのログイン監査で監査証跡をファイルとして出力していたところ、RDS内部のファイル保持数の上限に引っかかり、ファイル書き込みエラーが発生しました。その結果、RDSにログインできなくなる障害につながりました。</p>
<p id="85801bfc-a66a-49ab-a837-8f4a48fc1a68">RDS内部のファイル保持数には上限がありますが、その上限値はAWSから公開されておらず、ユーザーが変更することもできません。上限値が非公開である以上、「どこまで出力できるか」を事前に把握することはできません。</p>
<p id="c3f3aba7-8698-4128-85d5-7b143f525380">監査ログ、トレースファイル、ダンプファイルなどをRDS内部に出し続ける設計にする場合は、定期的なクリーンアップ処理を必ず組み込んでください。監査ログはセキュリティ要件を満たすために必要ですが、出力設計を誤ると、監査ログ自体が障害要因になります。</p>
<h3 id="46f2e014-3c86-4209-b1c0-081d0dead1ea" tabindex="-1"><span id="toc9">⑦ DBのタイムゾーン設定だけでは、Schedulerジョブの時刻は保証できない</span></h3>
<p id="6b1c51c7-5f28-42a2-bec5-00cc473ca9cd">RDS for Oracleでは、オプショングループでタイムゾーンを設定できます。しかし、それだけでOracle Schedulerジョブのタイムゾーンまで意図通りになるとは限りません。</p>
<p id="95200075-81d8-4a66-a903-aa85451a5ae8">この案件では、RDSのオプショングループでタイムゾーンを設定していても、Oracle Schedulerジョブのタイムゾーンは Etc/UTC のままでした。</p>
<p id="2a814e1a-1875-422a-a51e-6e83a1bf5864">日本時間でスケジュール実行したいジョブがある場合、Oracle Scheduler側にも追加でタイムゾーン設定が必要になります。設定漏れがあると、ジョブが意図した時刻に動きません。これは開発中には見落とされやすく、本番稼働後に発覚すると影響が大きい問題です。</p>
<div class="code-block-container">
<pre id="298c4458-e511-4cc6-95b6-bc7bb6b803b9" data-name="preCode"><code class="hljs php" data-name="code">-- Oracle Schedulerのデフォルトタイムゾーンを変更する例
BEGIN
  DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE(
    attribute =&gt; <span class="hljs-string">'default_timezone'</span>,
    value     =&gt; <span class="hljs-string">'Asia/Tokyo'</span>
  );
END;
/
</code></pre>
<div class="a-button__inner" data-v-00506f85=""><span data-v-80ab2cbc=""><span class="visually-hidden" data-v-80ab2cbc="">copy</span><i class="a-icon a-icon--copy a-icon--size_small" aria-hidden="true" data-v-80ab2cbc=""></i></span></div>
</div>
<p id="81b9ee5f-d79b-48f1-863e-7eb1b02729c7">RDSのタイムゾーン設定と、Oracle Schedulerのタイムゾーン設定は、分けて確認する必要があります。</p>
<h3 id="efb58484-89dd-493f-bc87-9f7d40fc11e4" tabindex="-1"><span id="toc10">⑧ Multi-AZは、配置が変わる前提で性能と運用を設計する</span></h3>
<p id="54203edd-0043-4a74-99d8-6bdea40d042a">Multi-AZ構成では、プライマリが常に特定AZに固定され続ける前提では設計できません。障害時やメンテナンス時のフェイルオーバーにより、プライマリの配置先AZが変わる可能性があります。</p>
<p id="345b8a85-d15d-4a27-af1a-4f9d18b6deb9">この案件では、RDSとAPサーバーが異なるAZに配置された状態が発生し、AZ間のレイテンシによる処理遅延が問題になりました。一時対応として手動フェイルオーバーで配置を寄せた場面もありましたが、本来はAPサーバーとDBのAZ配置が変わり得る前提で、レイテンシ、接続先、リトライ、監視を設計しておくべきでした。</p>
<p id="58a5ddba-29da-48e1-8387-29fd650c3d00">RDSを選ぶ時点で、<strong>「常に特定AZに固定され続ける」という前提ではなく、フェイルオーバーやメンテナンスで配置が変わり得る前提に切り替える必要があります。</strong></p>
<h3 id="bdf754e4-a92b-4b73-862e-e197f795c8f4" tabindex="-1"><span id="toc11">⑨ 停止したRDSも、7日後には自動で起動する</span></h3>
<p id="47f2b55f-7c11-410a-acb7-3ab6965d4223">RDSは、停止したまま放置できるサービスではありません。</p>
<p id="d8cf613f-0a32-4148-86b4-54331ba1bac8">Amazon RDSのDBインスタンスは、一時停止しても7日後に自動で起動します。これは、メンテナンス適用から長期間取り残されないようにするための仕様です。</p>
<p id="b0f3a593-0d87-4b53-b411-52c18905c7eb">この仕様を知らないと、開発環境や検証環境で思わぬコストが発生します。</p>
<p id="43081c60-a1c6-41b6-a7ce-8c5dcb2bd962">たとえば、金曜夜に高スペックのRDSを停止したつもりでも、7日後に自動起動し、そのまま週末に誰も気づかず動き続けることがあります。停止中はインスタンス時間の課金は発生しませんが、ストレージやバックアップの課金は残ります。さらに、自動起動後は通常どおりインスタンス時間の課金も再開します。</p>
<p id="4c1db613-6076-4c90-bab3-14eb80530688">オンプレやEC2の感覚で「止めておけば安心」と考えると、RDSではコスト事故につながります。</p>
<p id="269c9b7f-721f-4c17-8754-21de537d00a4">長期間使わない環境であれば、単に停止するだけでなく、自動起動後に再停止する仕組みや、不要環境の削除、スナップショット退避なども含めて設計する必要があります。</p>
<p id="54ebed5c-a61e-40b8-96be-d4d8b3044039">RDSでは、起動・停止も運用設計の一部です。</p>
<h2 id="2d095d79-7081-452f-a23d-e345f3a4132b" tabindex="-1"><span id="toc12">代替アプローチ：RDSでの運用をどう設計するか</span></h2>
<p id="645f1640-d3e2-4a60-8265-8138c816653b">オンプレの「低レイヤーを直接触る」アプローチはできません。しかし、RDSには別の手段が用意されています。重要なのは、オンプレのやり方を無理に持ち込むことではなく、<strong>RDSで提供されている手段に合わせて、運用設計を組み替えること</strong>です。</p>
<h3 id="79685b54-9c80-4138-a10a-3cabcfb8b153" tabindex="-1"><span id="toc13">CloudWatch Database Insights / Performance Insights：AWR/ASHの代替として使う</span></h3>
<p id="26b99100-61f5-4939-94dc-7e1a60e165cf">オンプレのOracleでは、AWR（Automatic Workload Repository）やASH（Active Session History）でボトルネックを分析するのが定番でした。RDSでもEEライセンスのBYOL環境であればこれらは使えますが、SE2ライセンス込みモデルでは利用できません。</p>
<p id="de28a089-269b-4d63-9baf-b282664e8d60">この代替として使えるのが <strong>CloudWatch Database Insights / Performance Insights系の可視化機能</strong>です。どのSQLが、どの待機イベントで詰まっているかをダッシュボードで可視化でき、問題のあるSQLをその場で特定できます。</p>
<p id="2e93cf5d-44f2-4e05-a846-e59e6dcd35c0">以前はPerformance InsightsでボトルネックとなるSQLを特定した後、別途で実行計画の調査を実施する必要がありました。現在はCloudWatch Database Insights上でOracleの実行計画を直接確認できるようになっており、SQLの詳細情報と実行計画を同一画面で確認できます。インデックス作成前後など同一クエリの実行計画を並べて比較することも可能です。</p>
<p id="09900101-31ff-43ac-b1d4-cf5f4c8c74c8">ただし、利用できる機能や保持期間は、Database Insightsの設定モードや契約条件によって変わります。実行計画の確認まで運用で使う場合は、事前に対象インスタンスで有効化状態と利用可能な機能を確認しておくべきです。</p>
<h3 id="769a4fda-72c3-41a6-ab69-c1b27d63afdf" tabindex="-1"><span id="toc14">パラメータグループ：init.oraの代替として使う</span></h3>
<p id="7fe88217-6a02-4cf3-8535-2e549d73831e">オンプレでは init.ora や SPFILE で初期化パラメータを自由に変更できましたが、RDSでは <strong>DBパラメータグループ</strong> 経由で変更します。変更不可のパラメータが存在する点と、一部パラメータの変更にインスタンス再起動が必要な点はオンプレと異なります。変更可能なパラメータの範囲を事前に確認しておくことが重要です。</p>
<h3 id="63433fb8-6eab-4f89-93f9-8eb88424fbd6" tabindex="-1"><span id="toc15">拡張モニタリング：OSメトリクスの代替として使う</span></h3>
<p id="60cc4af1-105e-40c9-a91a-4a3832a9f1a4">SSHログインができないため top や iostat は叩けませんが、<strong>拡張モニタリング</strong> を有効にすることで、OSレベルのCPU・メモリ・I/Oの詳細メトリクスをCloudWatchで確認できます。1秒間隔まで設定できるため、瞬間的な負荷スパイクの把握も可能です。</p>
<h3 id="22722b22-9436-494b-8f12-f25c50680596" tabindex="-1"><span id="toc16">スケールアップ：チューニングより先に試す選択肢</span></h3>
<p id="a241de5c-9100-46bf-8c61-17b316c8db18">クラウドの最大の強みは、数クリックでインスタンスクラスを変えられることです。チューニングに数日かけるより、インスタンスタイプをひとつ上げてCPUとメモリを倍にする、あるいはプロビジョンドIOPSを追加する方が、時間とコストの観点から合理的なケースがあります。問題の切り分けとして「リソース不足なのか」「SQLや設計の問題なのか」を早く見極めるための選択肢として、スケールアップも検討に入れてください。</p>
<h3 id="3e2381d5-52c8-4e57-bf93-07cdf06355cd" tabindex="-1"><span id="toc17">SQLチューニング：最も重要な主戦場</span></h3>
<p id="f23e2393-77bb-4e9b-b7c8-9e8df8c0a634">インフラ側が触れない分、<strong>アプリケーション・SQLレイヤーでの最適化がオンプレ以上に重要</strong>になります。実行計画の確認（Explain Plan）、適切なインデックス設計、バインド変数の利用、統計情報の更新。これらはRDSでも変わらず有効で、かつ最も効果が出やすい領域です。</p>
<h2 id="13d1e263-5d16-4508-bf10-3f7364a7ce45" tabindex="-1"><span id="toc18">示唆：RDS採用時に設計へ織り込むべきこと</span></h2>
<p id="5ae9ec17-11f7-422f-a3e3-fe64fe576590">今回挙げたギャップの中には、ドキュメントを読めば事前に分かるものもあります。たとえば、SYSDBA前提の操作がそのまま使えないことや、RDS固有の管理手段を使う必要があることは、構築前の段階で把握できます。</p>
<p id="e05d2560-be9c-4f7e-9b09-96cca903a620">一方で、Storage-Full、アーカイブログの一時蓄積、監査ログ出力、Schedulerの時刻設定、停止後の自動起動のように、実際に開発・検証環境で動かして初めて影響が見えやすいものもあります。</p>
<p id="34ba1d96-e60e-4653-853d-cc46b577171a">重要なのは、「PoCで動いたか」だけを見るのではなく、RDSを採用する時点で、運用設計・監視設計・コスト管理にこれらの制約を織り込んでおくことです。</p>
<p id="6bde0729-c307-45be-afa9-5c8e1365b6a8"><strong>容量・ストレージ挙動</strong><br />
ログの一時蓄積、Storage-Fullの発生条件、ストレージ拡張の制約を設計時に確認する。開発環境のサイジングは本番より小さくなりがちなため、これらが先に表面化しやすい。</p>
<p id="be4ad7b8-12a3-46de-bf05-ac7f55204b2e"><strong>ファイル操作・監査設計</strong><br />
大量ファイルを出力する設計がある場合、保持数の上限（非公開）と退避方法を確認する。監査ログ、トレース、ダンプファイルは、クリーンアップ処理まで運用設計に組み込む。</p>
<p id="db59cc25-bff6-45bb-9b7e-5fee62940911"><strong>権限・管理操作</strong><br />
オンプレで使っているコマンド・権限がRDSで使えるかを一覧化し、代替手段まで確認する。「使えないことがわかった」で終わらず、「RDSではどう実現するか」まで詰めておく。</p>
<p id="955c11a0-70bc-4ebb-8b05-e934d08c17e9"><strong>スケジューラと時刻設定</strong><br />
Oracle Schedulerを使うジョブがあれば、タイムゾーン設定を移行前に確認する。本番稼働後に発覚すると影響が大きい。</p>
<p id="ee332213-e6d6-49cd-99d9-9f2fce61fecd"><strong>停止運用とコスト管理</strong><br />
開発・検証環境のRDSを長期停止する場合、7日後の自動起動を前提に再停止の仕組みや削除方針を決めておく。停止中も課金される項目（ストレージ、バックアップ）があることも把握しておく。</p>
<h2 id="d8445ddb-e8f7-471a-8de7-cc78dbf0810e" tabindex="-1"><span id="toc19">まとめ</span></h2>
<p id="8d1f725c-c1ac-43cc-ba61-a78a2a342028">今回のギャップを整理すると、こうなります。</p>
<p id="fa2d04fc-aa2e-42e4-9fce-603e6333239c">RDSはAWSがOS・DB基盤を管理するトレードオフとして、ユーザーは低レイヤーに触れることができません。SYSDBA操作、OSアクセス、物理ファイル操作、一部の初期化パラメータ。これらはオンプレでは当然使えていたものが、RDSでは使えないか、別の方法に置き換わっています。</p>
<p id="e85c9306-a140-4701-97e8-66c4405155b1">一方、CloudWatch Database Insights / Performance Insightsによる実行計画の可視化、拡張モニタリング、パラメータグループといった代替手段は年々充実しています。「以前はできなかった」ことが、アップデートで可能になっていくサービスでもあります。</p>
<p id="43874d10-97f9-48d9-82c1-cb34a9521552">重要なのは「RDSでできないことを嘆く」ことではなく、**「RDSで何ができて、何はできないのかを移行前に把握しておく」**ことです。</p>
<p id="7b417c1a-c5a2-4777-ae93-32a45b7ae4d9">「起動した」「接続できた」「SQLが流れた」だけでは、RDS for Oracleを業務で使える確認にはなりません。障害時に調査できるか、容量が逼迫したときに復旧できるか、監査ログが障害要因にならないか、停止したつもりのRDSが自動起動していないか。そこまで確認して初めて「運用できる」と言えます。</p>
<p id="46be5b42-551f-41c5-9f7d-b13f7c6b123a">ただし、これはRDSが不便だという話ではありません。OSやDB基盤の管理をAWSに任せることで、パッチ適用、バックアップ、フェイルオーバー、監視連携といった運用負荷を下げられるのがRDSの価値です。</p>
<p id="2ccccaa3-41b6-4e35-a444-9d718b98a0b2">その価値を活かすためには、オンプレと同じ操作権限を求めるのではなく、RDSで提供される仕組みに合わせて運用を再設計する必要があります。</p>
<p id="02fa6571-fa86-4b50-a39c-aa07d6eb2143">オンプレの運用手法をそのまま持ち込むのではなく、RDSを選ぶ時点で、運用とチューニングのアプローチを切り替える。これが、RDS for Oracleを業務で使ううえで重要な前提になります。</p>
<p id="c575f7b1-4ca7-4267-9d55-9b2c87c07574"><strong>参考リンク</strong></p>
<ul id="fa7d4865-d16b-4318-9e71-5b3c5287c8f9">
<li>
<p id="995977d3-7c17-4071-aa75-b992eecbf4e5"><a rel="nofollow noopener" href="https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIOPS.ModifyingExisting.ScalingUp.html" target="_blank">Amazon RDS DBインスタンスのストレージ拡張</a></p>
</li>
<li>
<p id="aa1f68de-fc12-4f8e-8253-47121320f56e"><a rel="nofollow noopener" href="https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.html" target="_blank">RDS for Oracleの一般的なDBAタスク</a></p>
</li>
<li>
<p id="d05a663b-ff8e-4234-a271-ae8acd9e6e9f"><a rel="nofollow noopener" href="https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/oracle-s3-integration.using.html" target="_blank">RDS for OracleとS3のファイル転送</a></p>
</li>
<li>
<p id="41882983-1b3c-438c-af41-fdc453d617c4"><a rel="nofollow noopener" href="https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Appendix.Oracle.Options.Timezone.html" target="_blank">RDS for Oracleのタイムゾーン設定</a></p>
</li>
<li>
<p id="6579f31e-6506-49ca-8841-40e74c9f124c"><a rel="nofollow noopener" href="https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_StopInstance.html" target="_blank">RDS DBインスタンスの一時停止と7日後の自動起動</a></p>
</li>
</ul>
<hr />
<p><strong><span style="font-size: 20px;">関連記事</span></strong></p>
<p>RDS for Oracleでは、Oracle Database自体が同じでも、オンプレミスで使っていた管理操作や調査手順をそのまま持ち込めるとは限りません。</p>
<p>本記事ではその違いを設計・運用全体の観点から整理しましたが、個別の制約や代替方法については、以下の記事で詳しく解説しています。</p>
<ul>
<li>RDS for OracleでX$BHを直接参照できない理由｜RDS_X$BHとV$BHの使い分け<br />
オンプレミスで使用していた<code>SYS.X$BH</code>をRDS for Oracleから直接参照できない理由と、<code>RDS_X$BH</code>や<code>V$BH</code>へ調査手順を置き換える考え方を整理しています。</li>
</ul>

<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>
<ul>
<li>RDS for OracleでV$BHを使う方法｜バッファキャッシュ調査とX$BHの代替<br />
<code>V$BH</code>を使って、どのテーブルやインデックスのブロックがDBバッファキャッシュ上に存在しているかを確認する方法を解説しています。<code>X$BH</code>の完全な代替ではありませんが、調査目的を整理すれば、RDS上でも必要な情報を取得できる具体例です。</li>
</ul>

<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>
<ul>
<li>RDS for OracleのDBリンクは暗号化されているのか｜KMS暗号化とOracle Net通信は別物<br />
RDSのストレージをKMSで暗号化していても、DBリンク通信まで自動的に暗号化されるわけではありません。ストレージ暗号化、Oracle NetのNNE／SSL/TLS、AWS基盤側の通信暗号化を分けて考える必要がある理由を整理しています。</li>
</ul>

<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>
<ul>
<li>クラウドリフトの失敗は構築前に始まっている｜AWS移行でPoC不足が手戻りを招く理由<br />
RDS固有の制約も、構築後に気づけば個別トラブルに見えますが、本質的には構築前のPoCや設計で確認すべき事項です。オンプレミスの前提をそのままクラウドへ持ち込み、後工程で手戻りが発生する構造を、AWSへのクラウドリフト全体の観点から整理しています。</li>
</ul>

<a href="https://sys-univ.com/dev/cloudlift/" title="【第1回】クラウドリフトの失敗は構築前に始まっている｜PoC不足が手戻り・コスト超過・納期遅延を招く理由" 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/34014ea8103fa5e3a36e14fd6df22125-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/08/34014ea8103fa5e3a36e14fd6df22125-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/08/34014ea8103fa5e3a36e14fd6df22125-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/08/34014ea8103fa5e3a36e14fd6df22125-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/08/34014ea8103fa5e3a36e14fd6df22125-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【第1回】クラウドリフトの失敗は構築前に始まっている｜PoC不足が手戻り・コスト超過・納期遅延を招く理由</div><div class="blogcard-snippet internal-blogcard-snippet">クラウド移行（AWSへのクラウドリフト）で起きる手戻り・コスト超過・納期遅延は、構築中ではなくPoC不足から始まります。Auto Scaling、EFS/EBS、RDS、監視、バックアップ、ライセンスなど10の設計リスクを現場目線で整理します。</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>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sys-univ.com/aws/rdsforora/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-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">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>【第1回】クラウドリフトの失敗は構築前に始まっている｜PoC不足が手戻り・コスト超過・納期遅延を招く理由</title>
		<link>https://sys-univ.com/dev/cloudlift/</link>
					<comments>https://sys-univ.com/dev/cloudlift/#respond</comments>
		
		<dc:creator><![CDATA[ナギ]]></dc:creator>
		<pubDate>Thu, 20 Aug 2026 01:53:54 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[システム開発]]></category>
		<guid isPermaLink="false">https://sys-univ.com/?p=1329</guid>

					<description><![CDATA[この記事は「クラウドリフトPoCで設計リスクを潰す」全3回シリーズの第1回です。 本シリーズでは、クラウドリフトのトラブルを個別の設定ミスとしてではなく、構築前に残った設計リスクという観点から整理します。 【第1回】この [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>この記事は「クラウドリフトPoCで設計リスクを潰す」全3回シリーズの第1回です。</strong></p>
<p>本シリーズでは、クラウドリフトのトラブルを個別の設定ミスとしてではなく、<strong>構築前に残った設計リスク</strong>という観点から整理します。</p>
<ul>
	<li>
<p><strong>【第1回】この記事</strong><br />
クラウドリフトの失敗は構築前に始まっている｜PoC不足が手戻りを招く理由</p>
</li>
	<li>
<p><a href="https://sys-univ.com/dev/cloudlift-poc-risk-1/"><strong>【第2回】クラウドリフトPoCの設計リスク｜可用性・性能・ストレージ・バックアップ・監視</strong></a></p>
</li>
	<li>
<p><a href="https://sys-univ.com/dev/cloudlift-poc-risk-2/"><strong>【第3回】クラウドリフトPoCの設計リスク｜ジョブ・セキュリティ・ライセンス・DB互換性・コスト</strong></a></p>
</li>
</ul>
<p><strong><span style="font-size: 16px;">はじめに</span></strong></p>
<p>「AWSに移行したのに、なぜか現場が疲弊している」</p>
<p>「構築フェーズに入ってから想定外の問題が続き、スケジュールが削られていく」</p>
<p>クラウドリフトでは、こうしたことが実際に起こります。</p>
<p>クラウドリフトは、既存システムを大きく変更せずクラウドへ移行する方式ですが、オンプレミスで成立していた設計前提が、AWSでもそのまま成立するとは限りません。</p>
<ul>
	<li>性能が出ない。</li>
	<li>別AZでEC2を起動したのに、OS内部のルート情報が原因で通信できない。</li>
	<li>Auto ScalingでEC2は再作成されたのに、監視やジョブ実行の対象として認識されない。</li>
	<li>RDSへ移行してから、オンプレミスOracleと同じ運用ができないことに気づく。</li>
	<li>現場では、それぞれ「設定ミス」「確認不足」「製品仕様の見落とし」として見えます。</li>
</ul>
<p>プロジェクト全体で振り返ると、共通点があります。</p>
<p><strong>クラウドリフトの失敗は、構築前に始まっている。</strong></p>
<p>問題が表面化するのは構築や試験の段階でも、その原因はもっと前に作られていることがあります。</p>
<ul>
	<li>PoCで確認すべきことを残したまま基本設計へ進む。</li>
	<li>AWS上で成立するか確認していない処理方式を、オンプレミスの前提で決める。</li>
	<li>AWSサービスの仕様、制約、運用モデル、課金条件を十分に確認しないまま構築へ進む。</li>
</ul>
<p>こうして残った設計リスクが、後工程で一つずつトラブルとして表面化します。</p>
<p>この記事では、クラウドリフトで発生する個別トラブルを、<strong>PoC不足によって未解消のまま残った設計リスク</strong>という観点から整理します。</p>
<p><strong>この記事で分かること</strong></p>
<p>ポイントは次の3つです。</p>
<ul>
	<li>
<p>クラウドリフトのトラブルは、構築中に突然始まるわけではない</p>
</li>
	<li>
<p>多くの場合、構築前に確認すべき設計リスクが残っている</p>
</li>
	<li>
<p>PoCは「動くか」だけを確認するのではなく、後工程の手戻りを防ぐための設計判断材料である</p>
</li>
</ul>
<p>なぜクラウドリフトの失敗が「構築前」に始まっているのか。まず、実際のトラブルがどのように見えるのかから整理します。</p>



  <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">クラウドリフトのトラブルは「個別事象」に見える</a></li><li><a href="#toc2" tabindex="0">個別トラブルに見えるものの正体</a></li><li><a href="#toc3" tabindex="0">クラウドリフトで崩れるのは技術ではなくQCD</a></li><li><a href="#toc4" tabindex="0">AWSではオンプレの設計思想がそのまま通用しない</a></li><li><a href="#toc5" tabindex="0">それでもクラウドリフトは避けにくい</a></li><li><a href="#toc6" tabindex="0">PoCは「試しに動かすこと」ではない</a></li><li><a href="#toc7" tabindex="0">なぜPoCで気づけなかったのか</a></li><li><a href="#toc8" tabindex="0">まとめ：失敗はPoC不足から始まる</a></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">たとえば、<a href="https://sys-univ.com/category/aws/">これまでの記事</a>でも以下のようなテーマを扱ってきました。</p>


<ul id="96cc845e-cfc7-4bee-99c3-44f1934c7999" class="wp-block-list">
	<li><strong>アクセス・起動</strong>：AMIから起動したEC2でSSHログインできない</li>


	<li><strong>AZ障害・復旧</strong>：別AZで起動したWindowsが、OS内のルート情報により通信できない</li>


	<li><strong>可用性</strong>：Auto ScalingでEC2は再作成されたが、業務復旧まで到達しない</li>


	<li><strong>運用・ログ</strong>：CloudWatch LogsのS3エクスポートが想定通り動かない</li>


	<li><strong>バックアップ</strong>：AWS Backupの「5日保存」を「5営業日保存」と誤解する</li>


	<li><strong>ストレージ</strong>：EBSは容量拡張は比較的容易だが、縮小には再作成とデータ移行が必要になる。EFS/EBSの使い分けで性能・復旧方式が変わる</li>


	<li><strong>データベース</strong>：RDS for Oracleの制約により、オンプレOracleと同じ運用ができない</li>


	<li><strong>運用・共通</strong>：ジョブ管理や監視方式をクラウド移行後に見直す必要が出る</li>


	<li><strong>ライセンス</strong>：Microsoft製品や商用製品は、技術的に動いても、AWS上での利用がライセンスやサポート条件上認められない場合がある</li>


	<li><strong>クラウド責任分界</strong>：クラウドがストレージ障害を吸収しても、IaaS/SaaS境界の外側にあるOS領域は利用者側の責任。ログ肥大化によるOS領域枯渇が盲点になる</li>
</ul>


<p class="wp-block-paragraph">こうしたトラブルを一つひとつ見ると、個別の設定ミスや確認不足に見えます。</p>


<ul>
	<li>SSHの設定ミス。</li>
	<li>OS内部のルート情報の見落とし。</li>
	<li>cloud-init の理解不足。</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"><strong>クラウドリフトで発生する個別トラブルの多くは、PoC不足による設計リスクの未解消として説明できる。</strong></p>


<h2 class="wp-block-heading"><span id="toc2">個別トラブルに見えるものの正体</span></h2>


<p class="wp-block-paragraph">クラウドリフトの怖さは、トラブルが発生した瞬間ではありません。</p>


<p class="wp-block-paragraph">本当に怖いのは、その時点ではすでに設計、構築、試験、運用設計、見積、スケジュールが進んでおり、<strong>手戻りが大きくなっていること</strong>です。</p>


<p class="wp-block-paragraph">たとえば、構築フェーズで以下のような問題が分かったとします。</p>


<ul id="dd562a2b-8f4c-4d6b-9b94-8f45a147231e" class="wp-block-list">
	<li>この運用はAWSではそのままできない</li>


	<li>このミドルウェアはAmazon Linuxでは動かない</li>


	<li>RDS for Oracleでは、オンプレOracleと同じチューニングができない</li>


	<li>EFSの性能では、業務処理のレイテンシ要件を満たせない</li>


	<li>既存のジョブ管理製品をそのまま使うと、クラウド環境での運用に合わない</li>


	<li>サーバー上のExcel帳票生成が、ライセンスやサポート上の理由でそのまま使えない</li>
</ul>


<p class="wp-block-paragraph">この時点で設計を変えようとすると、影響はかなり大きくなります。</p>


<ul>
	<li>設計書を直すだけでは済みません。</li>
	<li>構築手順も変わります。</li>
	<li>パラメータシートも変わります。</li>
	<li>試験項目も変わります。</li>
	<li>運用手順も変わります。</li>
	<li>顧客説明も必要になります。</li>
	<li>場合によっては、見積とスケジュールも変わります。</li>
</ul>


<p class="wp-block-paragraph">これがクラウドリフトの手戻りです。</p>


<p class="wp-block-paragraph">単なる技術トラブルではありません。<br />
プロジェクト全体のQCDを崩す問題になります。</p>


<h2 class="wp-block-heading"><span id="toc3">クラウドリフトで崩れるのは技術ではなくQCD</span></h2>


<p class="wp-block-paragraph">クラウドリフトで発生する問題は、最初は技術課題として見えます。</p>


<ul>
	<li>ログインできない。</li>
	<li>通信できない。</li>
	<li>性能が出ない。</li>
	<li>バックアップが想定通りに戻せない。</li>
	<li>監視がうまく飛ばない。</li>
	<li>ライセンスが使えない。</li>
</ul>


<p class="wp-block-paragraph">しかし、プロジェクトとして見ると、それは技術課題だけでは終わりません。</p>


<p class="wp-block-paragraph">実際には、次のような形でQCD全体に波及します。</p>


<ul id="9293e8cc-9962-4d3a-8966-ad94ce3a13e3" class="wp-block-list">
	<li>コスト超過</li>


	<li>スケジュール遅延</li>


	<li>品質劣化</li>


	<li>設計手戻り</li>


	<li>試験やり直し</li>


	<li>運用設計の再検討</li>


	<li>顧客説明の増加</li>


	<li>プロジェクトメンバーの疲弊</li>
</ul>


<p class="wp-block-paragraph"><strong>特に危険なのは、性能、ストレージ、DB、運用方式に関する問題です。</strong></p>


<p class="wp-block-paragraph">これらは、設定値を少し変えれば解決するとは限りません。</p>


<p class="wp-block-paragraph">たとえば、PoC不足により、EFSの性能が本番相当負荷で足りないと後から分かったとします。</p>


<p class="wp-block-paragraph">その場合、単にスループット設定を上げれば済むかもしれません。<br />
しかし、それでも性能目標に届かない場合は、ファイル配置や処理方式そのものを見直す必要が出ます。</p>


<ul>
	<li>EFSを使う前提だったものを、EC2＋EBS構成に変える。</li>
	<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">さらにPM/PLの視点で見ると、影響は技術チームの中だけでは収まりません。</p>


<ul>
	<li>基本設計を直す。</li>
	<li>詳細設計を直す。</li>
	<li>構築手順を直す。</li>
	<li>試験計画を見直す。</li>
	<li>性能試験の前提を変える。</li>
	<li>運用手順を作り直す。</li>
	<li>顧客へ変更理由を説明する。</li>
	<li>追加費用とスケジュール延伸を調整する。</li>
</ul>


<p class="wp-block-paragraph">この連鎖が発生します。</p>


<figure id="14b4a191-6d29-404b-b761-0ecf50129a5b" class="wp-block-image"><a href="https://assets.st-note.com/img/1780706158-7SVkMI8JxUKFqQsZcHiP2p3w.png?width=2000&amp;height=2000&amp;fit=bounds&amp;quality=85"><img decoding="async" src="https://assets.st-note.com/img/1780706158-7SVkMI8JxUKFqQsZcHiP2p3w.png?width=1200" alt="画像" /></a></figure>


<p class="wp-block-paragraph">つまり、クラウドリフトの設計漏れは、技術課題として始まり、最後はQCD課題になります。</p>


<p class="wp-block-paragraph">これを構築後や試験中に初めて認識するのは、かなり危険です。</p>


<h2 class="wp-block-heading"><span id="toc4">AWSではオンプレの設計思想がそのまま通用しない</span></h2>


<p class="wp-block-paragraph">クラウドリフトは、オンプレのサーバをAWS上のEC2に置き換えるだけの作業ではありません。</p>


<p class="wp-block-paragraph">ここを誤解すると、設計漏れが増えます。</p>


<p class="wp-block-paragraph">オンプレ環境では、比較的自由に設計できたものが多くあります。</p>


<ul>
	<li>OS設定。</li>
	<li>ミドルウェア設定。</li>
	<li>ストレージ構成。</li>
	<li>ネットワーク構成。</li>
	<li>監視方式。</li>
	<li>ジョブ管理。</li>
	<li>バックアップ方式。</li>
	<li>セキュリティ設定。</li>
	<li>HA構成。</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">一方、AWSでは違います。</p>


<ul>
	<li>AWSサービスの仕様があります。</li>
	<li>マネージドサービスの制約があります。</li>
	<li>課金体系があります。</li>
	<li>メンテナンスの考え方があります。</li>
	<li>責任共有モデルがあります。</li>
	<li>IAM、Security Group、CloudWatch、RDS、EFS、EBS、S3など、AWS側の設計思想があります。</li>
</ul>


<p class="wp-block-paragraph">つまり、プラットフォームがAWSに変わる以上、『非機能要件の実現手段』は必ず変わります。</p>


<p class="wp-block-paragraph">正確には、こうです。</p>


<p class="wp-block-paragraph"><strong>オンプレで暗黙的に成立していた設計を、AWSのサービス仕様、制約、課金体系、運用モデルの上で再検証する必要がある。</strong></p>


<p class="wp-block-paragraph">ここをPoCで確認せずに進めると、後から詰まります。</p>


<p class="wp-block-paragraph">たとえば、オンプレではサーバが固定されている前提で、監視やジョブ管理を設計していたかもしれません。</p>


<p class="wp-block-paragraph">しかし、AWSではAuto Scalingや復旧方式によって、EC2が入れ替わる前提になる場合があります。</p>


<p class="wp-block-paragraph">この時、EC2が起動すれば終わりではありません。</p>


<ul>
	<li>ホスト名はどうするのか。</li>
	<li>DNS登録はどうするのか。</li>
	<li>監視対象への登録はどうするのか。</li>
	<li>ジョブ実行対象としてどう認識させるのか。</li>
	<li>ログ出力先はどうするのか。</li>
	<li>障害時の運用手順はどう変わるのか。</li>
</ul>


<p class="wp-block-paragraph">ここまで確認して初めて、業務復旧と言えます。</p>


<p class="wp-block-paragraph">EC2が起動しただけでは、業務復旧ではありません。</p>


<p class="wp-block-paragraph">また、クラウドリフトはクラウドネイティブ化とも違います。</p>


<p class="wp-block-paragraph">クラウドリフトの目的は、多くの場合、既存システムを大きく作り替えることではありません。<br />
オンプレで動いているシステムを、できるだけ低リスク、低コスト、短期間でクラウド上に移すことです。</p>


<p class="wp-block-paragraph">そのため、既存の設計思想や運用方式をある程度踏襲することになります。</p>


<p class="wp-block-paragraph">しかし、ここに難しさがあります。</p>


<ul>
	<li>既存設計を踏襲したい。</li>
	<li>でも、AWSではそのまま実現できないことがある。</li>
	<li>マネージドサービスを使えば楽になる部分もある。</li>
	<li>しかし、既存運用と合わない部分もある。</li>
	<li>クラウドネイティブに寄せすぎると、アプリ改修や運用変更が増える。</li>
	<li>オンプレ方式を無理に残すと、クラウドの良さを活かせず、コストも運用も重くなる。</li>
</ul>


<p class="wp-block-paragraph">このバランスを見極める必要があります。</p>


<p class="wp-block-paragraph">だからPoCが重要になります。</p>


<h2 class="wp-block-heading"><span id="toc5">それでもクラウドリフトは避けにくい</span></h2>


<p class="wp-block-paragraph">クラウドリフトは難しい。<br />
しかし、避け続けることも難しいのが現実です。</p>


<p class="wp-block-paragraph">政府系・公共系では、クラウド・バイ・デフォルトの流れがあります。<br />
民間企業でも、データセンター更改、ハードウェアEOL、OS・ミドルウェア保守切れ、オンプレ運用人材の不足、災害対策、拡張性確保、初期投資抑制といった理由から、クラウド利用を検討する場面が増えています。</p>


<figure id="7709a846-b55b-457f-a102-3cc42396b908" class="wp-block-image"><a href="https://assets.st-note.com/img/1781147181-DrxEqCR6HZzs714MKOpkhF5G.png?width=2000&amp;height=2000&amp;fit=bounds&amp;quality=85"><img decoding="async" src="https://assets.st-note.com/img/1781147181-DrxEqCR6HZzs714MKOpkhF5G.png?width=1200" alt="画像" /></a></figure>


<p class="wp-block-paragraph">だからこそ、効率よく、リスクを抑えて進める必要があります。</p>


<p class="wp-block-paragraph">そのために必要なのは、大きく3つです。</p>


<ul>
	<li>1つ目は、実案件の事例を収集する<br />
AWS公式ドキュメントを読むことは大切ですが、それだけでは、既存運用との衝突、ライセンス制約、性能特性、バックアップの戻し方といった落とし穴は見えにくいです。実際に起きたトラブルの事例から学ぶことが重要です。</li>
</ul>


<ul>
	<li>2つ目は、質の高いPoCを実施する<br />
「EC2上でアプリが起動した」で終わるPoCでは、設計リスクは潰せません。本番相当の負荷、障害時の復旧、監視、ジョブ、バックアップまで含めて検証シナリオに落とし込んで初めて、基本設計の判断材料になります。</li>
</ul>


<ul>
	<li>3つ目は、リフト経験者を含めたチームを作る<br />
インフラエンジニアだけでは業務影響を判断しきれず、業務SEだけではAWSの制約やストレージ、ネットワークの設計リスクを判断しきれません。クラウド有識者、既存システム有識者、業務・アプリ担当、インフラ基盤・処理方式担当を巻き込み、PoCで分かったことを設計、試験、運用、見積へ反映する体制が必要です。</li>
</ul>


<h2 class="wp-block-heading"><span id="toc6">PoCは「試しに動かすこと」ではない</span></h2>


<p class="wp-block-paragraph">ここまでの話を踏まえると、PoCの意味が少し変わって見えるはずです。</p>


<p class="wp-block-paragraph">PoCと聞くと、「試しに作ってみる」「動くか確認する」というイメージを持つかもしれません。</p>


<p class="wp-block-paragraph">もちろん、それも間違いではありません。</p>


<p class="wp-block-paragraph">しかし、クラウドリフトにおけるPoCをそれだけで捉えると危険です。</p>


<p class="wp-block-paragraph">PoCで確認するのは、AWSサービスが使えるかどうかだけではありません。</p>


<p class="wp-block-paragraph">既存業務の処理方式、運用方式、復旧方式、名前解決、バックアップ、監視、ジョブ、ファイル更新方式、DB運用、ライセンス、コストが、クラウド上の構成で成立するか。</p>


<p class="wp-block-paragraph">そこまで確認して初めて、PoCの結果を基本設計の判断材料にできます。</p>


<p class="wp-block-paragraph">たとえば、次のような確認だけでは不十分です。</p>


<ul id="3cfc31db-d34f-4c76-b557-6005abf7f123" class="wp-block-list">
	<li>EC2でアプリケーションが起動した。</li>


	<li>EFSでファイルを読み書きできた。</li>


	<li>RDSに接続できた。</li>


	<li>CloudWatch Logsにログが出た。</li>


	<li>AWS Backupのジョブが成功した。</li>
</ul>


<p class="wp-block-paragraph">これらは大事な確認です。<br />
ただし、それだけでは「業務で使える」とは言えません。</p>


<p class="wp-block-paragraph">オンプレ時代の検証では、プロトタイプアプリケーションを作り、主要な処理を流して、基盤上でアプリケーションが動くことを確認する、という進め方もありました。</p>


<p class="wp-block-paragraph">もちろん、それ自体が無意味だったわけではありません。<br />
サーバ、OS、ミドルウェア、ネットワーク、ストレージの基本的な組み合わせを確認するうえでは、有効な検証です。</p>


<p class="wp-block-paragraph">しかし、クラウドリフトでは、それだけでは足りません。</p>


<p class="wp-block-paragraph">AWS上でアプリケーションが起動することと、クラウド上の構成で業務が安定して回ることは違います。</p>


<p class="wp-block-paragraph">EC2が起動しても、ホスト名、DNS登録、監視、ジョブ実行対象、ログ収集先、ミドルウェア起動まで回らなければ、業務復旧とは言えません。</p>


<p class="wp-block-paragraph">EFSでファイルを読み書きできても、本番相当のファイル数、ディレクトリ構造、排他制御、ファイル差し替え、バックアップ、リストアまで成立しなければ、業務で使えるとは言えません。</p>


<p class="wp-block-paragraph">CloudWatch Logsにログが出ても、運用で必要なタイミングに確認できるのか、通知すべきアラームと通知抑止すべきメッセージを整理できるのか、試験工程へ監視観点を引き継げるのかを見なければ、運用設計にはつながりません。</p>


<p class="wp-block-paragraph">バックアップジョブが成功しても、必要なデータを、必要な時間内に、整合性を保って戻せるとは限りません。</p>


<p class="wp-block-paragraph">つまり、PoCで見るべきなのは、「AWS上でとりあえず動くか」だけではありません。</p>


<ul>
	<li>既存の機能要件・非機能要件・運用要件を、AWS上でどの方式なら現実的に満たせるのか。</li>
	<li>既存設計を踏襲するのか。</li>
	<li>マネージドサービスに置き換えるのか。</li>
	<li>商用製品を継続するのか。</li>
	<li>代替製品に変えるのか。</li>
	<li>クラウドネイティブなサービスに寄せるのか。</li>
</ul>


<p class="wp-block-paragraph">この判断をするためにPoCがあります。</p>


<p class="wp-block-paragraph">では、具体的に何を判断するのでしょうか。</p>


<ul>
	<li>その構成で基本設計に進んでよいのか。</li>
	<li>その運用方式で本番後も回せるのか。</li>
	<li>そのサービス仕様で既存要件を満たせるのか。</li>
	<li>そのコストでプロジェクト計画に収まるのか。</li>
</ul>


<p class="wp-block-paragraph">こうした設計判断に使えるPoCでなければ、後工程の手戻りを防ぐことはできません。</p>


<p class="wp-block-paragraph">クラウドリフトのPoCは、単なる動作確認ではありません。</p>


<p class="wp-block-paragraph"><strong>基本設計に入る前に、クラウド上で成立する処理方式、構成方式、運用方式、復旧方式、コスト感を見極めるための設計リスク潰しです。</strong></p>


<p class="wp-block-paragraph">ここが最も重要です。</p>


<p class="wp-block-paragraph">たとえば、以下のような確認は、単なる動作確認ではありません。</p>


<ul id="71df7e68-a94d-434e-a305-312d1e2b39ec" class="wp-block-list">
	<li>RDS for Oracleで、既存DBの可用性・性能要件を満たせるか</li>


	<li>EFSで、共有ファイルの性能要件を満たせるか</li>


	<li>AWS Backupで、必要な世代管理とリストア要件を満たせるか</li>


	<li>CloudWatch中心の監視で、既存運用を置き換えられるか</li>


	<li>JP1を継続するのか、ZabbixやHinemosなどに置き換えるのか</li>


	<li>既存のセキュリティポリシーをAWS上のIAMやSecurity Groupへどう落とすのか</li>


	<li>BYOLかMarketplaceかで、ライセンス費用やサポート条件はどう変わるのか</li>


	<li>RHELを継続するのか、Amazon Linuxへ寄せるのか</li>


	<li>その場合、既存ライブラリや運用スクリプトは動くのか</li>


	<li>開発環境や試験環境の利用時間増加が、クラウド利用料にどれだけ影響するのか</li>
</ul>


<p class="wp-block-paragraph">これらはすべて、後工程で発覚すると危険な設計リスクです。</p>


<p class="wp-block-paragraph">PoCで潰すべきなのは、こういう論点です。</p>


<h2 class="wp-block-heading"><span id="toc7">なぜPoCで気づけなかったのか</span></h2>


<p class="wp-block-paragraph">クラウドリフトで怖いのは、AWSの機能を知らないことだけではありません。</p>


<p class="wp-block-paragraph">もっと怖いのは、クラウドリフト固有のリスクを洗い出す機会が、プロジェクト計画の中に十分に組み込まれていないことです。</p>


<p class="wp-block-paragraph">しかし、実際のプロジェクトではこれが簡単ではありません。</p>


<p class="wp-block-paragraph">既存システムを、AWSの仕様、制約、課金体系、運用モデルの上に再配置する。</p>


<p class="wp-block-paragraph">それがクラウドリフトです。</p>


<p class="wp-block-paragraph">だから、PoCが必要になります。</p>


<p class="wp-block-paragraph">ただし、PoCだけですべての設計リスクを見つけられるとは限りません。</p>


<p class="wp-block-paragraph">事前にシナリオを立てても、実際には想定外の問題が出ます。</p>


<p class="wp-block-paragraph">重要なのは、そこで出た問題を個別対応で終わらせないことです。</p>


<ul>
	<li>なぜ見落としたのか。</li>
	<li>どの設計リスクに分類されるのか。</li>
	<li>次の工程へ何を引き継ぐべきか。</li>
</ul>


<p class="wp-block-paragraph">ここまで整理して初めて、PoCは後工程の手戻りを防ぐ材料になります。</p>


<h2 class="wp-block-heading"><span id="toc8">まとめ：失敗はPoC不足から始まる</span></h2>


<p class="wp-block-paragraph">オンプレミスで暗黙的に成立していた設計前提が、AWSでも同じように成立するとは限りません。</p>
<p>その違いを構築後に見つけると、修正は一つの設定変更では終わりません。設計の見直し、追加試験、運用手順の変更、スケジュール調整、追加費用まで波及します。</p>
<p>PoCは「AWS上で動くか」だけを試す作業ではありません。後工程で大きな手戻りになる設計リスクを、構築前に洗い出すための検証です。</p>
<p>クラウドリフトのPoCで確認しておきたい観点は、次の10項目です。</p>
<p>1. 可用性・信頼性<br />
2. 性能・キャパシティ<br />
3. ストレージ<br />
4. バックアップ<br />
5. 運用・監視<br />
6. ジョブ管理・アプリ配布<br />
7. セキュリティ・アクセス管理<br />
8. ライセンス・製品サポート<br />
9. DB・OS・ミドルウェア互換性<br />
10. コスト・キャパシティ管理</p>
<p>この10項目は、チェックリストとして埋めれば終わりではありません。</p>
<p>見るべきなのは「動いたか」ではなく、想定と違った場合に設計・試験・運用・見積へどこまで影響するかです。構築前に未確認のまま残した項目と、オンプレミスの前提をそのまま持ち込んだ設計が、後工程で最も高くつきます。</p>
<p>10項目の詳細は、前編・後編で整理しています。</p>
<ul>
	<li><strong>【第2回】クラウドリフトPoCの設計リスク｜可用性・性能・ストレージ・バックアップ・監視</strong><br />
可用性、性能、ストレージ、バックアップ、監視について、クラウドリフトPoCで何を確認し、設計へどう反映するかを整理しています。</li>
</ul>

<a href="https://sys-univ.com/dev/cloudlift-poc-risk-1/" title="【第2回】クラウドリフトPoCの設計リスク｜可用性・性能・ストレージ・バックアップ・監視" 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/ed4ffad86310a20a2bb16109c2a6c4ae-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/06/ed4ffad86310a20a2bb16109c2a6c4ae-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/06/ed4ffad86310a20a2bb16109c2a6c4ae-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/06/ed4ffad86310a20a2bb16109c2a6c4ae-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/06/ed4ffad86310a20a2bb16109c2a6c4ae-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【第2回】クラウドリフトPoCの設計リスク｜可用性・性能・ストレージ・バックアップ・監視</div><div class="blogcard-snippet internal-blogcard-snippet">クラウドリフトPoCで「動いた」だけでは、構築・試験・運用まで成立するとは限りません。可用性・性能・ストレージ・バックアップ・監視の5領域について、PoCで確認すべき設計リスクと、見落とした場合の後工程への影響を実務例から整理します。</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>
<ul>
	<li><strong>【第3回】クラウドリフトPoCの設計リスク｜ジョブ・セキュリティ・ライセンス・DB互換性・コスト<br />
</strong>ジョブ、セキュリティ、ライセンス、DB・OS・ミドルウェア互換性、コストについて、後工程の手戻りにつながる設計リスクを整理しています。</li>
</ul>

<a href="https://sys-univ.com/dev/cloudlift-poc-risk-2/" title="【第3回】クラウドリフトPoCの設計リスク｜ジョブ・セキュリティ・ライセンス・DB互換性・コスト" 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/ca294fb99a38ed374a14c4f4940da18c-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sys-univ.com/wp-content/uploads/2026/06/ca294fb99a38ed374a14c4f4940da18c-160x90.png 160w, https://sys-univ.com/wp-content/uploads/2026/06/ca294fb99a38ed374a14c4f4940da18c-120x68.png 120w, https://sys-univ.com/wp-content/uploads/2026/06/ca294fb99a38ed374a14c4f4940da18c-320x180.png 320w, https://sys-univ.com/wp-content/uploads/2026/06/ca294fb99a38ed374a14c4f4940da18c-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回】クラウドリフトPoCの設計リスク｜ジョブ・セキュリティ・ライセンス・DB互換性・コスト</div><div class="blogcard-snippet internal-blogcard-snippet">クラウドリフトPoCで「動いた」だけでは、運用・保守・統制・コスト管理まで成立するとは限りません。ジョブ、セキュリティ、ライセンス、DB・OS・ミドルウェア互換性、コストの5領域について、PoCで確認すべき設計リスクと後工程への影響を実務例から整理します。</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>
<p><strong><span style="font-size: 20px;">関連記事</span></strong></p>
<p>クラウドリフトでは、「暗号化」という要件も一つの設定として扱うのではなく、保存データと通信を分けて確認する必要があります。</p>
<ul>
	<li><strong> RDS for OracleのDBリンクは暗号化されているのか｜KMS暗号化とOracle Net通信は別物</strong><br />
KMSによるRDSストレージ暗号化と、Database LinkのOracle Net通信暗号化の違いを、実案件とAWS・Oracleの公式仕様をもとに整理しています。</li>
</ul>

<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>]]></content:encoded>
					
					<wfw:commentRss>https://sys-univ.com/dev/cloudlift/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
