皆様こんにちは!
ネットワールドでAWSやMicrosoftのクラウド製品を担当しているSEの碇です。
本日は、プライベート環境にあるEC2インスタンスのWindows Updateについてご説明しようと思います。
早速ですが、皆様はEC2インスタンスのWindows Updateをどのように実施していますか?
インターネット接続ができる環境ですと、Systems Managerを使って自動化するのが一般的かと存じますが、
プライベート環境ではどのように実施するでしょうか?
今回は、プライベート環境でWindows Updateを実施する方法についてご説明していきます。
目次は以下の通りです。
- 構成の説明
- 事前準備
- S3バケットの構築
- VPC エンドポイントの構築
- S3バケットへのVPCエンドポイントのアクセス権付与
- S3バケットへの接続確認
- S3バケットからPrivate EC2へのオブジェクトコピー
- まとめ
-
-
構成の説明
今回ご説明させていただくWindows Updateの方法は、Windows UpdateのパッチをプライベートなS3バケットからダウンロードし、適用するという方法です。
AWS構成は下記の通りです。
AWS構成図
Windows Updateを実施したいEC2インスタンスは、〇で囲っているPrivate EC2の想定です。
なお、プライベートなS3バケットを構築するために、設計時は下記2点を注意してください。
・S3バケットはインターネットからのアクセスを禁止し、Private EC2からの接続のみ許可します。
・Private EC2からS3バケットへの接続は、Endpoint経由で実施します。 -
事前準備
事前準備として、Public EC2とPrivate EC2を構築しました。
ここで忘れてはならないのが、Private EC2にS3のアクセス権限を設定することです。下記の通り、IAMロールの付与を実施してください。
〇Public EC2Public EC2は、Private EC2にリモートデスクトップできるよう、Windows Server OSで構築しました。
〇Private EC2Private EC2はS3にアクセス、パッチをコピーするなどの権限が必要になります。
下記の通りIAMロールを作成し、EC2インスタンスに付与しました。
IAMロールの作成IAM>ロール>ロールを作成をクリックします。

IAMロールを作成
信頼されたエンティティでAWSのサービス>EC2を選択します。

AWSのサービスを選択 S3の許可ポリシーを追加します。

S3の許可ポリシーを追加
ロール名と、必要に応じてタグを追加したら、ロールを作成をクリックしIAMロールを作成します。
名前、確認、および作成
IAMロールをEC2インスタンスに付与する
IAMロールが作成できたら、EC2インスタンスにアタッチします。
対象のEC2インスタンスを選択し、アクション>セキュリティ>IAMロールを変更をクリックします。

IAMロールをEC2に付与する
IAMロールを選択し、IAMロールの更新をクリックします。
IAMロールの更新
IAMロールを更新した後は、EC2インスタンスの再起動が必要です。 -
S3バケットの構築
続いて、S3バケットを構築します。
バケットを作成をクリックします。

バケットを作成
バケット名を入力します。
バケット名の入力

パブリックアクセスのブロック
今回はプライベートなS3バケットを作成したいので、パブリックアクセスはすべてブロックさせます。

S3バケットその他の項目
必要に応じてタグを作成します。
その他の項目はすべてデフォルトで作成しました。 -
VPC エンドポイントの構築
3.で構築したプライベートなS3バケットに、プライベートIPアドレスからアクセスするため、VPCエンドポイントを作成します。
VPC>エンドポイント>エンドポイントを作成をクリックします。

VPCエンドポイントの作成
AWSのサービスを選択します。
AWSのサービス
サービスはGatewayタイプのcom.amazonaws.ap-northeast-1.s3を選択しました。
サービスの選択
ゲートウェイタイプについて
S3では、ゲートウェイエンドポイントとインターフェースエンドポイントの両方をサポートしています。
今回は、単一のVPCからのアクセスのみを必要としているためゲートウェイエンドポイントを使用しますが、オンプレミスやピアリングされたVPCなどからのアクセスが必要な場合はインターフェースエンドポイントを利用してください。
詳細はAWSドキュメントをご確認ください。AWS PrivateLink for Amazon S3 - Amazon Simple Storage Service
続いてネットワークとルートテーブルを選択します。
Private EC2のVPC、ルートテーブルを選択します。
ネットワーク設定
ポリシーはフルアクセスを選択しました。
ポリシー設定
フルアクセスを選択すると、すべてのリソースに対するすべてのプリンシパルによる VPC エンドポイント経由のすべてのオペレーションを許可します。
それ以外の場合は、カスタムを選択します。
必要に応じてタグを作成し、エンドポイントを作成をクリックします。
エンドポイントを作成
VPCエンドポイントが作成されました。
作成されたVPCエンドポイント
設定したプライベートサブネットのルートテーブルを確認すると、エンドポイントのルートが作成されていることが確認できます。
プライベートサブネットのルートテーブル
-
S3バケットへのVPCエンドポイントのアクセス権付与
VPCエンドポイントが作成できたら、S3バケットに対してVPCエンドポイントのみアクセスを許可するように設定を行います。
対象のS3バケットにアクセスし、アクセス許可>バケットポリシー>編集をクリックします。

アクセス権の付与
下記のポリシーの赤字部分を編集して入力します。赤字の箇所は、この後説明します。
※下記ポリシー適用させると、VPCエンドポイント以外の通信(インターネット経由のAWSコンソール接続を含みます)はすべてブロックされるのでご注意ください。{
"Version": "2012-10-17",
"Id": "Policy1415115909152",
"Statement": [
{
"Sid": "Access-to-specific-VPCE-only",
"Principal": "*",
"Action": "s3:*",
"Effect": "Deny",
"Resource": ["arn:aws:s3:::awsexamplebucket1",
"arn:aws:s3:::awsexamplebucket1/*"],
"Condition": {
"StringNotEquals": {
"aws:SourceVpce": "vpce-1a2b3c4d"
}
}
}
]
}参考資料:
バケットポリシーを使用した VPC エンドポイントからのアクセスコントロール - Amazon Simple Storage Service
ポリシーの編集内容awsexamplebucket1
対象のS3バケットにアクセスし、プロパティ>バージョンの概要>Amazonリソースネーム(ARN)をクリックします。

VPCエンドポイントのARNをコピーする
上記のS3バケットの場合、バケットポリシーは下記のように記載します。
バケットポリシー
vpce-1a2b3c4d
対象のVPCエンドポイントにアクセスし、詳細>エンドポイントIDをクリックします。

エンドポイントIDのコピー
上記のS3バケットの場合、下記のように記載します。
バケットポリシー
>aws s3 cp s3://バケット名/オブジェクト名 C:\Private EC2のパス
-
S3バケットへの接続確認
Private EC2にログインし、S3バケットへCLIでアクセスします。
現在S3バケットにはWindows Updateのパッチが格納されています。

S3に格納されているオブジェクト
Private EC2上で管理者権限でPowershellを実行します。
下記コマンドを実行すると、PowershellからS3バケットに格納されているオブジェクトが確認できました。
>aws s3 ls --region リージョン名 --recursive s3://バケット名

aws s3 lsコマンドで格納オブジェクトを確認(PrivateEC2)
Public EC2から同じコマンドを実施すると、想定通りアクセスが拒否されました。
なお、awsコマンドが実行できない場合は下記の通りインストールを実施してください。
S3バケットポリシーでアクセス許可されていないPublicEC2からは接続できない
Installing, Updating, and Uninstalling the AWS CLI version 1 on Windows - AWS Command Line Interface
-
S3バケットからPrivate EC2へのオブジェクトコピー
続いて、Private EC2にS3バケットからWindows Updateのパッチをコピーします。
Private EC2上で管理者権限でPowershellを実行します。
下記コマンドを実行すると、S3バケットに格納されているオブジェクトをPrivate EC2にコピーすることができました。
>aws s3 cp s3://バケット名/オブジェクト名 C:\Private EC2のパス

aws s3 cpコマンドでオブジェクトコピーする
エクスプローラーを確認すると、Windows Updateのパッチがコピーされていました。

エクスプローラーへコピーできていることを確認 -
まとめ
今回ご説明した作業を以下にまとめます。
①パッチを適用したいEC2インスタンスに、S3のアクセス権限を与えます。
アクセス権限はIAMロールで設定します。
⇒2.事前準備②パッチ格納用のS3バケットを作成します。
③S3バケットはパブリックアクセスをオフに設定し、Private EC2があるVPCのVPCエンドポイントからのみアクセスできるように設定します。
⇒3.S3バケットの構築
⇒4. VPCエンドポイントの構築、5.S3バケットへのVPCエンドポイントのアクセス権付与④S3バケットに格納しているWindows Updateのパッチを、aws s3 cpコマンドでPrivate EC2にコピーします。
⇒6.S3バケットへの接続確認、7.S3バケットからPrivate EC2へのオブジェクトコピー
⑤ダウンロードしたWindows Updateパッチを使って、Windows Updateを実施します。
今回は、VPCエンドポイントを利用してプライベート環境でWindows Updateを実施する方法についてご説明しました。
この記事が参考になれば幸いです。
-