MariaDB
 sql >> डेटाबेस >  >> RDS >> MariaDB

टेराफॉर्म के साथ MySQL/MariaDB वॉल्ट डेटाबेस सीक्रेट इंजन का प्रावधान

इस पोस्ट का लक्ष्य उन सभी को मैन्युअल रूप से बनाए और प्रबंधित किए बिना गतिशील/अस्थायी डेटाबेस क्रेडेंशियल प्रदान करना है।

मैं इसे केवल यह कहकर शुरू करने जा रहा हूं कि यह सिर्फ अवधारणा का प्रमाण है और सर्वोत्तम प्रथाओं का पालन नहीं किया गया था। (मुख्य रूप से सुरक्षा वाले)। इस बिंदु से सभी प्रक्रियाएं केवल सरल परीक्षण हैं, सभी पक्ष कार्यों को आसान बनाने पर ध्यान केंद्रित करने के साथ ही पूरी प्रक्रिया को काम करते हुए देखने के लिए।

परीक्षण कंटेनर

हम मारियाडीबी और वॉल्ट कंटेनर का उपयोग करेंगे, (त्वरित) दोनों परियोजनाओं के आधिकारिक डॉकरहब पृष्ठों पर निर्दिष्ट के रूप में लॉन्च किया गया।

  • वॉल्ट
docker run --rm \
    --name vault \
    --cap-add=IPC_LOCK \
    -e 'VAULT_LOCAL_CONFIG={"backend": {"file": {"path": "/vault/file"}}, "default_lease_ttl": "168h", "max_lease_ttl": "720h"}' \
    -p 8200:8200 \
    -d vault

जब तिजोरी शुरू हो जाती है, तो हम कंटेनर लॉग से निम्नलिखित देख सकते हैं:

<ब्लॉकक्वॉट>

आपको निम्न पर्यावरण चर सेट करने की आवश्यकता हो सकती है:

$ निर्यात VAULT_ADDR='http://0.0.0.0:8200

यदि आप चाहते हैं तो अनसील कुंजी और रूट टोकन नीचे प्रदर्शित होते हैं
तिजोरी को सील/अनसील करें या फिर से प्रमाणित करें।

अनसील कुंजी:kSUgoPDPyBrCGWc4s93CIlMUnDLZGcxdu4doYCkWSPs=
रूट टोकन:s.I6TnqhrgYh8uET91FUsNvIwV

विकास मोड का उपयोग उत्पादन>स्थापनाओं में नहीं किया जाना चाहिए!

तो, हमारे पास अपना वॉल्ट पता और रूट टोकन है।

  • मारियाडीबी
docker run --rm \
    --name mariadb \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=mysecretpw \
    -d mariadb:latest

और यहां हमारे पास मारियाडीबी के लिए हमारा रूट यूजर और पासवर्ड है।

चूंकि रूट उपयोगकर्ता को किसी भी चीज़ के लिए उपयोग नहीं किया जाना चाहिए, हम वॉल्ट इंटरैक्शन के लिए एक समर्पित उपयोगकर्ता बनाने जा रहे हैं।

mysql -h 127.0.0.1 -u root -p . का उपयोग करके डेटाबेस में लॉग इन करें

और वॉल्ट उपयोगकर्ता बनाएं

grant CREATE USER, SELECT, INSERT, UPDATE ON *.* TO 'vault'@'%' identified by 'myvaultsecretpw' WITH GRANT OPTION;

टेराफ़ॉर्म

सभी सेवाओं के चलने और कॉन्फ़िगर होने के साथ, टेराफ़ॉर्म भाग की देखभाल करने का समय आ गया है।

एक बार फिर, यह केवल एक पीओसी है। सभी हार्डकोडेड और कमजोर पासवर्ड परीक्षण उद्देश्यों के लिए हैं।

provider "vault" {
    address = "http://localhost:8200"
        #Token provided from vault container log
    token = "s.I6TnqhrgYh8uET91FUsNvIwV" 
}

resource "vault_auth_backend" "userpass" {
  type = "userpass"
}

# USERS
resource "vault_generic_endpoint" "user_userro" {
  depends_on           = [vault_auth_backend.userpass]
  path                 = "auth/userpass/users/userro"
  ignore_absent_fields = true

  data_json = <<EOT
{
  "policies": ["db-ro"],
  "password": "userro"
}
EOT
}

resource "vault_generic_endpoint" "user_userrw" {
  depends_on           = [vault_auth_backend.userpass]
  path                 = "auth/userpass/users/userrw"
  ignore_absent_fields = true

  data_json = <<EOT
{
  "policies": ["db-all", "db-ro"],
  "password": "userrw"
}
EOT
}

# POLICIES
# Read-Only access policy
resource "vault_policy" "dbro" {
  name   = "db-ro"
  policy = file("policies/dbro.hcl")
}

# All permissions access policy
resource "vault_policy" "dball" {
  name   = "db-all"
  policy = file("policies/dball.hcl")
}


# DB
resource "vault_mount" "mariadb" {
  path = "mariadb"
  type = "database"
}

resource "vault_database_secret_backend_connection" "mariadb_connection" {
  backend       = vault_mount.mariadb.path
  name          = "mariadb"
  allowed_roles = ["db-ro", "db-all"]
  verify_connection = true

  mysql{
    connection_url = "{{username}}:{{password}}@tcp(192.168.11.71:3306)/"
  }

# note that I have my database address hardcoded and I'm using my lan IP, since I'm running the mysql client directly from my host and vault/mariadb are running inside containers with their ports exposed.

  data = {
    username = "vault"
    password = "myvaultsecretpw"
  } 

}

resource "vault_database_secret_backend_role" "role" {
  backend             = vault_mount.mariadb.path
  name                = "db-ro"
  db_name             = vault_database_secret_backend_connection.mariadb_connection.name
  creation_statements = ["GRANT SELECT ON *.* TO '{{name}}'@'%' IDENTIFIED BY '{{password}}';"]
}

resource "vault_database_secret_backend_role" "role-all" {
  backend             = vault_mount.mariadb.path
  name                = "db-all"
  db_name             = vault_database_secret_backend_connection.mariadb_connection.name
  creation_statements = ["GRANT ALL ON *.* TO '{{name}}'@'%' IDENTIFIED BY '{{password}}';"]
}

पिछली कोड सूची में उपयोग की गई नीति फ़ाइलें:

  • नीतियां/dball.hcl
path "mariadb/creds/db-all" {
  policy = "read"
  capabilities = ["list"]
}

  • नीतियां/dbro.hcl
path "mariadb/creds/db-ro" {
  policy = "read"
  capabilities = ["list"]
}

इसके बाद सामान्य प्रक्रिया:
terraform init
terraform apply

और हमारे पास कुछ परीक्षण के लिए सब कुछ तैयार है।

परीक्षण

RO उपयोगकर्ता का परीक्षण करना

तिजोरी में लॉगिन करें

$ vault login -method userpass username=userro
Password (will be hidden): 
Success! You are now authenticated. The token information displayed below
is already stored in the token helper. You do NOT need to run "vault login"
again. Future Vault requests will automatically use this token.
(...)

डीबी क्रेडेंशियल्स का अनुरोध करें

$ vault read mariadb/creds/db-ro
Key                Value
---                -----
lease_id           mariadb/creds/db-ro/uGldyp0BAa2GhUlFyrEwuIbs
lease_duration     168h
lease_renewable    true
password           8vykdcZNHp-I0pajVtoN
username           v_userpass-d_db-ro_75wxnJaL69FW4

डीबी में लॉग इन करें
(याद रखें:अगला सीएमडी वास्तव में एक खराब अभ्यास है !!!)

$ mysql -h 127.0.0.1 -u v_userpass-d_db-ro_75wxnJaL69FW4 -p'8vykdcZNHp-I0pajVtoN'

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 101
Server version: 10.3.13-MariaDB-1:10.3.13+maria~bionic mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

... सामान करने की कोशिश करो

MariaDB [(none)]> create database my_database;
ERROR 1044 (42000): Access denied for user 'v_userpass-d_db-ro_75wxnJaL69FW4'@'%' to database 'my_database'

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| my_db              |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]> use my_db;

Database changed
MariaDB [my_db]> show tables;
+-----------------+
| Tables_in_my_db |
+-----------------+
| my_table        |
+-----------------+
1 row in set (0.00 sec)

MariaDB [my_db]> select * from my_table;
Empty set (0.00 sec)

MariaDB [my_db]> 

RW उपयोगकर्ता का परीक्षण करना

तिजोरी में लॉगिन करें

$ vault login -method userpass username=userrw
Password (will be hidden): 
Success! You are now authenticated. The token information displayed below
is already stored in the token helper. You do NOT need to run "vault login"
again. Future Vault requests will automatically use this token.
(...)

डीबी क्रेडेंशियल्स का अनुरोध करें

$ vault read mariadb/creds/db-all
Key                Value
---                -----
lease_id           mariadb/creds/db-all/GHRHvpuqa2ITP9tX54YHEePl
lease_duration     168h
lease_renewable    true
password           L--8mPBoprFZcaItINKI
username           v_userpass-j_db-all_DMwlhs9nGxA8

डीबी में लॉग इन करें
(फिर से याद रखें:अगला सीएमडी वास्तव में एक खराब अभ्यास है !!!)

$ mysql -h 127.0.0.1 -u v_userpass-j_db-all_DMwlhs9nGxA8 -p'L--8mPBoprFZcaItINKI'
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 109
Server version: 10.3.13-MariaDB-1:10.3.13+maria~bionic mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>  

... सामान करने की कोशिश करो

MariaDB [(none)]> create database my_database;
Query OK, 1 row affected (0.01 sec)

MariaDB [(none)]> use my_db;
Database changed

MariaDB [my_db]> create table the_table (i integer);
Query OK, 0 rows affected (0.03 sec)

MariaDB [my_db]> show tables;
+-----------------+
| Tables_in_my_db |
+-----------------+
| my_table        |
| the_table       |
+-----------------+
2 rows in set (0.00 sec)

और बस। अब हमारे पास हमारे MariaDB गतिशील/अस्थायी उपयोगकर्ताओं के लिए आधार है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मारियाडीबी में DAYOFMONTH () कैसे काम करता है

  2. MariaDB में समय मान से घंटे, मिनट और सेकंड को अलग करने के 4 तरीके

  3. मारियाडीबी में एक तिथि से दिन, महीना और वर्ष प्राप्त करने के लिए 11 कार्य

  4. SQL की शक्ति और प्रक्रियात्मक कथनों को MariaDB के Oracle संगतता मोड के साथ संयोजित करना

  5. मारियाडीबी में एक निश्चित चरित्र से पहले या बाद में सब कुछ चुनें