ชัดเจนเรื่อง Root Token

Root Token คือ token ที่ถูกสร้างขึ้นมาแล้วได้รับ Root Policy มาด้วย ... ความพิเศษของ Root Token คือทำอะไรได้ทุกอย่าง และไม่มีวันหมดอายุ (แต่ก็กำหนดให้อายุได้ตอนสร้าง root token อีกตัว) ไม่จำเป็นต้อง renew

author image
drs

Technology evangelistic advocacy

Posted on 2023-03-02 08:14:30 +0700

ตอนที่เขียนเรื่อง สร้างผู้ใช้สิทธิ์ admin ใน HashiCorp Vault หนึ่งในประเด็นที่ยังค้างคาในสมองก็คือ เรื่องของ Root Token

Root Token คืออะไรกันแน่

Root Token คือ token ที่ถูกสร้างขึ้นมาแล้วได้รับ Root Policy มาด้วย … ความพิเศษของ Root Token คือทำอะไรได้ทุกอย่าง และไม่มีวันหมดอายุ (แต่ก็กำหนดให้อายุได้ตอนสร้าง root token อีกตัว) ไม่จำเป็นต้อง renew

สร้าง Root Token

Root Token ทำอะไรได้ทุกอย่างในระบบ การสร้าง Root Token จึงมีเงื่อนไขที่ค่อนข้างจำกัดที่จะสร้าง Root Token ได้ การสร้าง Root Token จึงมีข้อจำกัดและเงื่อนไข การสร้าง Root Token มีเพียง 3 วิธีเท่านั้นที่จะสร้างได้ดังนี้

  1. ถูกสร้างขึ้นหลังจากติดตั้ง ​HashiCorp Vault เสร็จเรียบร้อย และเรียกคำสั่ง vault operator init

    d8k-a2m2 myvault  > vault operator init | grep "Initial Root Token"
    Initial Root Token: hvs.XCuoj4wu0syhudLnF8kZzoq2
    
  2. ถูกสร้างจากผู้ใช้ที่ login ด้วย Root Token เรียกใช้คำสั่งสร้าง token เพื่อใช้งาน vault token create ก็จะได้ Root Token ที่ไม่มีวันหมดอายุด้วย

    d8k-a2m2 myvault  > vault login ${TOKEN}
    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.
    Key                  Value
    ---                  -----
    token                hvs.1Mosjq60x8FQ4RmyClrmmDpD
    token_accessor       PvjSP0pdQcoLfGJRDwzyO0XJ
    token_duration       ∞
    token_renewable      false
    token_policies       ["root"]
    identity_policies    []
    policies             ["root"]
    d8k-a2m2 myvault  > vault token create
    Key                  Value
    ---                  -----
    token                hvs.8v4rICnIB8lfeeqaHmrj0xQA
    token_accessor       JgmpKCr2cik1vVIrvylTjlDo
    token_duration       ∞
    token_renewable      false
    token_policies       ["root"]
    identity_policies    []
    policies             ["root"]
    
  3. ถูกสร้างจากคำสั่ง vault operator generate-root และ unseal key ในการสร้าง

    
      ## ข้อมูลเบื้องต้น 
      1. ตรวจสอบ token ปัจจบัน พบว่า ยังไม่มีการ login 
      d8k-a2m2 myvault  > vault token lookup
      Error looking up token: Error making API request.
    
      URL: GET https://127.0.0.1:8200/v1/auth/token/lookup-self
      Code: 403. Errors:
          
      * permission denied
    
      2. เตรียม unseal key
      Unseal Key 1: gVZfWqzSe4fq4XMJdhdLmVTCWcNIV8fxTqZakOBDZsnh
      Unseal Key 2: QGy6JxeSBkU36w7Ad9ciIGsh1MGQ3IrmcucqYGOk1iSt
      Unseal Key 3: iagcGhHLM7UGC7LGTGI3+mfToX9eTajhd7JtpuJfZM7y
      Unseal Key 4: 1jXBq2uygyhZ+fv2c6REIJTTShjHbVKlQFy3qxjacE95
      Unseal Key 5: Y1rLZE+aI3EnbD00rN/CnoBa6S3/no85wZYu5ZZDx2bJ
         
      d8k-a2m2 myvault  > vault operator generate-root -init
      A One-Time-Password has been generated for you and is shown in the OTP field.
      You will need this value to decode the resulting root token, so keep it safe.
      Nonce         0d0fb084-6997-af44-b06d-24007b87e302
      Started       true
      Progress      0/3
      Complete      false
      OTP           NOkrsCRgWbqbRFSZ6Whf31Y4dIN1
      OTP Length    28
    
      ## จากผลของการเรียกใช้งานคำสั่ง vault operator generate-root -init จะมีข้อมูลสำคัญที่จะใช้ในขั้นตอนสุดท้ายคืือ OTP ซึี่งในกรณีนี้มีค่าเป็น NOkrsCRgWbqbRFSZ6Whf31Y4dIN1
    
      ##  หลัง initialize เรียบร้อย ให้เรียกใช้คำสั่ง vault operator generate-root และจะมี prompt เพื่อ unseal key ซึ่งเราอาจจะเรียกคำสั่งนี้หลายครั้ง แต่เงื่อนไขของการ unseal ที่กำหนดไว้แต่แรก
    
      d8k-a2m2 myvault  > vault operator generate-root
      Operation nonce: 0d0fb084-6997-af44-b06d-24007b87e302
      Unseal Key (will be hidden):
      Nonce       0d0fb084-6997-af44-b06d-24007b87e302
      Started     true
      Progress    1/3
      Complete    false
    
      d8k-a2m2 myvault  > vault operator generate-root
      Operation nonce: 0d0fb084-6997-af44-b06d-24007b87e302
      Unseal Key (will be hidden):
      Nonce       0d0fb084-6997-af44-b06d-24007b87e302
      Started     true
      Progress    2/3
      Complete    false
    
      d8k-a2m2 myvault  > vault operator generate-root
      Operation nonce: 0d0fb084-6997-af44-b06d-24007b87e302
      Unseal Key (will be hidden):
      Nonce            0d0fb084-6997-af44-b06d-24007b87e302
      Started          true
      Progress         3/3
      Complete         true
      Encoded Token    JjkYXBENCitkKyEROCwCY3c1PzViQDBeIhF8Ag
    
      ## ในขั้นตอนนี้ หลังจากที่เรียกใช้คำสั่ง vault operator generate-root จบครบตามเงื่อนไขของ unseal ก็จะได้ข้อมูล Encoded Token เพิ่มในกรณีตัวอย่างนี้ ค่า Encoded Token จะมีค่าเป็น JjkYXBENCitkKyEROCwCY3c1PzViQDBeIhF8Ag
    
      ## เรียกคำสั่ง เพื่อถอดรหัส (decode) เพื่อให้ได้ Root Tokey ตัวใหม่ด้วยคำสั่ง vault operator generate-root -decode=<Encoded Token> -otp=<OTP>
    
      d8k-a2m2 myvault  > vault operator generate-root -decode=JjkYXBENCitkKyEROCwCY3c1PzViQDBeIhF8Ag -otp=NOkrsCRgWbqbRFSZ6Whf31Y4dIN1
      hvs.bNXL3IPsjjQ9AbWSQqijFX23
    
      d8k-a2m2 myvault  > vault login hvs.bNXL3IPsjjQ9AbWSQqijFX23
      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.
    
      Key                  Value
      ---                  -----
      token                hvs.bNXL3IPsjjQ9AbWSQqijFX23
      token_accessor       50j8f1dXpIimTNm6v2OxnfvF
      token_duration       ∞
      token_renewable      false
      token_policies       ["root"]
      identity_policies    []
      policies             ["root"]
    

จากปัญหาที่คาใจในตอน สร้างผู้ใช้สิทธิ์ admin ใน HashiCorp Vault ก็ได้คำตำตอบแล้วว่าไม่มี Auth Methods ใด ๆ ที่สามารถแนบ Root Policy ให้กับผู้ใช้ที่ login ได้แน่ ๆ

Reference:

  • https://developer.hashicorp.com/vault/docs/concepts/tokens#root-tokens

Made by มูลค่าความสุข

Share on

Tags

Human knowledge belongs to the world

a line from the movie "Antitrust"