iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0

如果你希望追蹤最新的草稿,請見鐵人賽2023

本 workshop 也接受網友的許願清單,如果有興趣的題目可於第一篇底下留言,筆者會盡力實現,但不做任何保證

整篇 Workshop 會使用的範例與原始碼,放在 Github Repository: vault-playground

Day 06:Github auth method

不需要使用 root token 的 auth method: github

Vault 支援用於人員使用者的身份驗證方法。GitHub 身份驗證,使用戶可以通過提供他們的 GitHub 憑證來驗證 Vault,並收到一個 Vault token。

簡單來說,github organization chechia-net,可以設定適當的權限給成員 chechiachang,讓 chechiachang 可以透過 github 取得有權限的 token。

注意

在練習中所描述的這種身份驗證方法,需要你擁有 GitHub、屬於 GitHub org 中的一個 team ,並生成了具有 read:org scope 的 GitHub personal access token。你可以於 github 創建一個 free plan 的 org,並設定一個 team,然後透過個人 Settings / Developer Settings 來產生一把具有 read:org 權限的 personal access token

啟用 github auth method

你可以使用下列指令,在 path=github/ 下啟用 GitHub 身份驗證方法。

export VAULT_TOKEN=hvs.qCqY9ZO3oNS6VrrKMHp89KYv
vault auth enable github

這個指令使用 root token 設定 auth method,也是整個 github auth methods 中,唯一需要用到 root token 設定的地方,而且只需要設定一次

output

Success! Enabled github auth method at: github/

vault server log 顯示 credential backend 已啟用

2023-09-16T21:40:10.444+0800 [INFO]  core: enabled credential backend: path=github/ type=github version=""

你可以下列指令,列出所有的 auth methods

vault auth list

output

Path       Type      Accessor                Description                Version
----       ----      --------                -----------                -------
github/    github    auth_github_9bc96e5f    n/a                        n/a
token/     token     auth_token_b7984c52     token based credentials    n/a

github 身份驗證方法已啟用,並位於路徑 auth/github/。

設定 github auth method

此身份驗證方法需要你在配置中設置 GitHub organization。GitHub organization中,維護了一個允許與 Vault 驗證的使用者列表。

設置 GitHub 身份驗證的組織。

vault write auth/github/config organization=chechia-net

output

Success! Data written to: auth/github/config

現在,chechia-net GitHub 組織中的所有使用者都可以進行身份驗證。

設定 github auth method,給不同 team 不同的 policy

GitHub 組織可以定義團隊(team)。每個團隊可能可以在組織維護的所有 repository 中執行不同的操作。這些團隊也可能需要訪問 Vault 內的特定密碼。

配置 GitHub sre 團隊的身份驗證,以獲得 default 和 application 兩個 policy的授權。

vault write auth/github/map/teams/sre value=default,application

output

Success! Data written to: auth/github/map/teams/sre

GitHub sre 團隊中 chechia-net 組織的成員,將使用 default 和 application policy 進行身份驗證和授權。

備註:application policy 尚未在 Vault 中定義。在該策略定義之前,Vault 仍然允許使用者進行身份驗證,但會產生警告。

你可以使用指令顯示 Vault 啟用的所有身份驗證方法

vault auth list

回傳顯示兩個 auth methods,github/ 與 token/

Path       Type      Accessor                Description                Version
----       ----      --------                -----------                -------
github/    github    auth_github_9bc96e5f    n/a                        n/a
token/     token     auth_token_b7984c52     token based credentials    n/a

使用 github auth method login

使用 help 指令來了解 github auth method 的說明

vault auth help github

output

Usage: vault login -method=github [CONFIG K=V...]

  The GitHub auth method allows users to authenticate using a GitHub
  personal access token. Users can generate a personal access token from the
  settings page on their GitHub account.

# GitHub 身份驗證方法允許使用者使用 GitHub personal access token進行身份驗證。使用者可以從其 GitHub Settings -> Developer Settings -> Personal access tokens (classic) 生成個人訪問令牌。

  Authenticate using a GitHub token:

      $ vault login -method=github token=abcd1234

Configuration:

  mount=<string>
      Path where the GitHub credential method is mounted. This is usually
      provided via the -path flag in the "vault login" command, but it can be
      specified here as well. If specified here, it takes precedence over the
      value for -path. The default value is "github".

# GitHub 憑證方法掛載的路徑。通常透過 "vault login" 指令的 -path flag 提供,但這裡也可以指定。如果在這裡指定,則優先於 -path 的值。預設的路徑值為 "github"。

  token=<string>
      GitHub personal access token to use for authentication. If not provided,
      Vault will prompt for the value.

# 用於身份驗證的 GitHub personal access token。如果未提供,Vault 將提示輸入此值。

輸出顯示了使用 GitHub 方法進行 login 的例子。該方法要求必須定義該方法,並由使用者提供 GitHub personal access token。

由於你將嘗試使用身份驗證方法進行登錄,請確保在此 shell session 中未設置 VAULT_TOKEN 環境變數,因為其值將優先於你從 Vault 獲取的任何 token。

取消設定該環境變數。

unset VAULT_TOKEN

嘗試使用 github auth methods 登入

vault login -method=github

output,使用者使用 github personal access token,取得有效的 vault token

  • token 格式不同
  • token 的效期為 768h,短效期 token 的曝險程度較低
  • 這個 token 的 policy 權限只有 default policy
  • metadata 是 github 回傳的,vault 中並沒有建立 username=chechiachang 的資料
    • org 是 chechia-net
    • username 是 chechiachang
GitHub Personal Access Token (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.

Key                    Value
---                    -----
token                  hvs.CAESIBMsgvXNDOE6n4ZLMWZ_3GH4oC2A0G3cVtCTwOtrq6igGh4KHGh2cy5OYzBRV3hmMU4xR3ZkWHhzODJuRHRncU0
token_accessor         lKVpMawotXg1fXcgRvpAOAwQ
token_duration         768h
token_renewable        true
token_policies         ["default"]
identity_policies      []
policies               ["default"]
token_meta_org         chechia-net
token_meta_username    chechiachang

當未提供 GitHub personal access token 給命令時,Vault CLI 會提示使用者輸入。

如果提供了有效的 GitHub personal access token,則使用者將成功登錄 vault,並且輸出會顯示一個 Vault token。使用者可以使用這個 Vault token,直到該 token 被撤銷或其有效期超過了 token_duration。

你可以使用 vault token lookup 來檢視當前的 token

vault token lookup

output,顯示使用中的 token,使用的 path 與 methods 是 github/,效期 ttl 在倒數中逐漸減少 767h54m27s

Key                 Value
---                 -----
accessor            lKVpMawotXg1fXcgRvpAOAwQ
creation_time       1694873434
creation_ttl        768h
display_name        github-chechiachang
entity_id           5d8af1ab-53a2-e1c5-61bf-bb0b6c7d190f
expire_time         2023-10-18T22:10:34.812089+08:00
explicit_max_ttl    0s
id                  hvs.CAESIBMsgvXNDOE6n4ZLMWZ_3GH4oC2A0G3cVtCTwOtrq6igGh4KHGh2cy5OYzBRV3hmMU4xR3ZkWHhzODJuRHRncU0
issue_time          2023-09-16T22:10:34.812099+08:00
meta                map[org:chechia-net username:chechiachang]
num_uses            0
orphan              true
path                auth/github/login
policies            [default]
renewable           true
ttl                 767h54m27s
type                service

記得我們建立 team 的 policy = default + application 嗎?你可以在 github 上把 user 加入到 team/sre

例如我們把 chechiachang 加入到 org/chechia-net 的 team/sre

當前登入 session 權限尚未更新,我們直接重新登入一次

vault login -method=github

output,可以看見登入後的 policy 權限增加成為 default + application

GitHub Personal Access Token (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.

Key                    Value
---                    -----
token                  hvs.CAESIIR3XBwj27kCOI76Qm01RmWigR8IraYW4daHOptol0VBGh4KHGh2cy44aEh4dE05UVdraG9hNmFWUURRRFBRcmE
token_accessor         6DbsDizOenhCuWMmUWspTZwp
token_duration         768h
token_renewable        true
token_policies         ["application" "default"]
identity_policies      []
policies               ["application" "default"]
token_meta_org         chechia-net
token_meta_username    chechiachang

以上是透過 github/ auth methods

  • 管理者設定 github/ method config
  • 使用者 chechiachang,使用 github/ method login
  • 使用的權限管理是依照 github org / team 來管理,vault 並沒有紀錄 team 與使用者資料

清理:移除 auth methods

使用 root token 再次進行登錄。

vault login

output

Token (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.

Key                  Value
---                  -----
token                hvs.J80wvFtkQqwg4ihuIm1mmjoh
token_accessor       DaI1V1rq9tKZX5EaO4AfMI26
token_duration       ∞
token_renewable      false
token_policies       ["root"]
identity_policies    []
policies             ["root"]

使用以下指令撤銷 github/ auth methods 產生的 token

vault token revoke -mode path auth/github

output

Success! Revoked token (if it existed)

vault server log,對於 auth/github 路徑的所有登錄生成的令牌都已被撤銷。

2023-09-16T22:25:06.793+0800 [INFO]  expiration: revoked lease: lease_id=auth/github/login/h71720c9bc6fed61d459da4b172dc518a6d55b1dd33c70103cf0b12eb42d7741a
2023-09-16T22:25:06.793+0800 [INFO]  expiration: revoked lease: lease_id=auth/github/login/hd2b110a8eda38814ac0e3ba7ccb926e75205c5065480c9c2675ae5f2860f9f97

所有身份驗證方法,除了 token 身份驗證方法,都可以被停用。

停用 github 身份驗證方法

vault auth disable github

output

Success! Disabled the auth method (if it existed) at: github/

vault server log

2023-09-16T22:27:42.040+0800 [INFO]  core: disabled credential backend: path=auth/github/

所有使用此身份驗證方法進行登錄生成的token都已被撤銷。

清理 github

如果有建立 org / team / github personal access token 的話,記得移除他

chatGPT

本段部分內容使用 chatGPT-3.5 翻譯
https://developer.hashicorp.com/vault/tutorials/getting-started/getting-started-authentication
https://developer.hashicorp.com/vault/docs/auth/github
內容,並由筆者人工校驗

base context

我希望你能充當一名繁體中文翻譯,拼寫修正者和改進者。我將用英文與程式語言與你對話,你將翻譯它,並以已糾正且改進的版本回答,以繁體中文表達。我希望你能用更美麗和優雅、高級的繁體中文詞語和句子替換我簡化的詞語和句子。保持意義不變。我只希望你回答糾正和改進,不要寫解釋。

不要使用敬語,翻譯結果中若出現"您",請用"你"取代"您"。

result correction

部分英文內容為專有名詞,產生的繁體中文翻譯結果中,這些名詞維持英文,不需要翻譯成英文:key,value,certificate,token,policy,policy rule,path,path-based,key rolling,audit,audit trail,plain text,key value,Consul,S3 bucket,Leasing,Renewal,binary,prefix,instance,metadata。

修正下列翻譯:將 "數據" 改為 "資料",將 "數據庫" 改為 "資料庫",將 "數據" 改為 "資料",將 "訪問" 改為 "存取",將 "源代碼" 改為 "原始碼",將 "信息" 改為 "資訊",將 "命令" 改為 "指令",將 "禁用" 改為 "停用",將 "默認" 改為 "預設"。

上一篇
Day 05:Authentication
下一篇
Day 07: Policy & Approle
系列文
從零開始的 30 天 Hashicorp Vault Workshop8
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言