Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Lambda関数からExtensionsAPIを通してParameterStoreのSecureStringを取得してみた

 Lambda関数からExtensionsAPIを通してParameterStoreのSecureStringを取得してみた

この資料は以下のアナウンスに対する技術調査を行ってまとめたものです。
AnnouncingAnnouncing AWS Parameters and Secrets Lambda Extension (Posted On: Oct 18, 2022)

2022/10/26 のJAWS-UG 名古屋で実施したLTの資料です。

Kentaro Takaki

October 29, 2022
Tweet

More Decks by Kentaro Takaki

Other Decks in Technology

Transcript

  1. 背景と目的 • この資料は、以下のアナウンスを試してみることが目的です。 Announcing AWS Parameters and Secrets Lambda Extension

    (Posted On: Oct 18, 2022) (https://aws.amazon.com/jp/about-aws/whats-new/2022/10/aws-parameters-secrets-lambda-extension/) • 面白そうな機能で新しいアナウンスなので実施報告に価値があると思いきや… 1. AWS Parameters and Secrets Lambda Extension つかってみた(10/19) https://qiita.com/hayao_k/items/a0b547a901a69e8118f7 2. [アップデート] Lambdaから直接Parameter Store/Secrets Managerから値を取得できるようになりました!(10/20) https://dev.classmethod.jp/articles/lambda-get-paramater/ 3. AWS Parameters and Secrets Lambda Extensionのパフォーマンスへの影響を確認してみた(10/21) https://dev.classmethod.jp/articles/aws-parameters-and-secrets-lambda-extension-performance/ # AWS界隈のアウトプットは早すぎて舌を巻きますね • N番煎じネタですがご容赦ください… 3
  2. Lambdaからのパラメータ取得方法を考えてみる • Lambda関数コードでパラメータを扱う方法は何通りかある。 方法 リソース 暗号化 結合具合 コードに埋め込む Lambdaのみでよい できない

    コードと密に結合 環境変数 Lambdaのみでよい AWS KMS key or カスタマー管理のキーで 暗号化可能 コードとは切り離されて いるが、Lambda関数に紐 づく AWS Systems Manager Parameter Store or AWS Secrets Manager Lambda以外に 別途リソースが必要 AWS KMS key or カスタマー管理のキーで 暗号化可能 コードからもLambdaから も独立して扱える • 表内の赤字がLambda関数からパラメータを外だしするメリット。 • ここではパラメータストアに着目して話を進める 5
  3. パラメータストアから情報を取得する(従来) • Lambda関数に権限設定し、SDKを利用するとパラメータを取得可能 AWS Systems Manager Parameter Store AWS Lambda

    SDK Lambda function Role AWS Identity and Access Management (IAM) AWS Key Management Service (AWS KMS) 取得 暗号化 認可 "Effect": "Allow", "Action": [ "kms:Decrypt", "ssm:GetParameter" ] import boto3 ssm = boto3.client('ssm', region) response = ssm.get_parameter( Name=key, WithDecryption=True, ) 複合化 6
  4. パラメータストアから情報を取得する(従来) • 暗号化したパラメータ取得には1万回取得毎に約0.08USD必要 AWS Systems Manager Parameter Store AWS Lambda

    SDK Lambda function Role AWS Identity and Access Management (IAM) AWS Key Management Service (AWS KMS) 取得 暗号化 認可 "Effect": "Allow", "Action": [ "kms:Decrypt", "ssm:GetParameter" ] import boto3 ssm = boto3.client('ssm', region) response = ssm.get_parameter( Name=key, WithDecryption=True, ) 複合化 1 万回ごとに 0.05 USD 1万回ごとに0.03USD 7
  5. パラメータストアから情報を取得する(従来) • パラメータをLambdaでキャッシュできれば料金低下が可能となる AWS Systems Manager Parameter Store AWS Lambda

    SDK Lambda function Role AWS Identity and Access Management (IAM) AWS Key Management Service (AWS KMS) 取得 暗号化 認可 "Effect": "Allow", "Action": [ "kms:Decrypt", "ssm:GetParameter" ] import boto3 ssm = boto3.client('ssm', region) response = ssm.get_parameter( Name=key, WithDecryption=True, ) 複合化 1 万回ごとに 0.05 USD 1万回ごとに0.03USD 8
  6. AWS Parameters and Secrets Lambda Extension • Lambda Extension の1種。

    • AWS Parameters and Secrets Lambda Extension を利用するとLambda 側でパラメータストアから取得した値をキャッシュしてくれる。 • キャッシュでAPIコール数や、パラメータ再取得時間の削減が期待 できる。 • そもそもLambda Extensionとはなんでしょうか…? 9
  7. Lambda Extension • Lambdaの実行環境で独立したプロセス(やスレッド)で動作して Lambda関数を拡張する機構。 • Parameters and Secrets Lambda

    Extensionにおいては、 Lambda関数からExtension間はHTTPによりリクエストします。 Ref) https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtimes-extensions-api.html AWS Systems Manager Parameter Store 取得/ キャッシュ HTTP 10
  8. 実際に実装してみた(Lambda関数) • Lambda関数のコード(Python)は以下 import json import os import requests end_point

    = 'http://localhost:2773' path = '/systemsmanager/parameters/get/?name=/encrypt/key&withDecryption=true' def lambda_handler(event, context): url = '{}{}'.format(end_point,path) headers = { 'X-Aws-Parameters-Secrets-Token': os.environ['AWS_SESSION_TOKEN'] } r = requests.get(url,headers=headers) ret_json = json.loads(r.text) print("My Parameter : {}".format(ret_json["Parameter"]["Value"])) 12
  9. 実行結果 Function Logs [AWS Parameters and Secrets Lambda Extension] 2022/10/25

    16:03:32 PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL is not present. Log level set to info. [AWS Parameters and Secrets Lambda Extension] 2022/10/25 16:03:32 INFO Systems Manager Parameter Store and Secrets Manager Lambda Extension 1.0.94 [AWS Parameters and Secrets Lambda Extension] 2022/10/25 16:03:32 INFO Serving on port 2773 EXTENSION Name: AWSParametersAndSecretsLambdaExtension State: Ready Events: [INVOKE,SHUTDOWN] START RequestId: cd17720e-ddd7-450c-9fae-b99d9148c30d Version: $LATEST [AWS Parameters and Secrets Lambda Extension] 2022/10/25 16:03:32 INFO ready to serve traffic My Parameter : This is encrypted value for Jaws-UG. END RequestId: cd17720e-ddd7-450c-9fae-b99d9148c30d REPORT RequestId: cd17720e-ddd7-450c-9fae-b99d9148c30d Duration: 587.36 ms Billed Duration: 588 ms Memory Size: 128 MB Max Memory Used: 65 MB Init Duration: 271.40 ms • 無事Lambda Extensionから値を取得することができました。 15
  10. まとめ • AWS Parameters and Secrets Lambda Extensionの説明を行いました。 • AWS

    Parameters and Secrets Lambda Extensionを利用してLambda関 数からParameter Store のSecureStringを取得することができました。 気になること • HTTPリクエストやキャッシュ有無の確認などのオーバーヘッドでパ フォーマンスでないのでは? • そもそもLambda関数のメモリ内でキャッシュした方がいいのでは? ⇒上記2つにはクラメソさんがブログをUPしてくれています。 気になる方は参考にしてみてください。 # AWS Parameters and Secrets Lambda Extensionのパフォーマンスへの影響を確認してみた 16