Coding Gun

การ Login เข้าใช้งาน Gitlab

User Management

เริ่มต้นจากการจัดการกับ User ก่อนโดยเราจะต้องสร้าง

  1. Identity เราต้องมี Username และ Password ในการระบุตัวตน
  2. Roles เป็นการระบุ Permission ของ User ที่จะเข้ามาใช้งาน Gitlab ซึ่งเราสามารถมี Permission ที่แตกต่างกันในแต่ละ Project ก็ได้
  3. Protocol วิธีการ Login เข้าใช้งาน Gitlab ซึ่งเราอาจใช้
    • SSH ในกรณีที่เราใช้ SSH Protocol เราจะใช้ SSH Key ในการยืนยันตัวตน
    • Https เราจะใช้ Username และ Password ในการยืนยันตัวตน
  4. Single Sign-On(SSO) Gitlab จะรองรับการ Authentication ด้วย Google Account(OAuth2) และ LDAP

Login ด้วย Https

วิธีการ Login แบบแรกคือเราจะใช้ Https Protocol ซึ่งจะมีข้อดีต่างๆ ดังนี้

  1. ง่ายต่อการใช้งานเพราะเป็นการใส่ username และ password เหมือนกับระบบอื่นๆ
  2. ใช้ได้กับทั้ง Browser และ Desktop application

วิธีการ Login ด้วย Https

ถ้าเราต้องการ Login เข้าสู่ Gitlab ด้วย Https Protocols เราต้องทำตามขั้นตอนต่างๆ ดังนี้

  1. เราต้องกำหนด credential helper ไว้ใน git config ระดับ system โดยที่เราสามารถเข้าไปค้นหาที่อยู่ของ git configuration ในระดับ global ได้ด้วยคำสั่ง

    $ git config --global --list --show-origin
    

    หลังจากนั้นเข้าไปเพิ่ม credential helper แบบนี้

    [credential]
        helper=manager
    

    หรือ run git command เพื่อแก้ไข config ตรงๆเลยก็ได้

    $ git config --global credential.helper wincred
    

    หลังจากนั้นตอนที่เรา clone project ลงมาครั้งแรก จะมี popup ขึ้นมาให้เราใส่ username และ password ก่อน

Login ด้วย SSH

วิธีการ Login ด้วย SSH จะใช้ Public และ Private Key ในการเข้าใช้งาน(เราต้อง Generate Key ขึ้นมา) ซึ่งข้อดีของการใช้งาน SSH คือ

  1. มีความปลอดภัยมากกว่า Https
  2. Private Key จะอยู่ในเครื่อง Client เท่านั้นไม่ต้องย้ายไปไหน

วิธีการ Login ด้วย SSH Key

ขั้นตอนของการ Generate SSH Key และการนำไปใช้งานมีดังนี้

  1. เข้าไปที่ Terminal บน MacOS หรือ Powershell บน Windows แล้ว run คำสั่ง ssh-keygen
    $ ssh-keygen
    
    หลังจากนั้นกด Enter ไปเรื่อยๆจะได้ผลลัพธ์ออกมาแบบนี้
    Enter file in which to save the key (/Users/<username>/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in id_rsa
    Your public key has been saved in id_rsa.pub
    The key fingerprint is:
    SHA256:XXXXXXXXXXXXXXXX
    The key's randomart image is:
    +---[RSA 3072]----+
    | .oo..=E..       |
    |. .o=.*.B .      |
    |o.o+.X.* B       |
    |..==o.+oo o      |
    | +oo+ . S        |
    |  ooo.           |
    |   +o.           |
    |    +..          |
    |    .=o          |
    +----[SHA256]-----+
    
  2. เข้าไป copy public key
    $ cat /Users/<username>/.ssh/id_rsa.pub
    
  3. เข้าไปที่ Gitlab Preference
    Gitlab Preference
  4. เลือกเมนู SSH Keys แล้วกดปุ่ม New SSH Key
    Gitlab new SSH Key
  5. ใส่ข้อมูลข้อง SSH Key
    Gitlab add new SSH Key
    รายละเอียดที่ต้องกรอกเข้ามามีดังนี้
    • Key เป็น Public Key ที่ได้มาในขั้นตอนที่ 2
    • Title เป็นชื่อของ Key ที่เราจะต้องตั้งให้รู้เป็น Public Key จากเครื่องไหน
    • Usage Type เป็นวิธีการนำไปใช้ซึ่งจะเลือกใช้สำหรับ Authentication, Sign Commit หรือใช้ทั้งคู่ก็ได้
    • Expiration Date เป็นวันหมดอายุของ Public Key เพื่อความปลอดภัยเราต้อง Rotate Key บ่อยๆ ยิ่ง Code ใน Repository มีความสำคัญมากเท่าไหร่ เรายิ่งต้อง Expire Public Key ให้เร็วเท่านั้น
  6. ทดสอบ Connecton ด้วยคำสั่ง
    $ ssh -T git@<Git Server Address>
    

Personal Access Token

ในกรณีที่เราต้องการเชื่อมกับ Service อื่นๆ เราจะใช้ Personal Access Token(PAT) แทนการใช้ Username และ Password ซึ่ง Personal Access Token ใน Gitlab สามารถใช้กับ username ได้ด้วย เราสามารถให้ User login เข้ามาด้วย Username และ Personal Access Token ได้

การ Authentication ระหว่าง Machine to Machine เราจะไม่ใช้ Username และ Password

วิธีการ Generate Personal Access Token(PAT)

  1. เข้าไปที่ User Settings > Access Tokens
    Gitlab new personal access token
  2. กรอกรายละเอียดของ Personal Access Token(PAT)
    1. Name จะเหมือนกับ username คือต้องสามารถ Identify
    2. Expire Date เราต้องกำหนดวันหมดอายุของ Token ด้วย
    3. Scopes Permission หรือความสามารถในการใช้งาน Gitlab ซึ่งจะประกอบไปด้วย
      • api สามารถ read/write ได้ทุก Groups และทุก Projects
      • read_api สามารถอ่านได้อย่างเดียว
      • read_user สามารถเข้าไปดู User profile ได้
      • create_runner สามารถเข้าไปสร้าง Runner ได้
      • read_repository สามารถเข้าไปอ่านไฟล์ใน Private project ได้โดยใช้ Http Protocol
      • write_repository สามารถเข้าไปแก้ไขไฟล์ใน Private Project ได้โดยใช้ Http Protocol
      • read_registry อ่านข้อมูลใน Container registry ได้
      • write_registry สามารถ push image ขึ้นไปบน Container Registry ได้

การจัดการสิทธิในระดับ Project

เราสามารถกำหนดสิทธิให้กับ User ในระดับได้ด้วยการ Invite Members เข้ามาใน Project โดยจะต้องเข้าไปที่ Project > Project Members

Gitlab Project Member

เราสามารถเปลี่ยน Max role ได้ดังนี้

  1. Guest เป็น role ที่จะมีเฉพาะ private และ internal projects เท่านั้น ส่วนใหญ่จะสามารถเข้าไปดูได้อย่างเดียว
  2. Reporter เป็น role ที่จะมีสิทธิมากกว่า Guest นิดหน่อย โดยเฉพาะการจัดการ Task
  3. Developer สามารถแตก branch และ push code ขึ้นมาใน branch ที่สร้างขึ้นมาได้
  4. Maintainer ผู้ที่จะนำ Code เข้า Main หรือ Master branch ได้
  5. Owner ผู้ที่สร้าง Repository นี้ขึ้นมา

อ่านต่อเพิ่มเติมได้ที่

Phanupong Permpimol
Follow me