- Oracle Cloud
- Oracle Database
Oracle Cloud VMware Solutionを構築してみました!
前回の記事でOCVSの概要やメリットをお伝えしました。 本記事では実際にOCVSを構築する手順、および作成したvCenterへ実際に接続する手順をお伝えします!
|
OCIでは、ユーザーがComputeやブロックボリュームなどのOCIサービスを利用する場合、適切な操作権限(参照、作成など)をOCI IAMポリシーで設定します。
OCI IAMポリシーは、where句を使った条件式を使用することで、柔軟な権限付与が可能になります。
今回は、where句による条件式の設定例およびwhere句の有無による違いについてご紹介します。
Index
まずは、OCI IAMポリシーをおさらいしましょう。
OCI IAMポリシーは、ユーザーに許可する操作権限を、OCIで定められた構文で記載する必要があります。
基本構文は以下のとおりです。
allow group <group_name> to <verb> <resource-type> in <location>
{where <condition>}
『 どのグループが 』『 どのような操作を 』『 どのリソース(サービス)に 』アクセス可能か記載します。
また、操作範囲として『 テナンシ全体またはコンパートメント 』から指定できます。
さらに、本記事のwhere句をオプションで指定することで『
条件 』を付与することが可能です。
前述のとおりwhere句はオプションで指定する構文であるため、OCI IAMポリシーはwhere句を使用せずとも設定できます。where句を使用することで、さらに操作権限を絞ることが可能です。
例えば、コンパートメント内で指定した条件に合致するリソースのみ操作可能にする、といった細かい権限付与が可能になります。
なお、where句で条件を使用する場合、変数を利用します。
代表的な変数には、以下のようなものがあります。
変数名 | 説明 |
request.user.id | リクエスト・ユーザーのOCID |
request.groups.id | リクエスト・ユーザーが属するグループのOCID |
target.compartment.id | 条件に合致させるリソースを含むコンパートメントのOCID |
※こちらは一部です。詳細は以下のマニュアルもご参照ください。
また、条件式(シンタックス)としては以下が利用できます。
条件式(シンタックス) | 説明 |
<変数>=<値> | 一致条件 |
<変数>!=<値> | 不一致条件 |
all {<条件式1>,<条件式2>, …} | すべての条件を満たす(AND条件) |
any {<条件式1>,<条件式2>, …} | 一部の条件を満たす(OR条件) |
それでは、where句を使用してみましょう。
今回の例では、以下のユーザー、グループ、ポリシーを用意しています。
Computeインスタンスの停止/起動を可能とするポリシー構文に、where句の条件としてN03781ユーザーのOCIDを指定しています。
ユーザー | N03781、N03782 |
グループ名 | Compute_Manage_Group ※N03781ユーザーとN03782ユーザーは、このグループに属しています。 |
ポリシー名 | Compute_Manage_Policy |
ポリシー構文 | Allow group 'Default'/'Compute_Manage_Group' to manage instance-family in tenancy where request.user.id='ocid1.user.oc1..xxxxxxxxxx' |
Allow group 'Default'/'Compute_Manage_Group' to read app-catalog-listing in tenancy where request.user.id='ocid1.user.oc1..xxxxxxxxxx' | |
Allow group 'Default'/'Compute_Manage_Group' to use volume-family in tenancy where request.user.id='ocid1.user.oc1..xxxxxxxxxx' | |
Allow group 'Default'/'Compute_Manage_Group' to use virtual-network-family in tenancy where request.user.id='ocid1.user.oc1..xxxxxxxxxx' |
N03781ユーザーは、以下のとおりComputeインスタンスの停止/起動を実行できます。
しかし、N03782ユーザーには操作権限が付与されていないため、Computeインスタンスが表示されません。
where句を使用しない場合、N03781ユーザーとN03782ユーザーは同じグループに所属しているため一律の権限が与えられます。しかし、where句を使用することで、ユーザーごとに権限を制御するような細かい制御が可能です。
もう一つ、where句の例をご紹介します。
先ほどの例ではユーザーのOCIDを条件式に使用しましたが、今度はタグを条件式に使用してみましょう。
タグを利用することで、OCIの複数の異なるサービスをタグ名で検索・管理できるようになります。
詳細は以下のマニュアルもご参照ください。
それでは、タグの作成からwhere句の条件式の設定までの流れを見てみましょう。
コンソールの左上メニューから、[ガバナンスと管理] → [タグ・ネームスペース]を選択します。
[Create Tag Namespace]をクリックします。
任意のコンパートメントを選択し、「ネームスペース名」と「説明」を入力後、[ネームスペース定義の作成]をクリックします。
※今回はルートコンパートメントに作成しています。
作成したタグ・ネームスペース名をクリックし、タグ・ネームスペースの詳細画面に移ったあと、[タグ・キー定義の作成]をクリックします。
「タグ・キー」と「説明」を入力後、[タグ・キー定義の作成]をクリックします。
次に、ComputeインスタンスのOEL8_Computeにタグを追加します。
Computeインスタンスの詳細画面の[その他のアクション]から[タグの追加]をクリックします。
「1. タグ・ネームスペースを作成」で作成したタグ・ネームスペースとタグ・キーを選択し、任意のタグ値を入力後、[タグの追加]をクリックします。
Compute詳細画面の[タグ]タブをクリックし、追加したタグが表示されていることを確認します。
次に、ポリシーを修正します。
「where句の例(ユーザーを条件にした制御)」で用意していたポリシー「Compute_Manage_Policy」を以下の赤字のように修正します。
where句の変数および条件式を「request.user.id='リクエスト・ユーザーのOCID'」から「target.resource.tag.<タグ・ネームスペース>.<タグ・キー>='<タグ値>'」に変更しています。これにより、Compute_Manage_Groupグループに所属するユーザーは、タグを追加した「OEL8_Compute」のみ操作可能になります。
ポリシー構文 | Allow group 'Default'/'Compute_Manage_Group' to manage instance-family in tenancy where target.resource.tag.Compute_Manage_tag.OEL8_tag='compute1' |
Allow group 'Default'/'Compute_Manage_Group' to read app-catalog-listing in tenancy where target.resource.tag.Compute_Manage_tag.OEL8_tag='compute1' | |
Allow group 'Default'/'Compute_Manage_Group' to use volume-family in tenancy where target.resource.tag.Compute_Manage_tag.OEL8_tag='compute1' | |
Allow group 'Default'/'Compute_Manage_Group' to use virtual-network-family in tenancy where target.resource.tag.Compute_Manage_tag.OEL8_tag='compute1' | |
Allow group 'Default'/'Compute_Manage_Group' to read all-resources in tenancy(※) |
(※)タグを条件式に使用する場合、Computeインスタンス名などを表示するために、all-resourcesに対してinspect以上を設定する必要がありますが、inspectの場合はComputeインスタンス名が下図のようにOCID表記になるため、今回は最後のAllow文でreadを指定しています。
それでは、動作を確認してみましょう。
権限の違いによる動作の差異を確認するために、Computeインスタンスを二つ準備しています。
・OEL8_Compute:「2. Computeインスタンスにタグを追加」でタグを追加したComputeインスタンス
・OEL9_Compute:環境作成後のデフォルト状態のComputeインスタンス
「OEL8_Compute」には、「2. Computeインスタンスにタグを追加」でタグを追加していますが、「OEL9_Compute」にはタグを追加していません。
それでは、「where句の例(ユーザーを条件にした制御)」で、Computeインスタンスの停止/起動が実行可能であった「N03781」ユーザーで「OEL9_Compute」を停止してみましょう。
Computeインスタンスの停止を実行しようとすると、権限が無い旨のメッセージが表示されました。
次に「where句の例(ユーザーを条件にした制御)」でComputeインスタンスが表示されなかった「N03782」ユーザーで「OEL8_Compute」を停止してみます。
今までは表示されなかったComputeインスタンスが表示されました。
さらに、停止も実行できました。
しかし、タグが追加されていない「OEL9_Compute」は、やはり操作できませんでした。
この結果から、想定どおり、操作権限がないことを確認できました。
いかがでしたでしょうか。
OCIに限らず、クラウド環境では以下のような観点から、権限を適切に管理する必要があります。
・ユーザーによる誤操作の防止
・コンソールで閲覧可能な情報の最小化
・ユーザー情報漏洩時の影響最小化
など
今回ご紹介した条件式を利用することで、さらに柔軟かつ強固な権限管理が可能です。
本記事がお客様の管理業務のお役に立てば幸いです。
■本記事の内容について
本記事に示した定義及び条件は変更される場合があります。あらかじめご了承ください。
■商標に関して
・Oracle®、Java、MySQL及びNetSuiteは、Oracle、その子会社及び関連会社の米国及びその他の国における登録商標です。
・Amazon Web Services、AWS、Powered by AWS ロゴ、[およびかかる資料で使用されるその他の AWS 商標] は、Amazon.com, Inc. またはその関連会社の商標です。
文中の社名、商品名等は各社の商標または登録商標である場合があります。
前回の記事でOCVSの概要やメリットをお伝えしました。 本記事では実際にOCVSを構築する手順、および作成したvCenterへ実際に接続する手順をお伝えします!
本記事では「インスタンス・コンソール接続」で、より簡単にパスワードをリセットする方法をご紹介します。
2024年5月のアップデートで、Computeインスタンスを再作成せずにブートボリュームをリストアできるブートボリューム置き換えの機能が追加されました。この機能追加により、従来のリストア方法よりも手順が少なくなり、障害発生時にも迅速な復旧が可能になりました。