25.5. Vault でのサービスの秘密の保存

本セクションでは、管理者が vault を使って集中化した場所にサービスの秘密を安全に保存する方法を説明します。サービスの秘密はサービスの公開キーで暗号化します。その後にサービスがこの秘密を取得する際は、ドメイン内のいずれかのマシンでサービスのプライベートキーを使用します。この秘密にアクセスできるのは、当該サービスと管理者のみです。
本セクションには以下の手順があります。
これらの手順では、以下を想定しています。
  • admin とは、サービスのパスワードを管理する管理者です。
  • http_password とは、管理者が作成しユーザーのプライベート vault の名前です。
  • password.txt とは、サービスのパスワードを格納しているファイルです。
  • password_vault とは、サービス用に作成された vault です。
  • HTTP/server.example.com とは、そのパスワードがアーカイブ化されるサービスです。
  • service-public.pem とは、password_vault に保存されているパスワードの暗号化に使用するサービスの公開キーです。

25.5.1. サービスのパスワードを保存するユーザー Vault の作成

管理者が所有するユーザー vault を作成し、サービスのパスワードを保存します。vault タイプは標準とし、管理者が vault のコンテンツにアクセスする際に認証が不要とするようにします。
  1. 管理者としてログインします。
    $ kinit admin
  2. 標準のユーザー vault を作成します。
    $ ipa vault-add http_password --type standard
    ---------------------------
    Added vault "http_password"
    ---------------------------
      Vault name: http_password
      Type: standard
      Owner users: admin
      Vault user: admin
  3. サービスパスワードを vault にアーカイブします。
    $ ipa vault-archive http_password --in password.txt
    ----------------------------------------
    Archived data into vault "http_password"
    ----------------------------------------

    警告

    パスワードを vault にアーカイブした後、システムから password.txt を削除します。

25.5.2. ユーザー Vault からサービスインスタンスへのサービスパスワードの提供

サービス用に作成された非対称 vault を使って、サービスパスワードをサービスインスタンスに提供します。
  1. 管理者としてログインします。
    $ kinit admin
  2. サービスインスタンスの公開キーを取得します。たとえば、以下のように openssl ユーティリティーを使用します。
    1. service-private.pem プライベートキーを生成します。
      $ openssl genrsa -out service-private.pem 2048
      Generating RSA private key, 2048 bit long modulus
      .+++
      ...........................................+++
      e is 65537 (0x10001)
    2. このプライベートキーを基に、service-public.pem 公開キーを生成します。
      $ openssl rsa -in service-private.pem -out service-public.pem -pubout
      writing RSA key
  3. サービスインスタンスの vault として非対称 vault を作成し、公開キーを提供します。
    $ ipa vault-add password_vault --service HTTP/server.example.com --type asymmetric --public-key-file service-public.pem
    ----------------------------
    Added vault "password_vault"
    ----------------------------
    Vault name: password_vault
    Type: asymmetric
    Public key: LS0tLS1C...S0tLS0tCg==
    Owner users: admin
    Vault service: HTTP/server.example.com@EXAMPLE.COM
    vault にアーカイブ化されたパスワードは、キーで保護されます。
  4. 管理者のプライベート vault からサービスパスワードを取得し、これを新規サービスの vault にアーカイブします。
    $ ipa vault-retrieve http_password --out password.txt
    -----------------------------------------
    Retrieved data from vault "http_password"
    -----------------------------------------
    $ ipa vault-archive password_vault --service HTTP/server.example.com --in password.txt
    -----------------------------------
    Archived data into vault "password_vault"
    -----------------------------------
    これでパスワードは、サービスインスタンスの公開キーで暗号化されます。

    警告

    パスワードを vault にアーカイブした後、システムから password.txt を削除します。
パスワードを必要とするサービスインスタンスごとにこれらのステップを繰り返します。各サービスインスタンスごとに新たな非対称 vault を作成してください。

25.5.3. サービスインスタンス用のサービスパスワードの取得

サービスインスタンスは、ローカル保存のサービスのプライベートキーを使って、サービス vault のパスワードを取得することができます。
  1. 管理者としてログインします。
    $ kinit admin
  2. サービス用の Kerberos チケットを取得します。
    # kinit HTTP/server.example.com -k -t /etc/httpd/conf/ipa.keytab
  3. サービス vault のパスワードを取得します。
    $ ipa vault-retrieve password_vault --service HTTP/server.example.com --private-key-file service-private.pem --out password.txt
    ------------------------------------
    Retrieved data from vault "password_vault"
    ------------------------------------

25.5.4. サービス Vault のパスワード変更

サービスインスタンスのセキュリティーが侵害されたら、サービス vault のパスワードを変更し、セキュリティー侵害されていないサービスインスタンスにだけ新規パスワードを再度提供することで、これを切り離します。
  1. 管理者のユーザー vault に新規パスワードをアーカイブします。
    $ ipa vault-archive http_password --in new_password.txt
    ----------------------------------------
    Archived data into vault "http_password"
    ----------------------------------------
    これで vault に保存されている現行パスワードが上書きされます。
  2. セキュリティーが侵害されたインスタンス以外の各サービスインスタンスに新規パスワードを再提供します。
    1. 管理者の vault から新規パスワードを取得します。
      $ ipa vault-retrieve http_password --out password.txt
      -----------------------------------------
      Retrieved data from vault "http_password"
      -----------------------------------------
    2. 新規パスワードをサービスインスタンスの vault にアーカイブします。
      $ ipa vault-archive password_vault --service HTTP/server.example.com --in password.txt
      -----------------------------------
      Archived data into vault "password_vault"
      -----------------------------------

      警告

      パスワードを vault にアーカイブした後、システムから password.txt を削除します。