ねら~ITエンジニア雑記

やきうのお兄ちゃんが綴るOracle Databaseメインのブログ

OCI(Oracle Cloud Infrastructure) の IAM Policy で「パスワードの作成/リセット」「ユーザーの削除」"だけ"が不可能な IAM Users管理権限 を付与してみる。

表題の通り、OCI(Oracle Cloud Infrastructure) の IAM Policy で「パスワードの作成/リセット」「ユーザーの削除」"だけ"が不可能な IAM Users管理権限 を付与してみるやで。
彡(゚)(゚)

1. OCI(Oracle Cloud Infrastructure) の 権限制御 の仕組み(ざっくり)

下記マニュアルを参照しながらざっくりと。彡(゚)(゚)

ポリシーの仕組み
https://docs.oracle.com/cd/E97706_01/Content/Identity/Concepts/policies.htm

OCI(Oracle Cloud Infrastructure) の権限制御は IAM User, IAM Group, IAM Policy といった仕組みで制御されます。Policy に Policy Statement という権限制御のための構文を記述して、Groupを経由して(※) IAM User に付与します。
※Groupを経由せずに直接 IAM User に付与することも可能です。

以下のようなイメージ彡(゚)(゚)

IAM Policy ⇒ IAM Group ⇒ IAM User

2. Policy Statement の書き方(ざっくり)

やはり下記マニュアルを参照しながらざっくりと。

ポリシーの仕組み
https://docs.oracle.com/cd/E97706_01/Content/Identity/Concepts/policies.htm

例えば、あるコンパートメント内のリソースに対する権限を付与する場合は、下記のような Policy Statement を書きます。

Allow group <group_name> to <verb> <resource-type> in compartment <compartment_name>

IAM User のようなテナントのリソースについては、テナントの権限として Policy Statement を書きます。

Allow group <group_name> to <verb> <resource-type> in tenancy

verb や resource-type については、下記マニュアルに記載があります。

動詞 ※verb のことです
https://docs.oracle.com/cd/E97706_01/Content/Identity/Reference/policyreference.htm#Verbs

Resource-Types
https://docs.oracle.com/cd/E97706_01/Content/Identity/Reference/policyreference.htm#Resource

IAMの詳細
https://docs.oracle.com/cd/E97706_01/Content/Identity/Reference/iampolicyreference.htm

IAM User の管理権限を付与する場合は、下記のような Policy Statement を記載します。

ALLOW GROUP ays-group01 to manage users in tenancy

上記だけだと "「パスワードの作成/リセット」「ユーザーの削除」だけが不可能" が満たせません。下記マニュアルにある where conditions句 によって、詳細な制御を行います。

ポリシーの構文
https://docs.oracle.com/cd/E97706_01/Content/Identity/Concepts/policysyntax.htm
ポリシー・ステートメントの全体的な構文は次のとおりです
Allow <subject> to <verb> <resource-type> in <location> where <conditions>

条件
1つまたは複数の条件を指定します。 anyまたはallを論理ORまたはANDにそれぞれ複数の条件で使用します。
単一の条件の構文: variable =|!= value
複数の条件の構文: any|all {<condition>,<condition>,...}

3. Policy Statement の where condition句 に記載する条件

where conditions句 に記載できる variable の共通な要素については、下記マニュアルに記載があります。この中から request.permission を variable の要素としてピックアップします。

General Variables for All Requests
https://docs.cloud.oracle.com/en-us/iaas/Content/Identity/Reference/policyreference.htm#General

request.permission

Verbs と Resource-Type の組み合わせについて、下記マニュアルに記載があります。この中から「パスワードの作成/リセット」「ユーザーの削除」に対応する組み合わせの value として、users の USER_DELETE, USER_UIPASS_SET, USER_UIPASS_RESET をピックアップします。

Details for IAM
- Details for Verbs + Resource-Type Combinations
https://docs.cloud.oracle.com/en-us/iaas/Content/Identity/Reference/iampolicyreference.htm

+ users

これらを組み合わせて、下記のような Policy Statement を記載します。※実際には1行で記述

ALLOW GROUP ays-group01 to manage users in tenancy
    where all {
          request.permission != 'USER_DELETE'
        , request.permission != 'USER_UIPASS_SET'
        , request.permission != 'USER_UIPASS_RESET'
    }

下記は Policy Statement の画面スクリーンショットとなります。
IAM001.jpg

4. Policyを付与したIAMユーザーで「パスワードの作成/リセット」「ユーザーの削除」を実行してみる。

該当の Policy を付与した IAMユーザーでログインしなおして、「パスワードの作成/リセット」「ユーザーの削除」を実行してみます。

まずはログインした IAMユーザー で お試し用の IAMユーザー を作成してみます。
IAM002.jpg

これは上手く行きます。次に お試し用に作成した IAMユーザー の「パスワードの作成/リセット」を実行してみます。
IAM003.jpg

しっかりと失敗しました。Policy Statement の where condition句 に記載した条件が上手く機能しています。「ユーザーの削除」を実行してみます。
IAM004.jpg IAM005.jpg

これも失敗しました。Policy Statement の where condition句 が上手く動作している事を確認できました。

5. まとめ

IAM Policy廻りの権限制御は where condition句で細かい制御ができるんですが、なかなかに難解や……彡(-)(-)
マニュアルを良く読み込んで、動作確認しながら実践投入するんやで彡(゚)(゚)