在 GitHub 工作中使用 Amazon Secrets Manager 秘密 - Amazon Secrets Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 GitHub 工作中使用 Amazon Secrets Manager 秘密

要在 GitHub 作业中使用密钥,您可以使用 GitHub 操作从 Amazon Secrets Manager 中检索密钥并将其作为屏蔽的环境变量添加到 GitHub 工作流程中。有关 GitHub 操作的更多信息,请参阅了解GitHub 文档中的 GitHub 操作

当你向 GitHub 环境中添加密钥时,该密钥可用于 GitHub 工作中的所有其他步骤。按照操作安全强化中的指导进行 GitHub 操作,以帮助防止环境中的密钥被滥用。

您可以将密钥值中的整个字符串设置为环境变量值,或者如果字符串为 JSON,则可以解析 JSON,以为每个 JSON 键值对设置单独的环境变量。如果密钥值是二进制,则操作会将密钥值转换为字符串。

若要查看从密钥创建的环境变量,请启用调试日志记录。有关更多信息,请参阅GitHub 文档中的启用调试日志记录

要使用根据您的密钥创建的环境变量,请参阅GitHub 文档中的环境变量

先决条件

要使用此操作,您首先需要配置 Amazon 凭证,然后使用configure-aws-credentials步骤 Amazon Web Services 区域 在您的 GitHub 环境中进行设置。按照配置 Amazon 凭证操作中的说明进行 GitHub 操作,以便使用 GitHub OIDC 提供程序直接担任角色。这让您能够使用短期凭证,避免在 Secrets Manager 之外存储额外的访问密钥。

操作承担的 IAM 角色必须具有下列权限:

  • 您要检索的密钥的 GetSecretValue 权限。

  • 所有密钥的 ListSecrets 权限。

  • (可选)Decrypt上 KMS key 是否使用加密密钥 客户托管式密钥。

有关更多信息,请参阅 Amazon Secrets Manager 的身份验证和访问控制

使用量

若要使用该操作,请在工作流程中添加一个使用以下语法的步骤。

- name: Step name uses: aws-actions/aws-secretsmanager-get-secrets@v2 with: secret-ids: | secretId1 ENV_VAR_NAME, 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 密钥值。

环境变量命名

操作创建的环境变量的命名与它们来自的密钥相同。环境变量的命名要求比机密更严格,因此该操作会转换机密名称以满足这些要求。例如,该操作将把小写字母转换为大写字母。例如MYSECRET_KEYNAME,如果您解析密钥的 JSON,则环境变量名称将同时包含密钥名称和 JSON 密钥名称。

如果两个环境变量的名称相同,则操作将失败。在这种情况下,必须将要用于环境变量的名称指定为别名

名称何时可能发生冲突的示例:

  • 名为 “” 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"