第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 認証を設定します。

手順

  1. 以下のオプションのいずれかを使用して、通信に使用する 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 ./
  2. --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
  3. Network Security Services (NSS) データベースを作成して katello-server-ca.crt 証明書を保存します。

    $ certutil -N -d sql:$HOME/.pki/nssdb
  4. NSS データベースに永続的に証明書を追加します。

    $ certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "Red Hat Satellite" \
    -i katello-server-ca.crt
  5. --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-userstrue に設定すると、要求には、そのユーザーに対して表示権限が割り当てられたアーキテクチャーのみが含まれます。署名は、全パラメーター、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='