AzureKeyVaultにBastionで使用するSSH秘密鍵を登録する

初めまして。 2021年6月に入社した部内では一番下っ端エンジニアのsakaiです。

入社してすぐにAzure環境に関連する業務に携わらせていただいており、 入社時はほとんどAzureに関して知識が無かったんですが、 業務を通してある程度知識をつけることができました。

そんな中で遭遇した問題と、それを解決する方法を今回ご紹介したいと思います。

行ってた内容

私が行っていた業務ではLaravelで構築されたアプリケーションをAzure環境に構築するというものでした。
上記の構築にあたりVMを一台用意し、そのVMを使ってAppServiceやMySQLに接続したりしておりました。

VMにSSH接続する際はいつも自身のPCからSSH接続することが多かったのですが、Azureのportal上からもアクセスできるようにする必要があり、その接続する機能としてBastionを用いておりました。

そしてBastionでVMに接続する際に用いていた認証方法ですが、AzureKeyVaultに登録したシークレットの値を用いて接続するという方法です。

シークレットの値には-----BEGIN RSA PRIVATE KEY-----から始まる皆さんご存知の秘密鍵の値を登録するのですが、登録の際にある問題が発生しました。

シークレットに改行された文字列登録ができない

皆さん御存知の通り-----BEGIN RSA PRIVATE KEY-----始まりの秘密鍵は複数行の文字列となっております。

Bastionでシークレットの値を参照するときも、正しい値でないと-----BEGIN RSA PRIVATE KEY-----から始まり、-----END RSA PRIVATE KEY-----で終わるものを選択しろと怒られてしまいます。

しかし、AzureKeyVaultにportal上で改行を含んだ値を登録すると、なんと一行にまとめられてしまうのです。

しかし、Bastionでは改行された秘密鍵の値でないとSSH接続できません。

「じゃあどうやって登録しろと。。。」

そこでGoogle先生で調べるとしっかりとドキュメントが用意されてました。

複数行の値はaz keyvault secret setで反映

まずazコマンドが実行できて、AzureKeyVaultに対してコマンド実行できる環境に秘密鍵が記載されたtxtファイルを用意します。

user@vm-name:~$ pwd
/home/user
user@vm-name:~$ ls secretfile.txt
secretfile.txt

そして、az keyvault secret setコマンドでファイルに記載した値を反映します。

user@vm-name:~$ az keyvault secret set --vault-name "<your-unique-keyvault-name>" --name "MultilineSecret" --file "secretfile.txt"

そうすると実行結果がJSON形式で返ってきて、そのvalueの中に先程用意した秘密鍵の値を記載した内容が入っています。

{
  "attributes": {
      ・・・中略・・・
  },
  ・・・中略・・・
  "value": "-----BEGIN RSA PRIVATE KEY-----\n
・・・
\n-----END RSA PRIVATE KEY-----\n\n"
}

上記の結果、Bastionでシークレットの秘密鍵を参照でき、無事SSH接続ができるようになりました。

最後に

わかってしまえば簡単な手順で設定ができるのですが、ほとんどAzureに関する知識が無い人間からしたら、この問題に最初ぶつかった時はかなり解決に時間を有しました。
また、Azureに関する記事は他のクラウドに比べるとまだ少ない気がするので少しで同じような悩みを持つ方の助けになれればと思います。

参考ドキュメント

https://docs.microsoft.com/ja-jp/azure/key-vault/secrets/multiline-secrets


株式会社grasys(グラシス)は、技術が好きで一緒に夢中になれる仲間を募集しています。

grasysは、大規模・高負荷・高集積・高密度なシステムを多く扱っているITインフラの会社です。Google Cloud、Amazon Web Services (AWS)、Microsoft Azureの最先端技術を活用してクラウドインフラやデータ分析基盤など、ITシステムの重要な基盤を設計・構築し、改善を続けながら運用しています。

お客様の課題解決をしながら技術を広げたい方、攻めのインフラ技術を習得したい方、とことん技術を追求したい方にとって素晴らしい環境が、grasysにはあります。
お気軽にご連絡ください。