本ブログは、オラクル・クラウドの個人ブログの1つです。
初めに
セキュリティの考慮で、あるユーザ(オペレーター)に対し、オラクル・クラウド上のインスタンス(Compute/Oracle_DB/ADB/MySQL)を起動・停止するため、最低限の権限を付与したいですが、それは可能ですか?答えは、可能です。ポリシーを作れば簡単に実現できますので、実施方法を紹介したいと思います。
インスタンスの種類により少し差異がありますが、考え方は同じです。
事前準備
1. Compute (VM)
2. Oracle DB
3. Autonomous DB
4. MySQL DB
事前準備
作業対象インスタンスが、PoCというコンパートメントの下に格納されます。
以下の各リソースを用意しておきます。対象ユーザをそれぞれのグループに入れます。
インスタンス | グループ名 | ポリシー名 | 関連権限 |
---|---|---|---|
Compute | Compute_Power_Group | Compute_Power_Policy | INSTANCE_POWER_ACTIONS |
Oracle DB | DB_Node_Power_Group | DB_Node_Power_Policy | DB_NODE_POWER_ACTIONS |
ADB | ADB_Update_Group | ADB_Update_Policy | AUTONOMOUS_DATABASE_UPDATE |
MySQL DB | MySQL_Power_Group | MySQL_Power_Policy | MYSQL_INSTANCE_START MYSQL_INSTANCE_STOP |
1. Compute (VM)
ポリシー・ステートメント
下記2つの書き方を検証して、同じく動作できることを確認しました。差異点は、2行目です。
構文-1 (Where条件あり)
Allow group <Group_Name> to read instances in compartment <Compartment_Name>
Allow group <Group_Name> to manage instances in compartment <Compartment_Name> where request.permission='INSTANCE_POWER_ACTIONS'
↑これは、一般的な書き方です。注意点:"request.operation"ではなく、"request.permission"となります。
必要に応じて、Compartmentではなく、テナンシでも指定できます(以下の例も同様)。
"to"を省略しても同じ結果です(以下の例も同様)。
構文-2 (Where条件なし)
Allow group <Group_Name> to read instances in compartment <Compartment_Name>
Allow group <Group_Name> to {INSTANCE_POWER_ACTIONS} in compartment <Compartment_Name>
権限付与後、そのユーザが特定のコンパートメント(PoC)の下に、全てのComputeインスタンスが参照できます。それらのインスタンスに対し、起動・停止・再起動しか実施できません。
2. Oracle DB
ポリシー・ステートメント
下記2つの書き方を検証して、同じく動作できることを確認しました。差異点は、2行目です。
構文-1 (Where条件あり)
Allow group <Group_Name> to read database-family in compartment <Compartment_Name>
Allow group <Group_Name> to manage db-nodes in compartment <Compartment_Name> where request.permission='DB_NODE_POWER_ACTIONS'
構文-2 (Where条件なし)
Allow group <Group_Name> to read database-family in compartment <Compartment_Name>
Allow group <Group_Name> to {DB_NODE_POWER_ACTIONS} in compartment <Compartment_Name>
権限付与後、そのユーザが特定のコンパートメント(PoC)の下に、全ての「Oracle DB System」が参照できます。それらのインスタンスに対し、DBノードの起動・停止・再起動しか実施できません。
3. Autonomous DB
ポリシー・ステートメント
下記2つの書き方を検証して、同じく動作できることを確認しました。差異点は、2行目です。
ADBは起動・停止専用の権限がないので、最低限の権限を付与するのに、"AUTONOMOUS_DATABASE_UPDATE"は必要です。
構文-1 (Where条件あり)
Allow group <Group_Name> to read autonomous-databases in compartment <Compartment_Name>
Allow group <Group_Name> to manage autonomous-databases in compartment <Compartment_Name> where request.permission='AUTONOMOUS_DATABASE_UPDATE'
構文-2 (Where条件なし)
Allow group <Group_Name> to read autonomous-databases in compartment <Compartment_Name>
Allow group <Group_Name> to {AUTONOMOUS_DATABASE_UPDATE} in compartment <Compartment_Name>
権限付与後、そのユーザが特定のコンパートメント(PoC)の下に、全ての「Autonomous DB」が参照できます。それらのインスタンスに対し、起動・停止・再起動を含む一部の更新操作ができますが、ADBの新規作成、削除、クーロン、リストアなどの操作ができません。
4. MySQL DB
ポリシー・ステートメント
下記2つの書き方を検証して、同じく動作できることを確認しました。差異点は、2行目です。
構文-1 (Where条件あり)
Allow group <Group_Name> to read mysql-instances in compartment <Compartment_Name>
Allow group <Group_Name> to manage mysql-instances in compartment <Compartment_Name> where any {request.permission='MYSQL_INSTANCE_START', request.permission='MYSQL_INSTANCE_STOP'}
構文-2 (Where条件なし)
Allow group <Group_Name> to read mysql-instances in compartment <Compartment_Name>
Allow group <Group_Name> to {MYSQL_INSTANCE_START,MYSQL_INSTANCE_STOP} in compartment <Compartment_Name>
権限付与後、そのユーザが特定のコンパートメント(PoC)の下に、全てのMySQL DBインスタンスが参照できます。それらのインスタンスに対し、起動・停止・再起動しか実施できません。
サマリ
上記はオペレーターに対し、一般的な権限設定例です。OCIポリシーを利用すれば、いろいろな細かい設定ができます。よく利用場面を想定する共通ポリシーも用意されています。詳細は、こちらのドキュメントをご参照ください。
以上
関連記事
オラクル・クラウドの個人ブログ一覧
ドキュメント
コア・サービスの詳細
ベア・メタルおよび仮想マシンDBシステムのポリシー詳細
Autonomous Databaseのポリシー詳細
MySQLデータベース・サービスのポリシー詳細