[Dome9]特定のIAMロールに特定のIAMポリシーが設定されていることを評価する

2021.08.17

こんにちは、岩城です。

前に以下のようなエントリを書きました。

この時は、カスタムルールの作成方法について紹介することが目的であったため、ルールの内容は簡単なものを作成していました。

今回、特定のIAMロールに特定のIAMポリシーが設定されていることを評価するルールを作成する機会がありましたので紹介したいと思います。

結論

カスタムルールに設定する評価式は、Dome9独自言語であるGSLで記述する必要があります。

たとえば、IAMロールdome9-test-ec2に対し、AWS管理ポリシーであるAmazonEC2ReadOnlyAccessAmazonS3ReadOnlyAccessがIAMポリシーに設定されていることを評価したい場合があるとします。

以下の評価式を用いることで評価できます。

IamRole where arn='arn:aws:iam::xxxxxxxxxxxx:role/dome9-test-ec2' should have managedPolicies with [ name='AmazonEC2ReadOnlyAccess' ] and managedPolicies with [ name='AmazonS3ReadOnlyAccess' ]

これだけでは内容が薄すぎるので、上の評価式を定義する際の考え方を以下にまとめます。

どうやって評価式を考えるか

基本的に<Target> should / should not / where <Condition>のように定義します。

先ほどの評価式をベースに考えます。

①評価対象とするターゲット選択する

本エントリではIamRoleを選択していますが、他にも様々なターゲットがサポートされています。

②評価アクションを選択する

should haveshould not havewhereを選択できます。

  • should have
    • Conditionを満たすとき、trueとする
  • should not have
    • Conditionを満たさないとき、trueとする
  • where
    • whereはオプションであり、対象のリソースを絞り込みます
    • 通常は評価対象となるAWSアカウント上にあるターゲットの全リソースを対象としますが、whereを使うとあるIAMロールだけを評価する、みたいなことができます

ここまででIAMロールdome9-test-ec2のみを対象できました。

③Conditionを定義する

Conditionには、特定のプロパティがどういう状態であってほしいかを定義します。

このプロパティはDome9が持つターゲットリソースの情報です。恐らくAWSのAPIを実行して返ってきた結果を格納しているものだと思われますが、中にはそれらしくない値も含まれているので、Dome9が持ちたい形式に変換された情報だと思っています。

この情報から、本エントリで取り上げているmanagedPoliciesは配列であり、各配列にはarnnameがあるため、特定のAWS管理ポリシーが設定されているかを評価するにはARNか名前を指定すれば実現できそうだと分かります。

Array Conditionsはその名のとおり、配列における評価方法を示します。今回はwithを選択します。

2つのAWS管理ポリシーが設定されていることを確認したいので、ポリシーごとにmanagedPoliciesを定義してandで連結します。

ちなみに、2つの管理ポリシーのうち、どちらか一方だけ設定されていることを確認したい場合は、1つのmanagedPolicies内でorで列挙するだけで良いです。

おわりに

Dome9は予め多数のマネージドルールが提供されており、リソースがベストプラクティスやコンプライアンスフレームワークに沿った設定がされているかをすぐにチェックできます。

一方で特定のIAMロールに対して、特定のIAMポリシーが設定されているなどといった、ユーザー環境に特化したチェックはデフォルトではできません。

本エントリで紹介したようなカスタムルールを定義することで柔軟でチェックできるようになります。

本エントリがどなたかのお役に立てれば幸いです。