มาเปลี่ยน admin password ให้กับ opensearch docker กันเถอะ
Tags: docker, opensearch
Published: 2022-04-16 10:25:45

&nbsp;&nbsp;&nbsp;&nbsp;เนื่องด้วยตอนนี้จะทำอะไรแต่ละอย่างก็พยายามใช้ Docker เป็นหลักเพื่อความสะดวก ในทั้งตอน Develop → UAT → Produciton จะได้ไปในท่าเดียวกันได้ทั้งหมด

&nbsp;&nbsp;&nbsp;&nbsp;และมีโจทย์ที่จะ implement log server ขึ้นมาอีกตัว เลยนั่งนึกๆดู ปกติเรา Search มา log อะไรมันก็เป็น Text Base Search ดังนั้นตัวที่เหมาะๆในการใช้งานน่าะเป็น Elastics Search Stack นี่แหละที่เหมาะที่สุด แต่ Elastics Search ก็ดันเปลี่ยน license ไปซะแล้ว ไหนๆก็ไหนๆ ใช้ ตัว Open Search เลยดีกว่า

&nbsp;&nbsp;&nbsp;&nbsp;ซึ่งไปหาดูใน Website ของ Open Search  ก็แสนจะง่าย 

https://opensearch.org/docs/latest/opensearch/install/docker/#run-the-image 

``` bash
$docker run -p 9200:9200 -p 9600:9600 -e "discovery.type=single-node" opensearchproject/opensearch:1.3.1
```

Run command ง่ายๆ แบบนี้เอง หลังจาก container up ขึ้นมาแล้วก็ ทดสอบง่ายๆ ว่าสามารถใช้งานได้่ไหม โดยคำสั่ง

```
$curl -XGET https://localhost:9200 -u 'admin:admin' --insecure
$curl -XGET https://localhost:9200/_cat/nodes?v -u 'admin:admin' --insecure
$curl -XGET https://localhost:9200/_cat/plugins?v -u 'admin:admin' --insecure
```

ได้ response มาก็จะพบว่าใช้งานได้ละ 

**แต่ !!!!!!**

&nbsp;&nbsp;&nbsp;&nbsp;สังเกตอะไรไหมครับ Username และ Password มันช่างง่ายดายเสียนี่กระไร หากมีใครล่วงรู้ก็สามารถมาทำอะไรๆกับ Open Search ของเราได้ล่ะสิ ​ดังนั้นควรจะเปลี่ยนมันซะเพื่อป้องกันการเข้าถึงที่ง่ายเกินไประดับนึง

&nbsp;&nbsp;&nbsp;&nbsp;ดังนั้นจึงต้องไปแสดงหาวิธีการในการแก้ไข password ของ admin อย่างง่ายๆเพื่อไม่ให้เปลืองพลังงานชีวิตจนเกินไป ก็พบทางสว่าง จาก [link](https://sysopspro.com/how-to-reset-elasticsearch-opendistro-admin-password/ "reset elastic search admin password") นี้ที่เค้าทำการเปลี่ยน password admin ของ Elastics Search บน Open Distro <br>

&nbsp;&nbsp;&nbsp;&nbsp;ดังนั้นมาลองกันเลยครับ

* ตรวจสอบเสียก่อนว่า container ที่เรารันชื่ออะไรจะได้เข้าไปจัดการได้ถูก run คำสั่งนี้ได้เลย
```
$docker ps -a
```
ก็จะเจอ
```
CONTAINER ID   IMAGE                                 COMMAND                  CREATED          STATUS                      PORTS                                                                NAMES
9ce2cb3a905c   opensearchproject/opensearch:1.3.1    "./opensearch-docker…"   42 minutes ago   Up 42 minutes               0.0.0.0:9200->9200/tcp, 9300/tcp, 0.0.0.0:9600->9600/tcp, 9650/tcp   zen_lamarr
```
* เจอแล้วก็เข้าไปข้างใน container เพื่อจัดการครับ
```
$docker exec -it {ชื่อ container ที่ต้องการ} /bin/bash
```
* ก็จะเข้ามาใน terminal ของ docker ได้แล้ว
```
[opensearch@9ce2cb3a905c ~]$
```
คราวนี้ก็พร้อมให้เราจัดการแล้วครับ
* ขั้นแรกจัดการสร้าง hash ของ password ใหม่เสียก่อน ด้วยคำสั่งนี้
```
[opensearch@9ce2cb3a905c ~]$ /usr/share/opensearch/plugins/opensearch-security/tools/hash.sh
```
ระบบก็จะขึ้น Prompt [Password:] เพื่อให้เราป้อนค่าที่ต้องการครับแล้วมันจะ Hash ให้เราเลยแบบนี้
```
[opensearch@9ce2cb3a905c ~]$ /usr/share/opensearch/plugins/opensearch-security/tools/hash.sh
[Password:]
$2y$12$L3hqnOTHLUTa1M9MCwboZ.74PHhcKsnzix2Tv34308U7qi11f2Uw6
[opensearch@9ce2cb3a905c ~]$
```
* จากนั้นตามหา file internal_users.yml เพื่อแก้ไข password ของ admin ซึ่งมันจะอยู่ที่ 
```
/usr/share/opensearch/plugins/opensearch-security/securityconfig/internal_users.yml
```
ยังดีครับ image นี้มี  vi ให้เราใช้แก้ไข file ได้ บาง image เอาออกเกลี้ยงจะทำอะไรทีต้อง eho ทับมันก็จะรันทดหน่อยๆ <br>

ก็จัดการมันครับ
```
$vi /usr/share/opensearch/plugins/opensearch-security/securityconfig/internal_users.yml
```
จะพบ section hash กันต่อหน้าต่อตาเลยทีเดียว
```
# Define your internal users here

## Demo users

admin:
  hash: "$2y$12$/yozwRC7sWQMzj.O3s5wvOR12gm9KpDgpMtxEypUTgcmlRnbpZtay"
  reserved: true
  backend_roles:
  - "admin"
  description: "Demo admin user"
```
copy hash ที่เราได้มาใหม่ทับเลยครับ แต่ยังไม่จบ เมื่อเปลี่ยนแล้วต้องให้มันรู้จักครับว่าเปลี่ยน
* Run Command นี้เข้าไป
```
$cd /usr/share/opensearch/plugins/opensearch-security/tools
$./securityadmin.sh -cd ../securityconfig/ -icl -nhnv -cacert /usr/share/opensearch/config/root-ca.pem  -cert /usr/share/opensearch/config/kirk.pem -key /usr/share/opensearch/config/kirk-key.pem
```
เป็นอันเรียบร้อยครับ 
* ลองทดสอบดูด้วย user / password เดิมจะพบว่าใช้ไม่ได้แล้ว
```
$curl -XGET https://localhost:9200 -u 'admin:admin' --insecure
$Unauthorized
```
<br>
แต่เมื่อทดสอบด้วย password ใหทม่
```
curl -XGET https://localhost:9200 -u 'admin:password' --insecure
{
  "name" : "9ce2cb3a905c",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "L4yL5lc1SMOVrmPty8msOA",
  "version" : {
    "distribution" : "opensearch",
    "number" : "1.3.1",
    "build_type" : "tar",
    "build_hash" : "c4c0672877bf0f787ca857c7c37b775967f93d81",
    "build_date" : "2022-03-29T18:35:30.372094Z",
    "build_snapshot" : false,
    "lucene_version" : "8.10.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "The OpenSearch Project: https://opensearch.org/"
}
```

ก็จะพบว่าใช้ได้แล้วตามปกติ <br>

เป็นอันว่าจบไปครับกับการเปลี่ยน admin password ของ opensearch อย่างง่าย(ตรงไหน) เผื่อใครจะเอาไปใช้นะครับ