Azure Bicepのセキュリティの基本
Mark Johnson
2022年12月13日
0 分で読めますこの記事は、Snyk AmbassadorのMark Johnson(@tazmainiandevil)が執筆しました。Snykをいち早く体験するには、 Snyk Ambassadorに登録してください。
Azure Bicepの人気は日々高まっており、Azure Resource Manager(ARM)テンプレートに急速に取って代わりつつあります。この記事では、Bicepを使用する際のセキュリティの基本をいくつか紹介します。Bicepについて詳しくない方は、Microsoft Learnのドキュメントをご覧ください。
シークレットをソース管理に含めない
シークレットをソース管理に含めないことは誰もが理解していますが、特にローカルでBicepの構成をテストしていると、ファイルにシークレットを誤って残してしまうことは簡単に起こります。
シークレットをコミットしないための方法をいくつか紹介します。
コマンドラインからパラメーターを渡す。
ソース管理の対象外にするパラメーターJSONファイルを使用する。Gitを使用している場合は、たとえば
.gitignoreファイルに追加します。
入力を保護する
外部からパラメーターを渡すのは一つの方法ですが、シークレットが安全に保護され、出力に表示されないようにするにはどうすればよいでしょうか。Bicepには、String型とObject型のパラメーターに使用できる@secureデコレーターが用意されています。例を示します。
出力の扱いに注意する
Bicepモジュールに出力を追加すると便利ですが、注意すべき点もいくつかあります。シークレットのように見える値を出力に設定すると、Bicepはシークレットが漏えいする可能性があるという警告を表示します。ストレージアカウントの接続文字列を次のように出力すると、この警告が表示されます。
ただし、出力に割り当てる前に値を変数に追加しておくと、警告が表示されず、見落としやすくなります。
では、次の構成を使ってストレージアカウントのリソースをAzureにデプロイするとどうなるか見てみましょう。
Bicepで定義した出力は、リソースのデプロイ先であるリソースグループのデプロイから確認できます。

StorageDeployの出力を見ると、接続文字列にアカウントキーが平文で表示されていることがわかります。

つまり、Azure Portalでリソースを閲覧できる人なら誰でも、これらの出力を確認できます。セキュリティ態勢を適切に保つには、Bicepでシークレットを出力しないことをおすすめします。
今後、Bicepの出力にも@secureデコレーターが使えるようになれば、シークレットを安全に返せるようになるでしょう。
リソースからシークレットを取得する
Bicepからシークレットを返すことが問題となる場合、あるモジュールから別のモジュールへシークレットを渡すにはどうすればよいでしょうか。一つの方法は、existingキーワードを使って既存のリソースにアクセスすることです。例を示します。
この接続文字列は、別のリソースへの入力として使用できます。
Key Vaultからシークレットを取得する
既存のリソースからシークレットを取得する方法のほかに、Key Vaultを使ってシークレットを取得することもできます。
注意:Key Vaultのアクセス構成で「テンプレートのデプロイに Azure Resource Manager を許可する」を有効にしてください。

前のセクションと同様に、existingキーワードを使ってKey Vaultにアクセスします。ただし、getSecretメソッドを使用できるのは、@secureデコレーターが付いたモジュールパラメーターに割り当てる場合のみです。
Bicepのセキュリティスキャン
Infrastructure as Code(IaC)のスキャンが広く利用されるようになり、セキュリティ上の問題をできるだけ早く見つけようという動きが広がっています。Snykが提供する無料のCLIを使えば、ローカル環境でセキュリティやコンプライアンスの基準に照らしてIaCをスキャンできます。Bicep形式には直接対応していませんが、Bicepのコンパイル先であるARMテンプレートのスキャンには対応しています。
BicepをARMにコンパイルするには、Bicep CLIをインストールする必要があります。Snyk CLIを使い始めるには、無料アカウントを作成し、npmでSnyk CLIをインストールしてください。Node.jsがローカルにインストールされている場合は、次のコマンドを実行してインストールできます。
インストールとセットアップが完了したら、次のコマンドを実行します。
Bicepファイルと同じ名前のJSONファイルが生成されます。その後、次のコマンドでSnykスキャンを実行できます。
まとめ
セキュリティは誰もが考慮すべきことです。状況は常に変化しますが、学びを重ねることで、リソースの保護に向けてできることも増えていきます。この記事が参考になり、Bicepの構成を保護するためのヒントを得ていただけたなら幸いです。
開発者のために設計されたIaCセキュリティ
Snykは、統合されたポリシー・アズ・コードエンジンにより、SDLCからクラウドでの実行時までInfrastructure as Codeを保護します。すべてのチームが安全に開発、デプロイ、運用できるよう支援します。



