GitHub ジョブで AWS Secrets Manager シークレットを使用する - AWS Secrets Manager

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

GitHub ジョブで AWS Secrets Manager シークレットを使用する

GitHub ジョブでシークレットを使用するには、GitHub アクションを使用して AWS Secrets Manager からシークレットを取得し、マスクされた環境変数として GitHub ワークフローに追加します。GitHub アクションの詳細については、GitHub ドキュメントの「Understanding GitHub Actions」(GitHub アクションについて) を参照してください。

GitHub 環境にシークレットを追加すると、GitHub ジョブの他のすべてのステップでもそのシークレットが使用できるようになります。環境内のシークレットが悪用されるのを防ぐには、「Security hardening for GitHub Actions」(GitHub アクションのセキュリティ強化) のガイダンスに従ってください。

シークレット値の文字列全体を環境変数値として設定できます。また、文字列が JSON の場合は、JSON を解析して JSON キーと値のペアごとに環境変数を設定することもできます。シークレット値がバイナリの場合は文字列に変換されます。

シークレットから作成された環境変数を表示するには、デバッグログを有効にします。詳細については、GitHub Docs の「デバッグログの有効化」を参照してください。

シークレットから作成された環境変数を使用するには、GitHub Docs の「環境変数」を参照してください。

前提条件

このアクションを使用するには、まず AWS 認証情報を設定し、configure-aws-credentials ステップを使用して GitHub 環境に AWS リージョン を設定する必要があります。GitHub OIDC プロバイダを使用して直接ロールを引き受けるには、「GitHub アクションの AWS 認証情報アクションの設定」の指示に従ってください。これにより、有効期間の短い認証情報を使用でき、追加のアクセスキーを Secrets Manager の外部に保存する必要がなくなります。

アクションが引き受ける IAM ロールには、以下のアクセス許可が必要です。

  • 取得するシークレットに対する GetSecretValue

  • すべてのシークレットに対する ListSecrets

  • (オプション) シークレットが カスタマー管理キー で暗号化されている場合には、KMS key に対する Decrypt

詳細については、「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 という名前の環境変数を作成します。環境変数名には、大文字の英字、数字、およびアンダースコアを使用できます。

プレフィックスを使用するには、3 文字以上を入力し、その後にアスタリスクを付けます。例えば、dev* は名前が dev で始まるすべてのシークレットに一致します。取得できる一致シークレットの最大数は 100 です。変数名を設定し、プレフィックスが複数のシークレットと一致する場合、アクションは失敗します。

name-transformation

デフォルトでは、このステップはシークレット名から各環境変数名を作成し、大文字の英字、数字、アンダースコアのみが含まれるように変換し、数字で始まらないようにします。名前の文字には、lowercase で小文字を使用するか、none で大文字と小文字を変更しないようにステップを設定できます。デフォルト値は uppercase です。

parse-json-secrets

(オプション) デフォルトでは、環境変数値がシークレット値内の JSON 文字列全体に設定されます。parse-json-secretstrue に設定すると、JSON 内のキーと値のペアごとに環境変数が作成されます。

「name」や「Name」など JSON で使用されるキーが大文字と小文字を区別する場合、アクション名が重複して競合することに注意してください。この場合は、parse-json-secretsfalse に設定し、JSON シークレット値を別途解析します。

環境変数の命名

アクションによって作成された環境変数の名前は、その変数の元となるシークレットと同じになります。環境変数にはシークレットよりも厳しい命名要件があるため、そうした要件を満たすようにシークレット名が変換されます。例えば、小文字は大文字に変換されます。シークレットの JSON を解析する場合、環境変数名にはシークレット名と JSON キー名の両方が含まれます。(例えば MYSECRET_KEYNAME)。小文字を変換しないようにアクションを設定できます。

2 つの環境変数が同じ名前で終わると、アクションは失敗します。そのため、環境変数に使用する名前をエイリアスとして指定する必要があります。

名前が競合する可能性がある場合:

  • 例えば、「MySecret」という名前のシークレットと「mysecret」という名前のシークレットはどちらも「MYSECRET」という名前の環境変数になります。

  • 「Secret_keyname」という名前のシークレットと、「keyname」という名前のキーを持つ「Secret」という名前の JSON 解析されたシークレットは、どちらも「SECRET_KEYNAME」という名前の環境変数になります。

次の例に示すように、ENV_VAR_NAME という名前の変数を作成するエイリアスを指定することで、環境変数名を設定できます。

secret-ids: | ENV_VAR_NAME, secretId2
空のエイリアス
  • parse-json-secrets: true を設定して、空のエイリアスを入力し、次にカンマ、シークレット ID の順に入力すると、アクションは環境変数に解析された JSON キーと同じ名前を付けます。変数名にはシークレット名は含まれません。

    シークレットに有効な JSON が含まれていない場合、アクションは 1 つの環境変数を作成し、シークレット名と同じ名前を付けます。

  • 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