0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#016: 運用管理ユーザーにVMリモートログインを想定したAzureロールを付与

Posted at

※本記事は、個人の意見および個人的活動を記したものであり、会社を代表するものではありません

以前の投稿で、「VMアカウント管理を単純にして、パスワード管理を簡略化したい」という思いからいくつかVMへのアクセス方式を検討してみた。

「S2P VPN with EntraID + RDP方式」と「Bastion with KeyVault方式」の2つを検討し、独断でメリットとデメリットを比較検討した結果、「Bastion with KeyVault方式」によるパスワード管理方式にすることとした。

どちらも結局はVMのOSローカルアカウント管理が必要なのだが、KeyVault方式の方が、手元でパスワードを管理する必要がなくなる。

アカウントのパスワードを複数人で共有するために「パスワードを、パスワード付きExcelファイルに保存して、共有フォルダーで管理」とか、それってどうなん?っていつも思うけど、厳密な管理の要件と利便性のトレードオフにいつも悩まされる。
せめてM365の機密度ラベルでファイルを保護するようにすべきだと思うのだが、そもそも早くパスワードレスな世界になってほしいと願うばかり。

以前の記事はこちらを参照。

今回は、検討結果に基づき、例えば運用担当者が最小限の権限でVMにログインできるようにしたい場合、どのようなロールを付与すれば良いのかを検討してみる。

1. Bastion with KeyVault方式の検討結果

ざっくり決めたVMへのアクセス制限方法は以下。

  • VMへのアクセス制限
    • Bastion経由でリモートログイン
    • 特定のセキュリティグループ(例えば、運用管理担当グループ)のメンバーに限定
  • VMのOSローカルアカウントのパスワード管理
    • KeyVaultのシークレットに保存
    • Azure Functionsで定期的にシークレット上のパスワードを自動更新
  • KeyVaultへのアクセス制限
    • 管理用VNetにプライベートエンドポイントで閉域網を構成
    • 管理用VNetと個別システム用VNetをピアリングし、各VNetのプライベートIPに制限

この中で、今回は「VMへのアクセス:特定のセキュリティグループのメンバーに限定」というところに言及してみる。

KeyVaultへのアクセス制限、およびVMへのアクセス制限に関する対応のほとんどは、以前の記事で実施しているのでそちらを確認。

https://qiita.com/masafullversion/items/9d1333c1abf4b06febf3
https://qiita.com/masafullversion/items/87668ac28af6aaeff300

また、パスワードの変更をAzure Functionsで自動化するのは別の記事で掲載予定とする。

2. VMへログインできるユーザーを特定セキュリティグループメンバーに限定する

Bastion経由でVMにログインするために必要なロールは以下の4つ。

  • VMのReaderロール
  • VM NICのReaderロール
  • BastionのReaderロール
  • VNetのReaderロール

これに加えて、パスワードをKeyVaultのシークレットで管理する場合は、以下2つのロールも追加で必要。

  • KeyVaultのKey Vault Readerロール
  • KeyVaultのKey Vault Secret Userロール

上記ロール以外にも、ユーザーが利用しているクライアントPCのパブリックIPを以下の2つのポイントでリソース作成時に許可しておく必要がある。

  • KeyVaultのネットワーク設定
  • BastionSubnetのNSGの受信許可リスト

KeyVaultのネットワーク設定に追加する場合、ネットワークの制限として特定のネットワークからのみアクセスを許可する設定を前提としている。KeyVaultをプライベートエンドポイントでVNetに接続している場合については別で検証する。

2-1. セキュリティグループの作成

運用担当グループを作成する。

この後、このグループに対してVMにアクセスできる権限を付与していく。

image.png

グループにユーザーを追加。

事前に運用想定ユーザーを作成。

image.png

2-2. VMのReaderロールを付与

作成したグループにVMのReaderロールを付与する。

image.png

これだけでは、グループメンバーはVMにはアクセスできるが、Bastionにアクセスできない。

image.png

2-3. VM NICのReaderロールを付与

作成したグループにVM NICのReaderロールを付与する。

image.png

VNetへのReaderロールが必要というエラーが表示された。

image.png

2-4. VNetのReaderロールを付与

作成したグループにVNetへのReaderロールを付与する。

image.png

エラーは発生しないものの、作成済みのBastionが参照されていない。

image.png

2-5. Azure BastionのReaderロールを付与

作成したグループにAzure BastionのReaderロールを付与する。

image.png

ようやくBastionにアクセスできたが、パスワードを管理しているKeyVaultが参照できない。

image.png

2-6. KeyVaultのKeyVaultReaderロールを付与

作成したグループにAzureのKeyVaultReaderロールを付与する。

image.png

KeyVaultにはアクセスできたが、シークレットにアクセスできない。

image.png

2-7. KeyVaultにクライアントPCのパブリックIPを付与

KeyVaultのネットワークに、クライアントPCのパブリックIPレンジを追加。(IPレンジを登録するスクリーンショットは割愛)

シークレットにはアクセスできたが、シークレット値にはアクセスできず。

image.png

2-8. KeyVaultのKeyVaultSecretUserロールを付与

image.png

ようやくアクセスできた。

image.png

2-9. KeyVaultでパスワード管理をしたVMにBastion経由でアクセスための最小ロール検証結果

対象のセキュリティグループに付与したロールは以下。

  • VMのReaderロール
  • VM NICのReaderロール
  • BastionのReaderロール
  • VNetのReaderロール
  • KeyVaultのKeyVaultReaderロール
  • KeyVaultのKeyVaultSecretUserロール

上記に加えて、KeyVaultのネットワーク受信規則にクライアントPCのパブリックIPをAllow追加。

2-10. VMへのログインにはBastionSubnetへのIP登録も必要

Bastion経由でVMにログインするための情報にアクセスするための条件は揃ったが、実際にログインしようとすると、真っ白なままフリーズして先に進まず。(スクショは割愛)

これは、BastionSubnetのNSGの受信規則に対して、クライアントPCのパブリックIPレンジをAllowで追加する必要がある。

image.png

これでようやくBastion経由でVMのOSにログインできた。

次回はセキュリティグループの作成とロール付与をスクリプトで定義してみる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?