Chapter 14

必要な権限だけを与えよう

uki00a
uki00a
2021.05.04に更新
このチャプターの目次

Denoはパーミッションシステムを提供しています。

ファイルシステムやネットワークアクセス、環境変数の参照などは、明示的に権限を与えない限り、デフォルトでは一切実行することができません。

そのため、ローカル環境での開発時は、以下のように--allow-all(-A)オプションを指定することが多いのではないでしょうか?

$ deno run -A cli.ts

もちろん、ローカル環境での開発時はこれでもよいと思います。

しかし、この方法では、Denoのセキュリティ機構を十分に活かすことができません。

そのため、CIや本番環境などでコードを実行する際は、必要な権限のみを指定することを推奨します。

$ deno run --allow-read --allow-write --allow-env cli.ts

さらに、--allow-read--allow-env、及び--allow-netなどのオプションは許可リストを指定することができます。

例えば、--allow-write=distと指定すると、./dist以外のファイル・ディレクトリへは一切書き込めなくなります。

この機能を活用して、さらにアクセス範囲を制限できるとベストです。

$ deno run --allow-read=. --allow-write=dist --allow-env=URL,TRACKING_ID cli.ts

こうすることにより、万が一依存モジュールに脆弱性などがあったとしても、セキュリティ上のリスクを大きく軽減することができます。

ただし、毎回コマンドラインからこのように指定するのは少し面倒ですよね。

そこで、次の章ではこの問題への解決策を紹介します。

ポイント

  • allow-read--allow-envなどのオプションは、許可リストを指定できます。
  • 本番環境やCIなどでは、必要最小限の権限のみを与えるようにしましょう。