本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 GitHub 工作中使用 AWS Secrets Manager 秘密
若要在 GitHub 工作中使用密碼,您可以使用 GitHub 動作擷取密碼, AWS Secrets Manager 並將其新增為工作 GitHub 流程中的遮罩環境變數
當您在 GitHub 環境中新增密碼時, GitHub 工作中的所有其他步驟都可以使用該密碼。請遵循動 GitHub 作的安全性強化中的指引,以協助防止您環境中的密碼遭到濫用
您可以將秘密值的整個字串設定為環境變數值,或者如果字串為 JSON,您可以剖析 JSON,為每個 JSON 索引鍵值組設定個別環境變數。如果秘密值是二進位,此動作會將其轉換為字串。
若要檢視以您秘密建立的環境變數,請開啟偵錯記錄。如需詳細資訊,請參閱在GitHub 文件中啟用偵錯記錄
若要使用密碼建立的環境變數,請參閱GitHub 文件中的環境變數
必要條件
若要使用此動作,您首先需要設定 AWS 認證,並使用configure-aws-credentials
步驟 AWS 區域 在 GitHub 環境中設定。遵循設定 AWS
認證動 GitHub 作中的指示,以便直接使用 GitHub OIDC 提
此動作擔任的 IAM 角色必須擁有下列許可:
對您要擷取的秘密有
GetSecretValue
。對所有秘密有
ListSecrets
。(選擇性)
Decrypt
KMS key 如果密碼使用 客戶受管金鑰.
如需詳細資訊,請參閱 的身分驗證和存取控制 AWS Secrets Manager。
用量
若要使用此動作,請新增步驟至使用下列語法的工作流程。
- name: Step name
uses: aws-actions/aws-secretsmanager-get-secrets@v2
with:
secret-ids: |
secretId1
ENV_VAR_NAME
, secretId2
name-transformation: (Optional) uppercase|lowercase|none
parse-json-secrets: (Optional) true|false
參數
secret-ids
-
秘密 ARN、名稱和名稱字首。
若要設定環境變數名稱,請在秘密 ID 前輸入名稱,然後加上英文逗號。例如,
ENV_VAR_1, secretId
會以秘密secretId
建立名為 ENV_VAR_1 的環境變數。環境變數名稱可包含大寫字母、數字和底線。若要使用字首,請輸入至少三個字元,然後加上星號。例如,
dev*
會符合名稱以 dev 開頭的所有秘密。可擷取的相符秘密數上限為 100。如果您設定變數名稱,且字首與多個秘密相符,則動作會失敗。 name-transformation
-
此步驟預設會以秘密名稱建立每個環境變數名稱,環境變數名稱已轉換為只包含大寫字母、數字和底線,因此不會以數字開頭。對於名稱中的字母,您可以將步驟配置為使用小寫字母搭配
lowercase
或不更改字母的大小寫none
。預設值為uppercase
。 parse-json-secrets
-
(選用) 此動作預設會將環境變數值設定為秘密值的整個 JSON 字串。設定
parse-json-secrets
為true
可為 JSON 中的每個鍵值對建立環境變數。請注意,如果 JSON 使用區分大小寫的索引鍵 (例如 "name" 和 "Name"),動作會有重複名稱衝突。在此情況下,請將
parse-json-secrets
設定為false
,並分別剖析 JSON 秘密值。
環境變數命名
動作所建立的環境變數的命名方式與其來源的密碼相同。環境變數的命名需求比機密更嚴格,因此動作會轉換密碼名稱以符合這些需求。例如,此動作會將小寫字母轉換為大寫字母。例如,如果剖析機密的 JSON,則環境變數名稱會同時包含秘密名稱和 JSON 金鑰名稱MYSECRET_KEYNAME
。您可以將動作設定為不轉換小寫字母。
如果兩個環境變數以相同的名稱結束,則動作會失敗。在這種情況下,您必須將要用於環境變數的名稱指定為別名。
名稱可能發生衝突的例子:
名為 "MySecret" 的密碼和名為「mysecret」的機密都會成為名為「MYSECRET」的環境變數。
一個名為「Secret _KEYNAME」的密鑰和一個名為「秘密」的 JSON 解析密鑰,並帶有名為「密鑰名」的密鑰將都成為名為「SECRET_KEYNAME」的環境變量。
您可以指定別名來設定環境變數名稱,如下列範例所示,該別名會建立名為的變數ENV_VAR_NAME
。
secret-ids: | ENV_VAR_NAME, secretId2
空白別名
-
如果您設定
parse-json-secrets: true
並輸入空白別名,後面接著逗號,然後輸入秘密 ID,動作會將環境變數命名為與剖析的 JSON 金鑰相同。變數名稱不包含密碼名稱。如果密碼不包含有效的 JSON,則動作會建立一個環境變數,並將其命名為與密碼名稱相同。
-
如果您設定
parse-json-secrets: false
並輸入空白別名,後面接著逗號和秘密 ID,則動作會將環境變數命名為如同您未指定別名一樣。
下列範例顯示空白別名。
,secret2
範例
範例 1 依名稱和 ARN 取得秘密
以下範例會為依名稱和 ARN 識別的秘密,建立環境變數。
- name: Get secrets by name and by ARN uses: aws-actions/aws-secretsmanager-get-secrets@v2 with: secret-ids: | exampleSecretName arn:aws:secretsmanager:us-east-2:123456789012:secret:test1-a1b2c3 0/test/secret /prod/example/secret SECRET_ALIAS_1,test/secret SECRET_ALIAS_2,arn:aws:secretsmanager:us-east-2:123456789012:secret:test2-a1b2c3 ,secret2
建立的環境變數:
EXAMPLESECRETNAME: secretValue1
TEST1: secretValue2
_0_TEST_SECRET: secretValue3
_PROD_EXAMPLE_SECRET: secretValue4
SECRET_ALIAS_1: secretValue5
SECRET_ALIAS_2: secretValue6
SECRET2: secretValue7
範例 2 取得以字首開頭的所有秘密
以下範例會為名稱以 beta
開頭的所有秘密,建立環境變數。
- name: Get Secret Names by Prefix uses: 2 with: secret-ids: | beta* # Retrieves all secrets that start with 'beta'
建立的環境變數:
BETASECRETNAME: secretValue1
BETATEST: secretValue2
BETA_NEWSECRET: secretValue3
範例 3 剖析秘密中的 JSON
以下範例會剖析秘密中的 JSON,藉此建立環境變數。
- name: Get Secrets by Name and by ARN uses: aws-actions/aws-secretsmanager-get-secrets@v2 with: secret-ids: | test/secret ,secret2 parse-json-secrets: true
秘密 test/secret
具有以下秘密值。
{
"api_user": "user",
"api_key": "key",
"config": {
"active": "true"
}
}
秘密 secret2
具有以下秘密值。
{
"myusername": "alejandro_rosalez",
"mypassword": "EXAMPLE_PASSWORD"
}
建立的環境變數:
TEST_SECRET_API_USER: "user"
TEST_SECRET_API_KEY: "key"
TEST_SECRET_CONFIG_ACTIVE: "true"
MYUSERNAME: "alejandro_rosalez"
MYPASSWORD: "EXAMPLE_PASSWORD"
範例 4 使用小寫字母作為環境變量名稱
下列範例會建立具有小寫名稱的環境變數。
- name: Get secrets uses: aws-actions/aws-secretsmanager-get-secrets@v2 with: secret-ids: exampleSecretName name-transformation: lowercase
建立的環境變數:
examplesecretname: secretValue