🐕
Dockerイメージ内の機密情報に気をつける
はじめに
「Dockerイメージから大量の機密データ発見」という記事を見つけたため、
内容の確認と、dockle
を使ったスキャンを試してみました。
参考元文献
要約
- DockerHubに補完されているイメージから秘密鍵、APIキー等の機密情報が大量に発見される
- 外部からの機密情報の悪用を防ぐため、以下のような対策が必要
- 機密情報の確認
- 機密情報が存在する場合デプロイを実施しない
dockle
でコンテナイメージの機密情報を検知
機密情報の確認にはコンテナセキュリティ診断ツールを使うのがよさそうです。
dockle
というツールはコンテナイメージに機密情報が混入していないか、チェックしてくれます。
今回はdockle
を使って、機密情報の検知をしてみます。
テスト用dockerfile作成、ビルド
環境変数としてawscliクレデンシャルのサンプルを組み込みます。
FROM alpine:latest
ENV AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
ENV AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
ENV AWS_DEFAULT_REGION=ap-northeast-1
ビルドします。
$ docker build -t dockle-example:test1.0 .
dockleでビルドしたイメージをチェックします。
docker [コンテナイメージ]
でスキャンができます。
FATAL
項目で、DockerfileのENVで記入したAWSクレデンシャルが警告されています。
$ dockle --exit-code 1 --exit-level fatal dockle-example:test1.0
FATAL - CIS-DI-0010: Do not store credential in environment variables/files
* Suspicious ENV key found : AWS_ACCESS_KEY_ID on ENV AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE (You can suppress it with --accept-key)
* Suspicious ENV key found : AWS_SECRET_ACCESS_KEY on ENV AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY (You can suppress it with --accept-key)
WARN - CIS-DI-0001: Create a user for the container
* Last user should not be root
INFO - CIS-DI-0005: Enable Content trust for Docker
* export DOCKER_CONTENT_TRUST=1 before docker pull/build
INFO - CIS-DI-0006: Add HEALTHCHECK instruction to the container image
* not found HEALTHCHECK statement
CIで事前にチェックできれば、コンテナリポジトリへのpush、機密情報の入ったコンテナの使用は事前に防止することができますね。
終わりに
便利なコンテナ技術ですが、セキュリティは意識しないと危険です。
dockle等のツールでセキュリティを担保していきたいですね。
Discussion