LoginSignup
0
0

OktaのバックアップにTerraformerが使えるかもしれない

Last updated at Posted at 2023-11-19

Okta登録内容のバックアップ

Oktaは標準でバックアップやエクスポートの機能がありません。OktaのHelp Centerにも問い合わせがいくつか上がっていますが、対応されていません。
User Data Backup
今後も作られない可能性は大きいのではないかと個人的には思っています。

サポートにはAPIで作成するように言われましたが、かなり時間が掛かりそうです。
そんな中TerrafromがOktaに対応していることを知りました。Terraformで初期から作っていればそれがバックアップとしても働きます。今から導入する組織はTerraformをお勧めします。ですが、既に導入済みで、ある程度使っている組織はTerraformにリバースするのは結構大変です。
さらに調べていくとTerraformerもOktaに対応しているということがわかり、これならバックアップに使えないかと考えました。余裕があればTerraform管理下にすることもできそうです。

実装

環境

  • Ubuntu 22.0 (WSL)
  • Terraform 0.13.0
  • oktaプロバイダー 3.45.0
  • Terraformer 0.8.24
  • docker Engine 23.0.1
  • dockerイメージ hashicorp/terraform 0.13.0

terraformerはterraform 0.13しかサポートしていません。その為、今(2023/11)のterraformの最新版よりはかなり古いバージョンになります。今の最新バージョンは以下になります。Oktaプロバイダーは最新バージョンだと動くには動きますが、エラーが出てしまうのでエラーが出ないようバージョンを下げています。

  • terraform v1.6.4
  • oktaプロバイダー 4.6.1

また、hashicorpからterraformのDockerイメージがリリースされているのでそれを使用します。

ディレクトリ構成

├── docker
│   ├── Dockerfile
│   ├── init.sh
│   └── provider.tf
├── docker-compose.yml
└── outputs

ソース

hashicorp社のTerraformのDockerイメージを使用します。Terraformerのインストールは公式のドキュメントの通りです。Oktaプロバイダーをインストールするため、provider.tfをコピーし、terraform initを実行しています。

docker/Dockerfile
FROM hashicorp/terraform:0.13.0

USER root

RUN apk update --no-cache && \
    apk add curl

ARG PROVIDER

RUN curl -LO "https://github.com/GoogleCloudPlatform/terraformer/releases/download/$(curl -s https://api.github.com/repos/GoogleCloudPlatform/terraformer/releases/latest | grep tag_name | cut -d '"' -f 4)/terraformer-${PROVIDER}-linux-amd64"
RUN chmod +x terraformer-${PROVIDER}-linux-amd64
RUN mv terraformer-${PROVIDER}-linux-amd64 /usr/local/bin/terraformer

WORKDIR /opt/terraformer
COPY ./init.sh .
RUN chmod +x ./init.sh
COPY ./provider.tf .
RUN terraform init

ENTRYPOINT [ "/bin/sh", "/opt/terraformer/init.sh" ]

OktaプロバイダーをインストールするためのHCLです。特に変わったことは書いていません。

docker/provider.tf
terraform {
    required_providers {
    okta = {
      source  = "okta/okta"
      version = "3.45.0"
    }
  }
}

インポートを行うシェルスクリプトです。これも特に変わったことは書いていません。

docker/init.sh
#!/bin/sh

cd /opt/terraformer
/usr/local/bin/terraformer import okta --path-output /tmp/outputs/ $1

commandに出力したいリソースを記述します。複数出力したい場合はカンマ区切り、全て出力したい場合はアスタリスクを指定できます。terraformerの出力ファイルは/tmp/outputsに出力されるのでvolumesに出力したいローカルパスを記述します。

docker-compose.yml
version: "3"

services:
  terraformer:
    build:
      context: ./docker
      dockerfile: Dockerfile
      args:
        PROVIDER: "okta"
    container_name: "okta-backup"
    # ["--resources=okta_user"]
    # ["--resources=okta_user,okta_app_saml"]
    command: ["--resources=*"]
    environment:
      # 公式ドキュメントを参照(https://github.com/GoogleCloudPlatform/terraformer/blob/master/docs/okta.md)
      OKTA_ORG_NAME: dev-99999999
      OKTA_BASE_URL: okta.com
      OKTA_API_TOKEN: 00di2-Me2hrqAuoNkpA7tyzoUKH5E7LDSAzaqPPCKg
    volumes:
      - ./outputs:/tmp/outputs

実行

プロジェクトのルートパスで実行します。

$ docker compose up
[+] Running 1/1
 ⠿ Container okta-backup  Recreated                                                                                0.8s
Attaching to okta-backup
okta-backup  | 2023/11/19 09:20:30 Attempting an import of ALL resources in okta
okta-backup  | 2023/11/19 09:20:32 okta importing... okta_app_auto_login
...
okta-backup  | 2023/11/19 09:23:58 okta save okta_policy_rule_password
okta-backup  | 2023/11/19 09:23:58 okta save tfstate for okta_policy_rule_password
okta-backup exited with code 0

実行後outputs以下にhclファイルが出力されます。
image.png

まとめ

これを定期実行すればバックアップとして使えそうではあります。ただTerraformとOktaプロバイダーのバージョンが古く、Terraformerもまだバージョン1になっていないのが実務で使うには少し懸念されます。バックアップがないよりはましくらいの考えでよいと思います。

追記

カタログのアプリはTerraformは対応していないようです。
また、バックアップ・リストアを行ってくれるSaaSで以下の2つが見つかりました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0