電磁波に撃たれて眠りたい!

今日も電磁波浴びまくりのIT業界で働く@mamohacyがガジェット/クラウド/IT業界を語ってくブログ

【AWS re:learning】Day10 AWS Secret Manager

f:id:mamoahcy:20210114002836p:plain

●調査リスト

①公式サイト
https://aws.amazon.com/jp/secrets-manager/?c=sc&sec=srv
②ユーザーガイド
https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/intro.html
③BlackBelt
-
④DevelopersIO記事一覧
https://dev.classmethod.jp/referencecat/secretsmanager/
⑤リリースノート
https://aws.amazon.com/jp/new/?whats-new-content-all.sort-by=item.additionalFields.postDateTime&whats-new-content-all.sort-order=desc&awsf.whats-new-security-id-compliance=general-products%23aws-secrets-manager
⑥ドキュメント更新履歴
https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/document-history.html

●温度感調査

Developers IO パラメータ

記事数:23
最終更新日Top3:2020.08.132020.03.102020.02.27

サービスアップデート状況

サービス提供開始:2018/4/4

https://aws.amazon.com/jp/new/?whats-new-content-all.sort-by=item.additionalFields.postDateTime&whats-new-content-all.sort-order=desc&awsf.whats-new-security-id-compliance=general-products%23aws-secrets-manager

2020/12/22 AWS Secrets Manager を使用して、AWS Data Migration Service のソースデータベースとターゲットデータベースの認証情報をローテーション
2020/10/01 AWS Secrets Manager が DoD Impact Level 4 および 5 の認証を取得
2020/09/19 AWS Secrets Manager は OSPAR で評価および承認されています
2020/07/22 AWS Secrets Manager は IRAP で評価を受け、PROTECTED レベルで承認されました
2020/07/10 AWS Secrets Manager の強化された検索機能を使用して、シークレットの特定、整理、管理を簡単に実行する

2020年内のサービスアップデートアナウンス:10

ドキュメントアップデート状況

https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/document-history.html

September 18, 2020 Added information about Security Hub controls for Secrets Manager and security best practices.

July 23, 2020 Updated CloudFormation examples to use the Secrets Manager Transform.

July 9, 2020 Enhanced search capabilities for secrets.

July 9, 2020 Added the ability to attach resource-based policies to secrets using the Secrets Manager console.

May 12, 2020 Changed the Rotate Secret tutorial to include a link to Amazon RDS.

2020年内ドキュメントアップデート回数:7回


API version: 2017-10-17

●AWS Secret Manager サマリ

アプリケーションにオンコードでパスワードやアクセスキーなどの情報を書き込まないようにするためには、起動時にインジェクションさせたり、外部から参照したりといった方法が多く取られるが、これをSaaSサービスとして実現し、安全に保管・管理行えるようにしたのがAWS Secret Manager(以下ASM)

https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/images/ASM-Basic-Scenario.png https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/images/ASM-Basic-Scenario.png

上図(公式ドキュメントから参照)を見てもらえると分かりやすいが、たとえばDB管理者が用意した資格情報をASMに登録しておき、ここにアクセスが可能なIAMを準備しておけば、クライアントからはこのIAMをを使ってASMにアクセスして資格情報を取得し、DBにアクセスするといった手順になる。シークレットは登録時に指定した他の接続情報とセットで暗号化して保存され、クライアントからのリクエスト時にシークレットと合わせて1本のテキスト(JSON)に復号されて返される。

対応しているDBサービスは、2021/1/14現在、RDS, DocumentDB, RedShift, その他(MariaDB/MySQL/PostgreSQL/Oracle/SQL Server)となっている。

f:id:mamoahcy:20210114003113p:plain

保存できるシークレット情報はDBに限らず、Key/Value形式にした複数の組み合わせ情報として保存することも可能。たとえばSaaSへのAPIアクセスキーやパスワード、SSH SecretKeyなど、最大4096バイトまでのテキスト情報であれば基本的にどんなものでも管理ができる。

シークレットの自動ローテーションに対応

設定したシークレットは、ASMの機能で自動的にローテーションさせることが可能。

f:id:mamoahcy:20210114003838p:plain

RDS/DocumentDB/RedShiftなどに登録したアカウントとパスワードでアクセスし、一定期間あるいは任意のタイミングで設定されているアカウントのパスワードを自動的に更新できる。ローテーションされたシークレット管理はバージョン管理され、履歴が残る。この機能を有効化すると裏側ではLambdaが生成され、このLambdaの関数内に当該データベースへのログインとパスワード変更を行うコードがデプロイされるようだ。

DBアクセス情報以外の保存と自動ローテーション

対応しているDB以外の情報は、Key/Valueの組み合わせで複数組、保存が可能。

f:id:mamoahcy:20210114003642p:plain

この場合の自動ローテーションは対応DBのシークレットローテーションとは異なり、ローテーションさせるためのLambdaを予め作成した上で指定するフローになっている。ドキュメントを参照する限り、ASMでは当該Lambdaの一定期間おきの起動についてはデプロイされるものの、中身の作り込みについては自分自身で行う必要がある。

f:id:mamoahcy:20210114003656p:plain

深堀りの有無

実施しない

●所感

このサービスは名前だけは知っていたが中身がわからないという典型的なパターンものだったのですが、今回の調査で何ができるかがわかりました。(内容の理解にはDevelopers IOの記事がめちゃくちゃ役立ちました。ありがとうございます!)

シークレット情報の管理は常に開発者の頭を悩ませる問題であり、ASMを使うことでこのあたりを一元的に管理でき、しかも他の実装方法と違って監査証跡も残せるしプロアクティブにキー管理運用を行えるという意味でも非常に有用なサービスと言えると思います。特にキーのローテーションについては弊社のセキュリティ基準にも項目があり対応は必須なのですがここを自動化できるのは運用者にとっては強力な機能でしょう。

弊社内でもキーの管理をASMで行っているシステムがあるようですが、あくまでシステム単位で利用しているのみで、全社統合的な活用のしかたはまだ実施されていません。ここに関してはガバナンスの観点から実装パターンをガイドとして定義したり、あるいはセキュリティ管理部門が共通機能・共通システムへのアクセスに必要となるシークレット情報の管理を部門として全社横断で行うなど統合的な管理にもASMを活用して手を出していくべきだと感じました。

またローテーションの機能はないですが似たようなサービスにAWS SSMのParameter Storeがあります(こちらも中身をちゃんと見ていない)。いわゆるCloudDIパターンを実装する選択肢の一つだと思いますが、そもそもこちらは管理主管がDev側になるでしょうし、DBへのアクセスパスワードのような定期的な更新が必須となっている場合には運用上のメリットを考えてもASMを使うほうが良いでしょう。

本サービスもまた別の機会に手を動かして社内システムにて実装してみたいと思います。

●参考情報

↓機密情報を一元管理できる「AWS Secrets Manager」とは?概要と主要機能、動作原理、各種リソースまとめ | Developers.IO
https://dev.classmethod.jp/articles/about-secrets-manager/

↓【完全新機能】DB認証情報やOAuthキーを一元管理可能なAWS Secrets Managerが発表されました! | Developers.IO
https://dev.classmethod.jp/articles/secrets-manager/

↓機密管理サービス AWS Secrets Manager で RDS のパスワードローテーションを試す | Developers.IO
https://dev.classmethod.jp/articles/password-management-with-aws-secrets-manager/

↓機密情報を一元管理できる「AWS Secrets Manager」とは?概要と主要機能、動作原理、各種リソースまとめ | Developers.IO
https://dev.classmethod.jp/articles/about-secrets-manager/