11.13 REST API用のOAuth JWTの構成
OAAはデフォルトで、REST APIのAPIキー・セキュリティを使用するよう構成されています。管理者は、OAuth JSON Webトークン(JWT)を有効にしてREST APIにアクセスできるため、有効期間が短いアクセス・トークンを使用してセキュリティを強化できます。
ノート:
初期インストールの際、管理者は、APIキー・セキュリティのみモードを使用する必要があります。インストールが完了し、すべてのユースケースを検証したら、OAuth JWTセキュリティが必要な場合は、APIキー・セキュリティとOAuthの組合せモードにアップグレードして、ユースケースを再度検証する必要があります。すべてのユースケースが成功した場合は、必要に応じて、OAuthのみを使用するようアップグレードできます。- OAAポッドとサービス間の内部通信。
- OAA管理コンソールでタスクを実行する場合。
- 外部アプリケーションがREST APIを使用してOAAと通信する場合。使用可能なREST APIは次のとおりです:
- APIキー・セキュリティのみ
- APIキー・セキュリティとOAuthの組合せ
- OAuthのみ
ノート:
Oracle Universal Authenticator (OUA)でOAAを使用していて、OAuth JWTを使用する場合は、APIキー・セキュリティとOAuthの組合せモードを使用する必要があります。APIキー・セキュリティのみ
APIキー・セキュリティ・モードはデフォルトの構成であり、初期インストール時に使用する必要があります。APIキー・セキュリティ・モードが構成されている場合、内部通信、OAA管理コンソールのタスクおよび外部REST APIアクセスは、APIキー・セキュリティを使用して実行されます。
APIキー・セキュリティのみモードを構成するには、「APIキー・セキュリティのみの構成」を参照してください。
curl -i -X GET -H Authorization:Basic <Base64Encoded(<username>:<password>)> -H <request-header>:<value> <PolicyUrl>/<resource-path>
APIキー・セキュリティとOAuthの組合せ
- 内部通信およびOAA管理コンソールのタスクでは、APIキー・セキュリティが使用されます。
- 外部REST APIアクセスは、APIキー・セキュリティまたはOAuth JWTのいずれかを使用して実行できます。
APIキー・セキュリティとOAuthの組合せモードを構成するには、「APIキー・セキュリティとOAuthの組合せの構成」を参照してください。
外部アプリケーションを使用してREST APIにアクセスする場合、OAuthのアクセス・トークンは、Authorization:Bearer <Token>
を使用して渡せます。APIキー・セキュリティの場合は、Authorization:Basic <Base64Encoded(<username>:<password>)>
を使用して、ユーザー名とパスワードを渡します。
OAuthのみ
OAuthのみモードを使用すると、OAAの内部通信、OAA管理コンソールのタスクおよび外部REST APIアクセスは、OAuth JWTトークンのみを使用して実行されます。
OAuthのみモードを構成するには、「OAuthのみの構成」を参照してください。
Authorization:Bearer <Token>
を使用して渡されます。次の例は、OAA管理APIを使用したGETリクエストの実行を示しています:curl -i -X GET -H Authorization:Bearer <Token> -H <request-header>:<value> <PolicyUrl>/<resource-path>
11.13.1 APIキー・セキュリティのみの構成
ノート:
これは、installOAA.properties
に構成されているデフォルトのインストール方法です。
- 次のパラメータを##3.OAUTH configuration## (
installOAA.properties
ファイル)の下に設定します:install.global.service.security.basic.enabled=true install.global.service.security.oauth.enabled=false
installOAA.properties
ファイルの詳細は、「インストール用のプロパティ・ファイルの準備」を参照してください。
11.13.2 APIキー・セキュリティとOAuthの組合せの構成
次の項では、APIキー・セキュリティとOAuthの組合せモードの構成方法を示します。
installOAA.propertiesファイルの準備
- 次のパラメータを##3.OAUTH configuration## (
installOAA.properties
ファイル)の下に設定します:install.global.service.security.basic.enabled=true install.global.service.security.oauth.enabled=true
installOAA.properties
ファイルの詳細は、「インストール用のプロパティ・ファイルの準備」を参照してください。
OAA.shを使用したOAAの更新
installOAA.properties
ファイルを更新したら、OAA.sh
を実行して、OAAをこの構成で更新する必要があります:
- 次のようにして、OAA管理ポッドに接続します:
これにより、OAA管理ポッド内のBashシェル内に移動します:kubectl exec -n oaans -ti oaamgmt-oaa-mgmt-6f4c9cd56f-std6l -- /bin/bash
[oracle@oaamgmt-oaa-mgmt-6f4c9cd56f-std6l /]$
- OAA管理ポッド内で次を実行して、OAAをこの構成で更新します:
[oracle@oaamgmt-oaa-mgmt-6f4c9cd56f-std6l /]$ cd ~ [oracle@oaamgmt-oaa-mgmt-6f4c9cd56f-std6l ~]$ ./OAA.sh -f installOAA.properties
ノート:
これにより、<NFS_CONFIG_PATH>/installOAA.properties
ファイルが使用されます。
11.13.3 OAuthのみの構成
次の項では、OAuthのみモードの構成方法を示します。
installOAA.propertiesファイルの準備
- 次のパラメータを##3.OAUTH configuration## (
installOAA.properties
ファイル)の下に設定します:
説明:install.global.service.security.basic.enabled=false install.global.service.security.oauth.enabled=true oauth.tokenexpiry=3600 api.oauth.tokenexpiry=3600 oauth.adminname=<adminuser> oauth.adminpassword=<adminuserpwd> oauth.appusername=<appuser> oauth.appuserpassword=<appuserpwd>
oauth.tokenexpiry
は、UIトークンの有効期限(秒)です。UIトークンは、OAA管理コンソールを使用してタスクを実行するときに使用されます。デフォルト値は3600秒(1時間)です。-
api.oauth.tokenexpiry
は、API OAuthトークンの有効期限(秒)です。API OAuthトークンは内部通信に使用されます。デフォルト値は3600秒(1時間)です。 oauth.adminname
は、OAA-Admin-Role
グループのメンバーである管理ユーザーに設定する必要があります。詳細は、「LDAPストアでのユーザーとグループの作成」を参照してください。oauth.adminpassword
は、oauth.adminname
に定義されたユーザーのbase64でエンコードされたパスワードです。-
oauth.appusername
には、OAA-App-User
グループのメンバーであるすべてのユーザーを設定する必要があります。詳細は、「LDAPストアでのユーザーとグループの作成」を参照してください。ノート:
このユーザーが、OAA-Admin-Role
グループとOAA-App-User
グループの両方に存在している場合は、oauth.adminname
と同じユーザーでもかまいません。 oauth.appuserpassword
は、oauth.appusername
に定義されたユーザーのbase64でエンコードされたパスワードです。
install.global.service.security.basic.enabled=false install.global.service.security.oauth.enabled=true oauth.tokenexpiry=3600 api.oauth.tokenexpiry=3600 oauth.adminname=oaaadmin oauth.adminpassword=bXlvYWFhZG1pbnB3ZA== oauth.appusername=testuser oauth.appuserpassword=bXl0ZXN0dXNlcnB3ZA==
installOAA.properties
ファイルの詳細は、「インストール用のプロパティ・ファイルの準備」を参照してください。
OAA.shを使用したOAAの更新
installOAA.properties
ファイルを更新したら、OAA.sh
を実行して、OAAをこの構成で更新する必要があります:
- 次のようにして、OAA管理ポッドに接続します:
これにより、OAA管理ポッド内のBashシェル内に移動します:kubectl exec -n oaans -ti oaamgmt-oaa-mgmt-6f4c9cd56f-std6l -- /bin/bash
[oracle@oaamgmt-oaa-mgmt-6f4c9cd56f-std6l /]$
- OAA管理ポッド内で次を実行して、OAAをOAuth JWT構成で更新します:
[oracle@oaamgmt-oaa-mgmt-6f4c9cd56f-std6l /]$ cd ~ [oracle@oaamgmt-oaa-mgmt-6f4c9cd56f-std6l ~]$ ./OAA.sh -f installOAA.properties
ノート:
これにより、<NFS_CONFIG_PATH>/installOAA.properties
ファイルが使用されます。
トークン・リフレッシュCronjobの構成
- OAA管理ポッド内で次のスクリプトを実行して、トークンを自動的に更新するcronjobを作成します:
ここで、[oracle@oaamgmt-oaa-mgmt-6f4c9cd56f-std6l /]$ cd ~/scripts [oracle@oaamgmt-oaa-mgmt-6f4c9cd56f-std6l ~]$ ./tokenRefresh.sh -f {CONFIG_DIR}/installOAA.properties -c "<Your_Cronjob_Schedule>"
<Your_Cronjob_Schedule>
は、CronJobで定義された形式です。たとえば、次のcronjobスケジュールでは、45分ごとにトークンが更新されます:./tokenRefresh.sh -f /u01/oracle/scripts/settings/installOAA.properties -c "*/45 * * * *"
ノート:
トークンがapi.oauth.tokenexpiry
の前に余裕を持って更新されるようにトークンの更新間隔を設定し、停止時間が発生しないようにする必要があります。
kubectl get cronjob -n oaans
出力は次のようになります:NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
oaamgmt-oaa-mgmt-r */45 * * * * False 0 3m48s 1h
ノート:
リタイアする必要があるトークンは、適切なOAM APIを起動して失効させる必要があります。詳細は、「トークンの取消しRESTエンドポイント」を参照してください。トークン・リフレッシュCronjobのトラブルシューティング
- cronjobは、本番の次のような条件で失敗します:
- OAuthがOAAで有効になっていない場合(例:
install.global.service.security.oauth.enabled=false
) - ジョブがOAMサーバーからトークンを取得できない場合
上の条件により、cronjobポッドのステータスがエラーになります。cronjobポッドがエラーになると、バックオフ間隔が長くなり、構成可能な回数分ジョブが再試行されます。再試行は、
backoffLimit
に達すると停止されます。ジョブがエラーで停止した場合は、失敗したジョブを削除すると、cronjobが再開されます。「Pod backoff failure policy」を参照してください。 - OAuthがOAAで有効になっていない場合(例:
- cronjobのジョブおよびポッドのステータスを表示するには、次のコマンドを実行します:
- 管理コンテナ内でcronjobの名前を取得します:
出力は次のようになります:kubectl get cronjob -n oaans
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE oaamgmt-oaa-mgmt-r */45 * * * * False 0 3m48s 1h
- 次のコマンドを実行して、cronjobに関連付けられたジョブのリストを取得します:
出力は次のようになります:kubectl get jobs -l cronjob=oaamgmt-oaa-mgmt-r
NAME COMPLETIONS DURATION AGE oaamgmt-oaa-mgmt-r-28646612 1/1 5s 3m9s
- 次のコマンドを実行して、ジョブに関連付けられたポッドの名前を取得します:
ジョブ・ポッドが正常に完了すると、出力は次のようになります:kubectl get pods -l cronjob=oaamgmt-oaa-mgmt-r
ジョブ・ポッドに問題がある場合は、次のように、NAME READY STATUS RESTARTS AGE oaamgmt-oaa-mgmt-r-28646620-brnk5 0/1 Completed 0 2m42s
Error
ステータスが表示されます:NAME READY STATUS RESTARTS AGE oaamgmt-oaa-mgmt-r-28646620-brnk5 0/1 Error 0 2m42s oaamgmt-oaa-mgmt-r-28646620-5495n 0/1 Error 0 15s oaamgmt-oaa-mgmt-r-28646620-ftndp 0/1 Error 0 3s
- ポッドのステータスが
Error
の場合、実行された最新のポッドのログを表示することで問題を診断できます。たとえば:kubectl logs oaamgmt-oaa-mgmt-r-28646620-ftndp
- 管理コンテナ内でcronjobの名前を取得します:
OAuth JWTを使用したOAMからREST APIへのアクセス
ノート:
内部通信やOAA管理コンソールで実行されるタスクでは、OAAで構成されたトークンが使用され、cronjobによってリフレッシュされます。- REST APIをOAuth JWTで使用するには、2レッグ・フローまたは3レッグ・フローを使用して、OAMからアクセス・トークンを取得する必要があります。OAuth 12cのランタイムREST APIに関する項を参照してください。
- このアクセス・トークンは、
Authorization:Bearer <Token>
を使用して渡す必要があります。次の例は、OAA管理APIを使用したGETリクエストの実行を示しています:curl -i -X GET -H Authorization:Bearer <Token> -H <request-header>:<value> <PolicyUrl>/<resource-path>