自由気ままに書いちゃおう

好きなことをつらつらと・・・

IAMポリシーのCondition要素について

「IAMポリシーの種類とEffect/Actions/Resources/Condition/Principal要素」からの続きです。

www.guri2o1667.work


今回は、Condition要素についてです。

 

<Condition>
「何ができるか」ということを最初に書くべきなのですが、それを説明する前に「何を使用するのか」を先に説明したいと思います。
Conditionでは、「条件演算子」を使用します。
演算子には種類があり、以下の通りです。

 ・文字列条件演算子
 ・数値条件演算子
 ・日付条件演算子
 ・ブール条件演算子
 ・バイナリ条件演算子
 ・IPアドレス条件演算子
 ・ARN(Amazonリソースネーム)条件演算子

詳細な説明は下記公式ページを参照ください。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html

「条件演算子を使うんだな」と思っていただけば大丈夫です。

では、本題の「何ができるか」ですが、
"条件演算子を使用して、定義した条件にマッチ/アンマッチした場合にポリシーを適用する"ことができます。

私は「Resource要素と何が違うの?」って思ってました。。。笑

■Resource要素とCondition要素の違い
Resourceは、「ARNを指定するため、AWSのリソースを指定」します。
重要なのは、ARNです。
ARNを使うからResourceで定義します。

では、Conditionはどうかというと、ARNは(ほとんど)使いません。
※特殊な条件をポリシーで設定したい場合に「ARN条件演算子」を使用することがありますが、ここではややっこしくなるので考えないことにします。奥が深すぎて私の理解を超えます。。。笑

Conditionでは、ARN以外を指定して条件を設定します。
例えば、「EC2のタグ名(ec2:ResourceTag)で、キー:Name、バリュー:testで始まるインスタンスのみ、起動停止を許可するポリシー」を作成したい場合、以下のようになります。

f:id:guri2o1667:20200226121842p:plain

aws.amazon.com


上記IAMポリシーをユーザやグループにアタッチすれば、当該ユーザ/グループはNameタグにtestから始まるインスタンスのみ起動停止が可能となります。
※ヒューマンエラーの回避策ですね。

■まとめ
Conditionでは、もっとたくさんのことができますが基本的な考え方は上記でよいかと。
上記を理解していないと、複雑なIAMポリシーの作成時に各要素の関係性で混乱してしまうので、少しでも参考になれば幸いです。


以上です。