はじめに
OpenSearchのSecurity Pluginを利用していると、移行や検証時に 「一時的に全権限を持つロールを作成して確認したい」 ケースがあります。
本記事では、curl コマンドを利用して以下のことを行いました。
- 一時的に全権限を持つロール default_role の作成
- rolesmapping によるユーザー・ロールの紐付け
- 権限付与の確認 (authinfo)
- 作成したロールやマッピングの削除
あくまで検証や移行時の一時的な対応として利用してください。
本番運用環境ではセキュリティリスクがあるため、恒久利用は避けるべきです。
手順
1. ロールの存在確認
まずは default_role が存在しないことを確認します。
GET rolesmapping default_role
$ curl -u admin:'<PW>' -k \
-X GET "https://<endpoint>/_plugins/_security/api/rolesmapping/default_role"
{"status":"NOT_FOUND","message":"Resource 'default_role' not found."}
2. 全権限ロールの作成
クラスタ・インデックス・テナントに対して全権限を持つ default_role を作成します。
PUT roles default_role
$ curl -u admin:'<PW>' -k \
-H "Content-Type: application/json" \
-X PUT "https://<endpoint>/_plugins/_security/api/roles/default_role" \
-d '{
"description": "Temporary all-access role for controlled migration",
"cluster_permissions": ["*"],
"index_permissions": [{
"index_patterns": ["*"],
"fls": [],
"masked_fields": [],
"allowed_actions": ["*"]
}],
"tenant_permissions": [{
"tenant_patterns": ["global_tenant"],
"allowed_actions": ["kibana_all_write"]
}]
}'
{"status":"CREATED","message":"'default_role' created."}
3. ロールマッピングの作成
管理ユーザーやバックエンドロールにマッピングします。
PUT rolesmapping default_role
$ curl -u admin:'<PW>' -k \
-H "Content-Type: application/json" \
-X PUT "https://<endpoint>/_plugins/_security/api/rolesmapping/default_role" \
-d '{
"hosts": [],
"users": [],
"backend_roles": ["admin"],
"and_backend_roles": []
}'
{"status":"CREATED","message":"'default_role' created."}
4. 権限付与の確認
authinfo APIを利用して現在のユーザー情報を確認します。
GET authinfo
$ curl -u admin:'<PW>' -k \
-X GET "https://<endpoint>/_plugins/_security/authinfo"
{"user":"User [name=admin, backend_roles=[], requestedTenant=null]","user_name":"admin","user_requested_tenant":null,"backend_roles":[],"custom_attribute_names":[],"roles":["security_manager","all_access"],"tenants":{"global_tenant":true,"admin":true},"principal":null,"peer_certificates":"0","sso_logout_url":null}
5. 作成したロールとマッピングを削除
不要になったら削除します。
DELETE rolesmapping default_role
$ curl -u admin:'<PW>' -k -X DELETE \
"https://<endpoint>/_plugins/_security/api/rolesmapping/default_role"
{"status":"OK","message":"'default_role' deleted."}
DELETE roles default_role
$ curl -u admin:'<PW>' -k -X DELETE \
"https://<endpoint>/_plugins/_security/api/roles/default_role"
{"status":"OK","message":"'default_role' deleted."}
6. 全ユーザー/ロールに一時的に付与するケース
テスト目的で * を指定してすべてのユーザーに付与することも可能です。
PUT rolesmapping default_role
$ curl -u admin:'<PW>' -k \
-H "Content-Type: application/json" \
-X PUT "https://<endpoint>/_plugins/_security/api/rolesmapping/default_role" \
-d '{
"hosts": [],
"users": [],
"backend_roles": ["*"],
"and_backend_roles": []
}'
{"status":"CREATED","message":"'default_role' created."}
確認すると以下のように users=["*"] が設定されています。
GET rolesmapping default_role
$ curl -u admin:'<PW>' -k \
-X GET "https://<endpoint>/_plugins/_security/api/rolesmapping/default_role"
{"default_role":{"hosts":[],"users":["*"],"reserved":false,"hidden":false,"backend_roles":[],"and_backend_roles":[]}}
まとめ
- roles API で権限ロールを作成
- rolesmapping API でユーザーやロールに紐付け
- authinfo API で権限の反映を確認
- 不要になったら DELETE で削除
おわりに
今回紹介したように、一時的に「全アクセス権限」を持つロールを作成して確認することができます。
ただし セキュリティリスクが非常に高いため、本番環境での恒常利用は避けるようにしてください。