📘

AWS Systems Manager(SSM) パラメータストアの使用方法

2023/12/05に公開

パラメータストアとは

AWSのサービスであるSystems Manager(SSM)の一部であり、構成データやセキュリティ情報などの機密情報を安全に保存し、アプリケーションやサービスから簡単に取得できるようにするサービスです。

またデータを保護するためにAWS Key Management Service(KMS)を使用することができます。この組み合わせにより、保存された機密データが暗号化され、セキュリティが向上します。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-parameter-store.html

KMSとは

Key Management Service(KMS)は、データを暗号化するためのキーを作成・管理するサービスです。
https://aws.amazon.com/jp/kms/

パラメータを設定する

下記のコマンドで設定できます。

aws ssm put-parameter --name "<パラメータ名>" --type String --value <>

ちなみにawsssmは識別名として利用できない文字のため、パラメータ名に使用できません。
Parameter name: can't be prefixed with "aws" or "ssm" (case-insensitive).というエラーが表示されます。

パラメータの値を取得する

下記のオプションがついていないコマンドを使用するとJSON形式で出力されます。

aws ssm get-parameter --name "<パラメータ名>" --region <リージョン名>

出力結果

{
    "Parameter": {
        "Name": "<パラメータ名>",
        "Type": "String",
        "Value": "<値>",
        "Version": 1,
        "LastModifiedDate": "2023-11-22T11:40:41.254000+09:00",
        "ARN": "arn:aws:ssm:<リージョン名>:<アカウントID>:parameter/<パラメータ名>",
        "DataType": "text"
    }
}

オプションについて

全てのオプションを指定した場合下記のような記述になります。

aws ssm get-parameter --name "<パラメータ名>" --with-decryption --region <リージョン名> --output table | jq -r '.Parameter.Value')

--with-decryption: パラメータの値が暗号化されている場合に、復号化して値を取得
下記の安全な文字列を選択しているときには、--with-decryptionオプションを指定してください。

--output: 出力形式を指定できます。出力形式はjsontexttableyamlyaml-streamの5つから指定できます。今回はtable形式を指定したのでデフォルトのJSON形式ではなく、下記のように取得できます。

| jq -r '.Parameter.Value': jqコマンドを使用して、JSON出力から特定のフィールド(ここでは .Parameter.Value)を取り出し、その値を表示

|演算子を使用して、AWS CLIの出力をjqに渡し、jqで必要なデータを抽出しています。

ロールにポリシーをアタッチする

AmazonSSMFullAccessというポリシーをロールにアタッチしてください。

CodePipeline - buildspec.ymlで使用する場合

下記のように記述します。
$AWS_DEFAULT_REGIONのみCodeBuildの環境変数を使用しています。

buildspec.yml
version: 0.2

# pre_buildで取得した値を環境変数として利用する
env:
  parameter-store:
    ACCOUNT_ID: "ACCOUNT_ID"

# ビルド実行時にCodeBuildが実行するコマンド
phases:
  pre_build:
    commands:
      # SSMパラメータストアから値を取得する
      - export ACCOUNT_ID=$(aws ssm get-parameter --name "ACCOUNT_ID" --with-decryption --region $AWS_DEFAULT_REGION | jq -r '.Parameter.Value')

料金

基本的には追加料金なしの無料で利用できます。
https://aws.amazon.com/jp/systems-manager/pricing/

下記の安全な文字列を選択しても料金は無料でした。

ですが、スタンダードという追加料金なしのパラメータ種別のほかに、アドバンスドというパラメータ種別が存在します。アドバンスドというパラメータ種別を利用する場合は料金がかかります。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/parameter-store-advanced-parameters.html

スタンダードとアドバンスドの違い

コンソールからの設定方法は以下になります。

AWS Systems Manager>パラメータストア>設定>パラメータストアのデフォルト階層

デフォルト階層の変更から変更できます。

AWS Systems Manager Parameter StoreとSecrets Managerの違い

使用シーン

https://s1r-j.hatenablog.com/entry/2023/01/29/005812

料金

Secrets Managerは作成しているだけで使用していなくても料金がかかります。

終わりに

何かありましたらお気軽にコメント等いただけると助かります。
ここまでお読みいただきありがとうございます🎉

Discussion