翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 レイヤーと拡張機能を動作させる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 & ツールリファレンスガイド』の「設定リファレンス」を参照してください。Lambda 関数が VPC で実行される場合は、エクステンションが Secrets Manager を呼び出せるように VPC エンドポイントを作成する必要があります。詳細については、「AWS Secrets Manager VPC エンドポイントの使用」を参照してください。
必要な許可:
Lambda
secretsmanager:GetSecretValue
実行ロールにはシークレットへのアクセス権限が必要です。シークレットをの代わりに顧客管理キーで暗号化する場合 AWS マネージドキー
aws/secretsmanager
、実行ロールには KMSkms:Decrypt
キーに対する権限も必要です。
AWS パラメータとシークレット Lambda エクステンションを使用するには
-
次のいずれかを実行して、レイヤーを関数に追加します。
https://console.aws.amazon.com/lambda/ AWS Lambda でコンソールを開きます。
-
関数を選択し、[Layers] (レイヤー) を選択し、[Add a layer] (レイヤーの追加) を選択します。
-
[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
-
シークレットにアクセスできるアクセス許可を Lambda 実行ロールに付与します。
-
シークレットの
secretsmanager:GetSecretValue
アクセス許可。例: 個別のシークレット値を取得するためのアクセス許可 を参照してください。 -
(オプション) シークレットがの代わりにカスタマー管理キーで暗号化されている場合 AWS マネージドキー
aws/secretsmanager
、実行ロールには KMSkms:Decrypt
キーに対する権限も必要です。 -
Lambda ロールで属性ベースのアクセス制御 (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 パラメータとシークレット 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 _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_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 秒です。