Skip to main content

IaCの脆弱性を無視するタイミングを把握して、セキュリティを強化

著者
Headshot of Craig Furman

Craig Furman

blog feature snyk iac magenta

2021年9月29日

0 分で読めます

セキュリティ脆弱性への対応では、すべてを検出しようとするアプローチがよく取られます。理論上は有効に思えますが、実際にはそうとは限らず、セキュリティチームや開発チームの時間と労力を無駄にすることも少なくありません。効果的なのは、自社に関係する問題と関係しない問題を分析して見分け、関係のない問題を無視することです。これにより、チームは重要な課題に集中し、アプリケーション全体のセキュリティを向上させることができます。

Terraform、Kubernetes、CloudFormationのコードベースに潜むセキュリティ上の問題の発見をIaC作成者に支援するSnyk Infrastructure as Code(Snyk IaC)で、snyk iac testの実行時に、関係のないIaCの脆弱性を無視できるようになりました。このブログでは、IaC設定ファイルをスキャンした後に問題を無視したほうがよいケースをいくつか取り上げ、その方法をご紹介します。

SnykでIaCの脆弱性を無視する設定方法

セキュリティは、反復的なソフトウェア開発ライフサイクルの一部であるべきで、「最後になってから」や、開発とは別に考慮するものではありません。Snyk CLIは、CIパイプラインだけでなく開発サイクルでもよく利用され、セキュリティ上の問題を早期かつ頻繁にチェックできます。CLIはすべての製品で共通のため、オープンソースの依存関係やコンテナのテストにSnyk CLIを使ったことがあれば、.snykポリシーファイルを使ってテスト結果から問題を無視する方法をご存じかもしれません。Snyk IaCでも.snykポリシーファイルを使用して、IaCの問題を簡単かつ自動的に無視できるようになりました。

IaC作成者が問題を無視したい理由はさまざまです。たとえば、S3バケットをパブリックインターネットに公開するセキュリティルールは、公開用のアーティファクトのホスティングに意図的にそのバケットを使っている場合、該当しないことがあります。あらゆる状況に適用できるセキュリティルールを作るのは困難です。この例を見ていきましょう。

問題を無視する簡単な例

ここでは、2つのS3バケットを宣言するTerraform設定ファイルを用意しました。

resource "aws_s3_bucket" "blog" {
  bucket = "blog"
  acl = "public-read"
}

resource "aws_s3_bucket" "artifacts" {
  bucket = "artifacts"
  acl = "public-read"
}

このファイルを含むディレクトリでsnyk iac testを実行すると、いくつか問題が検出されます。その中には、今回取り上げる「一般公開で読み取り可能」な問題が2件含まれています。以下は一部を伏せた出力です。

$ snyk iac test

Testing terraform/s3/s3_cis.tf...

Infrastructure as code issues:
  ...

  ✗ S3 Bucket is publicly readable [Medium Severity] [SNYK-CC-TF-18] in S3
    introduced by input > resource > aws_s3_bucket[blog] > acl

  ✗ S3 Bucket is publicly readable [Medium Severity] [SNYK-CC-TF-18] in S3
    introduced by input > resource > aws_s3_bucket[artifacts] > acl

...

Tested terraform/s3/s3_cis.tf for known issues, found 10 issues

Snyk CLIでsnyk ignore --id=SNYK-CC-TF-18 --reason=’Blog bucket should be openを実行すると、この問題を無視できます。まだ存在しない場合は.snykポリシーファイルが生成され、次の内容が記述されます。

    # Snyk (https://snyk.io) policy file, patches or ignores known       vulnerabilities.
version: v1.22.0
    # ignores vulnerabilities until expiry date; change duration by modifying expiry date
ignore:
  SNYK-CC-TF-18:
    - '*':
        reason: Blog bucket should be open
        expires: 2021-09-17T10:57:56.635Z
        created: 2021-08-18T10:57:56.637Z
patch: {}

必要に応じて理由や有効期限を編集したり、有効期限を完全に削除したりできます。詳しくは、Snykの問題無視機能と.snykポリシーファイルのドキュメントをご覧ください。

もう一度snyk iac testを実行すると、「一般公開で読み取り可能」な問題が表示されなくなったことがわかります。

無視する問題の範囲を指定する

しかし、この問題を無視する理由として記載した「blogバケットは公開状態にする」という点を考えると、まだ設定は完了していません。無視ルールの範囲をさらに限定し、artifactsバケットの問題は引き続き検出されるようにします。まず「この問題のすべてのインスタンスを無視する」という意味の*ルールを、プロジェクトのルートからの相対ファイルパスに変更しましょう。

ignore:
  SNYK-CC-TF-18:
    - 'terraform/s3/s3_cis.tf > *':
        reason: Blog bucket should be open
        expires: 2021-09-17T10:57:56.635Z
        created: 2021-08-18T10:57:56.637Z

このように、無視ルールの範囲を個々のファイルに限定できます。ただし今回の例では、同じファイル内に「一般公開で読み取り可能なバケット」の問題が2件あります。残っている*の箇所に、blogバケットの問題の設定パスを貼り付けましょう。

ignore:
  SNYK-CC-TF-18:
    - 'terraform/s3/s3_cis.tf > input > resource > aws_s3_bucket[blog] > acl':
        reason: Blog bucket should be open
        expires: 2021-09-17T10:57:56.635Z
        created: 2021-08-18T10:57:56.637Z

もう一度snyk iac testを実行すると、blogバケットの「一般公開で読み取り可能なバケット」の脆弱性だけを無事に無視し、artifactsバケットの同じ問題は引き続き検出できていることがわかります。こちらは修正が必要です。

$ snyk iac test

Testing terraform/s3/s3_cis.tf...

Infrastructure as code issues:
  ...

  ✗ S3 Bucket is publicly readable [Medium Severity] [SNYK-CC-TF-18] in S3
    introduced by input > resource > aws_s3_bucket[artifacts] > acl

...

Tested terraform/s3/s3_cis.tf for known issues, found 9 issues

artifactsバケットのACLを変更しましょう。

resource "aws_s3_bucket" "blog" {
  bucket = "blog"
  acl = "public-read"
}

resource "aws_s3_bucket" "artifacts" {
  bucket = "artifacts"
  acl = "private"
}

snyk iac testを実行すると、「一般公開で読み取り可能なバケット」の問題は検出されなくなります。この例では、これが望ましい結果です。次に、.snykポリシーファイルをコードリポジトリにコミットして、これらのルールをバージョン管理できます。

Snyk IaCを使い始める

最新のSnyk CLIをダウンロードすれば、今すぐこの機能を使い始められます。またはドキュメントで、.snykファイルを使ったSnyk IaCの問題無視の方法を手順に沿ってご確認ください。

ソースコードの段階からインフラを保護

Snykはワークフロー内のIaCセキュリティとコンプライアンスを自動化し、構成ドリフトや不足しているリソースを検出します。

カテゴリー: