Okta - Groups - Rules

# はじめに

今回はグループのルールについて記載していきます。

# Rules
ユーザーの属性値やグループの所属に応じて特定のグループに追加することができます。
Oktaではグループのメンバーにグループを追加することができませんが、Rulesを使用することで疑似的に再現することが可能です。

# 作成
- RulesタブのAdd Ruleから作成することができます。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350435/e8e29acc-72a5-0f74-76cf-23ccc20ebd45.png)
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350435/74dbec4d-78d0-b058-d9e4-79afa030e2b1.png)

### ルール作成時に選択可能な条件
作成時には以下の設定が可能です。

#### Use basic Condition
- User attribute
    - ユーザープロファイルの属性値を条件に指定します。
    - 条件に指定することができる属性値はOkta標準の属性値と、ProfileEditorで追加したString型の属性値のみです。
        - String型として扱われるデータ型は [先日の記事](https://qiita.com/mtbRck/private/da0eb33b1b103f67a0f7#%E3%83%87%E3%83%BC%E3%82%BF%E5%9E%8B%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E8%A3%9C%E8%B6%B3)でも記載しましたが、以下の3つです。
            - string
            - country code
            - language code
        - String型以外の属性値を使用したい場合はOkta Expression Languageを記載する必要があります。
    - また、条件に指定できる演算子は以下の3つです。
        - Equals
        - Starts with
        - Contains
- Group membership
    - 特定のグループに所属しているユーザーをまとめて追加したい場合に指定します。
        - 複数のグループを指定することも可能です。
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350435/9a88bd83-21c3-70bb-f284-135ea91bd5be.png)

#### Use Okta Expression Language
- Okta Expression Languageを使用して自由に検索条件を記載することができます。
- Expression Languageの仕様については以下をご参照ください。
    - https://developer.okta.com/docs/reference/okta-expression-language/

### 作成後の注意
ルールは作成した直後はInactiveになっているため、Activateする必要があります。
- ActiveteはActionsから実施可能です。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350435/bf0ae68f-ce19-330e-6fb1-cc99764fd3a7.png)

# 編集
- ルールの設定を編集したい場合、Actions > Editからできます。
- ただし、Activeなルールは一度Deactivateしてからでないと編集できないため注意してください。
    - Deactivateしてもルールでグループにアサインされたユーザーがグループから削除されることはないので安心してください。
    - ルールの編集後に再度Activateすることを忘れないように注意してください。
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350435/1ff6c6d7-5dbd-c0c5-37f0-6e155fa57343.png)
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350435/5f37fb7a-0abc-654c-607f-b68e8dc4d752.png)

# 削除
- Actions > Deleteから削除できます。
    - ルールの状態がInactiveである必要があることに留意してください。
- Deleteを押すと以下のメッセージが表示されます。
    - チェックを入れてルール削除すると、ルールを使用してグループにアサインされたユーザーが対象グループから削除されるので注意してください。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350435/21bfadf8-1d4d-2bc9-17d0-83fa07d781c5.png)


# 対象ユーザーがグループの条件にマッチするか確認したい。
- ルール設定の一番下、Preview欄にユーザーを入力すると条件にマッチしてグループにアサインされるかどうかを確認することができます。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350435/46eeb65f-2f3b-8f4b-e4c1-303f5877933c.png)
- 確認結果はそれぞれ以下のように表示されます。
    - 条件にマッチせずグループにアサインされない場合
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350435/eeac6f1c-99b0-93d0-3a56-d43f2651eb21.png)
    - 条件にマッチしてグループにアサインされる場合
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350435/0379aca9-dadd-b60d-d249-4a1c154bbb84.png)


# 特定のユーザーをルールから除外したい
### 特定ユーザー
- 特定のユーザーのみを除外したい場合は Except The following usersに対象ユーザーを指定すればOKです。
- ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350435/bdfaaa9d-94ad-300a-becf-13db2555b9da.png)

### 特定のグループに所属するユーザー
- 特定のグループに所属するユーザーを除外したい場合はExpression Languageを使う必要があります。
- こんな感じ
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350435/1af7a3b0-11b6-aa85-4660-df663925a6b3.png)
    - この例では「sourceGroup1に所属している」かつ「excludeGroupに所属していない」ことを条件に記載しています。
        - よく見ると2つ目のisMemberOfGroupNameの前に「!」がついていることがわかると思います。
        - これが「所属していない」の否定の部分に相当します。
    - Expression Languageは使えるようになると結構便利です。


# さいごに
ルールを使うことでグループのメンバー管理運用が楽にできるものもあると思います。
Expression Languageも是非使ってみてください。
以上で今回はおしまいです。ありがとうございました。