概要
EC2にRundeckの構築を行なったので、記録も兼ねて構築方法について記録する
※目的はRundeckの画面が表示されてログインできるところまでのため、セキュリティ面は一旦省略(アクセス制限などは除外)
準備
SSMのロール作成
SSMでEC2インスタンスにログインするときに必要なポリシーを指定し、ロールを作成しておく
- ポリシー名:AmazonSSMManagedInstanceCore
ちょうどハンズオンに設定方法があった
手順
EC2インスタンス作成
EC2サービスからインスタンスを起動
を選択
- 名前とタグ:任意
- アプリケーションおよび OS イメージ :Amazon Linuxを指定
- インスタンスタイプ:t3.medium
- キーペア:用意して指定
- ネットワーク設定
- ファイアウォール (セキュリティグループ)
- セキュリティグループを作成する
- 以下をチェック
- SSH トラフィックを許可する
- インターネットからの HTTPS トラフィックを許可
- インターネットからの HTTP トラフィックを許可
- ファイアウォール (セキュリティグループ)
- ストレージを設定
- 8GB
- 高度な詳細
- IAM インスタンスプロフィール
- 準備で作成したIAMロールを指定
- IAM インスタンスプロフィール
を指定し、インスタンスを起動
を押してECインスタンスを作成する
memo
インスタンスタイプは、Rundeckのページに記載があったのでそのまま指定してみた
https://docs.rundeck.digitalstacks.net/l/ja/installation/system-requirements
Rundeckの構築
EC2のセッションマネージャでSSHアクセス
作成したEC2インスタンスをチェックし、接続
を押す
セッションマネージャータブから接続
を押す
Rundeckのインストール
Rundeckのページにインストール方法があったので、なぞる
https://docs.rundeck.digitalstacks.net/l/ja/installation/linux-rpm
- Rundeck yumリポジトリを追加
curl https://raw.githubusercontent.com/rundeck/packaging/main/scripts/rpm-setup.sh 2> /dev/null | sudo bash -s rundeck
- エントリの追加 (/etc/yum.repos.d/rundeck.repo)
追加前に確認したら、すでに存在していたのでスキップする
cat /etc/yum.repos.d/rundeck.repo
# 結果
[rundeck]
name=rundeck
baseurl=https://packages.rundeck.com/pagerduty/rundeck/rpm_any/rpm_any/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packages.rundeck.com/pagerduty/rundeck/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
- rpmパッケージをインストール
https://www.rundeck.com/downloads
Sign upをしないとだったので、yumを使ってインストールに変えてみる
- yumでインストール
sudo yum install rundeck java
Rundeck開始
$ sudo service rundeckd start
Starting rundeckd (via systemctl): [ OK ]
少し時間がかかるので、Logで状況確認(/var/log/rundeck/service.log
)
Grails application running・・・
と表示されたら開始
tail -f /var/log/rundeck/service.log
# 結果
[2022-12-31T22:10:17,328] INFO rundeckapp.BootStrap - Starting Rundeck 4.8.0-20221110 (2022-11-10) ...
[2022-12-31T22:10:17,335] INFO rundeckapp.BootStrap - using rdeck.base config property: /var/lib/rundeck
[2022-12-31T22:10:17,358] INFO rundeckapp.BootStrap - loaded configuration: /etc/rundeck/framework.properties
[2022-12-31T22:10:17,520] INFO rundeckapp.BootStrap - RSS feeds disabled
[2022-12-31T22:10:17,521] INFO rundeckapp.BootStrap - Using jaas authentication
[2022-12-31T22:10:17,534] INFO rundeckapp.BootStrap - Preauthentication is disabled
[2022-12-31T22:10:17,639] INFO rundeckapp.BootStrap - Rundeck is ACTIVE: executions can be run.
[2022-12-31T22:10:18,084] WARN rundeckapp.BootStrap - [Development Mode] Usage of H2 database is recommended only for development and testing
[2022-12-31T22:10:18,214] INFO rundeckapp.BootStrap - workflowConfigFix973: applying...
[2022-12-31T22:10:18,249] INFO rundeckapp.BootStrap - workflowConfigFix973: No fix was needed. Storing fix application state.
[2022-12-31T22:10:18,761] INFO rundeckapp.BootStrap - Rundeck startup finished in 1593ms
[2022-12-31T22:10:18,803] INFO rundeckapp.Application - Started Application in 66.737 seconds (JVM running for 75.838)
Grails application running at http://localhost:4440 in environment: production
ステータス確認で開始されたことを確認
sudo service rundeckd status
# 結果
● rundeckd.service - SYSV: rundeckd, providing rundeckd
Loaded: loaded (/etc/rc.d/init.d/rundeckd; bad; vendor preset: disabled)
Active: active (running) since Sat 2022-12-31 22:09:02 UTC; 2min 44s ago
Docs: man:systemd-sysv-generator(8)
Process: 2910 ExecStart=/etc/rc.d/init.d/rundeckd start (code=exited, status=0/SUCCESS)
Main PID: 2918 (runuser)
CGroup: /system.slice/rundeckd.service
‣ 2918 runuser -s /bin/bash -l rundeck -c java -Drundeck.jaaslogin=true -Djava.security.auth.login.config=/etc/rundeck/jaas-loginmodule...
Dec 31 22:09:02 ip-172-31-34-126.ap-northeast-1.compute.internal systemd[1]: Starting SYSV: rundeckd, providing rundeckd...
Dec 31 22:09:02 ip-172-31-34-126.ap-northeast-1.compute.internal rundeckd[2910]: Starting rundeckd: [ OK ]
Dec 31 22:09:02 ip-172-31-34-126.ap-northeast-1.compute.internal systemd[1]: Started SYSV: rundeckd, providing rundeckd.
curlでレスポンス確認し、200とログイン画面の記録がターミナルに表示されているのを確認する
curl -v localhost:4440/user/login
ブラウザからRundeckへのアクセス
以下の設定が必要
- Rundeck側でURL指定
- EC2セキュリティグループのインバウンド設定でport 4440を許可させる
RundeckのURL設定
$ sudo vi /etc/rundeck/rundeck-config.properties
以下を書き換え
grails.serverURL=http://localhost:4440
↓
grails.serverURL=http://{EC2のIPアドレス}:4440
セキュリティグループでインバウンド指定
インスタンス→セキュリティグループ→インバウンドの編集
rundeckのポート番号4440を許可をしてルールを保存
を押す
- タイプ:
カスタムTCP
- プロトコル:
TCP
- ポート範囲:
4440
- ソース:
カスタム
- IP:
0.0.0.0/0
- IP:
ログイン画面接続
http://{EC2のIPアドレス}:4440にアクセス
初期は、admin
のため、それぞれ入力してアクセス
ログイン後の画面に遷移しなかったのでconsoleを見ると以下のエラー
Refused to send form data to 'http://{IPアドレス}:4440/j_security_check' because it violates the following Content Security Policy directive: "form-action 'self'".
https://github.com/rundeck/rundeck/issues/4417
上の記事より、form-action ディレクティブを変更して、URL を有効にしてみる
$ sudo vi /etc/rundeck/rundeck-config.properties
以下を追加
rundeck.security.httpHeaders.provider.csp.config.form-action=self http://{IPアドレス}:4440
rundeckをrestartさせる
sudo service rundeckd restart
Restarting rundeckd (via systemctl): [ OK ]
再度アクセスし、ログインをしてみる
メニューが表示され、ログインまでできたので、一旦構築は完了とする
参考