株式会社ネットワールドのエンジニアがお届けする技術情報ブログです。
各製品のエキスパートたちが旬なトピックをご紹介します。

【AWS】プライベート環境でのEC2のWindows Updateについて

皆様こんにちは!

ネットワールドでAWSやMicrosoftのクラウド製品を担当しているSEの碇です。

 

本日は、プライベート環境にあるEC2インスタンスのWindows Updateについてご説明しようと思います。

早速ですが、皆様はEC2インスタンスのWindows Updateをどのように実施していますか?

インターネット接続ができる環境ですと、Systems Managerを使って自動化するのが一般的かと存じますが、

プライベート環境ではどのように実施するでしょうか?

 

今回は、プライベート環境でWindows Updateを実施する方法についてご説明していきます。

 

目次は以下の通りです。

 

    1. 構成の説明

       

      今回ご説明させていただくWindows Updateの方法は、Windows UpdateのパッチをプライベートなS3バケットからダウンロードし、適用するという方法です。

      AWS構成は下記の通りです。

      AWS構成図

      Windows Updateを実施したいEC2インスタンスは、〇で囲っているPrivate EC2の想定です。

      なお、プライベートなS3バケットを構築するために、設計時は下記2点を注意してください。
      ・S3バケットはインターネットからのアクセスを禁止し、Private EC2からの接続のみ許可します。
      ・Private EC2からS3バケットへの接続は、Endpoint経由で実施します。

    2. 事前準備

      事前準備として、Public EC2とPrivate EC2を構築しました。

      ここで忘れてはならないのが、Private EC2にS3のアクセス権限を設定することです。下記の通り、IAMロールの付与を実施してください。

      〇Public EC2

      Public EC2は、Private EC2にリモートデスクトップできるよう、Windows Server OSで構築しました。


      〇Private EC2

      Private 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インスタンスの再起動が必要です。

    3. S3バケットの構築

      続いて、S3バケットを構築します。

      バケットを作成をクリックします。

      バケットを作成


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

      バケット名の入力

      パブリックアクセスのブロック

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

      S3バケットその他の項目


      必要に応じてタグを作成します。
      その他の項目はすべてデフォルトで作成しました。

    4. 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エンドポイント


      設定したプライベートサブネットのルートテーブルを確認すると、エンドポイントのルートが作成されていることが確認できます。

      プライベートサブネットのルートテーブル

       

       

    5. 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のパス

    6. 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から同じコマンドを実施すると、想定通りアクセスが拒否されました。

      S3バケットポリシーでアクセス許可されていないPublicEC2からは接続できない
      なお、awsコマンドが実行できない場合は下記の通りインストールを実施してください。

      Installing, Updating, and Uninstalling the AWS CLI version 1 on Windows - AWS Command Line Interface

    7. 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のパッチがコピーされていました。

      エクスプローラーへコピーできていることを確認

       

    8. まとめ

      今回ご説明した作業を以下にまとめます。

      ①パッチを適用したいEC2インスタンスに、S3のアクセス権限を与えます。
      アクセス権限はIAMロールで設定します。
      ⇒2.事前準備

      ②パッチ格納用のS3バケットを作成します。
      ⇒3.S3バケットの構築

      ③S3バケットはパブリックアクセスをオフに設定し、Private EC2があるVPCのVPCエンドポイントからのみアクセスできるように設定します。
      ⇒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を実施する方法についてご説明しました。

      この記事が参考になれば幸いです。