或许可以使用 Terraformer 对 Okta 进行备份

Okta注册信息的备份

我个人认为,Okta在默认情况下没有备份和导出功能。虽然在Okta的帮助中心中有一些相关问题,但目前还没有得到解决。用户数据备份的可能性将来也很大可能不会被开发。

支持部门告诉我要使用API来创建,但是可能需要花费相当长的时间。在这种情况下,我了解到Terraform支持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命令。

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。没有特别变化的内容。

terraform {
    required_providers {
    okta = {
      source  = "okta/okta"
      version = "3.45.0"
    }
  }
}

这是一个执行导入操作的Shell脚本。它没有特别奇特的内容。

#!/bin/sh

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

请在命令中描述要输出的资源。如果要输出多个资源,请用逗号分隔,如果要输出所有资源,请使用星号指定。Terraformer的输出文件将被输出到/tmp/outputs,因此请在volumes中指定要输出到本地路径。

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
image.png

总结

如果定期运行这个,它似乎可以用作备份。只是Terraform和Okta供应商的版本比较旧,Terraformer也还没有达到1.0版本,这在实际工作中使用时可能有些担忧。我认为这比没有备份要好一些。

补充记录

目前看起来目录应用程序似乎不支持Terraform。
另外,在提供备份和恢复的SaaS服务中,我们找到了以下两个选项。