翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS Lambda 関数で AWS Secrets Manager シークレットを使用する
AWS Parameters and Secrets Lambda Extension を使用すると、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 レイヤーと拡張機能を動作させるPARAMETERS_SECRETS_EXTENSION_LOG_LEVEL
を debug
に設定します。
パラメータとシークレットのインメモリキャッシュを提供するために、拡張機能は、ローカル HTTP エンドポイント (localhost ポート 2773) を Lambda 環境に公開します。このポートを設定するには、環境変数 PARAMETERS_SECRETS_EXTENSION_HTTP_PORT
を設定します。
Lambda は、関数が必要とする同時実行レベルに対応する個別のインスタンスをインスタンス化します。各インスタンスは分離され、設定データの独自のローカルキャッシュが保持されます。Lambda インスタンスと同時実行の詳細については、「Lambda 開発者ガイド」の「Lambda 関数の同時実行数の管理」を参照してください。
ARM の拡張機能を追加するには、Lambda 関数の arm64
アーキテクチャを使用する必要があります。詳細については、「Lambda 開発者ガイド」の「Lambda 命令セットアーキテクチャ」を参照してください。この拡張機能は、次のリージョンで ARM をサポートしています: アジアパシフィック (ムンバイ)、米国東部 (オハイオ)、欧州 (アイルランド)、欧州 (フランクフルト)、欧州 (チューリッヒ)、米国東部 (バージニア北部)、欧州 (ロンドン)、欧州 (スペイン)、アジアパシフィック (東京)、米国西部 (オレゴン)、アジアパシフィック (シンガポール)、アジアパシフィック (ハイデラバード)、およびアジアパシフィック (シドニー)。
拡張機能は AWS クライアントを使用します。AWS クライアントの設定の詳細については、「AWS SDK and Tools Reference Guide」の「Settings reference」を参照してください。Lambda 関数が VPC で実行されている場合は、拡張機能が Secrets Manager を呼び出すことができるように VPC エンドポイントを作成する必要があります。詳細については、「AWS Secrets Manager VPC エンドポイントの使用」を参照してください。
必要な許可:
Lambda 実行ロールには、シークレットに対する
secretsmanager:GetSecretValue
アクセス許可が必要です。シークレットが AWS マネージドキー
aws/secretsmanager
ではなくカスタマー管理キーで暗号化されている場合、実行ロールには KMS キーに対するkms:Decrypt
アクセス許可も必要です。
AWS Parameters and Secrets Lambda Extension を使用するには
-
[AWS Parameters and Secrets Lambda Extension] という名前の [AWS レイヤー] を関数に追加します。手順については、「Lambda デベロッパーガイド」の「関数へのレイヤーの追加」を参照してください。AWS CLI を使用してレイヤーを追加するには、拡張機能 ARN が必要です。ARN のリストについては、「AWS Systems Manager ユーザーガイド」の「AWS Parameters and Secrets Lambda Extension の ARN」を参照してください。
-
シークレットにアクセスできるアクセス許可を Lambda 実行ロールに付与します。
-
シークレットの
secretsmanager:GetSecretValue
アクセス許可。「例: 個別のシークレット値を取得するためのアクセス許可」を参照してください。 -
(オプション) シークレットが AWS マネージドキー
aws/secretsmanager
ではなくカスタマー管理キーで暗号化されている場合、実行ロールには KMS キーに対するkms:Decrypt
アクセス許可も必要です。 -
Lambda ロールで属性ベースのアクセス制御 (ABAC) を使用すると、アカウントのシークレットへのアクセスをきめ細かく制御できます。詳細については、「属性ベースのアクセス制御 (ABAC) を使用してシークレットへのアクセスを制御する 」を参照してください。
-
-
Lambda 環境変数を使用してキャッシュを設定します。
-
拡張キャッシュからシークレットを取得するには、まずリクエストヘッダーに
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')}
-
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 Parameters and Secrets Lambda Extension の環境変数
次の環境変数で拡張機能を設定できます。
環境変数を使用する方法については、「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_TTL
とSECRETS_MANAGER_TTL
の両方が 0 の場合、この変数は無視されます。デフォルトは 1000 です。PARAMETERS_SECRETS_EXTENSION_HTTP_PORT
ローカル HTTP サーバーのポート。デフォルトは、2773 です。
PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL
-
拡張機能が提供するログ記録のレベル:
debug
、info
、warn
、error
、またはnone
。debug
に設定すると、キャッシュ設定が表示されます。デフォルトは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_EXTENSION_CACHE_SIZE
が 0 の場合、この変数は無視されます。デフォルトは 300 秒です。 SSM_PARAMETER_STORE_TIMEOUT_MILLIS
Parameter Store へのリクエストのタイムアウト (ミリ秒単位)。値を 0 にすると、タイムアウトは発生しません。デフォルトは 0 です。
SSM_PARAMETER_STORE_TTL
キャッシュ内のパラメータの TTL (秒単位)。値を 0 にすると、キャッシングは行われません。最大値は 300 秒です。
PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE
が 0 の場合、この変数は無視されます。デフォルトは 300 秒です。