EC2にデプロイしたDataSync Agentを外部ネットワークを経由せずにアクティベーションしてみた

    EC2にデプロイしたDataSync Agentを外部ネットワークを経由せずにアクティベーションしてみた

    目次

       

      概要

      クラウドインテグレーション部クラウドソリューション1課の沖本です。

      昨今ではセキュリティ意識も高まっており、システムの管理体制ごとに多様なセキュリティポリシーが作成されています。
      その中でも情報資産を含むデータのやり取りとなると、保管場所や移行経路など、よりセンシティブな扱いが求められる場合も多いと思います。

      本記事では、AWS DataSyncの中でも、DataSync Agentを用いて外部ネットワークを経由せずにデータ移行を行う方法を紹介します。

      具体的には、 EC2 Instance Connectを用いてアクティベーションコードを取得する方法を紹介します。

      AWS DataSyncとは

      AWS DataSyncとは、AWSリソースとオンプレミス、その他のパブリッククラウド間のデータ転送を可能とするフルマネージドサービスです。

      ユースケースとしては、オンプレミスからクラウドへの移行としてファイルシステムサーバ内のデータをAmazon EFSへ転送したり、AWSリソース間(EFS→S3)でのデータ移行といったものが挙げられます。

      DataSyncでのデータ通信自体は外部ネットワークを経由することはありませんが、アカウント間でのデータ転送時などに必要となるDataSycn Agentを利用するケースにおいては、そのアクティベーション時に一工夫が必要となります。

      構築した環境の構成図は以下の通りです。

      DataSyncを利用して、異なるリージョンにあるEFSのデータを同期するケースを想定しております。

      今回の記事ではDataSync Agentのアクティベーションまでの紹介となりますが、DataSyncの構成の一例として参考にしていただければと思います。

      202404_DataSyncAgent_01


      構成のポイント

      ・異なるアカウント間でDataSyncを利用するには、DataSync Agtentが必要

      DataSync AgtentはオンプレミスからAWSへのデータ転送を行う際に必要となるイメージがありますが、AWS間のデータ転送においてもアカウント間の転送の場合にはDataSync Agentが必要となります。

      参考:AWS Document DataSync UserGuid DataSync Agent


      今回はVPC間(別リージョン)で構成しているので、本来はエージェント不要でデータ転送となりますが、手順自体はアカウント間の場合と共通です。

      アカウント間でのDataSyncの利用については、以下のAmazon Web Services ブログ記事にも類似の構成が紹介されていますので、参考にして頂けたらと思います。

      Transferring file data across AWS Regions and accounts using AWS DataSync

      ・DataSyncエージェントのポート80への外部からのアクセスを有効としない。

      DetaSync Agentをアクティベーションする方法として、

      ①エージェントからアクティベーションキーを自動的に取得
      ②手動でのアクティベーションキーの取得

      があります。

      このうち①については、エージェント側でブラウザからのポート80でのアクセスを許可する必要があるため、

      ア:ローカルのIPを許可しインターネットを経由する方法
      イ:ブラウザを利用可能なEC2インスタンス(Windows Serverなど)をエージェントと同じネットワークに起動する方法

      などが考えられますが、
      アについては一時的とはいえ、パブリックを経由してのアクセスを許可することが難しい場合には採用できません。 またイについてもアクティベーションコードの取得のみのためにブラウザ操作可能なインスタンスをデプロイするとなると、ややオーバースペックである点は否めません。

      そこで今回は②の手動でのアクティベーションキーの取得を考えます。

      また、操作の容易さの観点からLinuxインスタンスを用いたコマンドアクティベーションコード取得手段として以下の2パターンを考えました。

      ⅰ AWS Systems Manager Session Manager(以下「SSM Session Maneger」)による接続
      ⅱ EC2 Instasnce Connectによる接続

      ⅰのSSM Session Managerは、エンドポイント経由でhttpsによりEC2インスタンスに接続する方法で、セキュアにEC2インスタンスに接続する方法としては一般的です。

      ⅱのEC2 Instasnce Connectは2023年に追加されたサービスで、EC2 Instance Connect Endpointを経由することでパブリックIPv4アドレスがないEC2インスタンスに対して、SSHまたはRDP接続することが可能となります。

      どちらのサービスを用いても、パブリックを経由せずにEC2インスタンスへアクセスすることが可能です。

      SSM Session Manegerに比べ、コスト的なメリットや設定方法の簡便さがあるため、今回はⅱのEC2 Instasnce Connectを用いた方法を紹介したいと思います。

      なお、EC2 Instasnce ConnectとSSM Session Managerの比較については本ブログに詳細な記事がありますので、そちらもご覧いただければと思います。

      EC2 Instance Connect Endpointが公開されたので触ってみた

      構成図では赤く囲った部分となります。

      202404_DataSyncAgent_02

      実際にやってみた

      では、DataSync Agentをデプロイし、アクティベーションを行ってみましょう。

      各リージョンにVPC・サブネットは作成し、VPC間はピアリング接続によって通信可能な状態にしてあります。
      また、それぞれのサブネットにマウントターゲットを配置したEFSもデプロイ済みとなります。

      1. DataSync Agentのデプロイ

      転送元VPCにDataSync Agentをデプロイします。

      以下のコードをCloudShellで入力し、最新のDataSync Agent用のAMIを取得します。 今回は転送元のVPCへのデプロイを行うため、ap_northeast-1を指定しています。

      他のリージョンを利用する場合は、適宜変更してください。

      aws ssm get-parameter --name /aws/service/datasync/ami --region ap-northeast-1

      202404_DataSyncAgent_03ここで取得したAMIを使って、EC2インスタンスにDataSync Agentをデプロイします。

      DataSync AgentをEC2インスタンスでデプロイする際の要件については公式ドキュメントに指定があるため、それに従い設定します。

      AWS DataSync Agent要件 - AWS DataSync

      先ほど取得したAMIを貼り付けて、エンターキーを押下します。

      202404_DataSyncAgent_04

      [コミュニティ AMI]タブを選択すると、最新のDataSync Agent用のAMIが表示されるので、[選択]を選びます。

      202404_DataSyncAgent_05

      インスタンスタイプも以下のように指定があります。

      ユースケース インスタンスタイプ
      最大 2,000 万個のファイルを転送する場合 m5.2xlarge
      2,000 万個を超えるファイルを転送する場合 m5.4xlarge

      今回はm5.2xlargeを選択します。
      いずれにしても高めのインスタンスクラスなので、検証が終わったら消し忘れのないようにしたいですね。

      202404_DataSyncAgent_06

      VPCは転送元のものを選び、また、プライベートサブネットを選択します。 パブリックからの接続は行わないため、パブリックIPの自動割り当ては無効のままとします。

      202404_DataSyncAgent_07

      セキュリティグループは、ここではインバウンドからの通信を許可せずに作成し、後に修正する形とします。 パブリックからの通信が許される環境であれば、ここでブラウザからアクセス可能なIPからのポート80(http)への通信を許可することで、DataSync Agentのアクティベーションが可能です。

      参考:AWS DataSync Agentの有効化

      202404_DataSyncAgent_08

      その他の設定は変更せずにインスタンスをデプロイします。

      続いて、転送元VPCにアクティベーション用のEC2インスタンスをデプロイします。

      AMIは「Amazon Linux 2023」とします。

      202404_DataSyncAgent_09

      VPC、サブネットは先にデプロイしたDataSyncと同じものを選択します。

      また、セキュリティグループについても同様に一時的にインバウンドからの通信を許可せずに作成します。

      202404_DataSyncAgent_10

      続いて、アクティベーション用インスタンスへの接続設定を行います。

      2. EC2 Instance Connectの設定

      EC2 Instance Connectサービスとの接続のためにVPCエンドポイントを作成します。

      [サービスカテゴリ]では[EC2インスタンス接続エンドポイント]を選択します。

      VPCは転送元として作成したものを選択します。

      202404_DataSyncAgent_11

      [セキュリティグループ]については、必要に応じてアウトバウンドルールを絞ったものを作成します。
      以下ではVPC内への送信のみを許可しています。

      インバウンドルールの設定は不要です。
      202404_DataSyncAgent_12

      上記で作成したセキュリティグループを選択します。

      サブネットは接続先のアクティベーション用インスタンスと同じものを選択します。

      それ以外は変更せずに、[エンドポイントを作成]を選択します。

      202404_DataSyncAgent_13


      アクティベーション用インスタンスへの通信が可能となるようにセキュリティグループを修正します。

      インバウンドルールでEC2 Instance Connect VPCエンドポイントのNICからのSSHが許可されるように設定します。

      今回はエンドポイントにアタッチしたセキュリティグループを指定していますが、もちろんIPの指定でも可能です。

      202404_DataSyncAgent_14

      ここまで設定が進んだら、インスタンスへの接続確認を行います。

      アクティベーション用インスタンスを選択し[接続]>[EC2 Instance Connect]を選択します。

      [EC2 Instance Connect エンドポイントを使用して接続する]を選択し、右下の[接続]を選択します。

      202404_DataSyncAgent_15

       以下のように表示されていれば接続確認は完了です。
      202404_DataSyncAgent_16

      3. DataSync Agentのアクティベーション

      アクティベーション時にDataSyncのVPCエンドポイントのIPアドレスを入力する必要があるため、先に転送先のリージョンでDataSyncのVPCエンドポイントをデプロイします。

       また、VPCエンドポイントにはDataSync Agentからの通信が許可されている必要があるので、適切なインバウンドルールを設定したセキュリティグループを作成しておきます。

      DataSyncエンドポイントのネットワーク要件に従い、以下のようにインバウンドルールを設定します。

      ポート範囲 ソース
      443 DataSync AgentのIPアドレス
      22 同上
      1024-1064 同上

      ※同一リージョン間であればSGでソースを指定可能。

      参考:AWS DataSync ネットワーク要件

      202404_DataSyncAgent_17

      エンドポイントの作成から[サービスカテゴリ]では[AWSのサービス] [サービス]では「com.amazonaws.[region].datasync」を選択します。

      今回は転送先のリージョンがバージニア北部のため、「com.amazonaws.us-east-1.datasync」としました。

      202404_DataSyncAgent_18

      VPCとサブネットは転送先として作成したものを選び、セキュリティグループは先ほど作成したものを選択し、[エンドポイントを作成]を選択します。

      エンドポイントが作成されたら、ENIのIPアドレスを確認しておきます。
      こちらはアクティベーションコードを取得する際に必要となるので、メモしておきます。

      202404_DataSyncAgent_19

      必要な情報が揃ったので、先ほど確認したEC2 Instanse Connectからアクティベーションコードを取得する以下のコマンドを実行します。  

      curl "http://agent-ip-address/?gatewayType=SYNC&activationRegion=aws-region&privateLinkEndpoint=IP address of VPC endpoint&endpointType=PRIVATE_LINK&no_redirect"

      以下の部分は自身の環境に合わせて変更してください。

       

      • agent-ip-address:DataSync AgentのプライベートIPアドレス
      • activationRegion:転送先のリージョン
      • IP address of VPCendpoint:転送先に作成したVPCエンドポイントのNICのIPアドレス

      参考:AWS DataSyncを使用してエージェントを作成する AWS CLI

      202404_DataSyncAgent_20

      アクティベーションコードが取得できましたので、続けてアクティベーションへと進みます。

      転送先リージョンのDataSyncサービスの左ペインから[エージェント]>[エージェントを作成する]と選択します。

      202404_DataSyncAgent_21

      今回はEC2インスタンスにDataSync Agentをデプロイしたので、[ハイパーバイザー]では[Amazon EC2]を選択します。

      202404_DataSyncAgent_22

      [エンドポイントタイプ]では[AWS PrivateLinkを使用したVPCエンドポイント]
      [VPCエンドポイント][サブネット]それぞれ作成したものを、
      [セキュリティグループ]はDataSyncのVPCエンドポイントにアタッチしたものを選択してください。

      202404_DataSyncAgent_23

      [アクティベーションキー]では手動で入力するを選択し、先ほど取得した25文字の値を入力します。

      202404_DataSyncAgent_24

      アクティベーションが成功するとエージェントのステータスが[オンライン]となります。

      202404_DataSyncAgent_25

      これでDataSync Agentのアクティベーションは完了となります。

      試しにデータ転送タスクを行ったところ、無事成功しました。

      202404_DataSyncAgent_26

      まとめ

      以上、プライベート環境にデプロイされたDataSync Agentのアクティベーション方法の紹介でした。

      今回紹介だけになってしまったSSM Session Managerを用いてもアクティベーションは可能ですので、環境に合わせて選択いただければと思います。

      DataSyncはデータ転送を効率的かつ安全に行えるマネージドサービスであり、オンプレミスからの移行に限らない用途での利用が可能です。

      ネットワーク環境等でDataSyncの導入に迷われているようなケースの参考になれば幸いです。