はじめに
本日はパラメータストアを使ってみようと思います。AWS認定試験に頻出のサービスなのでしっかり理解しておきたいですね。
パラメータストアとは
AWS Systems Manager のサービスの一つで、データベースへの接続文字列のようなパラメータを一元管理します。
アーキテクチャ
API Gateway 経由でパラメータストアに登録されているDB接続情報を取得します。
手順
1. 機密情報をパラメータストアに登録
以下3つの値をパラメータストアに登録します。
DB名
[名前]:db-name
[利用枠]:標準
[タイプ]:安全な文字列
[KMS キーソース]:現在のアカウント
[KMS キー ID]:alias/aws/ssm
[値]:test
ユーザ名
[名前]:user-name
[利用枠]:標準
[タイプ]:安全な文字列
[KMS キーソース]:現在のアカウント
[KMS キー ID]:alias/aws/ssm
[値]:sanvarie
パスワード
[名前]:password
[利用枠]:標準
[タイプ]:安全な文字列
[KMS キーソース]:現在のアカウント
[KMS キー ID]:alias/aws/ssm
[値]:hoge
2. IAMロール 作成
「access-parameter-store」という AWS Systems Manager への権限を付与したロールを作成します。
3. Lambda 関数の作成
以下のように Lambda 関数を作成します。
[オプション]:一から作成
[関数名]:get-db-connection
[ランタイム]:Python 3.9
[アーキテクチャ]:x86_64
[既存のロール]:access-parameter-store
ソースコード
パラメータストアに登録されている値を取得します。
import json import boto3 parameter_names = ['db-name','user-name','password'] def lambda_handler(event, context): output_text = get_ssm_param() return { 'statusCode': 200, 'body': json.dumps({ 'output_text': output_text }), 'isBase64Encoded': False, 'headers': {} } def get_ssm_param(): ssm = boto3.client('ssm') response = ssm.get_parameters( Names = parameter_names, WithDecryption = True ) params = {} # パラメータを配列に格納 for param in response['Parameters']: params[param['Name'] ] = param['Value'] return params
4. API Gateway作成
リソースを作成します。
「3. Lambda関数の作成」で作成した関数名を入力しメソッドを作成します。
Lambda 関数に自動的に API Gateway のトリガーが設定されます。
API をデプロイします。
デプロイ後にエンドポイントの URLが表示されます。
5.動作確認
Postman を使ってエンドポイントの URL に以下のようなリクエストを送ってみます。
https://1f9hnppgfj.execute-api.ap-northeast-1.amazonaws.com/development/parameter
パラメータストアに格納した値を取得することができました。
さいごに
このように パラメータストアを使うことによって簡単に機密情報へのアクセスをすることができます。AWS Secrets Manager を使っても同様のことができますので、二つのサービスの違いを知るために AWS Secrets Manager も使ってみようと思います。