> For the complete documentation index, see [llms.txt](https://docs.keeper.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.keeper.io/keeperpam/jp/privileged-access-manager/password-rotation/rotation-use-cases/saas-account/rotate-credential-via-rest-api.md).

# REST APIを使用した認証情報のローテーション

![](/files/v03eBaboKhdjFL1gdfFv)

## 概要 <a href="#overview" id="overview"></a>

本ページでは、**\[PAMスクリプトのみを実行する]** ローテーションプロファイルを使用して、REST API経由でパスワードをローテーションする一般的な手順を取り扱います。Keeperは組み込みのローテーション処理をスキップし、ボルトに添付したポストローテーションスクリプトをゲートウェイ上で直接実行します。

本ページの最後にPythonスクリプトのサンプルを掲載しています。

## 要件 <a href="#prerequisites" id="prerequisites"></a>

以下がすでに完了していることを前提としています。

* Keeperシークレットマネージャー[アプリケーション](/keeperpam/jp/privileged-access-manager/getting-started/applications.md)が作成済みであること
* 関連レコードを格納する共有フォルダが作成されていること
* PAM構成が設定済みで、ゲートウェイが稼働中であること
* 対象サービス用のREST APIアクセストークンを取得済みであること

## 1. REST APIトークンの取得 <a href="#id-1-obtain-rest-api-token" id="id-1-obtain-rest-api-token"></a>

1. 対象のアプリケーションまたはサービスでAPIトークンを生成します。
2. Keeperボルトにレコードを作成し、トークンを保存します。レコードタイプは任意ですが、本例では「ログイン」を使用します。
   * APIトークンを **パスワード** フィールドに保存
   * 組織のURLまたはAPIエンドポイントを **ウェブサイトのアドレス** フィールドに保存
3. レコードタイトルは、スクリプト内の `api_access_token_title` と一致させます (本例では `Record with Access Token`)。

## 2. ローテーション対象ユーザーのPAMユーザーレコード作成 <a href="#id-2-set-up-rotation-record" id="id-2-set-up-rotation-record"></a>

ローテーション対象ユーザー用にPAMユーザーレコードを作成します。

* **ログイン** にユーザーIDまたはメールアドレスを設定
* **パスワード** に現在のパスワードを設定 (API仕様に応じて)

## 3. ローテーション設定の構成 <a href="#id-3-configure-rotation-settings" id="id-3-configure-rotation-settings"></a>

**\[ローテーション設定]** で **\[セットアップ]** を開き、以下を設定します。

* **\[ローテーションプロファイル]:** **\[PAMスクリプトのみを実行する]**
* **\[ローテーションタイプ]:** 本例では **オンデマンド**
* **\[PAMリソース]:** ゲートウェイに対応するPAM構成
* **\[管理者認証情報レコード]:** 空欄のまま
* **\[アップデート]** で保存

## 4. ポストローテーションスクリプトのアップロード <a href="#id-4-upload-the-post-rotation-script" id="id-4-upload-the-post-rotation-script"></a>

**\[PAMスクリプト]** で **\[PAMスクリプトを追加]** をクリックし、以下のスクリプトを添付します。

* **\[ローテーションクレデンシャル]** に、手順1で作成したAPIアクセスレコードを指定

## Pythonスクリプト <a href="#python-script" id="python-script"></a>

以下は、任意のREST APIでパスワード変更を行うためのサンプルです。実際のAPIに合わせてエンドポイントとペイロードを変更してください。

{% code overflow="wrap" %}

```python
#!/usr/local/bin/pam_rotation_venv_python3

# 注意: Pythonインタープリタへのパスにスペースが含まれている場合、このスクリプトは実行できません。
#       これはLinuxにおけるshebang行の既知の制限であり、スペースを含まないパスに
#       Pythonインタープリタへのシンボリックリンクを作成する必要があります。
#       例: sudo ln -s "/usr/local/bin/my python3.7" /usr/local/bin/pam_rotation_venv_python3

# 注意: このスクリプトは、REST APIを使用したパスワードローテーションのデモです。
#       実際のAPIを呼び出すものではありません。ご自身のAPIに合わせてスクリプトを修正してください。

import asyncio
import sys
import base64
import json

# デバッグ用にPythonのバージョンを表示
print(f"# Python version: {sys.version}")

# デバッグ用にインストール済みパッケージを表示（必要に応じてコメントを外してください）
# import pkg_resources
# print("# \n# Installed packages for debugging:")
# installed_packages = pkg_resources.working_set
# installed_packages_list = sorted(["%s==%s" % (i.key, i.version) for i in installed_packages])
# for m in installed_packages_list:
#     print(f"  {m}")

# requestsライブラリをインポート
try:
    import requests
except ImportError:
    # 'requests'パッケージがインストールされていない場合のエラーメッセージ
    print("# Error: The 'requests' package is not installed. Run 'pip install requests' to install it.")
    exit(1)

# 変数の初期化
api_access_token_title = 'Record with Access Token'
api_access_token_record = None
params = None

# 標準入力から渡されたパラメータを読み取り、デコード
for base64_params in sys.stdin:
    params = json.loads(base64.b64decode(base64_params).decode())

    # デバッグ用に利用可能なパラメータを表示（必要に応じてコメントを外してください）
    # print(f"# \n# Available params for the script:")
    # for key, value in params.items():
    #     print(f"#     {key}={value}")

    # PAMスクリプトの「ローテーションクレデンシャル」レコードとして渡された
    # JSON文字列形式のレコード情報をデコードして読み込む
    records = json.loads(base64.b64decode(params.get('records')).decode())

    # タイトルからアクセストークンを含むレコードを探す
    api_access_token_record = next(
        (record for record in records if record['title'] == api_access_token_title), None)
    break

if api_access_token_record is None:
    # アクセストークンを含むレコードが見つからない場合のエラー
    print(f"# Error: No Record with the access token found. Title: {api_access_token_title}")
    exit(1)

# レコードから詳細情報を抽出
rest_api_service_url = api_access_token_record.get('url')
service_access_token = api_access_token_record.get('password')

# old_password = params.get('oldPassword')  # 以前のパスワードを使用したい場合はこちらを使用
new_password = params.get('newPassword')
user_email = params.get('user')             # パスワードをローテーションする対象ユーザーのメールアドレス

def rotate(user_email, new_password):
    """
    指定されたユーザーのパスワードをローテーションします。

    引数:
    - user_email (str): パスワードをローテーションする対象ユーザーのメールアドレス
    - new_password (str): 新しいパスワード

    戻り値:
    - dict: APIからのレスポンス
    """

    # リクエストのヘッダー
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {service_access_token}"
    }

    # リクエストのペイロードを準備
    request_payload = {
        "userEmail": user_email,
        "newPassword": new_password,
    }

    # APIにPOSTリクエストを送信
    response = requests.post(url=rest_api_service_url, headers=headers, data=json.dumps(request_payload))

    # リクエストが成功したかを確認
    if response.status_code == 201:
        return response.json()
    else:
        response.raise_for_status()

if __name__ == '__main__':
    """パスワードローテーションを実行するメイン関数"""

    response = rotate(user_email, new_password)

    # デバッグ用にAPIのレスポンスを表示
    print(f"# \n# Response from the API:")
    print(f"# {response}")
```

{% endcode %}

## 5. Python実行環境の準備 <a href="#id-5-python-environment-setup" id="id-5-python-environment-setup"></a>

Keeperゲートウェイが動作している環境で、Pythonと依存パッケージがインストールされていることを確認します。仮想環境を使用する場合は、スクリプト先頭のシバン行を設定します。

{% hint style="info" %}
シバン行のパスにスペースを含めないでください。スペースがある場合は、スペースを含まないシンボリックリンクを作成します。

Linuxでの例:

`sudo ln -s "/Users/john/PAM Rotation Example/.venv/bin/python3" /usr/local/bin/pam_rotation_venv_python3`
{% endhint %}

**\[追加認証情報]** で手順1のAPIアクセスレコードを選択し、**\[コマンドプレフィックス付きで実行]** を有効にしてPython実行ファイルのフルパスを指定します。Docker経由のゲートウェイでは通常 `/usr/local/bin/python3` です。

## 6. 構成の保存とローテーションの実行 <a href="#id-6-save-and-run-rotation" id="id-6-save-and-run-rotation"></a>

PAMユーザーレコードで **\[保存]** をクリックします。設定後、**\[PAMスクリプトのみを実行]** でオンデマンドローテーションを実行できます。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.keeper.io/keeperpam/jp/privileged-access-manager/password-rotation/rotation-use-cases/saas-account/rotate-credential-via-rest-api.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
