テクノロジープレビューの RHSM API の使用

更新 -

テクノロジープレビューの RHSM API を使用する

現在、新しい API の実装に関するご意見やご提案を受け付けております。本ページの最後にサポートおよびフィードバックのリンクがあります。ご意見やご要望をお聞かせください。
RHSM の API を使用すると、Red Hat サブスクリプションやエンタイトルメントの使用をより効果的に追跡し、管理方法を自動化することができます。RHSM で API を使用すると、以下を行うことができます。

  • 製品に使用するツールの制御できます。
  • システムインベントリーの管理を改善できます。
  • システムをより効果的に更新およびセキュア化することができます。
  • Red Hat 製品の正式サポートを引き続き受けることができます。

Red Hat Subscription Management の API の使用に移行するため、Red Hat は早期アクセスを提供し、フィードバックを受けるためのテクノロジープレビュープログラムを導入しました。Red Hat Network (RHN) は廃止される予定です。よって、RHN の API へのアクセスも廃止されます。その一環で、Red Hat は RHSM を開発し、RHSM のサポートに関するドキュメントを作成しています。

前提条件

Red Hat Subscription Management API は承認に OAuth 2.0 を使用します。トークンを取得し、API にアクセスするには、以下の情報が必要になります。

  • RHSM API Tokens ページ で生成されたオフライントークン。
  • クライアント ID = rhsm-api
  • トークン URL = https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token

注記: 以前クライアント ID と、RHSM API にアクセスするためのシークレットを作成したことがある場合、2019 年 10 月 31 日まではこれらを使用してトークンを作成できます。この期限を過ぎると、これらのクライアント ID とシークレットは非アクティブ化され、RHSM API Tokens ページで生成されたオフライントークンのみがサポートされます。2019 年 10 月 31 日までは、RHSM API Clients ページ から以前作成したクライアント ID とシークレットにアクセスできます。

新しいオフライントークンの生成

オフライントークンは、30 日に 1 度以上使用し、RHSM API のアクセストークンを作成すれば、期限切れになることはありません。これはパスワードとして機能し、新しい更新トークンを作成せずに引き続きアカウントを認証できます。

警告: ネットワーキングのベストプラクティスを順守するパスワード管理を使用してください。パスワードや認証情報をプレーンテキストに保存するのは危険です。オフライントークンには、パスワードを不正使用から保護するセキュリティー対策を同じように適用します。

オフライントークンを生成するには、RHSM API Tokens ページ に移動し、Generate Token ボタンをクリックします。

アクセストークンの生成

オフライントークンを作成したら、そのトークンを使用して新しい更新トークンを作成できます。これには 5 分間有効なアクセストークンが含まれます。アクセストークンはヘッダーに渡され、カスタマーポータルのユーザーを RHSM API に対して認証します。

警告: ネットワーキングのベストプラクティスを順守するパスワード管理を使用してください。パスワードや認証情報をプレーンテキストに保存するのは危険です。

Set the offline token value (in this example, we set it in plaintext and shorten the token value for clarity)
# offline_token='eyJhbGciOiJSUzI1NiIsInR5cCIgOiA'

Create a function to easily filter out JSON values:
# function jsonValue() {
KEY=$1                                            
num=$2
awk -F"[,:}]" '{for(i=1;i<=NF;i++){if($i~/'$KEY'\042/){print $(i+1)}}}' | tr -d '"' | sed -n ${num}p
}

# curl https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token -d grant_type=refresh_token -d client_id=rhsm-api -d refresh_token=$offline_token

以下のような出力が表示されるはずです。access_token は、承認トークンとして使用されるトークンになります。

{"access_token":"oiZjo1MjhkNzZmZi1mNzA4LTQzZWQtOGNkNS1mZTE2ZjRmZTBjZTY6cmhuLXN1cHBvcnQta3RvcmRldXIiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJyaHNtLWFwaSIsImF1dGhfdGltZSI6MTU2NzQwODU5Nywic2Vzc2lvbl9zdGF0ZSI6ImYwZGJiOGQ0LTRlNGUtNDY1NC04NDRjLTZmMzcwNGM4NDQyMiIsImFjciI6IjAiLCJhbGxvd2VkLW9yaWdpbnMiOltdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsicG9ydGFsX21hbmFnZV9zdWJzY3JpcHRpb25zIiwib2ZmbGluZV9hY2Nlc3MiLCJjYW5kbGVwaW5fc3lzdGVtX2FjY2Vzc192aWV3X2VkaXRfYWxsIiwiYWRtaW46b3JnOmFsbCIsInBvcnRhbF9tYW5hZ2VfY2FzZXMiLCJwb3J0YWxfc3lzdGVtX21hbmFnZW1lbnQiLCJwb3J0YWxfZG93bmxvYWQiXX0sInJlc291cmNlX2FjY2VzcyI6e30sImFjY291bnRfaWQiOiIxOTc5NzEwIiwibmFtZSI6Iktlbm55IFRvcmRldXJzIiwicHJlZmVycmVkX3VzZXJuYW1lIjoicmhuLXN1cHBvcnQta3RvcmRldXIiLCJnaXZlbl9uYW1lIjoiS2VubnkiLCJmYW1pbHlfbmFtZSI6IlRvcmRldXJzIiwiZW1haWwiOiJrdG9yZGV1ckByZWRoYXQuY29tIn0.JfStOgLvgFUAlMb7aVfm-dWxd4wN5oqk377Q6oyDe55pM4zDiZ0f1yJfHsWL8RHeb3r0tj8DY_UAyAFkxAnjyWjq52d7h2EfJUPOs1p1P8Yeu5hDwOrA34Es2maN-ZbJCc4sOb7stGhxSCU15CfvPFIRR5tgSQ17-Mx-x4ZnK_fwpOK6DqQpNzZ0Krz3U1a-NH86XJ8dT8lC3o03YrdlcZx_-wv6-PehqNQa2Hb9vt1csX8QlL3PEyBVNPZXaaTHvyFYx0orGyjKA83Qq-LihbWBXzNjf_rIEfsPJYi-uQHIT_zjaOPYo2rXi7VTPJC2qRSxF2yaRGlihZHxkDzMOTITnaDeMhbx1zvRr-R9eXocEUzsU9j-Yx7h3WYCFjb8zdfXTBHV8SCaMdH1u9Eesa5gmHOoki8882RR85i1fjpBayFTS36y4S-yDebUYiukXOnw8mMMKy04NhVpFGfWtJ8--Jy4Ypndqqk_OS_PiWBsFFN6lMv5S6DZWVpjjE-CENHKn9ceA4MlerBBXLY02Xz9h0biiQUZrd-NLy11j4os124Mai1mmlNOLz993hw0gl-vKKno_bYOV8dEEmKtSLlSPVdW5X_0vBU0BtQuSEVctz_8zsRKHpT-YlDdmP0VDuzJjWM0YsGz2W0_tMuLG7NYS_Ia3vWAVuK--Uv5cAQ","expires_in":900,"refresh_expires_in":0,"refresh_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICItNGVsY19WZE5fV3NPVVlmMkc0UXhyOEdjd0l4X0t0WFVDaXRhdExLbEx3In0.eyJqdGkiOiJhODZlZDczZS00MmE1LTQzYjUtYjJkYS1iMWM5NzU3OWUyZWMiLCJleHAiOjAsIm5iZiI6MCwiaWF0IjoxNTY3NDEwMDIxLCJpc3MiOiJodHRwczovL3Nzby5yZWRoYXQuY29tL2F1dGgvcmVhbG1zL3JlZGhhdC1leHRlcm5hbCIsImF1ZCI6InJoc20tYXBpIiwic3ViIjoiZjo1MjhkNzZmZi1mNzA4LTQzZWQtOGNkNS1mZTE2ZjRmZTBjZTY6cmhuLXN1cHBvcnQta3RvcmRldXIiLCJ0eXAiOiJPZmZsaW5lIiwiYXpwIjoicmhzbS1hcGkiLCJhdXRoX3RpbWUiOjAsInNlc3Npb25fc3RhdGUiOiJmMGRiYjhkNC00ZTRlLTQ2NTQtODQ0Yy02ZjM3MDRjODQ0MjIiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsicG9ydGFsX21hbmFnZV9zdWJzY3JpcHRpb25zIiwib2ZmbGluZV9hY2Nlc3MiLCJjYW5kbGVwaW5fc3lzdGVtX2FjY2Vzc192aWV3X2VkaXRfYWxsIiwiYWRtaW46b3JnOmFsbCIsInBvcnRhbF9tYW5hZ2VfY2FzZXMiLCJwb3J0YWxfc3lzdGVtX21hbmFnZW1lbnQiLCJwb3J0YWxfZG93bmxvYWQiXX0sInJlc291cmNlX2FjY2VzcyI6e319.S_pmAWzQUc04f0uGHN9rRYd4sH1t4IPnEwCcOH1aBL9Qo4_EbXPWCrtnf84f1pfuKJTQwUS-DldY6eloyVEsGgnqkygBKh270bu_bNXCNAuLJigEMsYx_2VzdnwWLptWS2_FUaNwe7Tai8qXwd8F0ge0Zjoi3P15S_8z4Tp79uD-qKcvwz6NlPKCOZwEbwZqOkJDZ8JKTIK8O0jfqdtHMfaWwlXMXdvx3B70tTOtHjQGAsxZA2dPPvqVGuyMOMmC3bMaISReUbtDwsCV-eAZplDfDZthr4k4JbmG9Iwq1aATaF3aCwfpebcmoIZGHE4_RLZrXCZKapXVVvRxcOrJytxIZrbDHq6ozX7j-j1SE3kuexcSLvlodmfTlxwPX9g7aqJu2ZLno54NxQSgYO8lQqSvScFgLtbX5f_FUS0Iw6yRWWJy2o2fnvfGk83rt5UYTtIb8Xd1GXcpHf8Yl10nVy21BetSQY__VpahF_eZghBNxS689GJnwUqAwlu01pOlb26mmHaydHc3hqUsudZydRbaFfI7nR6gQP8lCtp6b0z5hgVHLG4ZJ7i4MmEL6C5G4xHUaUs6RZgJUSsc2DzLW0b7rSQj41JuvTmSgD8bMrnVokmkAbfvxjKGc7E8n2GyImO7JiKb3RA7_o0xOTRYDIa_Ns-lnigJkUlQZUzt7JI","token_type":"bearer","not-before-policy":0,"session_state":"f0dbb8d4-4e4e-4654-844c-6f3704c84422","scope":"offline_access"}%    

access_token は、API 呼び出しを実行するために承認トークンとして設定および使用される必要があるトークンになります。

# token=`curl https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token -d grant_type=refresh_token -d client_id=rhsm-api -d refresh_token=$offline_token | jsonValue access_token`

トークンによる API 呼び出しの実行

100 個のシステムをリストする API 呼び出しの例は次のとおりです。

# curl -H "Authorization: Bearer $token"  "https://api.access.redhat.com/management/v1/systems?limit=100"

任意の CLI ツールサポート

jq や json_reformat などの JSON フォーマットツールをインストールして、より構造が明確な API 呼び出しの返答を受け取ります。

  • jq は、コマンドラインの JSON プロセッサーで、yum コマンド「sudo yum install jq」を使用してインストールできます。
  • json_reformat は、Red Hat Enterprise Linux に標準装備されるコマンドライン JSON フォーマッターです。

OAuth 2.0 をサポートする 標準の OIDC ライブラリー について詳しい開発者は、これらのライブラリーを使用して Red Hat Subscription Management API からスクリプトおよびアプリケーションへの承認をビルドできます。

API のテストや、API にアクセスする頻度が低いユーザーには、オプションとして REST クライアントを使用できます。REST クライアントが OAuth 2.0 またはカスタムフォームの提出をサポートする場合は、その REST クライアントを使用して Red Hat Subscription Management API にアクセスできます。一般的な REST クライアントの例としては、Postman、Advanced REST Client、Restlet などが挙げられます。

RHSM は took アプリケーション を正式にサポートしなくなりましたが、ワークフローに便利なソリューションであれば引き続き使用することができます。

利用できる Red Hat Subscription Management API へのアクセス

Red Hat は、Red Hat Subscription Management API の仕様を記述する Swagger ファイルを提供します。Swagger の仕様には、利用可能な API エンドポイントに関する情報、入力パラメーター、想定される出力、考えられるエラー応答などが含まれます。Swagger ファイルは、Postman や RESTlet と同様に REST クライアントにインポートでき、API 呼び出しのライブラリーを自動的にビルドします。RHSM API Swagger のドキュメントは、RHSM API Tokens と Swagger ドキュメントのページにあり、本記事の最後に記載されています。

Red Hat への問い合わせ

問題が発生し、サポートが必要な場合は、サポートケースを作成 してください。

API 実装に関するご意見やご提案をお聞かせください。ご意見やご提案がある場合は、アンケートでお知らせください。

ダウンロードおよび Swagger ドキュメントのリソース

トラブルシューティング

0) https://access.redhat.com/management/api から offline_token を取得します。

1) オフライントークンを設定します。

#offline_token='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

設定を検証します。

# echo $offline_token

2) JSON の値を簡単にフィルターできる関数を作成します。

# function jsonValue() {
KEY=$1                                            
num=$2
awk -F"[,:}]" '{for(i=1;i<=NF;i++){if($i~/'$KEY'\042/){print $(i+1)}}}' | tr -d '"' | sed -n ${num}p
}

3) アクセストークンを取得します。

# curl https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token -d grant_type=refresh_token -d client_id=rhsm-api -d refresh_token=$offline_token

4) 作成した関数でアクセストークンを取得します。

# token=`curl https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token -d grant_type=refresh_token -d client_id=rhsm-api -d refresh_token=$offline_token | jsonValue access_token`

access_token の設定を検証します。

# echo $token

5) API 呼び出しを実行します。

# curl -H "Authorization: Bearer $token"  "https://api.access.redhat.com/management/v1/systems?limit=100"