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#VerbsResource-Types
https://docs.oracle.com/cd/E97706_01/Content/Identity/Reference/policyreference.htm#ResourceIAMの詳細
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 の画面スクリーンショットとなります。
4. Policyを付与したIAMユーザーで「パスワードの作成/リセット」「ユーザーの削除」を実行してみる。
該当の Policy を付与した IAMユーザーでログインしなおして、「パスワードの作成/リセット」「ユーザーの削除」を実行してみます。
まずはログインした IAMユーザー で お試し用の IAMユーザー を作成してみます。
これは上手く行きます。次に お試し用に作成した IAMユーザー の「パスワードの作成/リセット」を実行してみます。
しっかりと失敗しました。Policy Statement の where condition句 に記載した条件が上手く機能しています。「ユーザーの削除」を実行してみます。
これも失敗しました。Policy Statement の where condition句 が上手く動作している事を確認できました。
5. まとめ
IAM Policy廻りの権限制御は where condition句で細かい制御ができるんですが、なかなかに難解や……彡(-)(-)
マニュアルを良く読み込んで、動作確認しながら実践投入するんやで彡(゚)(゚)