AWS Secrets ManagerAWS Lambda 関数でシークレットを使う - AWS Secrets Manager

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

AWS Secrets ManagerAWS Lambda 関数でシークレットを使う

AWS パラメータとシークレット Lambda エクステンションを使用すると、SDK を使用せずに Lambda AWS Secrets Manager 関数のシークレットを取得してキャッシュできます。キャッシュされたシークレットの取得は、Secrets Manager からの取得よりも高速です。Secrets Manager API を呼び出すにはコストがかかるため、キャッシュを使用するとコストを削減できます。この拡張機能では、Secrets Manager のシークレットと Parameter Store のパラメータの両方を取得できます。Parameter Store については、「AWS Systems Manager ユーザーガイド」の「Parameter Store integration with Lambda extensions」(Parameter Store と Lambda 拡張機能の統合) を参照してください。

Lambda 拡張機能は、Lambda 関数の機能に追加するコンパニオンプロセスです。詳細については、「Lambda 開発者ガイド」の「Lambda 拡張機能」を参照してください。コンテナイメージでの拡張機能の使用については、「コンテナイメージ内で Lambda レイヤーと拡張機能を動作させる」を参照してください。Lambda は、Amazon CloudWatch Logs を使用して、拡張機能に関する実行情報を関数とともに記録します。デフォルトでは、エクステンションは最小限の情報をにログに記録します。 CloudWatch詳細をログに記録するには、環境変数 PARAMETERS_SECRETS_EXTENSION_LOG_LEVELdebug に設定します。

パラメータとシークレットのインメモリキャッシュを提供するために、拡張機能は、ローカル HTTP エンドポイント (localhost ポート 2773) を Lambda 環境に公開します。このポートを設定するには、環境変数 PARAMETERS_SECRETS_EXTENSION_HTTP_PORT を設定します。

Lambda は、関数が必要とする同時実行レベルに対応する個別のインスタンスをインスタンス化します。各インスタンスは分離され、設定データの独自のローカルキャッシュが保持されます。Lambda インスタンスと同時実行の詳細については、「Lambda 開発者ガイド」の「Lambda 関数の同時実行数の管理」を参照してください。

ARM の拡張機能を追加するには、Lambda 関数の arm64 アーキテクチャを使用する必要があります。詳細については、「Lambda 開発者ガイド」の「Lambda 命令セットアーキテクチャ」を参照してください。この拡張機能は、次のリージョンで ARM をサポートしています: アジアパシフィック (ムンバイ)、米国東部 (オハイオ)、欧州 (アイルランド)、欧州 (フランクフルト)、欧州 (チューリッヒ)、米国東部 (バージニア北部)、欧州 (ロンドン)、欧州 (スペイン)、アジアパシフィック (東京)、米国西部 (オレゴン)、アジアパシフィック (シンガポール)、アジアパシフィック (ハイデラバード)、およびアジアパシフィック (シドニー)。

AWS 拡張機能はクライアントを使用します。 AWS クライアントの設定については、『AWS SDK & ツールリファレンスガイド』の「設定リファレンス」を参照してください。Lambda 関数が VPC で実行される場合は、エクステンションが Secrets Manager を呼び出せるように VPC エンドポイントを作成する必要があります。詳細については、「AWS Secrets Manager VPC エンドポイントの使用」を参照してください。

必要な許可:

AWS パラメータとシークレット Lambda エクステンションを使用するには
  1. 次のいずれかを実行して、レイヤーを関数に追加します。

    • https://console.aws.amazon.com/lambda/ AWS Lambda でコンソールを開きます。

      1. 関数を選択し、[Layers] (レイヤー) を選択し、[Add a layer] (レイヤーの追加) を選択します。

      2. [Add layer] (レイヤーを追加) ページの [AWS layers] (レイヤー) で、[AWS Parameters and Secrets Lambda Extension] (パラメータとシークレット Lambda 拡張機能)、[Add] (追加) を順に選択します。

    • お住まいの地域の適切な ARN AWS CLI を指定して以下のコマンドを実行します。ARN のリストについては、「AWS Systems Manager ユーザーガイド」の「AWS Parameters and Secrets Lambda Extension の ARN」を参照してください。

      aws lambda update-function-configuration \ --function-name my-function \ --layers LayerARN
  2. シークレットにアクセスできるアクセス許可を Lambda 実行ロールに付与します。

  3. Lambda 環境変数を使用してキャッシュを設定します。

  4. 拡張キャッシュからシークレットを取得するには、まずリクエストヘッダーに X-AWS-Parameters-Secrets-Token を追加する必要があります。トークンを AWS_SESSION_TOKEN に設定します。これは実行中のすべての関数に対して Lambda によって提供されます。このヘッダーを使用すると、呼び出し元が Lambda 環境内にあることがわかります。

    次の Python の例では、ヘッダーを追加する方法を示しています。

    import os headers = {"X-Aws-Parameters-Secrets-Token": os.environ.get('AWS_SESSION_TOKEN')}
  5. Lambda 関数内のシークレットを取得するには、次の HTTP GET リクエストのいずれかを使用します。

    • secretId の場合、シークレットを取得するには、シークレット ARN または名前を使用します。

      GET: /secretsmanager/get?secretId=secretId
    • ステージングラベルで以前のシークレット値または特定のバージョンを取得するには、secretId の場合、シークレットの ARN または名前を使用し、versionStage の場合、ステージングラベルを使用します。

      GET: /secretsmanager/get?secretId=secretId&versionStage=AWSPREVIOUS
    • ID で特定のシークレットバージョンを取得するには、secretId の場合、シークレットの ARN または名前を使用し、versionId の場合、バージョン ID を使用します。

      GET: /secretsmanager/get?secretId=secretId&versionId=versionId
    例 シークレットを取得する (Python)

    次の Python の例では、json.loads を使用してシークレットを取得し、その結果を解析する方法を示しています。

    secrets_extension_endpoint = "http://localhost:" + \ secrets_extension_http_port + \ "/secretsmanager/get?secretId=" + \ <secret_name> r = requests.get(secrets_extension_endpoint, headers=headers) secret = json.loads(r.text)["SecretString"] # load the Secrets Manager response into a Python dictionary, access the secret

AWS パラメータとシークレット Lambda 拡張環境変数

次の環境変数で拡張機能を設定できます。

環境変数を使用する方法については、「Lambda 開発者ガイド」の「Using Lambda environment variables」(Lambda 環境変数の使用) を参照してください。

PARAMETERS_SECRETS_EXTENSION_CACHE_ENABLED

パラメータとシークレットをキャッシュするには true に設定します。キャッシュしない場合は false に設定します。デフォルトは true です。

PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE

キャッシュするシークレットとパラメータの最大数。0 ~ 1000 の値にする必要があります。値を 0 にすると、キャッシングは行われません。SSM_PARAMETER_STORE _TTLSECRETS_MANAGER_TTL の両方が 0 の場合、この変数は無視されます。デフォルトは 1000 です。

PARAMETERS_SECRETS_EXTENSION_HTTP_PORT

ローカル HTTP サーバーのポート。デフォルトは、2773 です。

PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL

拡張機能が提供するログ記録のレベル: debuginfowarnerror、または nonedebug に設定すると、キャッシュ設定が表示されます。デフォルトは info です。

PARAMETERS_SECRETS_EXTENSION_MAX_CONNECTIONS

拡張機能が Parameter Store または Secrets Manager へのリクエストに使用する HTTP クライアントの最大接続数。これはクライアントごとの設定です。デフォルトは 3 です。

SECRETS_MANAGER_TIMEOUT_MILLIS

Secrets Manager へのリクエストのタイムアウト (ミリ秒単位)。値を 0 にすると、タイムアウトは発生しません。デフォルトは 0 です。

SECRETS_MANAGER_TTL

キャッシュ内のシークレットの TTL (秒単位)。値を 0 にすると、キャッシングは行われません。最大値は 300 秒です。PARAMETERS_SECRETS_CACHE_SIZE が 0 の場合、この変数は無視されます。デフォルトは 300 秒です。

SSM_PARAMETER_STORE_TIMEOUT_MILLIS

Parameter Store へのリクエストのタイムアウト (ミリ秒単位)。値を 0 にすると、タイムアウトは発生しません。デフォルトは 0 です。

SSM_PARAMETER_STORE_TTL

キャッシュ内のパラメータの TTL (秒単位)。値を 0 にすると、キャッシングは行われません。最大値は 300 秒です。PARAMETERS_SECRETS_CACHE_SIZE が 0 の場合、この変数は無視されます。デフォルトは 300 秒です。