keenauth_directory_token
keenauth_directory_token リソースは、ユーザーとグループをプロビジョニングする ID プロバイダー用に、ディレクトリの SCIM ベアラートークンを作成します。プロバイダーはトークンを、指定された RSA 公開鍵で暗号化した状態でのみ state に保持します。
resource "keenauth_directory_token" "okta" {
directory_id = keenauth_directory.acme_okta.id
label = "Okta"
expires_in_days = 180
public_key = file("${path.module}/scim-token-key.pub.pem")
lifecycle {
create_before_destroy = true
}
}
output "okta_scim_token_encrypted" {
value = keenauth_directory_token.okta.encrypted_token
}
トークンは平文で保存されません
API は SCIM トークンを、それを作成するレスポンスで一度だけ返し、その後はどのエンドポイントからも読み取れません。プロバイダーはトークンを公開鍵で暗号化し(SHA-256 の RSA-OAEP、MGF1 SHA-256、空のラベル)、encrypted_token には base64 の暗号文だけを書き込みます。平文のトークンが state、プランファイル、出力、ログに渡ることはありません。復号できるのは秘密鍵の保持者だけなので、state ファイルが漏えいしてもトークンは漏れません。
鍵ペアは OpenTofu の外で一度だけ作成し、秘密鍵は構成の外に置いてください:
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:3072 -out scim-token-key.pem
openssl pkey -in scim-token-key.pem -pubout -out scim-token-key.pub.pem
tofu apply の後、トークンを復号して ID プロバイダーに渡します:
tofu output -raw okta_scim_token_encrypted | base64 -d | \
openssl pkeyutl -decrypt -inkey scim-token-key.pem \
-pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 -pkeyopt rsa_mgf1_md:sha256
public_key は、2048 ビット以上の PEM 形式 RSA 公開鍵(PUBLIC KEY または RSA PUBLIC KEY)である必要があります。秘密鍵や、より小さい鍵はプラン時に拒否されます。プロバイダーがトークンを渡せなかった場合は、ただちにトークンを取り消し、apply は失敗します。そのため、誰も保持していない有効なトークンは存在しません。
作成と取り消しのみ
トークンは変更できません。各引数(directory_id、label、expires_in_days、public_key)を変更すると新しいトークンが作成され、古いトークンは取り消されます。リソースを破棄するとトークンは取り消されます。
プロバイダーの外で取り消された、または期限切れのトークンは、次回の更新で state から削除され、次の apply で新しいトークンが作成されます。ディレクトリを削除すると、そのトークンも削除されます。
ローテーション
ディレクトリで有効なトークンは最大 2 つで、3 つ目は 409 で拒否されます。これでダウンタイムなしのローテーションができます。create_before_destroy = true を指定すると、古いトークンを取り消す前に新しいトークンが作成されます。同じ変更時間帯に、新しいトークンを ID プロバイダーに渡してください。
引数
labelは 1〜100 文字で、制御文字を含まず、先頭や末尾に空白があってはいけません。API のデフォルトはTokenです。expires_in_daysは 30〜730 です。API のデフォルトは 365 です。encrypted_token、created_at、expires_at、idは読み取り専用です。
インポート
既存のトークンの値は二度と読み取れないため、このリソースはインポートできません。インポートしたトークンは配布できないからです。古いトークンは keenauth directories tokens delete <directory_id> <token_id> で取り消し、プロバイダーに新しいトークンを作成させてください。