![[Dome9]特定のIAMロールに特定のIAMポリシーが設定されていることを評価する](https://devio2023-media.developers.io/wp-content/uploads/2019/07/dome9-eyecatch.png)
[Dome9]特定のIAMロールに特定のIAMポリシーが設定されていることを評価する
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、岩城です。
前に以下のようなエントリを書きました。
この時は、カスタムルールの作成方法について紹介することが目的であったため、ルールの内容は簡単なものを作成していました。
今回、特定のIAMロールに特定のIAMポリシーが設定されていることを評価するルールを作成する機会がありましたので紹介したいと思います。
結論
カスタムルールに設定する評価式は、Dome9独自言語であるGSLで記述する必要があります。
たとえば、IAMロールdome9-test-ec2に対し、AWS管理ポリシーであるAmazonEC2ReadOnlyAccessとAmazonS3ReadOnlyAccessが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 have、should not have、whereを選択できます。

- 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は配列であり、各配列にはarnとnameがあるため、特定のAWS管理ポリシーが設定されているかを評価するにはARNか名前を指定すれば実現できそうだと分かります。
Array Conditionsはその名のとおり、配列における評価方法を示します。今回はwithを選択します。

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

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

おわりに
Dome9は予め多数のマネージドルールが提供されており、リソースがベストプラクティスやコンプライアンスフレームワークに沿った設定がされているかをすぐにチェックできます。
一方で特定のIAMロールに対して、特定のIAMポリシーが設定されているなどといった、ユーザー環境に特化したチェックはデフォルトではできません。
本エントリで紹介したようなカスタムルールを定義することで柔軟でチェックできるようになります。
本エントリがどなたかのお役に立てれば幸いです。









