OpenTofu 및 Terraform 프로바이더

keenauth/keenauth 프로바이더는 KeenAuth 환경 하나의 설정을 코드로 관리합니다. 관리 API를 호출하며 플러그인 프로토콜 6을 사용하고 OpenTofu 및 Terraform과 함께 동작합니다. 아직 프로바이더 레지스트리에 게시되지 않았습니다.

인증 및 대상

프로바이더는 자신의 자격 증명이 속한 환경을 관리합니다. 여러 환경을 관리하려면 환경마다 프로바이더 별칭(alias)을 하나씩 설정하십시오. 인증 방식은 두 가지 중 하나만 사용할 수 있습니다. 관리 API 키를 사용하거나, private_key_jwt를 사용하는 management 애플리케이션으로 키 없이 인증하는 방식입니다. 두 가지를 모두 설정하면 오류가 발생합니다.

설정 환경 변수 설명
api_key KEENAUTH_API_KEY 관리 API 키입니다. 환경 변수 사용을 권장합니다. 키는 상태 파일이나 계획 파일에 기록되지 않습니다.
client_id KEENAUTH_CLIENT_ID api_key 대신 사용하는 management 애플리케이션의 ID(app_…)입니다. private_key와 issuer가 필요합니다.
private_key KEENAUTH_PRIVATE_KEY 애플리케이션에 공개 키가 등록된 PEM PKCS#8 개인 키입니다. EC P-256, EC P-384, Ed25519 또는 2048비트 이상의 RSA를 사용할 수 있습니다. 환경 변수 사용을 권장합니다. 상태 파일에는 기록되지 않습니다.
private_key_algorithm PS256(기본값) 또는 RS256이며, RSA 키에만 해당합니다.
issuer KEENAUTH_ISSUER 환경의 기본 호스트 https://<environment>.<region>.keenauth.app입니다. 프로바이더는 <issuer>/oauth2/token에서 토큰을 발급받습니다.
scopes client_id로 요청할 권한입니다. 생략하면 부여의 기본 스코프가 적용됩니다.
region KEENAUTH_REGION eu(기본값) 또는 us입니다. API 주소는 https://api.eu.keenauth.com/v1 / https://api.us.keenauth.com/v1입니다.
base_url KEENAUTH_BASE_URL API 주소를 직접 지정합니다. https://<host>.keenauth.com/v1 형식만 허용되며, 로컬 테스트용 루프백 주소도 허용됩니다.
terraform {
  required_providers {
    keenauth = { source = "keenauth/keenauth" }
  }
}

provider "keenauth" {
  region = "eu"
}

private_key_jwt를 사용한 키 없는 인증

  1. app_type = "management"로 애플리케이션을 생성하고, 설정에 필요한 권한을 담은 keenauth_management_client 레코드를 만드십시오.
  2. 키 쌍의 공개 키를 애플리케이션에 등록하십시오(POST /v1/applications/{application_id}/credentials에 type: public_key를 보내거나, CLI 또는 대시보드를 사용합니다).
  3. 프로바이더에 애플리케이션 ID, 개인 키, issuer를 전달하십시오.
export KEENAUTH_CLIENT_ID="app_..."
export KEENAUTH_PRIVATE_KEY="$(cat ops-automation.pk8.pem)"
export KEENAUTH_ISSUER="https://acme.eu.keenauth.app"
tofu plan

관리 토큰이 필요할 때마다 프로바이더는 60초 동안 유효한 클라이언트 어설션(RFC 7523)에 서명합니다. iss와 sub은 클라이언트 ID이고, aud는 issuer이며, jti는 무작위 값이고, kid는 키의 RFC 7638 썸프린트입니다. 이 어설션을 client_credentials 부여로 교환해 10분짜리 토큰을 받으며, 이전 토큰이 만료되기 1분 전에 새 토큰을 받습니다. 토큰의 권한이 애플리케이션의 keenauth_management_client 레코드를 넘는 일은 없습니다. 관리 클라이언트처럼 API 키로만 접근할 수 있는 엔드포인트에는 api_key로 설정한 프로바이더 별칭이 필요합니다.

리소스

이름 종류 관리 대상
keenauth_application resource 애플리케이션(OAuth 2.0 / OpenID Connect 클라이언트)입니다.
keenauth_connection resource 로그인 연결입니다. 데이터베이스, 비밀번호 없는 방식, 패스키, 소셜, 엔터프라이즈 중 하나입니다.
keenauth_connection_oidc_config resource 엔터프라이즈 OIDC 연결의 relying party 설정이며, 쓰기 전용 클라이언트 시크릿을 포함합니다(OpenTofu 또는 Terraform 1.11 이상). 연결 ID로 가져올 수 있습니다. 삭제하면 상태에서만 제거됩니다.
keenauth_environment_settings resource 환경 설정입니다. 언어, 세션, 가입, 알림, 복구, MFA, 기본 인증 요소를 포함합니다. 환경당 하나만 있습니다.
keenauth_attack_protection resource 공격 방어 설정입니다. 무차별 대입, IP 제한, 자격 증명 스터핑, 봇, 유출된 비밀번호, 가입, SMS 사기, 위험 정책을 포함합니다. 환경당 하나만 있습니다.
keenauth_branding resource 브랜딩 초안의 환경 테마입니다. 환경당 하나만 있습니다.
keenauth_custom_domain resource 사용자 지정 로그인 도메인입니다.
keenauth_api_key resource 관리 API 키입니다. 가져오기만 가능하며, 삭제하면 키가 폐기됩니다.
keenauth_organization resource B2B 조직입니다. 이름, slug, 외부 ID, 메타데이터, 브랜드 색상, 멤버 수 제한을 포함합니다. 삭제하면 즉시 제거됩니다. 상태 작업(비활성화, 활성화, 삭제 취소)은 CLI와 대시보드에서 수행합니다.
keenauth_organization_role resource 조직 전용 역할과 그 권한 집합입니다(Business 요금제). <org_id>/<key>로 가져올 수 있습니다.
keenauth_permission resource API의 권한(OAuth 스코프)과 동의 화면 문구입니다. <api_id>/<value>로 가져올 수 있습니다.
keenauth_role resource 환경 역할과 그 전체 권한 집합입니다. 사용자 및 멤버십 할당은 리소스가 아닙니다.
keenauth_organization_domain resource 도메인 캡처와 SSO 라우팅을 위한 조직 도메인입니다. 인증(검증)은 작업으로 유지됩니다.
keenauth_session_policy resource 조직의 세션 유효 기간입니다. 환경 설정보다 엄격하게만 설정할 수 있습니다(Enterprise 요금제).
keenauth_mfa_policy resource 조직의 다중 인증 규칙입니다. 환경 설정보다 엄격하게만 설정할 수 있습니다.
keenauth_email_template resource 이메일 템플릿 하나(계열 및 로케일)의 게시된 내용입니다(Startup 요금제). <family>/<locale>로 가져올 수 있습니다. 삭제하면 상태에서만 제거됩니다.
keenauth_management_client resource management 애플리케이션의 관리 API 권한과 IP 허용 목록입니다. 애플리케이션 ID로 가져올 수 있습니다.
keenauth_directory resource 조직의 SCIM 디렉터리와 그 프로비저닝 설정입니다. name과 설정은 제자리에서 변경되고, organization_id, scim_host, type이 변경되면 리소스가 교체됩니다. 디렉터리 ID로 가져올 수 있습니다.
keenauth_directory_role_mapping resource SCIM 디렉터리 그룹을 역할에 매핑합니다. 어떤 변경이든 리소스가 교체됩니다. <directory_id>/<mapping_id>로 가져올 수 있습니다.
keenauth_directory_token resource 디렉터리의 SCIM 토큰입니다. 상태에는 RSA 공개 키로 암호화된 형태로만 보관됩니다. 어떤 변경이든 새 토큰을 생성하며, 삭제하면 토큰이 폐기됩니다. 가져올 수 없습니다.
keenauth_webhook_endpoint resource 웹훅 엔드포인트입니다. 모든 인수가 제자리에서 변경됩니다. 서명 비밀은 RSA 공개 키로 암호화된 형태로만 상태에 보관됩니다. 키 또는 rotation_trigger를 변경하면 비밀이 교체됩니다. 엔드포인트 ID 또는 키로 가져올 수 있습니다.
keenauth_application data source id 또는 key로 애플리케이션 하나를 읽습니다.
keenauth_connection data source id 또는 key로 연결 하나를 읽습니다.
keenauth_organization data source id 또는 slug로 조직 하나를 읽습니다.
keenauth_role data source id 또는 key로 환경 역할 하나를 읽습니다.
keenauth_environment data source API 키가 속한 환경을 읽습니다. ID, 종류, 리전, 셀, 상태, 요금제를 포함합니다.
resource "keenauth_connection" "google" {
  key      = "google"
  type     = "social"
  strategy = "google"
  name     = "google"
  status   = "active"
  settings = jsonencode({ scopes = ["openid", "email", "profile"] })
}

resource "keenauth_application" "storefront" {
  key            = "storefront"
  name           = "Storefront"
  app_type       = "web"
  party          = "first_party"
  redirect_uris  = ["https://shop.example.com/callback"]
  connection_ids = [keenauth_connection.google.id]
}

가져오기

애플리케이션과 연결은 key 또는 ID로, 사용자 지정 도메인은 호스트 이름 또는 ID로, API 키는 ID로 가져올 수 있습니다.

tofu import keenauth_application.storefront storefront
tofu import keenauth_connection.google conn_01j9zq3v8c5m2x7k4t6r1n0b3d
tofu import keenauth_custom_domain.login login.example.com

환경 설정, 공격 방어 설정, 브랜딩 초안은 환경마다 하나씩만 존재합니다. 이들은 고정 ID environment-settings, attack-protection, branding으로 가져오십시오. 이들 중 하나를 삭제하면 상태에서만 제거됩니다.

안전한 변경

시크릿

어떤 리소스도 시크릿을 평문으로 상태에 저장하지 않습니다. KeenAuth에 전달하는 시크릿은 쓰기 전용 인수(*_wo)입니다. 프로바이더는 이를 전송하지만 상태 파일이나 계획 파일에는 절대 기록하지 않으며, *_wo_version이 변경될 때만 다시 전송합니다. 이 기능에는 OpenTofu 또는 Terraform 1.11 이상이 필요합니다. 현재는 엔터프라이즈 OIDC 연결의 클라이언트 시크릿(keenauth_connection_oidc_config)이 이에 해당합니다. 애플리케이션 클라이언트 시크릿과 서명 키는 이 버전의 프로바이더가 관리하지 않으므로, 대시보드나 CLI에서 생성하고 교체하십시오. KeenAuth가 생성하는 시크릿은 쓰기 전용이 될 수 없습니다. 쓰기 전용 인수는 설정에서 프로바이더로 값을 전달할 뿐이기 때문입니다. 프로바이더는 API 키를 생성하지 않습니다. 원본 키가 상태에 남게 되기 때문입니다. CLI로 키를 생성하고, 시크릿 관리자에 저장한 뒤, ID로 keenauth_api_key에 가져오십시오. 디렉터리의 SCIM 토큰은 API가 한 번만 보여 주므로, 프로바이더는 디렉터리 생성 시 반환되는 토큰을 폐기하고 보관하지 않습니다. keenauth_directory_token은 아이덴티티 공급자용 토큰을 생성하고, 이를 RSA 공개 키로 암호화된 형태로만 상태에 보관합니다. keenauth_webhook_endpoint도 웹훅 서명 비밀을 같은 방식으로 보관합니다. 즉 public_key로만 암호화하며, 키가 주어지지 않으면 비밀을 버립니다. 연결 settings에는 시크릿을 넣으면 안 됩니다. API는 시크릿처럼 보이는 설정을 거부합니다.

이 버전의 제한 사항