在 GitHub 作业中使用 Amazon Secrets Manager 密钥
若要在 GitHub 作业中使用密钥,您可以使用 GitHub 操作从 Amazon Secrets Manager 中检索密钥,并将密钥添加为 GitHub 工作流中的屏蔽环境变量
您将密钥添加到 GitHub 环境中时,该密钥可用于 GitHub 作业中的所有其他步骤。遵循 Security hardening for GitHub Actions
环境变量的命名要求比密钥的命名要求更严格,因此此操作会转换密钥名称,以满足这些要求。例如,该操作将把小写字母转换为大写字母。由于名称的转换,两个环境变量最终可能具有相同的名称。例如,名为“MySecret”的密钥和名为“mysecret”的密钥都将成为名为“MYSECRET”的环境变量。在这种情况下,操作将失败,因为环境变量的名称必须具有唯一性。相反,您必须指定要用于环境变量的名称。
您可以将密钥值中的整个字符串设置为环境变量值,或者如果字符串为 JSON,则可以解析 JSON,以为每个 JSON 键值对设置单独的环境变量。如果密钥值是二进制,则操作会将密钥值转换为字符串。
若要查看从密钥创建的环境变量,请启用调试日志记录。有关更多信息,请参阅 GitHub 文档中的 Enabling debug logging
先决条件
若要使用此操作,您首先需要配置 Amazon 凭证,然后使用 configure-aws-credentials
步骤在 GitHub 环境中设置 Amazon Web Services 区域。按照为 GitHub 操作配置 Amazon 凭证操作
操作承担的 IAM 角色必须具有下列权限:
您要检索的密钥的
GetSecretValue
权限。所有密钥的
ListSecrets
权限。(可选)如果密钥使用 客户托管式密钥 加密,则
Decrypt
在 KMS key 上。
有关更多信息,请参阅Amazon Secrets Manager 的身份验证和访问控制。
用量
若要使用该操作,请在工作流程中添加一个使用以下语法的步骤。
- name: Step name
uses: aws-actions/aws-secretsmanager-get-secrets@v1
with:
secret-ids:
secretId1
ENV_VAR
, secretId2
parse-json-secrets: (Optional) true|false
参数
secret-ids
-
密钥 ARN、名称和名称前缀。
默认情况下,该步骤从密钥名称创建每个环境变量名称,并转换为仅包含大写字母、数字和下划线,防止名称以数字开头。若要设置环境变量名称,请在密钥 ID 前输入该名称,然后输入逗号。例如,
ENV_VAR_1, secretId
从密钥secretId
中创建名为 ENV_VAR_1 的环境变量。环境变量的名称可以包含小写字母、数字和下划线。若要使用前缀,请输入至少三个字符,然后输入星号。例如,
dev*
匹配名称以 dev 开头的所有密钥。最多可以检索 100 个匹配密钥。如果您设置了变量名称,并且前缀与多个密钥匹配,则操作将失败。 parse-json-secrets
-
(可选)默认情况下,该操作将环境变量值设置为密钥值中的整个 JSON 字符串。将
parse-json-secrets
设置为true
,以为 JSON 中的每个键/值对创建环境变量。请注意,如果 JSON 使用区分大小写的密钥(例如“name”和“Name”),则该操作将出现重复的名称冲突。在这种情况下,请将
parse-json-secrets
设置为false
并单独解析 JSON 密钥值。
示例
例 1 按名称和 ARN 获取密钥
下列示例为按名称和 ARN 标识的密钥创建环境变量。
- name: Get secrets by name and by ARN uses: aws-actions/aws-secretsmanager-get-secrets@v1 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
已创建的环境变量:
EXAMPLESECRETNAME: secretValue1
TEST1: secretValue2
_0_TEST_SECRET: secretValue3
_PROD_EXAMPLE_SECRET: secretValue4
SECRET_ALIAS_1: secretValue5
SECRET_ALIAS_2: secretValue6
例 2 获取所有以前缀开头的密钥
下列示例为名称以 beta
开头的所有密钥创建环境变量。
- name: Get Secret Names by Prefix uses: aws-actions/aws-secretsmanager-get-secrets@v1 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@v1 with: secret-ids: | test/secret parse-json-secrets: true
密钥 test/secret
具有下列密钥值。
{
"api_user": "user",
"api_key": "key",
"config": {
"active": "true"
}
}
已创建的环境变量:
TEST_SECRET_API_USER: "user"
TEST_SECRET_API_KEY: "key"
TEST_SECRET_CONFIG_ACTIVE: "true"