AWS Systems Manager Parameter Store から AWS Secrets Manager のシークレットを GetParameters でまとめて取得してみた

AWS Systems Manager Parameter Store から AWS Secrets Manager のシークレットを GetParameters でまとめて取得してみた

AWS Systems Manager Parameter Store の `/aws/reference/secretsmanager/` プレフィックスを活用して、通常設定値と Secrets Manager のシークレットを GetParameters で一括取得する方法を検証してみました。
2026.08.07

はじめに

テクニカルサポートの 片方 です。
アプリケーションの通常設定値は AWS Systems Manager Parameter Store に、API キーなどの機密情報は AWS Secrets Manager に保存する構成があります。
この構成では、通常設定値とシークレットで保存先が異なるため、アプリケーション側の取得処理もサービスごとに分かれがちです。
Parameter Store では、/aws/reference/secretsmanager/ プレフィックスを指定することで、Secrets Manager に保存したシークレットを GetParameter または GetParameters から参照できます。
今回は、通常の設定値を Parameter Store に、API キーを Secrets Manager に保存し、GetParameters で一括取得してみます。
なお、本ブログではシークレットを Parameter Store に複製しません。シークレットの正本は Secrets Manager に保持したまま、Parameter Store API を経由して参照します。

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/integration-ps-secretsmanager.html?utm_source=openai

本ブログで確認できること

本ブログでは、以下を確認します。

  • GetParameters で通常の設定値とシークレットを一括取得できること
  • Secrets Manager 側でシークレットを更新した場合、同じ参照名から更新後の値を取得できること
  • シークレットが Parameter Store に複製されないこと
  • Secrets Manager の参照では GetParametersByPath を利用できないこと

これにより、設定値とシークレットの保存先を分けながら、アプリケーション側の取得処理を GetParameters に寄せられることを確認します。

今回の構成

通常の設定値は Parameter Store に、API キーは Secrets Manager に保存します。
値の取得には、AWS CLI から Parameter Store の GetParameters を呼び出します。Secrets Manager のシークレットは、/aws/reference/secretsmanager/ プレフィックスを付与して指定します。

構成図

AWS CLI
  |
  | aws ssm get-parameters
  v
AWS Systems Manager Parameter Store
  |                                  |
  | 通常の設定値を取得                 | Secrets Manager のシークレットを参照
  v                                  v
Parameter Store                  Secrets Manager
  - base-url                       - external-api
  - log-level

Parameter Store は、Secrets Manager のシークレットを参照する際、値やメタデータを保持しないパススルーサービスとして動作します。
つまり、/aws/reference/secretsmanager/ を利用した参照はステートレスであり、Secrets Manager のシークレット値が Parameter Store に保存・複製されるわけではありません。

管理する設定値とシークレット

今回作成する値は以下の 3 件です。

種別 保存先 名前
通常の設定値 Parameter Store /cm-demo/dev/sample-app/base-url https://api.example.test
通常の設定値 Parameter Store /cm-demo/dev/sample-app/log-level INFO
シークレット Secrets Manager /cm-demo/dev/sample-app/external-api dummy-api-key-v1

base-url と log-level は機密情報ではないため、Parameter Store の String 型パラメータとして管理します。
一方、外部 API の認証情報はシークレットとして Secrets Manager に保存します。自動ローテーション、詳細な監査、クロスアカウントアクセスなどを必要とする認証情報や API キーの管理には、Secrets Manager の利用を検討できます。

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/what-is-a-parameter.html?utm_source=openai

命名規則

Parameter Store と Secrets Manager の名前は、以下の形式で統一します。

/cm-demo/{environment}/{application}/{setting-name}

各要素は以下のとおりです。

要素 説明
cm-demo 固定 検証用の識別子
environment dev 環境名
application sample-app アプリケーション名
setting-name base-url など 設定値またはシークレットの用途

Secrets Manager のシークレットを Parameter Store API 経由で取得する場合は、シークレット名の先頭に以下の予約済みパスを付与します。

/aws/reference/secretsmanager/{secret-name}

今回のシークレット名は / から始まるため、取得時には以下のようにスラッシュが連続します。

/aws/reference/secretsmanager//cm-demo/dev/sample-app/external-api

これは、シークレット名が / から始まる場合に必要となる正しい指定です。
Secrets Manager の参照には、GetParameter または GetParameters を使用できます。DescribeParameters や GetParametersByPath などの検索・変更系 API では利用できません。

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/integration-ps-secretsmanager.html?utm_source=openai

やってみた

本検証では、AWS マネジメントコンソールから起動した AWS CloudShell で AWS CLI コマンドを実行します。
CloudShell を起動後、必要に応じて AWS CLI のバージョンと実行リージョンを確認してください。
今回は、コマンド内で ap-northeast-1 を明示的に指定します。

Parameter Store に通常設定値を作成する

まず、通常の設定値として base-url と log-level を Parameter Store に作成します。
今回は機密情報を扱わないため、パラメータタイプには String を指定します。

aws ssm put-parameter \
  --name /cm-demo/dev/sample-app/base-url \
  --type String \
  --value 'https://api.example.test' \
  --region ap-northeast-1

正常に作成されると、パラメータのバージョンとティアが返ります。

{
  "Version": 1,
  "Tier": "Standard"
}

続けて、ログレベルを作成します。

aws ssm put-parameter \
  --name /cm-demo/dev/sample-app/log-level \
  --type String \
  --value 'INFO' \
  --region ap-northeast-1

Parameter Store では、/ を使った階層形式の名前でパラメータを管理できます。今回のように、検証用識別子、環境名、アプリケーション名を含めることで、用途ごとにパラメータを整理できます。

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-paramstore-hierarchies.html?utm_source=openai

作成したパラメータをまとめて確認します。

aws ssm get-parameters \
  --names \
    /cm-demo/dev/sample-app/base-url \
    /cm-demo/dev/sample-app/log-level \
  --region ap-northeast-1

実行結果では、以下の 2 件が取得できることを確認します。

  • /cm-demo/dev/sample-app/base-url
  • /cm-demo/dev/sample-app/log-level

GetParameters では、最大 10 件のパラメータ名を指定し、1 回のリクエストで取得できます。
また、レスポンスに含まれるパラメータは、指定順ではなくパラメータ名のアルファベット順で返されます。

実行結果の例
{
    "Parameters": [
        {
            "Name": "/cm-demo/dev/sample-app/base-url",
            "Type": "String",
            "Value": "https://api.example.test",
            "Version": 1,
            "LastModifiedDate": "2026-08-07T04:07:18.204000+00:00",
            "ARN": "arn:aws:ssm:ap-northeast-1:************:parameter/cm-demo/dev/sample-app/base-url",
            "DataType": "text"
        },
        {
            "Name": "/cm-demo/dev/sample-app/log-level",
            "Type": "String",
            "Value": "INFO",
            "Version": 1,
            "LastModifiedDate": "2026-08-07T04:07:37.531000+00:00",
            "ARN": "arn:aws:ssm:ap-northeast-1:************:parameter/cm-demo/dev/sample-app/log-level",
            "DataType": "text"
        }
    ],
    "InvalidParameters": []
}

001
002

次に、Secrets Manager に API キーを保存します。

Secrets Manager にシークレットを作成する

続いて、外部 API の認証情報を AWS Secrets Manager に作成します。
今回は検証用として、dummy-api-key-v1 をシークレット値に使用します。この値は実際の API キーではありません。

aws secretsmanager create-secret \
  --name /cm-demo/dev/sample-app/external-api \
  --description 'External API key for verification' \
  --secret-string 'dummy-api-key-v1' \
  --region ap-northeast-1

正常に作成されると、シークレットの ARN、名前、バージョン ID が返ります。

{
  "ARN": "arn:aws:secretsmanager:ap-northeast-1:123456789012:secret:/cm-demo/dev/sample-app/external-api-xxxxxx",
  "Name": "/cm-demo/dev/sample-app/external-api",
  "VersionId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

--secret-string を指定してシークレットを作成すると、Secrets Manager では初期バージョンが作成され、AWSCURRENT ステージングラベルが付与されます。
作成後、describe-secret でシークレットのメタデータを確認します。

aws secretsmanager describe-secret \
  --secret-id /cm-demo/dev/sample-app/external-api \
  --region ap-northeast-1

describe-secret の実行結果にはシークレット値は含まれません。そのため、値を表示せずに名前、ARN、バージョン情報を確認できます。

003

004

今回は検証用のダミー値をコマンドに直接指定しています。

実際の API キーやパスワードを --secret-string に直接指定すると、シェルのコマンド履歴や実行中プロセスの引数から値が参照されるリスクがあります。
本番環境のシークレットを登録する場合は、file:// を利用したファイル入力、SDK、CI/CD のシークレット管理機能など、値をコマンドライン引数に含めない方法を検討してください。
例えば、検証用ファイルを利用する場合は以下のように指定できます。

aws secretsmanager create-secret \
  --name /cm-demo/dev/sample-app/external-api \
  --secret-string file://secret.txt \
  --region ap-northeast-1

次に、Parameter Store の GetParameters を使用して、通常の設定値と Secrets Manager のシークレットをまとめて取得します。

Parameter Store API 経由で設定値とシークレットをまとめて取得する

作成した通常設定値と Secrets Manager のシークレットを、Parameter Store の GetParameters で取得します。
Secrets Manager のシークレットを参照する場合は、シークレット名の先頭に /aws/reference/secretsmanager/ を付与します。
今回のシークレット名は / から始まるため、参照名では / が連続します。

aws ssm get-parameters \
  --names \
    /cm-demo/dev/sample-app/base-url \
    /cm-demo/dev/sample-app/log-level \
    /aws/reference/secretsmanager//cm-demo/dev/sample-app/external-api \
  --with-decryption \
  --region ap-northeast-1

--with-decryption を指定することで、SecureString として返される Secrets Manager の参照値を復号して取得できます。
String 型の Parameter Store パラメータに対しては、--with-decryption を指定しても影響はありません。
実行結果では、指定した 3 件が Parameters に含まれることを確認します。

{
  "Parameters": [
    {
      "Name": "/aws/reference/secretsmanager//cm-demo/dev/sample-app/external-api",
      "Type": "SecureString",
      "Value": "********",
      "Version": 0,
      "SourceResult": "********"
    },
    {
      "Name": "/cm-demo/dev/sample-app/base-url",
      "Type": "String",
      "Value": "https://api.example.test",
      "Version": 1
    },
    {
      "Name": "/cm-demo/dev/sample-app/log-level",
      "Type": "String",
      "Value": "INFO",
      "Version": 1
    }
  ],
  "InvalidParameters": []
}

※ シークレットの値はマスクしています。

GetParameters では、通常設定値と Secrets Manager の参照を同じリクエストに含めることができます。
この時点で AWS CLI から実行しているコマンドは aws ssm get-parameters のみです。一方、シークレットの正本は Secrets Manager にあり、Parameter Store にシークレット値やメタデータが保存・複製されるわけではありません。

005

確認してみた

ここでは、Secrets Manager のシークレットを更新した後も、同じ Parameter Store の参照名から更新後の値を取得できるか確認します。

Secrets Manager の値を更新して再取得する

Secrets Manager のシークレット値を dummy-api-key-v2 に更新します。

aws secretsmanager put-secret-value \
  --secret-id /cm-demo/dev/sample-app/external-api \
  --secret-string 'dummy-api-key-v2' \
  --region ap-northeast-1

実行結果では、新しい VersionId と AWSCURRENT が返ることを確認します。

出力例
{
    "ARN": "arn:aws:secretsmanager:ap-northeast-1:xxxxxxxxxxxx:secret:/cm-demo/dev/sample-app/external-api-WSNXoO",
    "Name": "/cm-demo/dev/sample-app/external-api",
    "VersionId": "9032f112-318c-4d7c-a634-e469cb12e850",
    "VersionStages": [
        "AWSCURRENT"
    ]
}

put-secret-value で新しい値を登録すると、Secrets Manager は新しいシークレットバージョンを作成します。--version-stages を指定しない場合、新しいバージョンには AWSCURRENT が設定されます。

https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/put-secret-value.html?utm_source=openai

続けて、先ほどと同じ GetParameters コマンドを実行します。

aws ssm get-parameters \
  --names \
    /cm-demo/dev/sample-app/base-url \
    /cm-demo/dev/sample-app/log-level \
    /aws/reference/secretsmanager//cm-demo/dev/sample-app/external-api \
  --with-decryption \
  --region ap-northeast-1

実行結果では、Secrets Manager を参照するパラメータの Value が更新後の値になっていることを確認します。

出力例
{
  "Parameters": [
    {
      "Name": "/aws/reference/secretsmanager//cm-demo/dev/sample-app/external-api",
      "Type": "SecureString",
      "Value": "********",
      "Version": 0,
      "SourceResult": "********"
    },
    {
      "Name": "/cm-demo/dev/sample-app/base-url",
      "Type": "String",
      "Value": "https://api.example.test",
      "Version": 1
    },
    {
      "Name": "/cm-demo/dev/sample-app/log-level",
      "Type": "String",
      "Value": "INFO",
      "Version": 1
    }
  ],
  "InvalidParameters": []
}

※ シークレット値はマスクしています。

同じ参照名を指定したまま、Secrets Manager で更新したシークレットを取得できました。
今回のようにバージョンステージを指定しない参照では、AWSCURRENT の値が取得されます。そのため、Secrets Manager 側で AWSCURRENT が新しいバージョンへ移動すると、同じ参照名から更新後の値を取得できます。
Parameter Store は Secrets Manager のシークレットを保持しないパススルーサービスとして動作するため、Parameter Store に値を再登録したり、同期処理を実装したりする必要はありません。

006

Parameter Store にシークレットが複製されないことを確認する

Secrets Manager のシークレットが、Parameter Store の実パラメータとして作成されていないことを確認します。

今回、Parameter Store に作成した通常設定値は以下の 2 件です。

  • /cm-demo/dev/sample-app/base-url
  • /cm-demo/dev/sample-app/log-level

Parameter Store のパラメータ一覧から、/cm-demo/dev/sample-app/ 配下を確認します。

aws ssm describe-parameters \
  --parameter-filters \
    "Key=Path,Option=Recursive,Values=/cm-demo/dev/sample-app" \
  --region ap-northeast-1 \
  --query 'Parameters[].{Name:Name,Type:Type}' \
  --output table

実行結果は以下のとおりです。

---------------------------------------------
|             DescribeParameters             |
+-----------------------------------+--------+
|                Name               | Type   |
+-----------------------------------+--------+
| /cm-demo/dev/sample-app/base-url  | String |
| /cm-demo/dev/sample-app/log-level | String |
+-----------------------------------+--------+

Secrets Manager に作成した /cm-demo/dev/sample-app/external-api は、Parameter Store のパラメータ一覧には表示されませんでした。
これは、/aws/reference/secretsmanager/ を付与した名前が Parameter Store の実パラメータ名ではなく、Secrets Manager のシークレットを参照するための指定であるためです。
Parameter Store は Secrets Manager の参照時に、シークレットの値やメタデータを保持しません。したがって、Parameter Store 側にシークレットを同期・複製する必要はありません。

007

なお、Secrets Manager の参照は GetParameter と GetParameters でのみ利用できます。DescribeParameters や GetParametersByPath では、Secrets Manager の参照を検索・取得できません。

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/integration-ps-secretsmanager.html

GetParametersByPath では Secret を含めて取得できないことを確認する

最後に、GetParametersByPath で通常設定値と Secrets Manager のシークレットをまとめて取得できるか確認します。
GetParametersByPath は、指定したパス配下の Parameter Store パラメータを取得する API です。
今回作成した通常設定値は /cm-demo/dev/sample-app/ 配下にあるため、以下のコマンドで取得できます。

aws ssm get-parameters-by-path \
  --path /cm-demo/dev/sample-app \
  --recursive \
  --with-decryption \
  --region ap-northeast-1

実行結果では、Parameter Store に作成した通常設定値 2 件を取得できます。

出力例
{
    "Parameters": [
        {
            "Name": "/cm-demo/dev/sample-app/base-url",
            "Type": "String",
            "Value": "https://api.example.test",
            "Version": 1,
            "LastModifiedDate": "2026-08-07T04:07:18.204000+00:00",
            "ARN": "arn:aws:ssm:ap-northeast-1:xxxxxxxxxxxx:parameter/cm-demo/dev/sample-app/base-url",
            "DataType": "text"
        },
        {
            "Name": "/cm-demo/dev/sample-app/log-level",
            "Type": "String",
            "Value": "INFO",
            "Version": 1,
            "LastModifiedDate": "2026-08-07T04:07:37.531000+00:00",
            "ARN": "arn:aws:ssm:ap-northeast-1:xxxxxxxxxxxx:parameter/cm-demo/dev/sample-app/log-level",
            "DataType": "text"
        }
    ]
}

Secrets Manager に作成した /cm-demo/dev/sample-app/external-api は、結果に含まれませんでした。
Secrets Manager のシークレットを Parameter Store 経由で参照する場合、利用できる API は GetParameter と GetParameters のみです。GetParametersByPath、DescribeParameters などの高度な検索 API は、Secrets Manager の参照に対応していません。

そのため、通常設定値とシークレットを同時に取得する場合は、GetParameters にそれぞれの名前を明示的に指定します。

/cm-demo/dev/sample-app/base-url
/cm-demo/dev/sample-app/log-level
/aws/reference/secretsmanager//cm-demo/dev/sample-app/external-api

008

今回の検証から、設定値をパス単位で取得する用途では GetParametersByPath、Secrets Manager のシークレットを含めて取得する用途では GetParameters を使い分ける必要があることが分かりました。

補足:API の使い分け

今回確認した API の使い分けは以下のとおりです。

要件 推奨する API
1 件の通常設定値またはシークレットを取得したい GetParameter
明示した複数の通常設定値とシークレットを一括取得したい GetParameters
Parameter Store の特定パス配下を取得したい GetParametersByPath
Secrets Manager の参照をパス配下から自動取得したい 対応不可。GetParameters でシークレット名を明示する

クリーンアップ

検証後に不要となった Parameter Store パラメータと Secrets Manager シークレットを削除します。
まず、Parameter Store のパラメータを削除します。

aws ssm delete-parameters \
  --names \
    /cm-demo/dev/sample-app/base-url \
    /cm-demo/dev/sample-app/log-level \
  --region ap-northeast-1

続けて、Secrets Manager のシークレットを削除します。
以下のコマンドは、復旧期間を設けずに削除する指定です。検証用リソースであることを十分に確認してから実行してください。

aws secretsmanager delete-secret \
  --secret-id /cm-demo/dev/sample-app/external-api \
  --force-delete-without-recovery \
  --region ap-northeast-1
コマンド実行結果例
~ $ aws ssm delete-parameters \
>   --names \
>     /cm-demo/dev/sample-app/base-url \
>     /cm-demo/dev/sample-app/log-level \
>   --region ap-northeast-1
{
    "DeletedParameters": [
        "/cm-demo/dev/sample-app/base-url",
        "/cm-demo/dev/sample-app/log-level"
    ],
    "InvalidParameters": []
}
~ $ aws secretsmanager delete-secret \
>   --secret-id /cm-demo/dev/sample-app/external-api \
>   --force-delete-without-recovery \
>   --region ap-northeast-1
{
    "ARN": "arn:aws:secretsmanager:ap-northeast-1:xxxxxxxxxxxx:secret:/cm-demo/dev/sample-app/external-api-WSNXoO",
    "Name": "/cm-demo/dev/sample-app/external-api",
    "DeletionDate": "2026-08-07T06:48:57.688000+00:00"
}
~ $ 

まとめ

今回は、AWS Systems Manager Parameter Store に保存した通常設定値と、AWS Secrets Manager に保存したシークレットを、GetParameters でまとめて取得してみました。
確認できた内容は以下のとおりです。

  • 通常設定値は Parameter Store、API キーは Secrets Manager に保存できた
  • /aws/reference/secretsmanager/ を付与した参照名を指定することで、GetParameters から Secrets Manager のシークレットを取得できた
  • Secrets Manager のシークレットを更新後、同じ参照名から AWSCURRENT の更新後の値を取得できた
  • Secrets Manager のシークレットは Parameter Store に複製されなかった
  • Secrets Manager の参照には GetParameter または GetParameters を使用する必要があり、GetParametersByPath は利用できなかった
  • Parameter Store API 経由で取得する場合でも、Secrets Manager のシークレットに対する IAM 権限が必要である

この機能を利用すると、設定値とシークレットの保存先を分けながら、アプリケーション側の取得処理を Parameter Store の API に寄せられます。
一方で、Secrets Manager の参照では、Parameter Store の階層検索、バージョン管理、履歴機能は利用できません。また、GetParameters で一度に取得できる名前は最大 10 件です。

用途と制約を理解したうえで、GetParameters と GetParametersByPath を適切に使い分けてください。
本ブログが誰かの参考になれば幸いです。

参考資料

クラスメソッドオペレーションズ株式会社について

クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事