AWS Secrets Manager のシークレットに「ハイフン+6文字」で終わる名前を付けるのは極力避けるべきである
tl;dr
- AWS Secrets Manager の
非人道的な仕様により、hogefuga-foobar
のような 「ハイフン+6文字」で終わる名前 をシークレットに付けてしまうと CloudFormation などで同シークレットを参照しようとする際にシークレットが見つからない的なエラーが発生してしまう - ゆえに AWS Secrets Manager のシークレットには 「ハイフン+6文字」で終わる名前の付与を極力避けたほうがよい
どういうことか?
AWS Secrets Manager には、そのシークレットの名前において常人には理解し難い不思議な仕様があります。以下は CreateSecret - AWS Secrets Manager から引用したその仕様です。
Do not end your secret name with a hyphen followed by six characters. If you do so, you risk confusion and unexpected results when searching for a secret by partial ARN. Secrets Manager automatically adds a hyphen and six random characters after the secret name at the end of the ARN.
これは太字で表している部分にあるように「『ハイフン+6文字』で終わるシークレット名を付けると 部分的な Amazon リソースネーム (partial ARN) でシークレットを探そうとしたときに予期せぬ結果になっちまうぞ」と述べているわけです。実際に AWS SAM (というか CloudFormation) でそのようなシークレット名を参照するスタックをデプロイしようとすると、以下のような Secrets Manager の参照エラーが発生してしまいます。
Secrets Manager can't find the specified secret. (Service: AWSSecretsManager; Status Code: 400; Error Code: ResourceNotFoundException; Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx; Proxy: null
この不思議仕様のやっかいな点として、 AWS CLI の aws secretsmanager get-secret-value
コマンドで --secret-id hogefuga-foobar
のようにシークレット名を指定してシークレットの値を取得する分には問題がない ことが挙げられます。エラーメッセージも決して親切ではないがために、トラブルシューティングも「AWS CLI だとちゃんとシークレットが得られるのにどういうこと…? IAM の権限が不足してる…?」みたいな見当違いの方向に向かってしまいがちです。
参考 SO
Discussion