Open Policy Agent(OPA)を使用すると、OPA サイドカープロキシをアプリケーションに挿入した後に、アクセス制御ポリシーを定義できます。 特定の名前空間のアプリケーションに対してきめ細かい承認とアクセス制御を実装する場合、OPA サイドカープロキシの挿入範囲を制御する機能を有効にできます。 OPA サイドカープロキシは、opa-istio-injection=enabled ラベルを含む名前空間のPodにのみ挿入されます。
前提条件
バージョン 1.12.4.19 以降の Service Mesh(ASM)インスタンスに Container Service for Kubernetes(ACK)クラスターが追加されています。 詳細については、「ASM インスタンスへのクラスターの追加」をご参照ください。
default と develop という名前の 2 つの名前空間が作成されています。 詳細については、「名前空間とリソースクォータの管理」をご参照ください。
NGINX アプリケーションは default 名前空間にデプロイされ、sleep アプリケーションは develop 名前空間にデプロイされています。 詳細については、「デプロイメントを使用してステートレスアプリケーションを作成する」をご参照ください。
手順 1:OPA プラグインと OPA サイドカープロキシの挿入範囲を制御する機能を有効にする
この例では、OPA プラグインと OPA サイドカープロキシの挿入範囲を制御する機能を有効にした後、opa-istio-injection=enabled ラベルを default 名前空間に追加し、opa-istio-injection=enabled ラベルを develop 名前空間に追加しません。 OPA サイドカープロキシが NGINX アプリケーションと sleep アプリケーションの両方に挿入されているかどうかを確認することで、OPA サイドカープロキシの挿入範囲が制御されていることを確認します。
ASM コンソール にログインします。 左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションペインで、 を選択します。
[OPA ポリシー] ページで、[open Policy Agent(opa)プラグインを有効にする] と [OPA 挿入範囲制御を有効にする] を選択し、[OPA を有効にする] をクリックします。 [注記] メッセージで、[OK] をクリックします。
手順 2:必要なラベルを名前空間に追加する
次のセクションでは、ACK コンソールで opa-istio-injection=enabled ラベルを default 名前空間に追加する方法について説明します。 また、kubectl を使用して ACK クラスターに接続し、kubectl label namespace default opa-istio-injection=enabled --overwrite コマンドを実行して、opa-istio-injection=enabled ラベルを default 名前空間に追加することもできます。 クラスターへの接続方法の詳細については、「クラスターの kubeconfig ファイルを取得し、kubectl を使用してクラスターに接続する」をご参照ください。
ACK コンソール にログインします。 左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。 左側のナビゲーションペインで、[名前空間とクォータ] をクリックします。
[名前空間] ページで、編集アクションdefault 名前空間の 列の をクリックします。
[名前空間の編集] ダイアログボックスで、ラベル名を opa-istio-injection に設定し、ラベル値を enabled に設定し、[追加] をクリックし、[OK] をクリックします。
手順 3:アプリケーションを再起動する
この手順では、Pod を削除することでアプリケーションを再起動します。 アプリケーションが再起動されると、アプリケーションが属する名前空間に必要なラベルがある場合、OPA サイドカープロキシがアプリケーションに自動的に挿入されます。
ACK コンソール にログインします。 左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。 左側のペインで、 を選択します。
[pod] ページの上部で、[名前空間] を default に設定し、NGINX アプリケーションがデプロイされている Pod の [アクション] 列で 注OK を選択します。 ダイアログボックスで、 をクリックします。
アプリケーションに複数の Pod がある場合は、これらの Pod をすべて削除してアプリケーションを再起動する必要があります。 Pod の状態が [実行中] の場合、Pod は再起動されます。
この手順の前述の操作を繰り返して、develop 名前空間の sleep アプリケーションの Pod を再起動します。
手順 4:挿入範囲の制御が成功したかどうかを確認する
ACK コンソール にログインします。 左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。 左側のペインで、 を選択します。
[pod] ページで、OPA サイドカープロキシが NGINX アプリケーションと sleep アプリケーションに挿入されているかどうかを確認します。
[名前空間] を default に設定し、NGINX アプリケーションの Pod 名をクリックします。 opa-istio が [コンテナー] タブに表示されます。これは、OPA サイドカープロキシが NGINX アプリケーションに挿入されていることを示します。

[名前空間] を develop に設定し、sleep アプリケーションの Pod 名をクリックします。 opa-istio は [コンテナー] タブに表示されません。これは、OPA サイドカープロキシが sleep アプリケーションに挿入されていないことを示します。

検証結果によると、OPA サイドカープロキシの挿入範囲を制御する機能を有効にした後、OPA サイドカーは、
opa-istio-injection=enabledラベルが付いた名前空間にあるアプリケーションにのみ挿入されます。 これは、OPA サイドカープロキシの挿入範囲を制御したことを意味します。