Terraform v0.8.5でAWS Inspectorに対応します

Terraform

はじめに

こんにちは、中山です。

次期Terraformのリリースバージョンであるv0.8.5でAWS Inspector用リソースが取り込まれました。今回導入されたリソースは以下の3つです。

リソース名 用途
aws_inspector_resource_group 対象EC2インスタンスを識別するためのタグを設定
aws_inspector_assessment_target リソースグループからアセスメントの対象を設定
aws_inspector_assessment_template 適用するテンプレートを設定

早速使ってみたので本エントリでまとめたいと思います。サンプルとなるコードをGitHubに作成しました。ご自由にお使いください。

執筆時点(2017/01/18)ではまだv0.8.5はリリースされていないため、自分でTerraformのバイナリをコンパイルしておいてください。このPRが取り込まれたコミットハッシュ値は「05c83a3ca19076c79fb93c0ca33bf332236c2a2a」です。

AWS Inspectorは事前にEC2インスタンスのタグをdescribeするためのIAM Roleを設定しておく必要があるのですが、現状その部分には対応していないため事前にマネジメントコンソールやAWS CLIで作成しておく必要があります。関連するドキュメントはこちらです。

AWS Inspector関連リソースの引数

新規で導入されたAWS Inspector関連リソースで設定可能な各種引数は以下の通りです。

  • aws_inspector_resource_group
設定 必須の有無
tags 対象EC2インスタンスを識別するためのタグ(Key/Valueを <Key> = <Value> 形式で指定) Yes
  • aws_inspector_assessment_target
設定 必須の有無
name アセスメントターゲット名 Yes
resource_group_arn 関連付けるリソースグループのARN Yes
  • aws_inspector_assessment_template
設定 必須の有無
name アセスメントテンプレート名 Yes
target_arn 関連付けるアセスメントターゲットのARN Yes
duration AWS Inspectorの実行時間(秒で指定) Yes
rules_package_arns 関連付けるルールのARN(リストで複数指定可) Yes

rules_package_arns で指定可能なルールは以下のコマンドで確認可能です。

# パッケージ一覧の表示
$ aws inspector list-rules-packages
{
    "rulesPackageArns": [
        "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-7WNjqgGu",
        "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-bBUQnxMq",
        "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-gHP9oWNT",
        "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-knGBhqEu"
    ]
}
# 詳細を確認
$ aws inspector describe-rules-packages \
  --rules-package-arns "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-7WNjqgGu"
{
    "rulesPackages": [
        {
            "description": "The CIS Security Benchmarks program provides well-defined, un-biased and consensus-based industry best practicesto help organizations assess and improve their security.\n\nThe rules in this package help establish a secure configuration posture for the following operating systems:\n\n  -   Amazon Linux version 2015.03 (CIS benchmark v1.1.0)\n  \n    ",
            "version": "1.0",
            "name": "CIS Operating System Security Configuration Benchmarks",
            "arn": "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-7WNjqgGu",
            "provider": "Amazon Web Services, Inc."
        }
    ],
    "failedItems": {}
}

使ってみる

それでは早速使ってみましょう。今回は説明を簡易的にするため以下のような構成を作成します。VPCにEC2インスタンスをポツンと立てているだけです。そのインスタンスに対してAWS Inspectorからアセスメントを実施します。

tf-inspector

AWS Inspector関連のtfファイルは以下の通りです。AWS Inspector自体がシンプルなサービスなので該当のコードも短めです。

  • inspector.tf
resource "aws_inspector_resource_group" "inspector" {
  tags {
    inspector = "true"
  }
}

resource "aws_inspector_assessment_target" "inspector" {
  name               = "tf-inspector-demo"
  resource_group_arn = "${aws_inspector_resource_group.inspector.arn}"
}

resource "aws_inspector_assessment_template" "inspector" {
  name       = "tf-inspector-demo"
  target_arn = "${aws_inspector_assessment_target.inspector.arn}"
  duration   = 3600

  rules_package_arns = [
    "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-7WNjqgGu",
    "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-bBUQnxMq",
    "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-gHP9oWNT",
    "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-knGBhqEu",
  ]
}

今回は inspector タグに ture という値があるインスタンスを対象にしています。適用するルールパッケージは利用可能なものを全て突っ込んでいます。いつものように plan / apply を実行すると各種AWS Inspector関連のARNがアウトプットに表示されるはずです。

$ $GOPATH/bin/terraform apply
<snip>
Outputs:

assessment_target_arn = arn:aws:inspector:ap-northeast-1:************:target/0-QOvPswHA
assessment_template_arn = arn:aws:inspector:ap-northeast-1:************:target/0-QOvPswHA/template/0-uCIUy636
public_ip = 54.199.153.184
resource_group_arn = arn:aws:inspector:ap-northeast-1:************:resourcegroup/0-wWM5pQWa

動作確認

今回はAWS CLIを利用してアセスメントを実行してみます。マネジメントコンソールを利用する方法は以下のエントリを参照してください。

AWS CLIを利用したアセスメントの実行は以下のコマンドで実施可能です。

$ aws inspector start-assessment-run \
  --assessment-template-arn arn:aws:inspector:ap-northeast-1:************:target/0-QOvPswHA/template/0-uCIUy636
{
    "assessmentRunArn": "arn:aws:inspector:ap-northeast-1:************:target/0-QOvPswHA/template/0-uCIUy636/run/0-n9nnWOem"
}

暫く待つとアセスメントのステータスがCOMPLETEDとなることが確認できます。

$ aws inspector describe-assessment-runs \
  --assessment-run-arns arn:aws:inspector:ap-northeast-1:************:target/0-QOvPswHA/template/0-uCIUy636/run/0-n9nnWOem
{
    "failedItems": {},
    "assessmentRuns": [
        {
            "dataCollected": true,
            "name": "tf-inspector-demo/2017-01-18T10:49/oIxY",
            "completedAt": 1484740229.791,
            "userAttributesForFindings": [],
            "stateChanges": [
                {
                    "state": "CREATED",
                    "stateChangedAt": 1484736546.726
                },
                {
                    "state": "START_DATA_COLLECTION_PENDING",
                    "stateChangedAt": 1484736546.894
                },
                {
                    "state": "START_DATA_COLLECTION_IN_PROGRESS",
                    "stateChangedAt": 1484736546.947
                },
                {
                    "state": "COLLECTING_DATA",
                    "stateChangedAt": 1484736547.056
                },
                {
                    "state": "STOP_DATA_COLLECTION_PENDING",
                    "stateChangedAt": 1484740148.094
                },
                {
                    "state": "DATA_COLLECTED",
                    "stateChangedAt": 1484740208.547
                },
                {
                    "state": "EVALUATING_RULES",
                    "stateChangedAt": 1484740209.225
                },
                {
                    "state": "COMPLETED",
                    "stateChangedAt": 1484740229.791
                }
            ],
            "createdAt": 1484736546.726,
            "notifications": [],
            "state": "COMPLETED",
            "stateChangedAt": 1484740229.791,
            "durationInSeconds": 3600,
            "rulesPackageArns": [
                "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-7WNjqgGu",
                "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-gHP9oWNT",
                "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-bBUQnxMq",
                "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-knGBhqEu"
            ],
            "startedAt": 1484736547.056,
            "assessmentTemplateArn": "arn:aws:inspector:ap-northeast-1:************:target/0-QOvPswHA/template/0-uCIUy636",
            "arn": "arn:aws:inspector:ap-northeast-1:************:target/0-QOvPswHA/template/0-uCIUy636/run/0-n9nnWOem"
        }
    ]
}

まとめ

いかがだったでしょうか。

Terraformで導入予定のAWS Inspectorリソースについてご紹介しました。新しいAWSサービスに対応してくれるとうれしいですね。まだアップデート処理が微妙な部分もありますが、今後の改善に期待したいと思います。

本エントリがみなさんの参考になれば幸いに思います。