[Oracle Cloud] Oracle Cloud Agentコマンドを使って、コンソールからOSコマンドを実行する


はじめに

WebコンソールからComputeインスタンスに任意のコマンドを実行する機能が実装されました。面白そうなので、試したみた。

コンソール上の機能名称は、「Oracle Cloud Agentコマンド」のようです。Computeのインスタンス詳細画面から遷移できます。Oracle Cloud Agentプロセスが、コマンド実行のリクエストを受け取って実行し、結果をコンソール(または任意のObject Storage)に表示する機能です。

当初、静的に登録したコマンドを、任意のタイミングで実行する機能だと思ったのですが、実行の都度コマンドを作成する必要があり、イメージしていた機能とちょっと違いまいした。
(コマンドを静的に登録して、ポリシーで実行権限だけをユーザに与えられるようになるといいな。。)

前提条件

マニュアルによると、いろいろと制約があります。特に、以下の制約に注意。

  • コマンド結果の出力サイズの上限は、1KB。それを超える場合は、アウトプットをObject Storageに格納するように設定する

この機能のリリース時点で、利用可能なリージョンは2つだけ。東京/大阪リージョンはまだ使えない

やってみる

Computeインスタンスの作成

2020年10月現在、この機能が利用できるPhoenixリージョンにComputeインスタンスを作成します

バケットの作成

コマンド実行結果の出力が1KBを超える場合を考え、格納先のバケットを用意しておきます

Object Storageへの通信経路

ComputeインスタンスをPrivateサブネットに作っている場合は、Service GWまたはNAT GWをたてて、Object Storageと通信できるようにします。

動的グループの作成

インスタンス・プリンシパルの設定をする必要があるため、動的グループを作成します。マニュアルにあるように、作ったコンピュートインスタンスのOCIDを含めます。

ポリシーの作成

マニュアルにあるとおりに、動的グループ(インスタンス・プリンシパル)に対して権限を与えてあげます。

Object Storageを併用する場合は、Object Storageへの権限も与えます。実行スクリプトと出力先が異なるバケットの場合は、実行スクリプト格納バケットにread、出力先バケットにmanage権限を与えます

AgentのUpdate

Computeインスタンスにログインします。2020年10月より前のイメージを使ってComputeインスタンスを作成した場合、agentのバージョンが古いので、updateしてあげる必要があります。2020年10月現在で利用可能な、Oracle Linuxのイメージではupdateする必要がありました。

# rpm -q oracle-cloud-agent
oracle-cloud-agent-1.3.2-2718.el7.x86_64

# yum update oracle-cloud-agent
… 省略

# rpm -q oracle-cloud-agent
oracle-cloud-agent-1.5.1-3277.el7.x86_64

コマンド登録

Computeの詳細画面から、Oracle Clouda Agentコマンドのリンクに遷移し、コマンド作成します。とりあえず、ps -efコマンドで試してみます。

「コマンド作成」ボタンを押下すると、Oracle Cloud Agentにリクエストが飛んでいきます。結果が返ってくるのが案外遅いので、5分くらいはがんばって待ちます。

実行ステータスが、成功になったのを確認後、「コマンドの詳細の表示」を押します

出力が見切れてます… (1KBの制限)

なので、今度は出力先をObject Storageにして実行コマンドを作成してみます。

実行後、指定したバケットにObjectが出力されいてるので、ダウンロードします。

画像は張りませんが、こっちの出力は見切れていませんでした。

root権限が必要なコマンドを実行してみる

Oracle Clouda Agentコマンドは、「ocarun」というOSユーザの権限で実行されるようです。
試しに、実行コマンドにwhoami; ls -ltr /rootと入力して実行してみると以下のような出力になります

rootユーザ権限が必要なコマンドを実行する場合は、(マニュアルにあるとおり)あらかじめ、sudoの設定ファイルに、ocarunユーザに許可するコマンドを書いておいてあげる必要があります。

例えばlsコマンドだけ許可する場合、以下のようなファイルを作成して

# vi /etc/sudoers.d/101-oracle-cloud-agent-run-command
ocarun ALL=(ALL) NOPASSWD:/bin/ls

# visudo -cf /etc/sudoers.d/101-oracle-cloud-agent-run-command
/etc/sudoers.d/101-oracle-cloud-agent-run-command: parsed OK

Oracle Clouda Agentコマンドから、sudo ls -l /rootが実行できるか確認してみます。

できました。