LoginSignup
0
2

More than 1 year has passed since last update.

AWS Secrets Manager APIキーをlambda関数(Node.js18)で呼び出す

Last updated at Posted at 2023-05-15

概要

  • Secrets Managerに登録した値をlambda関数(ランタイムはNode.js18)で呼び出す方法を簡単にまとめる。

前提

  • 下記か下記に準ずる方法でSecrets Managerに値を登録してあること。

方法

  1. ランタイムがNode.js18のlambda関数を作成する。

  2. 関数の概要の「Layers」をクリックする。

    getSeacretManagerApiKey_-_Lambda.png

  3. 「レイヤーの追加」をクリックする。

    getSeacretManagerApiKey_-_Lambda.png

  4. 「レイヤーソース」で「AWSレイヤー」を選択し、プルダウンで「AWS-Parameters-and-Secrets-Lambda-Extension」を選択し、バージョン4を選択し、「追加」をクリックする。

    レイヤーを追加_-_Lambda.png

  5. 関数の「設定」を開き「アクセス権限」の実行ロールの名をクリックする。

    getSeacretManagerApiKey_-_Lambda.png

  6. 「許可を追加」をクリックし、「ポリシーをアタッチ」をクリックする。

    IAM_Management_Console.png

  7. SecretsManagerReadWriteと入力しポリシーをフィルターする。

  8. ヒットしたSecretsManagerReadWriteを選択し「許可を追加」をクリックする。

    IAM_Management_Console.png

  9. これでlambda関数のロールにシークレットマネージャーの値を読み書きするポリシーを付与できた。(読み込むだけなら自分でインラインポリシーをjsonで追加してロールに付与する。)

    IAM_Management_Console.png

  10. 下記の内容をlambda関数に記載し、保存 → Deployを実行する。Hello-Wold系のlambdaテストを用意し実行する。(下記のコードは「AWS Secrets Manager」 → 「シークレット」 → 「シークレットの名前のAPI-KEY」 → サンプルコードの「JavaScript」の部分を大いに参考にして記載)

    index.mjs
    // Use this code snippet in your app.
    // If you need more information about configurations or implementing the sample code, visit the AWS docs:
    // https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/getting-started.html
    
    import {
      SecretsManagerClient,
      GetSecretValueCommand,
    } from "@aws-sdk/client-secrets-manager";
    
    const secret_name = "API-KEY";
    
    const client = new SecretsManagerClient({
      region: "ap-northeast-1",
    });
    
    let response;
    
    try {
      response = await client.send(
        new GetSecretValueCommand({
          SecretId: secret_name,
          VersionStage: "AWSCURRENT", // VersionStage defaults to AWSCURRENT if unspecified
        })
      );
    } catch (error) {
      // For a list of exceptions thrown, see
      // https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html
      throw error;
    }
    
    const secret = response.SecretString;
    console.log(secret);
    
    // Your code goes here
    
    export const handler = async(event) => {
        // TODO implement
        const response = {
            statusCode: 200,
            body: JSON.stringify('Hello from Lambda!'),
        };
        return response;
    };
    
  11. lambdaのテストを実行すると定数secretの中に下記の値が入っている事が分かる。これでlambdaでシークレットの値を取得する事ができた。

    {
        "API-KEY":"hogefuga"
    }
    

参考文献

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2