LoginSignup
1
0

Azure Bastion と Key Vault の連携手順

Last updated at Posted at 2023-12-25

Azure Bastion は Azure VM への安全な接続を提供するマネージドサービスで、TLS 通信で VM に RDP/SSH 接続を行うことができます。Bastion 経由の接続は様々な方法、パターンがありますが、本記事ではパスワードや SSH Key を Key Vault と連携して利用する方法を中心に記載します。

Azure Bastion のアーキテクチャ

Bastion は以下のようなアーキテクチャで Web ブラウザや RDP/SSH のネイティブクライアントから TLS 経由で Azure VM に接続することができます。
AzureBastionSubnet に NSG を適用することで、Azure Bastion へ接続する送信元アドレスを制限することもできます。NSG を設定する際は GatewayManager や Bastion コンポーネント間の通信が適切に行えるように NSG を設定してください。NSG の要件はこちら参照。

image.png

Azure Bastion への接続方法と認証パターン

接続方法 認証方法
Web ブラウザ (RDP) 1. ユーザー/パスワード手入力
2. パスワードを Key Vault から読み込む
Web ブラウザ (Linux) 1. ユーザー/パスワード手入力
2. パスワードを Key Vault から読み込む
3. SSH Key をローカルから読み込む
4. SSH Key を Key Vault から読み込む
ネイティブクライアント (RDP) 1. ユーザー/パスワード手入力
2. Entra ID 認証
ネイティブクライアント (Linux) 1. ユーザー/パスワード手入力
2. Entra ID 認証
3. SSH Key をローカルから読み込む
ネイティブクライアント (tunnel) 1. ユーザー/パスワード手入力
2. SSH Key をローカルから読み込む
共有可能リンク (RDP) 1. ユーザー/パスワード手入力
共有可能リンク (Linux) 1. ユーザー/パスワード手入力
2. SSH Key をローカルから読み込む

上記からわかるように Key Vault を連携して利用する場合、Azure Portal (Web ブラウザ) からの接続でしかサポートされておりません。

Key Vault 側の準備

パスワードをシークレットとして登録

Key Vault のシークレットの画面から "生成/インポート" をクリックします。

image.png

シークレットの名前とシークレット値 (パスワードの文字列) を入力し、作成します。

image.png

SSH キーを作成し Key Vault シークレットとして登録

Azure Portal で SSH キーの組み合わせ (公開鍵、秘密鍵) を作成し、Azure 基盤上に公開鍵を保存して鍵を管理、再利用することができます。Azure VM 作成時に "新しいキーの組の生成" を選んだ際も同様です。

SSH Key をポータルから作成

Azure Portal の検索バーに SSH と入力すると "SSH キー" が出てきますのでクリックします。

image.png

"作成" をクリックし、リソースグループ、リージョン、SSH キーの組の名前を指定します。
image.png

"秘密キーのダウンロードとリソースの作成" をクリックします。ブラウザにて秘密鍵 (PEM ファイル) ダウンロードされるので保管しておきます。
image.png

秘密鍵を Key Vault へ登録

現状、Azure ポータルでは SSH の公開鍵のように改行が入っており、値が複数行になっている形式はサポートされておりません。Azure CLI まはた Powershell にてファイルから登録する必要があります。
image.png

そのため、az コマンドにて前の手順でダウンロードした秘密鍵のファイル名を指定して、Key Vault のシークレットとして登録します。

az keyvault secret set --vault-name "<KeyVault Name>" --name "<Secret Name>" --file "<SSH KeyName>.pem"

複数行のシークレットを Azure CLI の az keyvault secret set コマンドや Azure PowerShell の Set-AzKeyVaultSecret コマンドレットにコマンドラインを介して渡すことはできません。 代わりに、まず複数行のシークレットをテキスト ファイルとして格納する必要があります。

ネットワーク設定

Azure Key Vault でネットワーク制限をしたいという要件はあると思いますが、Bastion と組み合わせて利用する際はクライアント端末から Key Vault へのアクセスが発生するため、クライアント端末の IP アドレスを許可する必要があります。

以下の様に Azure Bastion からのサービスエンドポイントを許可して利用するといったことはできませんでした。
image.png

理由として、Key Vault のネットワーク設定ででクライアント端末からのアクセスが許可されていないと Key Vault 内のシークレット (パスワード、SSH Key) を参照することができないためです。
image.png

権限設定

現在、Key Vault には 2 つの認可方式 (RBAC/アクセスポリシー) がサポートされております。どちらでも Bastion は動作可能でしたので、Bastion でログインさせるユーザーには最低限、必要となるロールを設定しておきます。

認可方式 認証方法
アクセスポリシー 一覧 (List)
取得 (Get)
RBAC キー コンテナー閲覧者
キー コンテナー シークレット ユーザー

どちらの認可方式でも、前者は Key Vault 内で利用可能なシークレットを参照するための権限で、後者はシークレットの値を取得するために必要となります。

動作確認

Azure VM 作成

Linux VM を作成して動作確認をします。先ほど作成した SSH の公開鍵を指定して Azure VM (Linux) を作成します。
image.png

Key Vault (SSH Key) の利用

VM が作成できたら、Key Vualt にアップグレードした秘密鍵を指定して、SSH ができるかを確認します。

image.png

SSH キーの組み合わせ、Key Vault の権限、Key Vault のネットワーク設定のそれぞれが正しく設定できていれば以下の様に接続できるはずです。

image.png

1
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
1
0