12.7. EventPolicy の適用
このセクションでは、イベント配信をセキュリティーで保護するために EventPolicy を適用するためのエンドツーエンドの手順を説明します。次の参照例では、namespace-1 のブローカーは、別の namespace である namespace-2 で実行されている PingSource からのイベントのみを受け入れるように設定されています。
前提条件
- OpenShift Serverless Operator および Knative Eventing が OpenShift Container Platform クラスターにインストールされている。
-
authentication-oidc機能が有効になっている。
手順
2 つの namespace を作成し、
namespace-1にブローカーをデプロイし、次の例に示すように namespace ごとに 1 つのPingSourceを設定します。apiVersion: v1 kind: Namespace metadata: name: namespace-1 --- apiVersion: v1 kind: Namespace metadata: name: namespace-2 --- apiVersion: eventing.knative.dev/v1 kind: Broker metadata: name: broker namespace: namespace-1 --- # PingSource in namespace-1 apiVersion: sources.knative.dev/v1 kind: PingSource metadata: name: pingsource-1 namespace: namespace-1 spec: data: '{"message": "Hi from pingsource-1 from namespace-1"}' schedule: '*/1 * * * *' sink: ref: apiVersion: eventing.knative.dev/v1 kind: Broker name: broker namespace: namespace-1 --- # PingSource in namespace-2 apiVersion: sources.knative.dev/v1 kind: PingSource metadata: name: pingsource-2 namespace: namespace-2 spec: data: '{"message": "Hi from pingsource-2 from namespace-2"}' schedule: '*/1 * * * *' sink: ref: apiVersion: eventing.knative.dev/v1 kind: Broker name: broker namespace: namespace-1次の例に示すように、受信イベントを表示する event-display サービスを作成し、それをブローカーに接続するためのトリガーを追加します。
apiVersion: apps/v1 kind: Deployment metadata: name: event-display namespace: namespace-1 spec: replicas: 1 selector: matchLabels: app: event-display template: metadata: labels: app: event-display spec: containers: - name: event-display image: gcr.io/knative-releases/knative.dev/eventing/cmd/event_display ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: event-display namespace: namespace-1 spec: selector: app: event-display ports: - name: http port: 80 targetPort: 8080 --- apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: trigger namespace: namespace-1 spec: broker: broker subscriber: ref: apiVersion: v1 kind: Service name: event-displayこの段階では、OIDC が無効になっており、EventPolicy が適用されていないため、イベント表示サービスは両方の PingSource からのイベントを表示します。
次のサンプルコマンドを実行して、Knative Eventing で OIDC を有効にし、EventPolicy を作成します。
$ oc -n knative-eventing patch KnativeEventing knative-eventing \ --type merge \ -p '{"spec":{"config":{"features":{"authentication-oidc":"enabled"}}}}'OIDC が有効になったら、次の例に示すように、
namespace-2からの PingSource のみを承認する EventPolicy を作成します。apiVersion: eventing.knative.dev/v1alpha1 kind: EventPolicy metadata: name: event-policy namespace: namespace-1 spec: to: - ref: apiVersion: eventing.knative.dev/v1 kind: Broker name: broker from: - ref: apiVersion: sources.knative.dev/v1 kind: PingSource name: pingsource-2 namespace: namespace-2
検証
次のコマンドを実行して、EventPolicy を検証し、ブローカーのステータスを確認します。
$ oc -n namespace-1 get broker broker -o yaml次のコマンドを実行して、event-display サービスからのログを表示し、
pingsource-2イベントのみが到着していることを確認します。$ oc -n namespace-1 logs -f -l app=event-display次のコマンドを実行して EventPolicy を削除します。
$ oc -n namespace-1 delete eventpolicy event-policy次のコマンドを実行して、ブローカーのステータスをチェックし、デフォルトの
allow-same-namespaceモードに戻っていることを確認します。$ oc -n namespace-1 get broker broker -o yaml次のコマンドを実行して、event-display サービスログを表示し、同じ namespace からの
pingsource-1イベントのみが表示されることを確認します。$ oc -n namespace-1 logs -f -l app=event-display