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

Alibaba Cloud Service Mesh:OPA サイドカープロキシの挿入範囲を制御する

最終更新日:Jan 14, 2025

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 名前空間にデプロイされています。 詳細については、「デプロイメントを使用してステートレスアプリケーションを作成する」をご参照ください。

    NGINX アプリケーションと sleep アプリケーションの作成方法を示す

    1. 次のコードブロックに示されている対応するコードを使用して、nginx.yaml ファイルと sleep.yaml ファイルを作成します。

      nginx.yaml

      apiVersion: apps/v1 # 1.9.0 より前のバージョンでは 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 サイドカープロキシの挿入範囲を制御する機能を有効にする

この例では、OPA プラグインと OPA サイドカープロキシの挿入範囲を制御する機能を有効にした後、opa-istio-injection=enabled ラベルを default 名前空間に追加し、opa-istio-injection=enabled ラベルを develop 名前空間に追加しません。 OPA サイドカープロキシが NGINX アプリケーションと sleep アプリケーションの両方に挿入されているかどうかを確認することで、OPA サイドカープロキシの挿入範囲が制御されていることを確認します。

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

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

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

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

  2. [クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。 左側のナビゲーションペインで、[名前空間とクォータ] をクリックします。

  3. [名前空間] ページで、編集アクションdefault 名前空間の 列の をクリックします。

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

手順 3:アプリケーションを再起動する

この手順では、Pod を削除することでアプリケーションを再起動します。 アプリケーションが再起動されると、アプリケーションが属する名前空間に必要なラベルがある場合、OPA サイドカープロキシがアプリケーションに自動的に挿入されます。

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

  2. [クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。 左側のペインで、[ワークロード] > [pod] を選択します。

  3. [pod] ページの上部で、[名前空間]default に設定し、NGINX アプリケーションがデプロイされている Pod の その他 > 削除[アクション] 列で OK を選択します。 ダイアログボックスで、 をクリックします。

    アプリケーションに複数の Pod がある場合は、これらの Pod をすべて削除してアプリケーションを再起動する必要があります。 Pod の状態が [実行中] の場合、Pod は再起動されます。

  4. この手順の前述の操作を繰り返して、develop 名前空間の sleep アプリケーションの Pod を再起動します。

手順 4:挿入範囲の制御が成功したかどうかを確認する

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

  2. [クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。 左側のペインで、[ワークロード] > [pod] を選択します。

  3. [pod] ページで、OPA サイドカープロキシが NGINX アプリケーションと sleep アプリケーションに挿入されているかどうかを確認します。

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

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

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