diff --git a/configure.sh b/configure.sh
index 72040949da31820948ea12eb0f61b0e0136860ea..048a152f4d4d8579c0cf11c9b65551e8dab55df8 100755
--- a/configure.sh
+++ b/configure.sh
@@ -11,8 +11,8 @@ wait () {
done
}
-echo "By default, all services except HAProxy stats and OPENSEARCH are public!"
-echo "The configuration file: access.ips is used to configure external access to the services"
+echo "By default, all services except OPENSEARCH are public!"
+echo "The configuration file access.ips is used to limit access to the services only to the configured IP ranges."
echo "Do you want to modify/edit this file now?"
read -p "(yes|no) [no] : " MODIFY
MODIFY=${MODIFY:-no}
@@ -74,22 +74,22 @@ else
read -p "[$(hostname -f)]: " soctoolsproxy
soctoolsproxy=${soctoolsproxy:-$(hostname -f)}
echo
- echo "Organization's top level domain (will be used as organization name and organization domain in different services)"
- read -p 'domain: ' domain
- if [ -z $domain ]; then
- echo "Error: Empty string for domain! exiting..."
+ echo "Name of your organization (it will be used as organization name in MISP, The Hive and Cortex)"
+ read -p 'organization: ' organization
+ if [ -z $organization ]; then
+ echo "Error: Empty string for organization! exiting..."
exit 1
fi
echo
echo
echo
echo "Please provide the following parameters for the first SOCTools user, which will be created during the initialization with organization admin privileges:"
- echo "username - Username of the user"
+ echo "username - Username of the user"
echo "firstname - First name of the user"
- echo "lastname - Last name of the user"
- #echo "DN - Distinguished Name of the user, for user certificate"
- #echo "CN - Common Name of the user, for user certificate"
- echo "Email will be generated automatically in Username@Domain format because of format restrictions in some services"
+ echo "lastname - Last name of the user"
+ echo "email - Email of the user"
+ #echo "DN - Distinguished Name of the user, for user certificate"
+ #echo "CN - Common Name of the user, for user certificate"
echo ""
read -p "username: " username
if [ -z "$username" ]; then
@@ -98,6 +98,7 @@ else
fi
read -p "firstname: " firstname
read -p "lastname: " lastname
+ read -p "email: " email
#read -p "Enter CN for Certificate [${firstname}${lastname}]: " CN
#CN=${CN:-${firstname}${lastname}}
CN="$username"
@@ -106,11 +107,12 @@ else
echo
echo
echo "Please check the gathered variables and type 'yes' if everything is correct:"
- echo "soctoolsproxy: $soctoolsproxy"
- echo "domain: $domain"
+ echo "soctoolsproxy: $soctoolsproxy"
+ echo "organization: $organization"
echo "firstname: $firstname"
echo "lastname: $lastname"
echo "username: $username"
+ echo "email: $email"
echo "DN: $DN"
echo "CN: $CN"
echo
@@ -127,7 +129,7 @@ else
sed -i "11s/CHANGE_ME_FIRST_NAME/${firstname}/" group_vars/all/variables.yml
sed -i "12s/CHANGE_ME_LAST_NAME/${lastname}/" group_vars/all/variables.yml
sed -i "13s/soc_admin/${username}/" group_vars/all/variables.yml
- sed -i "14s/soc_admin/${username}/" group_vars/all/variables.yml
+ sed -i "14s/soc_admin@example.org/${email}/" group_vars/all/variables.yml
sed -i "15s/CN=soc_admin/${DN}/" group_vars/all/variables.yml
sed -i "16s/soc_admin/${CN}/" group_vars/all/variables.yml
sed -i "26s/soc_admin/${username}/" group_vars/all/variables.yml
diff --git a/group_vars/all/variables.template b/group_vars/all/variables.template
index 286875f7d467c3474ff7630a5d0b610d4d989c95..203f2f5f571db550c0d08b2746c554b3976f9b8e 100644
--- a/group_vars/all/variables.template
+++ b/group_vars/all/variables.template
@@ -3,26 +3,26 @@
# set FQDN which will be used to access the soctools services. (the DNS record should already be in place.)
soctoolsproxy: "CHANGE_ME_TO_FQDN"
-# Organization's top level domain (will be used as organization name and organization domain in different services)
-domain: "soctools.test"
+# Short organization name (will be used as org. name in MISP, The Hive and Cortex)
+org_name: "SOCTools"
#List of users which will be created during the initialization with organization admin privileges
soctools_users:
- firstname: "CHANGE_ME_FIRST_NAME"
lastname: "CHANGE_ME_LAST_NAME"
username: "soc_admin"
- email: "soc_admin@{{domain}}"
+ email: "soc_admin@example.org"
DN: "CN=soc_admin"
CN: "soc_admin"
# - firstname: "SOC Admin 2"
# lastname: ""
# username: "soc_admin_2"
-# email: "soc_admin_2@{{domain}}"
+# email: "soc_admin_2@example.org"
# DN: "CN=soc_admin_2"
# CN: "soc_admin_2"
-# list of users(username) from previous step which will recive admin roles in OPENSEARCH. (Minimum one user is required)
-ODFE_ADMIN_USERS:
+# list of users(username) from previous step which will recive admin roles in OpenSearch Dashboards. (Minimum one user is required)
+OSD_ADMIN_USERS:
- soc_admin
# - soc_admin_2
diff --git a/roles/cortex/tasks/configure.yml b/roles/cortex/tasks/configure.yml
index 7e94fcbf22f82f7d92a37bfa19ecd7e0dd31d622..a02b3a22d65f6b317de414570a9964385cbd037e 100644
--- a/roles/cortex/tasks/configure.yml
+++ b/roles/cortex/tasks/configure.yml
@@ -59,6 +59,22 @@
shell: "curl -XPOST -H 'Authorization: Bearer {{cortexadminuserapikey}}' -H 'Content-Type: application/json' 'http://127.0.0.1:9001/api/organization' -d @/tmp/cortex_organization.json"
run_once: True
+- name: generate json files for creating users
+ remote_user: root
+ template:
+ src: users.json
+ dest: /tmp/{{ item.username }}.json
+ with_items:
+ - "{{ soctools_users }}"
+
+- name: create users
+ remote_user: root
+ shell: "curl -XPOST -H 'Authorization: Bearer {{cortexadminuserapikey}}' -H 'Content-Type: application/json' http://127.0.0.1:9001/api/user -d @/tmp/{{item.username}}.json"
+ args:
+ warn: false
+ with_items:
+ - "{{ soctools_users }}"
+
- name: disable basic auth
remote_user: root
lineinfile:
diff --git a/roles/cortex/templates/application.conf.j2 b/roles/cortex/templates/application.conf.j2
index 4155af9a310b65dcd141dcb4f7002941c1954fa4..88f53336f373669fc46da3339e5b1f10d575f352 100644
--- a/roles/cortex/templates/application.conf.j2
+++ b/roles/cortex/templates/application.conf.j2
@@ -127,7 +127,7 @@ auth {
# scope = "profile"
userIdField = "email"
- scope = ["openid email profile"]
+ scope = ["openid"]
}
ws.ssl.trustManager {
@@ -143,17 +143,18 @@ auth {
# Single-Sign On
sso {
- autocreate = true
- autoupdate = true
- autologin = true
+ #autocreate = true
+ #autoupdate = true
+ #autologin = true
defaultRoles = ["read", "analyze"]
- defaultOrganization = "{{domain}}"
+ defaultOrganization = "{{org_name}}"
mapper = simple
attributes {
login = "email"
- name = "email"
- roles = "roles"
+ name = "preferred_username"
+ # roles = "roles"
+ # organization = "organization"
}
}
}
diff --git a/roles/cortex/templates/cortex_organization.json b/roles/cortex/templates/cortex_organization.json
index f1c58fff9d6cd9c75504d07294754903bba26fcf..d094f769a5dd7c4994758a428b47bd45746c5f91 100644
--- a/roles/cortex/templates/cortex_organization.json
+++ b/roles/cortex/templates/cortex_organization.json
@@ -1 +1 @@
-{"name": "{{domain}}", "description": "{{domain}}", "status": "Active"}
+{"name": "{{org_name}}", "description": "{{org_name}}", "status": "Active"}
diff --git a/roles/cortex/templates/users.json b/roles/cortex/templates/users.json
new file mode 100644
index 0000000000000000000000000000000000000000..e9a8f8bf18ee477997888e501a03131dd54ea873
--- /dev/null
+++ b/roles/cortex/templates/users.json
@@ -0,0 +1,6 @@
+{
+ "login": "{{ item.email }}",
+ "name": "{{ item.firstname }} {{ item.lastname }}",
+ "roles": ["read", "analyze", "orgadmin"],
+ "organization": "{{ org_name }}"
+}
diff --git a/roles/opensearch-dashboards/templates/role.json.j2 b/roles/opensearch-dashboards/templates/role.json.j2
index 9d67a52fb225237029d74bcaa8b381857a3f1eb2..1e7c2ae4cc63742e63e2e8b04b78970780b8d47a 100644
--- a/roles/opensearch-dashboards/templates/role.json.j2
+++ b/roles/opensearch-dashboards/templates/role.json.j2
@@ -6,7 +6,7 @@
],
"users":[
-{% for user in ODFE_ADMIN_USERS %}
+{% for user in OSD_ADMIN_USERS %}
"{{ user }}",
{% endfor %}
"admin"
diff --git a/roles/thehive/tasks/organization.yml b/roles/thehive/tasks/organization.yml
index 03528a7f73e92a5c512292d0a3a45fbaa3f1fa3e..4477ab32fe13b94b946dc29a66dc9063e4896f28 100644
--- a/roles/thehive/tasks/organization.yml
+++ b/roles/thehive/tasks/organization.yml
@@ -8,8 +8,8 @@
Authorization: "Bearer {{lookup('password', '{{playbook_dir}}/secrets/tokens/thehive_secret_key')}}"
body_format: form-urlencoded
body:
- name: "{{ domain }}"
- description: "{{ domain }}"
+ name: "{{ org_name }}"
+ description: "{{ org_name }}"
status_code: 201
ignore_errors: True
diff --git a/roles/thehive/templates/application.conf.j2 b/roles/thehive/templates/application.conf.j2
index 7dfc7e13003f85fa8bc8f1931d3cf27d6dfa4b6c..b9f07820acf3008d85f46e67531ef875c8d6ef6b 100644
--- a/roles/thehive/templates/application.conf.j2
+++ b/roles/thehive/templates/application.conf.j2
@@ -49,10 +49,6 @@ storage {
# More information at https://github.com/TheHive-Project/TheHiveDocs/TheHive4/Administration/Authentication.md
auth {
providers: [
-// {name: session} # required !
-// {name: basic, realm: thehive}
-// {name: local}
-// {name: key}
{name: session} # required !
{name: basic, realm: thehive}
{name: local}
@@ -70,24 +66,9 @@ auth {
userUrl: "https://{{soctoolsproxy}}:12443/auth/realms/{{openid_realm}}/protocol/openid-connect/userinfo"
// scope: ["openid", "email"]
scope: ["openid"]
- userIdField: "email"
-// userIdField: "name"
+ userIdField: "email" # TheHive requires user id to be an email address
}
]
- sso {
- autocreate: true
- autoupdate: true
- autologin: true
- mapper: "simple"
-// attributes {
-// login: "login"
-// name: "name"
-// roles: "role"
-// }
- defaultRoles: ["read", "write", "admin"]
- defaultOrganization: "{{domain}}"
-// defaultOrganization: "demo"
- }
ws.ssl.trustManager {
stores = [
{
@@ -99,10 +80,17 @@ auth {
}
# The format of logins must be valid email address format. If the provided login doesn't contain `@` the following
# domain is automatically appended
- defaultUserDomain: "{{domain}}"
-# defaultUserDomain: "thehive.local"
+ defaultUserDomain: "thehive.local"
}
+# Automatically create new user when logged in using SSO and does not exist yet
+#user: {
+# autoCreateOnSso: true
+# defaults.profile: "analyst"
+# defaults.organisation: "{{ org_name }}"
+#}
+
+
## CORTEX configuration
# More information at https://github.com/TheHive-Project/TheHiveDocs/TheHive4/Administration/Connectors.md
# Enable Cortex connector
diff --git a/roles/thehive/templates/kibanauser.json b/roles/thehive/templates/kibanauser.json
index 5f8a56275cca4d2ce4b1c315e6c5296d23965a00..dd4f4628d7200f94ff9663084a057e3d10005467 100644
--- a/roles/thehive/templates/kibanauser.json
+++ b/roles/thehive/templates/kibanauser.json
@@ -2,5 +2,5 @@
"login": "{{ THEHIVE_KIBANA_USER.username }}",
"name": "{{ THEHIVE_KIBANA_USER.name }} {{ THEHIVE_KIBANA_USER.surname }}",
"roles": {{ THEHIVE_KIBANA_USER.roles }},
- "organisation": "{{ domain }}"
+ "organisation": "{{ org_name }}"
}
diff --git a/roles/thehive/templates/users.json b/roles/thehive/templates/users.json
index 123f1712d62daa81084f3733a642785c89edbe4d..b8d5ac713c94bd6a106acbc47ec4304f5768c5d9 100644
--- a/roles/thehive/templates/users.json
+++ b/roles/thehive/templates/users.json
@@ -1,6 +1,6 @@
{
- "login": "{{ item.username }}",
+ "login": "{{ item.email }}",
"name": "{{ item.firstname }} {{ item.lastname }}",
"roles": ["read", "write", "admin"],
- "organisation": "{{ domain }}"
+ "organisation": "{{ org_name }}"
}