【IBM Application Gateway】关于使用Redis服务器进行会话保持

首先

我尝试将包含在IBM Security Verify中的IBM Application Gateway部署到Openshift,并验证了其故障转移功能。

在中文中,故障转移设置有3种大的选项。

在前一篇文章中我们介绍了两个内容。
关于【IBM应用网关】的故障切换行为。

这次我们将介绍使用第三个Redis服务器进行会话管理。

qiita(1).png

使用 Redis 服务器实现分布式会话

为了进行操作验证,我们使用了一个独立的Redis服务器来进行功能验证。

Redis服务器使用Kubernetes手册中的yaml文件,在Openshift上创建了Deployment/Service。
例如:部署使用Redis的PHP留言板应用程序。
https://kubernetes.io/ja/docs/tutorials/stateless-application/guestbook/

由于Deployment.yaml样本中的图像是”k8s.gcr.io/redis:e2e”,我们将其更改为v6及更高版本的Redis服务器。
示例)image: redis:latest

样本的Deployment.yaml中图像为”k8s.gcr.io/redis:e2e”,所以我们要将其更改为v6及以上版本的Redis服务器。
示例)image: redis:latest

由于Deployment.yaml样本中的图像为”k8s.gcr.io/redis:e2e”,因此我们将其更改为v6及以上版本的Redis服务器。
例如)image: redis:latest

我們將為該項目創建Deployment/Service。

> oc create -f redis-master-deployment.yaml
> oc create -f redis-master-service.yaml
> oc get pods |grep redis*
redis-master-f46ff57fd-wg7nw   1/1     Running     0          7h32m
> oc get service |grep redis*
redis-master   ClusterIP   172.xx.xx.xx    <none>        6379/TCP   7h32m

以下是在IBM Application Gateway的操作验证中使用的yaml文件的部分内容。在配置Redis服务器时,需要同时进行Services/Servers的配置。

服务/Redis
https://docs.verify.ibm.com/gateway/docs/yaml-services-redis

服务器/会话

https://docs.verify.ibm.com/gateway/docs/yaml-server-session

services:
  redis:
    default_collection: test-collection-session
    key_prefix: iag-test-
    collections:
      - connect_timeout: 20
        health_check_interval: 200
        idle_timeout: 100
        io_timeout: 300
        matching_host: xxxxx.jp-tok.containers.appdomain.cloud
        max_pooled_connections: 200
        name: test-collection-session
        servers:
        - host: redis-master
          name: redis-a
          port:  6379
server:
  ssl:
    front_end:
      certificate: "@secret_files/iag.certkey.pem"
  local_applications:
    cred_viewer:
      path_segment: "cred-viewer"
      enable_html: true
  session:
    cookie_name: sess_cookie
    max_sessions: 20
    timeout: 600
    inactive_timeout: 100
    redis:
      enabled: true
      key_prefix: "iag-test-"
      default_collection: test-collection-session
      client_list_cache_lifetime: 10
      concurrent_sessions:
        enabled: true
        prompt_for_displacement: true
        max_user_sessions: 15
        user_identity_attribute_name: AZN_CRED_PRINCIPAL_NAME
    reauth:
        login_time_window: 10
~~割愛~~
identity:
  oidc:
    discovery_endpoint: https://<tenant>.verify.ibm.com/oidc/endpoint/default/.well-known/openid-configuration
    client_id: <OIDC_CLIENT_ID>
    client_secret: <S_OIDC_CLIENT_SECRET>
~~割愛~~
qiita(3).png

接下来,我们将访问Redis服务器的Pod并确认数据。
在一次访问中,生成了三个条目。

データの例データの説明”iag-test-user-751xxxxqhv”単一ユーザーの同時セッションの数は、Redisの「セット」に保存される。”iag-test-client-iag-test-session-C7KW2WkiwYwc/x/6yuaXXXXXXpYWZDc=”セッションのローカルコピーを持つIAGクライアントのリストは、Redisの「セット」に保存される。”iag-test-session-C7KW2xxxxxZDc=”セッションデータ自体は、単一のRedisの「ハッシュ」に保存される。
> oc rsh <Redisサーバーのpod名>
> redis-cli keys "*"
1) "iag-test-user-751xxxxqhv"
2) "iag-test-client-iag-test-session-C7KW2WkiwYwc/x/6yuaXXXXXXpYWZDc="
3) "iag-test-session-C7KW2xxxxxZDc="
qiita(4).png

关于与JWE FailOverCookie的比较

因为手册中有比较内容,所以我将在Chrome中的机器翻译进行记录。

请点击链接查看原文内容:
共享会话
https://docs.verify.ibm.com/gateway/docs/tasks-sharing-sessions

トピックJWEフェイルオーバーCookieRedisセッションキャッシュ安全ID情報は暗号化されたCookieに保存されるため、Redisセッションキャッシュよりも少し安全性が低くなります。DMZの背後にあるRedisセッションキャッシュで多層防御を提供します。IAGインスタンス間のフェイルオーバーIAGがフェイルオーバーCookieを復号化するには、より高いCPU使用率が必要です。新しいセッションが確立されます。つまり、タイムアウト情報などのセッションセマンティクスを他のIAGインスタンスと共有しません。Redisセッションキャッシュは、シングルサインオンメカニズムを使用するのではなく、セッションを共有します。タイムアウト情報などのセッションセマンティクスは、さまざまなIAGインスタンス間で共有されます。セッションポリシー同時セッションポリシーの適用はありません。セッションの集中管理はありません。同時セッションポリシーの実施。RedisCLIツールを使用したセッション終了を含むセッションの集中管理。メンテナンス企業ポリシーに沿ってフェイルオーバーCookieキーを定期的に更新する必要があります。このプロセスは手動です。Redisセッションキャッシュは暗号化キーを必要としません。クッキーフェイルオーバーCookieは、RedisセッションキャッシュセッションCookieよりも大きくなっています。フェイルオーバーCookieは、そのサイズを大幅に増加させる可能性のある多くの属性を含むように構成できます。Redisセッションキャッシュは、比較的小さい基本的なセッションCookieを使用します。Redisセッションキャッシュ環境のCookieは、通常100バイト未満です。ログアウトブラウザのシナリオでは、フェールオーバーCookieをオンにした状態で正常にログアウトすることはできません。Redisセッションキャッシュを使用すると、ブラウザセッションからログアウトできます。

关于Redis会话缓存的限制

由于手册有限制,所以我将在Chrome上使用机器翻译,并进行记述。

请参考以下原文发表的资料。
分享会话
https://docs.verify.ibm.com/gateway/docs/tasks-sharing-sessions

    • IAGインスタンスが再起動されると、そのインスタンスが参照しているセッションの非アクティブタイムアウトがリセットされます。この状況では、セッションが次にIAGインスタンスによって参照されるときに、非アクティブタイムアウトが再び開始されます。または、ライフタイムタイムアウトにより、一定期間後もセッションが期限切れになります。

 

    • IAGは、Redisサーバーに保存されているセッションを管理するための管理インターフェースを提供していません。代わりに、redis-cliなどのネイティブRedisユーティリティを使用して、Redisサーバーに保存されているセッションデータを管理する必要があります。

 

    • Redisクラスターのサポートは利用できません。

 

    IBMは、Redisサーバー自体を提供またはサポートしていません。サーバーは個別に取得および管理する必要があります。

最终

我们已经介绍了在IBM应用网关中使用Redis服务器进行会话保持的方法。
请注意,IBM Security Verify/IBM应用网关不支持Redis服务器,因此在交付过程中请注意。

广告
将在 10 秒后关闭
bannerAds