Open Policy Agent (OPA) プラグインは、OPA サイドカープロキシをアプリケーションにインジェクトすることで、アクセス制御ポリシーを定義します。 特定の名前空間内のアプリケーションにきめ細かな権限付与とアクセス制御を適用するには、OPA インジェクション範囲の制御を有効にします。 この機能は、opa-istio-injection=enabled というラベルが付いた名前空間の Pod にのみ OPA サイドカープロキシをインジェクトし、よりきめ細かなアクセス制御を可能にします。
前提条件
-
v1.12.4.19 以降の Service Mesh (ASM) インスタンスに追加されたクラスター。 詳細については、「ASM インスタンスへのクラスターの追加」をご参照ください。
-
`default` と `develop` の名前空間が作成されていること。 詳細については、「名前空間とクォータの管理」をご参照ください。
-
`default` 名前空間に Nginx アプリケーションが、`develop` 名前空間に Sleep アプリケーションがデプロイされていること。 詳細については、「ステートレスワークロード Deployment の作成」をご参照ください。
ステップ 1: OPA と範囲制御の有効化
この記事では、OPA プラグインとインジェクション範囲の制御を有効にした後、`default` 名前空間に opa-istio-injection=enabled ラベルを追加しますが、`develop` 名前空間には opa-istio-injection=enabled ラベルを追加しません。 これにより、Nginx と Sleep アプリケーションに OPA サイドカープロキシがインジェクトされるかどうかを確認し、インジェクション範囲が正常に制御されていることを検証できます。
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
-
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
-
OPA ポリシー ページで、OPA プラグインの有効化 と OPA 注入範囲制御の有効化 を選択します。 OPA 機能の有効化 をクリックし、確認 ダイアログボックスで OK をクリックします。
ステップ 2: 名前空間へのラベルの追加
このトピックでは、Container Service for Kubernetes (ACK) コンソールで default 名前空間に opa-istio-injection=enabled ラベルを追加する方法について説明します。 または、kubectl ツールを使用してクラスターに接続し、kubectl label namespace default opa-istio-injection=enabled --overwrite コマンドを実行することもできます。 詳細については、「kubeconfig ファイルを取得し、kubectl を使用してクラスターに接続する」をご参照ください。
ACK コンソールにログインします。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、ご利用のクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、名前空間とクォータ をクリックします。
-
Namespaces ページで、default 名前空間を見つけ、操作 列の 編集 をクリックします。
-
名前空間の編集 ダイアログボックスで、ラベル名を opa-istio-injection、値を enabled に設定します。 追加 をクリックし、OK をクリックします。
ステップ 3: アプリケーションの再起動
Pod を削除してアプリケーションを再起動します。 再起動後、OPA サイドカープロキシは自動的にインジェクトされます。
ACK コンソールにログインします。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、ご利用のクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 をクリックします。
-
ポッド ページの上部で、名前空間 を default に設定します。 Nginx アプリケーションの Pod については、操作 列で をクリックします。 ヒント ダイアログボックスで OK をクリックします。
アプリケーションに複数の Pod がある場合は、それらすべてを削除してアプリケーションを再起動する必要があります。 Pod のステータスが [実行中] に変わると、再起動は完了です。
-
上記の手順を繰り返し、`develop` 名前空間の Sleep アプリケーションの Pod を再起動します。
ステップ 4: インジェクション範囲の検証
ACK コンソールにログインします。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、ご利用のクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 をクリックします。
-
ポッド ページで、Nginx と Sleep アプリケーションに OPA サイドカープロキシがインジェクトされているかどうかを確認します。
-
名前空間 を default に設定し、Nginx アプリケーション Pod の名前をクリックします。 コンテナー タブに opa-istio コンテナが表示され、OPA サイドカープロキシが Nginx アプリケーションにインジェクトされていることを示します。
-
名前空間 を develop に設定し、Sleep アプリケーションの名前をクリックします。 コンテナー タブに opa-istio が表示されないことがわかります。 `istio-proxy` と `sleep` コンテナのみがリストされ、`opa-istio` コンテナはありません。 これは、OPA サイドカープロキシが Sleep アプリケーションにインジェクトされておらず、OPA インジェクション範囲の制御が有効になっていることを示します。
この結果は、OPA サイドカープロキシが
opa-istio-injection=enabledラベルを持つ名前空間のアプリケーションにはインジェクトされるが、このラベルのない名前空間のアプリケーションにはインジェクトされないことを示しています。 これにより、OPA インジェクション範囲を正常に制御できたことが確認されます。 -