heroku-guardianを試した

heroku-guardianってなに?

Herokuのセキュリティチェックツールです。 Herokuプラットフォーム自体の攻撃対象領域を減らすためのチェックをしてくれます。

何をチェックするの?

ユーザの認証設定や意図してないビルドパック使っていないか、その他諸々見てくれるようです。 詳しくは次のURLをご確認ください。

github.com

こういった定義ファイルを書いて、その定義がHerokuの設定にが沿っているかを見てくれるらしいです。

[AUTH]
api_key = "<your API token>"

# trusted Heroku add-ons
[ADDONS]
heroku_addon_providers = ["heroku-postgresql","heroku-kafka","heroku-redis"]

# multi-tenant heroku add-ons are untrusted
[PLANS]
untrusted_plans = ["hobby","basic","standard","premium", "developer", "dev"]

# Heroku official build-packs should be used
[BUILDPACKS]
allowed_buildpacks = ["heroku/","https://github.com/heroku/"]

# Allowed IP ranges
[RANGES]
allowed_ranges = ["52.47.73.72/29", "13.55.255.216/29", "52.15.247.208/29"]

# Company email domain
[USER]
email_domain = "@salesforce.com"

インストールする

pip経由でインストールします。

https://github.com/heroku/heroku-guardian#usage--installation

コマンド例

https://github.com/heroku/heroku-guardian#commands

実際に実行してみる

個人のテスト用アプリで確認してみます。

heroku-guardian app -a takapitest1
✅  Build pack for takapitest1 Heroku approved: heroku-20
✅  Heroku app not in maintenance mode: takapitest1
✅  Heroku approved stack image used: takapitest1: heroku-20
❌  App is externally routable: takapitest1
❌  App is not in a space: takapitest1
❌  Config vars not assigned to app: takapitest1
❌  No CNAME assigned for app: takapitest1
❌  TLS config 1.2+ not enabled: takapitest1
❌  Team app not locked for: takapitest1

環境変数を使用していないと、 Config vars not assigned to app が ❌ になるようです。 理由はソースコードにシークレットや機密性の高い情報を書くべきでないことから警告が出ているようです。 今回は特にソースコードにそのような情報は描かれていないので、適当に環境変数を設定してもう一度試してみます。

✅  Build pack for takapitest1 Heroku approved: heroku-20
✅  Config vars assigned to app: takapitest1
✅  Heroku app not in maintenance mode: takapitest1
✅  Heroku approved stack image used: takapitest1: heroku-20
❌  App is externally routable: takapitest1
❌  App is not in a space: takapitest1
❌  No CNAME assigned for app: takapitest1
❌  TLS config 1.2+ not enabled: takapitest1
❌  Team app not locked for: takapitest1

今回は✅になりましたね。

次はユーザの設定を確認してみます。

heroku-guardian user
Performing health checks for user XXXX@example.com
✅  User email set correctly.
✅  User has MFA enabled.
❌  Non-approved email domain is being used: XXXX@example.com
❌  User is not using federated login.
❌  SSO not is preferred.

今回は個人アカウントのため、federated loginやSSOは利用していませんのでその辺の項目は❌になっています。

試してみた所管

こういった形でセキュリティチェックできるのは非常に良いですね。 日々チェックできるようバッチやCIに組み込んで回しても良さそう。

一方で、こうなっているとよかったなという点としては、検査項目をignoreできないので、運用上OKとしたものでも❌が付いてしまうことでしょうか。 見た目オールグリーンにしたいですよね。