本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 GitHub 作业中使用 AWS Secrets Manager 密钥
若要在 GitHub 作业中使用密钥,您可以使用 GitHub 操作从 AWS Secrets Manager 中检索密钥,并将密钥添加为 GitHub 工作流中的屏蔽环境变量
您将密钥添加到 GitHub 环境中时,该密钥可用于 GitHub 作业中的所有其他步骤。遵循 Security hardening for GitHub Actions
您可以将密钥值中的整个字符串设置为环境变量值,或者如果字符串为 JSON,则可以解析 JSON,以为每个 JSON 键值对设置单独的环境变量。如果密钥值是二进制,则操作会将密钥值转换为字符串。
若要查看从密钥创建的环境变量,请启用调试日志记录。有关更多信息,请参阅 GitHub 文档中的 Enabling debug logging
要使用根据您的密钥创建的环境变量,请参阅《GitHub 文档》中的环境变量
先决条件
若要使用此操作,您首先需要配置 AWS 凭证,然后使用 configure-aws-credentials
步骤在 GitHub 环境中设置 AWS 区域。按照为 GitHub 操作配置 AWS 凭证操作
操作承担的 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”的密钥以及名为“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