Boundary の認証メソッドで LDAP を設定する
Boundary 0.14 から Userpass, OIDC auth method の他に LDAP auth method が GA となったので、ラボ環境で試してみました。
Boundary environment
Boundary の LDAP auth method は Boundary v0.14 以上の環境で利用出来ます。ここでは、以前アップグレードを行った Boundary Enterprise の環境を利用しています。
Configure LDAP auth method
LDAP auth method の設定を Boundary に対して実施していきますが、Boundary も Terraform provider が用意されているため、boundary_account_ldap
と boundary_managed_group_ldap
を利用して Terraform で設定していきます。
Terraform のコードは以下の様になっています。
resource "boundary_auth_method_ldap" "mylab" {
scope_id = data.terraform_remote_state.first.outputs.org_id
description = "openldap auth method"
name = "openldap auth method"
urls = ["${var.ldap_url}"]
bind_dn = var.bind_dn
bind_password = var.bind_pass
insecure_tls = true
group_attr = var.group_attr
group_dn = var.group_dn
group_filter = var.group_filter
user_dn = var.user_dn
user_attr = var.user_addr
enable_groups = true
state = "active-public"
is_primary_for_scope = true
}
resource "boundary_managed_group_ldap" "joestar" {
auth_method_id = boundary_auth_method_ldap.mylab.id
group_names = ["joestar"]
name = "joestar-mylab"
description = "joestar group in ldap: jotaro, joseph "
}
resource "boundary_role" "admin" {
name = "mylab-project-admin-from-ldap"
description = "admin role"
principal_ids = [
boundary_managed_group_ldap.joestar.id
]
grant_strings = ["id=*;type=*;actions=*"]
scope_id = data.terraform_remote_state.first.outputs.project_id
}
boundary_auth_method_ldap
リソースの scope_id
の値に関しては、Terraform を用いて別途作成した Boundary リソースのアウトプットから取得し、LDAP auth method を設定する Scope を指定しています。
boundary_managed_group_ldap
リソースの group_names
の値は、LDAP サーバー側で定義したグループ名を記載しています。
boundary_role
リソースで、boundary_managed_group_ldap
リソースで定義したプリンシパルに対して、権限を付与しています。ここでは特に権限を絞ることなく、grant_strings = ["id=*;type=*;actions=*"]
と定義していますが、Grant の定義を修正する事で、例えば以下の様にアクセスさせるターゲットを絞る事も可能です。
grant_strings = [
"id=${boundary_target.postgres_ro.id};actions=*",
"id=${boundary_target.k8s_list.id};actions=*",
"id=*;type=session;actions=cancel:self,list,read",
"id=*;type=target;actions=list,read",
"id=*;type=host-catalog;actions=list,read",
"id=*;type=host-set;actions=list,read",
"id=*;type=host;actions=list,read"
]
必要な Terraform 変数ファイル等を準備した上で、terraform apply
を実行し、Boundary に対して設定しています。このあたりの定義に関しては、チュートリアル LDAP authentication でも確認出来ますので、ご確認下さい。
また、Scope や 権限設定を行う Grant を含めた Boundary のドメインモデルに関しては、以下のドキュメントで確認出来ます。
Login to Boundary with LDAP auth method
Boundary Desktop, boundary
CLI それぞれでログインしてみます。
Boundary Desktop から openldap auth method を選択し、LDAP auth method でログインします。
ログインすると、このユーザーは、boundary_managed_group_ldap
リソースで定義したグループに所属しているユーザーであり、全てのアクションが許可されているため、このプロジェクトに登録されている全てのターゲットがリストされます。
boundary
CLI だと以下の様に、boundary authenticate ldap -auth-method-id
コマンドで設定した LDAP auth method の ID を指定してログインします。
$ export BOUNDARY_ADDR="https://boundary-controller.service.consul:9200"
$ boundary authenticate ldap -auth-method-id amldap_KdUCiblVEh -login-name jotaro -keyring-type=none
Please enter the password (it will be hidden):
Authentication information:
Account ID: acctldap_FxweOCVVQX
Auth Method ID: amldap_KdUCiblVEh
Expiration Time: Mon, 25 Dec 2023 17:17:32 JST
User ID: u_ymTbu4gdWP
$ export BOUNDARY_TOKEN="at_..."
ターゲットをリストし、ターゲット ID tssh_qU3d84RQ3k
の Linux サーバーに対して boundary connect ssh
でアクセスしてみます。
$ boundary targets list -scope-id p_BCPM8S6I9E -token env://BOUNDARY_TOKEN
Target information:
ID: tssh_eX0ajhC95E
Version: 7
Type: ssh
Name: linux-ssh-cert-2
...
ID: tssh_qU3d84RQ3k
Version: 7
Type: ssh
Name: linux-ssh-cert-1
Description: linux targets with ssh-cert
Address: xxx.xxx.xx.xxx
Authorized Actions:
no-op
read
update
delete
add-host-sources
set-host-sources
remove-host-sources
add-credential-sources
set-credential-sources
remove-credential-sources
authorize-session
...
$ boundary connect ssh -target-id tssh_qU3d84RQ3k -token env://BOUNDARY_TOKEN
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-89-generic x86_64)
...
Last login: Mon Dec 18 21:56:01 2023 from xxx.xxx.xx.xxx
demo@hashi-client-1:~ $
LDAP で認証された上で、権限もあるユーザーであるため、無事にターゲットとなる Linux サーバーにアクセスする事が出来ました。
Summary
従来から利用できる Userpass, OIDC auth method 以外に、LDAP を利用して、Boundary へアクセスするヒトの認証を行える様になりました。
Discussion