インフラ

【マルチクラウド】Azure Arc で EC2 の SSH 鍵管理から解放されてみよう!【Azure × AWS】

tak

こんにちは、DWS二人目の大島です。

マルチクラウドという言葉を最近よく耳にするようになりましたね。

マルチクラウドとは、その名の通り、複数のクラウドサービスを併用して使用することを表します。

マルチクラウドには、ベンダーロックインを回避できる、高可用性を実現できる、個々のクラウドサービス独自の強みとなるサービスを活用できるなど、さまざまなメリットがあります。

一方で、管理が煩雑になる、各クラウドごとに知識の蓄積が必要になってくる、などデメリットもあります。

今回はそんなマルチクラウド設計の管理の煩雑さの解決に一役買ってくれる、Azureの「Azure Arc」というサービスを活用して、AWS × Azureのマルチクラウドで、よりセキュアかつ一元的なEC2へのアクセス管理を実現してみます!

Azure Arc とは

簡単にいってしまうと、Azure外にあるマシン(オンプレミスや、他クラウドなど)を Azure ポータルから一元管理するためのサービスです。

マシンに対してエージェントを導入することで、Azure ポータル上からマシンに対して、さまざまなオペレーションを実行することが可能です。

例えば、Azure Active Directory (AAD)による一元的なアクセス管理や、Azure Policy による構成管理・マシンの監視などがメニューとして用意されています。

(Azure Active DirectoryとAzure Policyは、今回のメインではないので詳細は省きますが、それぞれAzureから使用できる、ID管理サービスと、ポリシーによる管理・監視サービスです。)

注意事項

  • Azureのユーザー・サブスクリプション、AWSのアカウントをそれぞれもっているものとします。
  • Azure、AWSともにリソースの作成や権限管理などを行う十分なアクセス権限がある前提です。
  • AADベースのSSHアクセスに、Azure CLIが必要です。
  • 課金が発生します。

全体像

Azure Arcのエージェントを使用して、Azure上からEC2を管理し、Azure CLIを用いたAADベースのSSH接続を行います。

さらに、Azure Policyを効かせることで、AADベースでないSSH接続を拒否してよりセキュアな構築を行います。


file


EC2 の準備

まずは、EC2を準備します。
今回は、Ubuntu22.04を使用します。(Azure Arc では一部対応していないOSもあるのでご注意ください)


image.png (240.4 kB)


最初に、エージェントの導入のためSSH接続は必要となるので、キーペアは作成しておきます。

セキュリティグループでは、SSH接続だけ許可しておけばOKです。

基本的に全てデフォルトの設定でOKですので、サクッとEC2を作成します。

Azure Arc へEC2を登録する

サーバーを管理するためのリソースグループを作成しておきます(場所はどこでも問題ないですが、JapanEastとします)


image.png (130.8 kB)


リソースグループが作成できたら、Azure Arc の画面から「サーバー」→「追加」を選択しましょう。


スクリーンショット_2023-05-08_0_47_17.png (197.9 kB)


今回は、一つのEC2だけを追加するので、「単一のサーバーの追加」の「スクリプトの生成」を選択します。


貼り付けた画像_2023_05_08_0_48.png (160.6 kB)


Azure Arc にサーバーを登録するための条件が表示されます。さらっと確認して次へ。


image.png (251.2 kB)


リソースグループは先ほど作成したものを選択しましょう。
地域は、こちらもJapanEastを選択します。
オペレーティングシステムは、Linuxですね。
それ以外はデフォルトのままでOKです!


貼り付けた画像_2023_05_08_0_51.png (218.0 kB)


タグは今回特段設定しないので、デフォルトのままいきます。


image.png (181.7 kB)


最後の画面で、スクリプトが表示されます。
EC2へSSH接続して、表示されているスクリプトを実行しましょう!


file


スクリプトの実行途中で、Azure での認証を要求されるので、ブラウザにてターミナルへ表示されているリンクを開き、同じくターミナルに表示されているパスコードを入力します。


貼り付けた画像_2023_05_08_0_58.png (65.1 kB)
image.png (258.9 kB)


この後、Azure のアカウントへログインを要求されるので、自分の使用しているアカウントでログインしましょう。

ログイン画面で出てくる「Azure Connected Machine Agent」とは、今回 Azure Arc で生成したスクリプトにてダウンロードをしているエージェントです。
このエージェントによって、Azure Arc 上からEC2の管理が可能になります!


image.png (208.8 kB)


登録が完了すると、↓のように Azure Arc 上のサーバーの画面にEC2が表示されるようになります。


貼り付けた画像_2023_05_08_1_03.png (144.9 kB)


ここからEC2に対して、さまざまなオペレーションの実行が可能です!
リソースグループにもサーバーは表示されているので、Azure上のVM
と一緒にまとめていろんな操作ができるようになっています。(今回はAzureのVMと合わせて操作はしませんが)

ここまで実施した設計は、下のような状態です!


file


ここから、AADによるアクセス管理を実現して、SSH鍵なしでサーバーへアクセスできるようにしてみましょう。

AADによるアクセス管理拡張機能のインストール

Azure Arc のサーバー管理画面から、対象のサーバーを選択し、拡張機能の追加を選択します


貼り付けた画像_2023_05_08_1_07.png (149.3 kB)


Azure AD based SSH Login - Azure Arc 拡張機能を選択して、インストールします!(少し時間がかかります)


貼り付けた画像_2023_05_08_1_09.png (135.8 kB)


リソースロールの割り当て

インストールが完了するまでに、ユーザーに必要な権限をつけておきましょう。
対象のサーバーを開いて「アクセス制御(IAM)」を選択します。


貼り付けた画像_2023_05_08_1_24.png (250.1 kB)


こちらのリンクの通り、必要なロールを付与していきます。

Assignment Typeでは「職務ロール」を選択し、「仮想マシンのユーザーログイン」を付与します!(「仮想マシンのユーザーログイン」または、「仮想マシンの管理者ログイン」が付いていればOK)
メンバーは、アクセスに使用したいユーザーを選択して付与します。


image.png (72.6 kB)
image.png (116.9 kB)


もう一つロールをつける必要があるので、こちらで対象のマシンに対して同じように、「共同編集者ロール」を対象のユーザーに付与しましょう。


image.png (86.5 kB)
貼り付けた画像_2023_05_08_1_36.png (102.9 kB)


エージェントのポートを開く

デフォルトのままでは、SSH接続ができないため、エージェントのポート許可設定をする必要があります。

以下のコマンドにて、SSH 22 のポートを開きます。
azmagentコマンドは、管理者権限での実行sudoが必要です)

azcmagent config set incomingconnections.ports 22

以下のコマンドにて、incomingconnections.ports[22]が表示れされていればOKです!

azcmagent config list

貼り付けた画像_2023_05_08_1_42.png (110.7 kB)


ここまでで、以下の様な状態になります!
Azure CLIを使用してのアクセスの準備は整いました!


file


Azure CLI を使用してログインする

これで下準備は全て整ったので、実際にAADベースのSSHログインをしてみましょう。

ターミナルから、az loginを実行すると、ブラウザで認証が求められるので、ssh接続を実施したいユーザーでログインしましょう。


image.png (113.3 kB)


az ssh vm -n <machine_name> -g <resource_group_name> で接続できます。
ここでの<machine_name>は、Azure上の表示名ですので注意してください!

問題なく接続できればOKです。
pwdをしてみると、ログインしたユーザーのホームディレクトリが作成されています。


image.png (109.4 kB)


これでSSH鍵の管理は不要となりました!
もちろん、グループに対してロールを付与すれば、グループ全員がAADベースでのSSHができるようになりますので、管理も楽々です!

ポリシーを適用して、AADベースでないSSHログインを禁止する

Azure Arc に登録したサーバーには、その他にもさまざまなオペレーションが可能ですが、そのうちの一つにポリシーがあります。

ポリシーとは、組織で規定したルールやセキュリティに則った運用がされているかを保証・管理するルールです。例えば、セキュリティに準拠していないマシンを発見したり、メトリック監視エージェントの導入を自動で行ったりと、いったことができます。

今回はさらに、そのポリシーを利用して、AADベースでないSSH鍵を使用したアクセスを禁止して、さらにセキュアなアクセス管理を実現します!

まずは、対象のマシンを選択し、ポリシーの割り当てをしていきます。


貼り付けた画像_2023_05_08_1_54.png (174.7 kB)


ポリシー定義は「ローカル ユーザーを無効にするように Linux サーバーを構成する。」とします。


貼り付けた画像_2023_05_08_2_00.png (146.3 kB)


「パラメータ」では、「Arc に接続されたサーバーを含める」をTrueにしておきます。


貼り付けた画像_2023_05_08_2_15.png (42.7 kB)


「修復タスクを作成する」にチェックを入れておきます。
これは、ポリシーに準拠していないリソースに対して、自動でポリシーに準拠するよう、マシン構成を変更してくれます。
他の設定は全てデフォルトでOKです!


貼り付けた画像_2023_05_08_2_02.png (229.5 kB)


ポリシーの割り当てができたら、しばらくポリシーの適用と、修復タスクの完了を待ちます。(少し時間がかかります)

↓のように、「準拠している」となったらOKです!


貼り付けた画像_2023_05_08_2_18.png (187.0 kB)


今まで実施できていた、SSH鍵によるアクセスができなくなっていれば、成功です。
↓のように、Permission deniedにより、アクセスが弾かれるようになります。


貼り付けた画像_2023_05_08_2_44.png (36.1 kB)


これで、最初に紹介した設計が完了しました!


file


まとめ

AAD + Azure Arc による、よりセキュアかつ一元的な、EC2のアクセス管理の構成のご紹介でした。

AADの認証が必要になるので、MFAも必然的に有効となるのも嬉しいポイントです。

AADとAzure ArcといったID管理・マルチクラウド管理のサービスは Azure の強みです。一方で、EC2のコストの低さはAWS の強みと言えます。

マルチクラウド環境を構築する理由はさまざまかと思いますが、それぞれのクラウドの強みのいいとこどりができる点は、マルチクラウドの大きな利点と言えるでしょう。
ぜひ色々と試してみてください!

また、マルチクラウドの使い方にお困りであれば、お気軽に当社へのご相談もお待ちしております。
お気軽にお問い合わせください。

お問い合わせ - クラウド・AWSのデロイト トーマツ ウェブサービス株式会社

参照

AUTHOR
tak
tak
記事URLをコピーしました