すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Service Mesh:OPA サイドカーのインジェクション範囲の制御

最終更新日:Sep 12, 2026

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. 次の内容で `nginx.yaml` と `sleep.yaml` ファイルを作成します。

      nginx.yaml

      apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
      kind: Deployment
      metadata:
        name: nginx-deployment
      spec:
        selector:
          matchLabels:
            app: nginx
        replicas: 1
        template:
          metadata:
            labels:
              app: nginx
              sidecarset-injected: "true"
          spec:
            containers:
            - name: nginx
              image: nginx:1.14.2
              ports:
              - containerPort: 80
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: nginx
      spec:
        ports:
          - name: http
            port: 80
            protocol: TCP
            targetPort: 80
        selector:
          app: nginx
        type: ClusterIP

      sleep.yaml

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: sleep
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: sleep
        labels:
          app: sleep
          service: sleep
      spec:
        ports:
        - port: 80
          name: http
        selector:
          app: sleep
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sleep
        template:
          metadata:
            labels:
              app: sleep
          spec:
            terminationGracePeriodSeconds: 0
            serviceAccountName: sleep
            containers:
            - name: sleep
              image: curlimages/curl
              command: ["/bin/sleep", "infinity"]
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - mountPath: /etc/sleep/tls
                name: secret-volume
            volumes:
            - name: secret-volume
              secret:
                secretName: sleep-secret
                optional: true
      ---
    2. 次のコマンドを実行して、Nginx アプリケーションを `default` 名前空間に、Sleep アプリケーションを `develop` 名前空間にデプロイします。

      kubectl apply -f nginx.yaml -n default
      kubectl apply -f sleep.yaml -n develop

ステップ 1: OPA と範囲制御の有効化

この記事では、OPA プラグインとインジェクション範囲の制御を有効にした後、`default` 名前空間に opa-istio-injection=enabled ラベルを追加しますが、`develop` 名前空間には opa-istio-injection=enabled ラベルを追加しません。 これにより、Nginx と Sleep アプリケーションに OPA サイドカープロキシがインジェクトされるかどうかを確認し、インジェクション範囲が正常に制御されていることを検証できます。

  1. ASM コンソールにログインします。左側のナビゲーションウィンドウで、[Service Mesh] > [メッシュ管理]を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションウィンドウで、[メッシュセキュリティセンター] > [OPA ポリシー] を選択します。

  3. 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 を使用してクラスターに接続する」をご参照ください。

  1. ACK コンソールにログインします。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。

  2. クラスターリスト ページで、ご利用のクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、名前空間とクォータ をクリックします。

  3. Namespaces ページで、default 名前空間を見つけ、操作 列の 編集 をクリックします。

  4. 名前空間の編集 ダイアログボックスで、ラベル名を opa-istio-injection、値を enabled に設定します。 追加 をクリックし、OK をクリックします。

ステップ 3: アプリケーションの再起動

Pod を削除してアプリケーションを再起動します。 再起動後、OPA サイドカープロキシは自動的にインジェクトされます。

  1. ACK コンソールにログインします。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。

  2. クラスターリスト ページで、ご利用のクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、ワークロード > ポッド をクリックします。

  3. ポッド ページの上部で、名前空間 を default に設定します。 Nginx アプリケーションの Pod については、操作 列で [その他] > [削除] をクリックします。 ヒント ダイアログボックスで OK をクリックします。

    アプリケーションに複数の Pod がある場合は、それらすべてを削除してアプリケーションを再起動する必要があります。 Pod のステータスが [実行中] に変わると、再起動は完了です。

  4. 上記の手順を繰り返し、`develop` 名前空間の Sleep アプリケーションの Pod を再起動します。

ステップ 4: インジェクション範囲の検証

  1. ACK コンソールにログインします。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。

  2. クラスターリスト ページで、ご利用のクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、ワークロード > ポッド をクリックします。

  3. ポッド ページで、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 インジェクション範囲を正常に制御できたことが確認されます。