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

在 GitHub 作业中使用 Amazon Secrets Manager 密钥

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

您将密钥添加到 GitHub 环境中时,该密钥可用于 GitHub 作业中的所有其他步骤。遵循 Security hardening for GitHub Actions(GitHub Actions 安全强化)中的指南,有助于防止滥用环境中的密钥。

环境变量的命名要求比密钥的命名要求更严格,因此此操作会转换密钥名称,以满足这些要求。例如,该操作将把小写字母转换为大写字母。由于名称的转换,两个环境变量最终可能具有相同的名称。例如,名为“MySecret”的密钥和名为“mysecret”的密钥都将成为名为“MYSECRET”的环境变量。在这种情况下,操作将失败,因为环境变量的名称必须具有唯一性。相反,您必须指定要用于环境变量的名称。

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

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

先决条件

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

操作承担的 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"