第3章 API 呼び出しの認証
Satellite API との対話には、Satellite Server の CA 証明書で SSL 認証するか、有効な Satellite ユーザー認証情報で認証する必要があります。本章では、使用可能な認証方法について説明します。
3.1. SSL 認証の概要
Red Hat Satellite は HTTPS を使用して、Red Hat Satellite Server との通信時に、一定の暗号化およびアイデンティティーの検証を行います。Satellite 6.6 では、SSL 以外の通信はサポートしません。
Red Hat Satellite Server はそれぞれ、自己署名証明書を使用します。この証明書は、暗号化キーを検証するサーバー証明書および、Satellite Server のアイデンティティーを信頼する証明局の役割を果たします。
3.1.1. SSL 認証の設定
以下の手順を使用して、Satellite Server に対する API 要求の SSL 認証を設定します。
手順
以下のオプションのいずれかを使用して、通信に使用する Satellite Server から証明書を取得します。
リモートサーバーからコマンドを実行する場合は、SSH を使用して証明書を取得します。
$ scp root@satellite.example.com:/var/www/html/pub/katello-server-ca.crt ./
Satellite Server で直接コマンドを実行する場合は、証明書を現在のディレクトリーにコピーします。
$ cp /var/www/html/pub/katello-server-ca.crt ./
--cacert katello-server-ca.crt
オプションを指定した API 要求を使用し、Satellite Server のアイデンティティーを検証します。$ curl --request GET \ --user sat_username:sat_password \ --header "Accept:application/json" \ --cacert katello-server-ca.crt \ https://satellite.example.com/katello/api/organizations \ | python -m json.tool
Network Security Services (NSS) データベースを作成して
katello-server-ca.crt
証明書を保存します。$ certutil -N -d sql:$HOME/.pki/nssdb
NSS データベースに永続的に証明書を追加します。
$ certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "Red Hat Satellite" \ -i katello-server-ca.crt
--cacert
オプションを指定せずに API 要求を入力して、証明書が NSS データベースに存在することを確認します。$ curl --request GET \ --user sat_username:sat_password \ https://satellite.example.com/api/v2/hosts
3.2. HTTP 認証の概要
Satellite API への要求には必ず、有効な Satellite ユーザー名とパスワードが必要です。API は HTTP の Basic 認証を使用して、これらの認証情報を暗号化して、Authorization
ヘッダーに追加します。Basic 認証に関する詳細情報は、RFC 2617 HTTP Authentication: Basic and Digest Access Authentication を参照してください。要求に適切な Authorization
ヘッダーが含まれていない場合には、API は 401 Authorization Required
エラーを返します。
Basic 認証では、パスワードをプレーンテキストで送信するなど、機密情報が含まれている可能性のある情報を扱います。REST API には、プレーンテキストの要求をトランスポートレベルで暗号化する HTTPS が必要です。
base64 ライブラリーによっては、暗号化された認証情報を複数行に分け、行末には改行文字を付けることがあります。そのような場合には、ヘッダーが破損し、要求に問題が発生します。認証ヘッダーには、エンコードされた認証情報がヘッダー内に一行で記載されている必要があります。
3.3. OAuth 認証の概要
Basic 認証の代わりに、制限のある OAuth 1.0 認証をサポートしています。これは、プロトコルのバージョン 1.0a の 1-legged OAuth と呼ばれることもあります。
OAuth の設定を確認するには、Satellite Web UI で 管理 > 設定 > 認証 に移動します。OAuth コンシューマーキー は全 OAuth クライアントが使用するトークンです。
Satellite は、OAuth 設定を /etc/foreman/settings.yaml
ファイルに保存します。Satellite はアップグレード時にこのファイルへの手動の変更を上書きするので、これらの設定を行うには、satellite-installer
スクリプトを使用します。
3.3.1. OAuth の認証
OAuth 設定を変更するには、必要なオプションを指定して satellite-installer
を入力します。以下のコマンドを入力して、OAuth 関連のインストーラーオプションすべてを表示します。
# satellite-installer --full-help | grep oauth
OAuthのマッピングの有効化
デフォルトでは、Satellite は、ビルトインの匿名 API 管理者アカウントで、全 OAuth API 要求を認可するため、API 応答には全 Satellite データが含まれます。ただし、要求を行う Foreman ユーザーを指定して、対象ユーザーにデータへのアクセスを制限することも可能です。
OAuth ユーザーマッピングを有効にするには、以下のコマンドを入力します。
# satellite-installer --foreman-oauth-map-users true
Satellite は OAuth 要求のヘッダーを署名しません。有効なコンシューマーキーのあるユーザーは、Foreman ユーザーへのなりすましができてしまいます。
3.3.2. OAuth 要求の形式
OAuth クライアントライブラリーを使用して、全 OAuth パラメーターを構築します。全 OAuth API 要求には、以下の形式で、既存の Foreman ユーザーのログインを指定した FOREMAN-USER
ヘッダーと、Authorization
ヘッダーが必要です。
--header 'FOREMAN-USER: sat_username' \ --header 'Authorization: OAuth oauth_version="1.0",oauth_consumer_key="secretkey",oauth_signature_method="hmac-sha1",oauth_timestamp=1321473112,oauth_signature=Il8hR8/ogj/XVuOqMPB9qNjSy6E='
例
以下の例では、認証に OAuth を使用したアーキテクチャーが表示されます。この要求では、FOREMAN-USER
ヘッダーに sat_username ユーザー名を使用します。--foreman-oauth-map-users
を true
に設定すると、要求には、そのユーザーに対して表示権限が割り当てられたアーキテクチャーのみが含まれます。署名は、全パラメーター、HTTP メソッドおよび URI 変更を反映します。
要求例:
$ curl 'https://satellite.example.com/api/architectures' \ --header 'Content-Type: application/json' \ --header 'Accept: application/json,version=2' \ --header 'FOREMAN-USER: sat_username' \ --header 'Authorization: OAuth oauth_version="1.0",oauth_consumer_key="secretkey",oauth_signature_method="hmac-sha1",oauth_timestamp=1321473112,oauth_signature=Il8hR8/ogj/XVuOqMPB9qNjSy6E='