当サイトはPR広告を利用しています。

【Rundeck】指定したトークンを作成する方法

2024年8月2日

RundeckにはAPI実行に利用できるトークンを作成する機能がありますが、基本的にトークンはRundeckが自動生成したものであり、どんなトークンになるかは発行するまで分かりません。

しかし指定したトークンを作成するやり方もあるので紹介します。はまりポイントもあるので最後までご確認よろしくお願いします。

環境

私はバージョン5.4.0の公式のRundeckのDockerイメージを利用して構築しています。

ローカルで運用している方向けの説明もしているので、安心して読み進めていただければと思います。

作成方法

以下の流れで設定します。

  1. トークンの内容を記載したファイルをRundeckサーバーの任意の場所に作成
  2. Rundeckの設定ファイルに作成したファイルのパスを指定
  3. Rundeckサーバーの起動

いずれのステップも簡単です。ここからそれぞれやり方を詳細に説明します。

トークンファイル作成

最初のステップがトークンの内容を記載したファイル(以後トークンファイル)の作成です。

トークンファイルは公式ページの中でtokens.propertiesという名称で作成していたので特にこだわりが無ければtokens.propertiesという名称で作成しましょう。以下のフォーマットで作成します。

ユーザー名: 指定したいトークン, トークンに設定するロール

デフォルトで作成されるadminユーザーに対してadminロールを持ったトークンを作成する場合は以下のような記載になります。

admin: tokendayo,admin

ちなみにトークンの長さに制限は無いようでした。私は検証として1文字から100文字のトークンを作成してみましたが、いずれも問題なく動作しました。

ここから先はdocker-hubで提供されている公式のRundeckイメージを利用している場合とそれ以外の運用とで流れが変わるので分けて説明します。

公式のRundeckイメージを利用した運用の場合

トークンファイルを作成したらRundeckにトークンファイルの場所を教えます。

Dockerで運用している場合、Rundeckの設定は基本的に環境変数で指定します。composeや起動時のオプションでRUNDECK_TOKENS_FILEという環境変数にトークンファイルへのパスを設定してください。

私の場合はcomposeで運用しているので以下のように指定しています。

RUNDECK_TOKENS_FILE=/home/rundeck/tokens.properties

指定したらDockerを起動して下さい。Dockerが起動し、Rundeckサーバーが起動したらトークンは作成された状態になります。

公式のRundeckイメージを利用していない運用の場合

ローカルやubuntuなどのDockerイメージをからDockerコンテナを立ててRundeckをインストールしている場合など、公式のRundeck Dockerイメージを利用していない場合の手順を記載します。

framework.propertiesというファイルが存在するはずなので見つけてください。以下のコマンドを実行すればファイルへのパスが分かります。

find / -name framework.properties

開いたらviなどでファイルを開き、以下の設定を行います。

rundeck.tokens.file=トークンファイルへのパス

rundeck.tokens.fileという項目が無ければ追記してください。

私の環境の場合は以下のように記載しています。

rundeck.tokens.file=/home/rundeck/tokens.properties

設定が完了したらRundeckサーバーを再起動してください。これでトークンが作成された状態になります。

作成されたかの確認

確認の仕方に一つ大きなはまりポイントがあります。

このやり方で作成したトークンはWeb画面上に表れないということです。作成されているトークンのリストを取得するAPIも存在しますが、それでも確認は不可です。(おそらくWeb画面やAPIで取得するトークンはデータベースに保存されているトークンのみで、今回のようにファイルで作成したトークンは対象外になっているからだと思います。)

画面で確認できない以上、実際に使って試すしかありません。

以下のスクリプトの変数の定義の日本語部分を環境に合わせて書き換えて実行してみてください。(LinuxOS用のものになっているので、Windowsで運用している方はごめんなさい。下記を参考にwindowsに作り変えてから実行をお願いします。)

#!/bin/bash

# 変数定義
EXISTING_API_TOKEN="作成したトークン"
USERNAME="作成したトークンの対象ユーザー"

# 既存プロジェクトの取得
curl -X GET \
  -H "X-Rundeck-Auth-Token: ${EXISTING_API_TOKEN}" \
  -H "Content-Type: application/json" \
  http://localhost:4440/api/41/projects

私の場合はtest.shという名称で、以下のファイルを作成して実行しました。

#!/bin/bash

# 変数定義
EXISTING_API_TOKEN="tokendayo"

# 既存プロジェクトの取得
curl -X GET \
  -H "X-Rundeck-Auth-Token: ${EXISTING_API_TOKEN}" \
  -H "Content-Type: application/json" \
  http://localhost:4440/api/41/projects

トークンファイルで作成したトークンを利用して作成済みのプロジェクトを参照するAPIを実行するスクリプトです。

実行した後に以下のようなレスポンスが返ってくる、もしくはプロジェクトが存在しない場合エラーが出力されていなければ成功です。

[
    {
        "url": "http://localhost:4440/api/48/project/sample_project",
        "name": "sample_project",
        "description": "これはサンプルプロジェクトです",
        "label": "",
        "created": "2024-08-07T16:10:45Z"
    }
]

以下のようにエラーレスポンスが返ってきていたら失敗です。タイポ等がないかよくご確認ください。

{
    "error": true,
    "apiversion": 48,
    "errorCode": "unauthorized",
    "message": "(Token:token****) is not authorized for: /api/41/projects"
}

まとめ

トークンファイルで作成したトークンは画面には表示されません。私はこのことを知らなかったので、解決までにかなりの時間を費やしてしまいました。この記事があなたのお役に立てたら幸いです。

インフラrundeck

Posted by ラプラス