Tested against a local TheKongLaboratory deployment.
#!/bin/bash
set -xe
################################################################################
## This script is designed to perform initial RBAC & Dev Portal enablement
## post deploy on a new Kong API Gateway
## Authors:
## - Kat Morgan (consultant @konghq.com)
## -
## Dependencies:
## - curl
## - jq
################################################################################
# Top Level Variables
export TOKEN='Kong-Admin-Token:kong_admin'
export HOST='https://manager.kong.kind.home.arpa/api'
export HOST_RESOLVE='manager.kong.kind.home.arpa:443:127.0.0.1'
# Example new admin variables
export WORKSPACE='public'
export USERNAME='new_admin'
export PASSWORD='new_admin_password'
export EMAIL='[email protected]'
export ADMIN_TOKEN='Kong-Admin-Token:new_admin_password'
################################################################################
# Developer Portal
# Enable developer portal
curl -sk -H "${TOKEN}" ${HOST}/workspaces/${WORKSPACE} -X PATCH --data "config.portal=true" | jq .
#################################################################################
# RBAC
# Create administrator role for workspace
API_ENDPOINT="${HOST}/${WORKSPACE}/rbac/roles"
cat <<EOF | curl -Lks -H "${TOKEN}" ${API_ENDPOINT} \
-H "Content-Type: application/json" \
--data-binary @- | jq .
{
"name":"workspace-admin",
"comment":"Workspace Admin"
}
EOF
# Create Administrator
API_ENDPOINT="${HOST}/${WORKSPACE}/admins"
cat <<EOF | curl -Lks -H "${TOKEN}" ${API_ENDPOINT} \
-H "Content-Type: application/json" \
--data-binary @- | jq .
{
"email": "${EMAIL}",
"username": "${USERNAME}",
"rbac_token_enabled": true
}
EOF
# Pull Admin User Registration Token
API_ENDPOINT="${HOST}/${WORKSPACE}/admins/${USERNAME}"
export REGISTER_TOKEN=$(curl -Lks -H "${TOKEN}" ${API_ENDPOINT}?generate_register_url=true | jq .token -r)
# Register Admin User with Registration Token
API_ENDPOINT="${HOST}/${WORKSPACE}/admins/register"
cat <<EOF | curl -Lks -H "${TOKEN}" ${API_ENDPOINT} \
-H "Content-Type: application/json" \
--data-binary @- | jq .
{
"token": "${REGISTER_TOKEN}",
"username": "${USERNAME}",
"password": "${PASSWORD}",
"email": "${EMAIL}"
}
EOF