コインチェックでのWorkatoの権限設定

システム運用管理部の河石です。

コインチェックでは 2021 年 4 月に Workato を導入し、そろそろ 9 ヶ月になります。Workato は iPaaS と呼ばれる分野の製品で、IFTTTZapier と同じ類のサービスになります。ノーコード、ローコードで SaaS にあるデータを取得・加工・更新などでき、さらに SaaS 間のデータ連携もできます。

当初はシステム運用管理部 (情シス・IT 部門) の業務自動化や効率化を目的に導入を検討していましたが、今やバックオフィス業務を行う各部門で利用されるようになりました。

本当はその取り組みについて書きたいところですが...今回は Workato Advent Calendar 2021 には間に合わないので、運用の話を書きたいと思います。

Workato を導入することで、プログラミングスキルのない人も業務の効率化・自動化ができるようになりました。そして、今までは GUI や提供されている App 等が情報の移動経路として考えてきましたが、Workato の導入によって API を経由する経路もできました。こういったところで事故が起こらないよう、権限管理を定めました。

正直なところカジュアルさをだいぶ削いでしまった形になってしまったので...Workato さんへ改善要望も書いてみます。

Workato について

まずは Workato の用語と権限管理がどうなっているのか説明します。Workato では「レシピ」「コネクション」「プロジェクト」と呼ばれるリソースがあり、これらに対してどういった操作ができるか権限を設定することができます。

Workato の用語

権限管理などに必要な機能は Advanced recipe management & operations オプションが必要になります。クラウドネイティブのブログでこのオプションについて書かれているので、ぜひこちらも読んでみてください。

用語

レシピ

Workato では自動化のロジックを実装したものをレシピと呼びます。レシピには SaaS への API 操作を指定したアクションが複数綴られてできています。

コネクション

各 SaaS の API を利用するための設定をコネクションと呼びます。レシピ中でアクションを設定するときにコネクションも指定します。

プロジェクト

レシピとコネクションはフォルダに分けて階層構造で管理することができます。このフォルダのトップレベルをプロジェクトと呼びます。

権限管理

Workato は利用者個人ごとにアカウントを持ち、権限を設定します。

開発に必要な権限としては、プロジェクト・フォルダ・コネクション・レシピそれぞれに対して「閲覧 (利用)」「編集」「作成」「削除」のどれができるかを設定できます。また、プロジェクトに対してアクセスの可否も設定することができます。

権限設定

テナント

Workato は 3 テナント提供されていて、これを開発環境 / 本番環境としたり、人事部 / 総務部 / 情シスといった形で自由に使うことができます。

テナント間ではレシピ等の移動ができる機能が提供されています。

権限管理と運用

コインチェックではテナントを開発環境本番環境に分けて運用します。

そして、アカウントは通常利用アカウント管理アカウントに分けて権限設定を変えています。管理者となる従業員は、両方のアカウントを持ち、管理者権限が必要なときのみ管理アカウントにログインします。管理アカウントを持つ人は基本的に情シス部門の人のみを想定しています。

それぞれのアカウントの権限設定は以下のようにしています。

通常利用アカウントの権限設定

通常利用アカウントの権限設定

管理アカウントの権限設定

管理アカウントの権限設定

開発環境

コネクションの作成・利用

基本的に開発環境で接続するコネクションは、対象 SaaS のサンドボックス環境またはサンドボックス用途の契約に接続することとしています。

コネクションを新しく作る場合は、管理アカウントにて作成します。

レシピの作成

レシピの作成・編集については制限はありません。

プロジェクトへのアクセス権

開発環境では、プロジェクトへのアクセス制限はありません。

本番環境

コネクションの作成・利用

コネクションを新しく作る場合は、管理アカウントにて作成します。作成したコネクションは必ず利用するプロジェクトに配置します。

接続先の SaaS は、情シス以外が管理しているものもあります。この記事に書いている内容は社内マニュアルとして定めていて、それで合意がとれた場合に接続します。

レシピの作成

レシピは作成・編集のどちらにおいても、レシピのライフサイクル管理機能を使って開発環境で作成したものをデプロイします。デプロイ作業は管理アカウントで行います。

レシピの実行ログは一般利用アカウントでも可能としており、エラーの内容など確認できます。

プロジェクトへのアクセス権

本番環境では、ユーザが関係するレシピのみアクセスできるよう権限設定します。

IT 全般統制の観点

Workato では個人レベルの業務範囲に留まらず、部門や部門をまたいだ業務オペレーションも自動化しています。こういったレシピで、顧客に想定外の影響が起こらないよう統制が構築されていることが重要になります。また、この統制が有効に機能するようにリスク管理部門、内部監査部門とコミュニケーションを取りながら進めることも必要です。

例えば、本番環境のレシピの作成・編集制限は管理アカウントに限定して、レシピのデプロイ時に第三者も入る機会を設けています。これによって部門や部門をまたいだ業務オペレーションの職務分掌を適切に整理することや、サービスや業務にとって重要なデータを扱うレシピの変更管理を行います。

これらのルールもマニュアルとして整備して運用しています。

管理アカウント利用の牽制

Workato のユーザ操作、レシピ実行ログはすべて SIEM に取り込んでいます。

管理アカウントのログがあがってきたときには、Slack へ内容を通知し、作業報告等を行います。

コネクションにまつわる懸念点

Workato と SaaS と結ぶコネクションは、以下のような状態があります。

  • SaaS の特定のアカウントの権限で実行するもの
  • SaaS のボットアカウントとして実行するもの
  • SaaS 内のすべてにアクセス可能なもの

これらは SaaS 側の API の提供方法に依るものになります。

コネクションの配置管理

例えば、特定のアカウントというのが人事部メンバのものだったとき、おそらく従業員のプライベートな情報へアクセスできるコネクションができます。このコネクションが情シスメンバが使える状態だと、普段アクセスできない情報に Workato を通じてアクセスできるようになってしまいます。

なので、開発環境での接続先はサンドボックス環境とし、本番環境ではプロジェクト内にコネクションを配置し、関係する人のみがアクセスできる状態を作ります。

コネクションの作成制限

例えば、プライベートのアカウントと接続した Dropbox のコネクションがあると、手軽に大量に情報を持ち出せてしまいます。SIEM に転送しているログからは接続先の SaaS は特定できますが、接続している SaaS のアカウント情報は載っていないため気づくことができません。

なので、開発環境・本番環境共にコネクションの作成権限は外しています。

コネクションの共有

SaaS の仕様によって個別に取り決めていますが、基本的にコネクションは SaaS にプロジェクトや部門向けのボット用アカウントを作成し、Workato 上で共有しています。個人の SaaS アカウントと紐づけると、どうしてもプライベート領域に触れてしまう部分が残るためです。

また、Workbot for Slack は、標準の OAuth Profile のものを全体で共有します。標準ではチャンネル内のメッセージを読むことはできないためです。

本番環境のレシピの作成・編集制限

例えば利用しているワークフロー SaaS では、契約に対して API キーが 1 つだけ発行でき、全てのフローの内容へアクセスが可能になっています。SaaS 内にはいろいろな部署が主管となっているフローがあり、それぞれから Workato で利用したいニーズがありますが、コネクションで取得できる情報を制限することはできません。

そこで、特定のフローのみで利用していることをレシピ中で担保し、それを本番環境へデプロイするようにし、本番環境ではレシピの書き換えができないようにしています。

ここについては、HTTP Connector v2 の Base URL を固定するやり方に習って、コネクション作成時にフロー ID を指定することで、アクションで取得可能なフローを限定できるようです。今後見直そうと思います。

HTTP Connector - Configuring A Base URL | Workato Docs

おわりに

以上がコインチェックでの Workato の権限設定になります。

だいぶ制限していることが多くなっていますが...コネクションは頻繁に作成するものではないので多くの SaaS と接続できることを優先し、開発環境でトライアンドエラーができる状態にすることを心がけています。

ログに接続している SaaS のアカウントが記載されたり、プロジェクトへのアクセス権限の設定は Role ではなく直接プロジェクトに設定できるようになってくれるともう少しよい環境にできるんじゃないかな...と思っています。(たぶん中の方も読んでいると思うので...エンハンス、よろしくお願いします)

Workato を使って実際に効率化していることも記事になっているので、読んでみていただけると幸いです。

 

それでは、ここまで読んでいただきありがとうございました。よいお年を。