AWS CDK で特定の Secret ID を持つ Secret へのアクセス許可を与える
この記事は AWS その2 Advent Calendar 2020 の 2 日目の記事です。前回は @kazuhito1982 さんによる AWS CDK & Step FunctionsでInputPathを加工するです。
こんにちは。acomaguと申します。AWS その2 Advent Calendar では気が向いたら CDK の Tips をいくつか投稿しようかなと思っています。今回は Secrets Manager についてです。
CDK で Secrets Manager の値を扱うには secretsmanager.Secret
コンストラクトを用います。
const secret = new secretsmanager.Secret(this, 'Secret');
secret.grantRead(lambdaFunc);
上記のように新しい Secret
コンストラクトを定義すると、その値はランダムな文字列になります。値を指定することはできません。
この挙動は新しいパスワードを生成しなければならない場合には便利だと思うのですが、そのようなケースは実際には少なく、既に決まっているパスワードやトークンを Secret として扱うことのほうが多いかと思います。そのような場合、Secret は手動で(コンソール等から)作成し、Secret ID を CloudFormation(CDK) 上に記載するのが正攻法になるかと思います。
CDK では以下のようなコードになります。
const secret = secretsmanager.Secret.fromSecretNameV2(this, 'Secret1', 'MySecret'); // MySecret という ID の既存の Secret をインポート
secret.grantRead(lambdaFunc);
Secret.fromSecretNameV2
という静的メソッドを利用します。少し前まで使えた Secret.fromSecretArn
や Secret.fromSecretName
は deprecated になっているので注意してください。
尚この利用方法は該当の Secret とスタックが同一アカウント/リージョン内に存在することが前提です。もしそうでない場合は、Secret のフル ARN を指定する必要がありますので Secret.fromSecretAttributes
を使います。
const secret = secretsmanager.Secret.fromSecretAttributes(this, 'Secret1', {
secretCompleteArn: 'arn:aws:secretsmanager:eu-west-1:111111111111:secret:MySecret-f3gDy9',
});
詳しくはドキュメントを参照してみてください。CDK は GA になったモジュールでも、頻繁にメソッドが deprecated になったりするので定期的に利用するモジュールの README 等を読むことをおすすめします。