0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

KSMでセキュアにしたパラメーターストアをタスクの環境変数に指定できない

Last updated at Posted at 2024-10-23

背景

ECSのタスクにDBの情報を環境変数として設定しようとした。
その際、情報はSSMのパラメーターストアに保存。
(DBのパスワードはKMSで暗号化し、他は暗号化せずに保存)

しかし、そのパスワードだけ取り込む際にエラー。

インフラのデプロイ方法はCDKで書いて、cdk synth でcfnテンプレートファイルを出力しcfnのgitsyncでgithubと同期している。

エラー内容

cloudformationのイベントの状況理由に書かれていたエラー内容

Failed to create changeset. Couldn't call cloudformation for stack: app-stack and changeset: cloudformation-auto-sync because of a validation error. 
The error was Parameters [/app/POSTGRES_PASSWORD] referenced by template have types not supported by CloudFormation.
 (Service: AmazonCloudFormation; Status Code: 400; Error Code: ValidationError; Request ID: ; Proxy: null)

指定した SSM パラメータが CloudFormation テンプレートでサポートされていない型を持っている場合に発生する。

行ったこと

ECSのタスク実行ロールにKMSの権限を付与してみた。

しかしうまく行かない。

次にコードを変えてみた。

    secrets: {
      POSTGRES_PASSWORD: ecs.Secret.fromSsmParameter(
          ssm.StringParameter.fromStringParameterName(
            this,
            "DBPasssword",
            "/itrender/POSTGRES_PASSWORD"
          )
        ),
        }

上記のようにはじめは書いていたが、fromStringParameterName はKMSで暗号化していないものだけらしい。

valueForSecureStringParameter がKMSで暗号化しているパラメーターを取得できるらしいが現在非推奨。

代わりにSecretValue.ssmSecure()を使える、と書いてるがどのようにしてもfromSsmParameterの引数の型とSecretValue.ssmSecure()の返り値の型が合わない。

記事を発見。

皆もうまく行っていない。

さらにSecretValue.ssmSecure()は少数のリソースでしかサポートされていないとか、、、

クローズされているが未解決らしい。

回避策

DB情報はsecret managerを使う。
そこからパスワードなりdbnameなりusernameなりを参照するのが吉。

(CDKで書くとタスク実行ロールにsecret managerから取得するロールとかは自動で追加されるので楽〜)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?