機密情報管理サービスとは、ひとことでいうと機密情報のためのキーバリューストアです。代表的なものとしてAWS Secrets ManagerやSystems Managerパラメータストア、Hashicorp Vaultがあります。TerraformやAnsibleなどでインフラを構築するときに、機密情報管理サービスを用いることで安全性を高めることができます。
この記事では上記3つのサービスについて、Infrastructure as Codeの文脈で比較します。またプロダクトにあった選び方について述べます。
テクニカルライター。元エンジニア。共著で「現場で使えるRuby on Rails 5」を書きました。プログラミング教室を作るのが目標です。
用語の定義
まず、この記事における用語の定義について示します。
機密情報とは
機密情報とは「意図しない第三者に知られると悪用されるおそれのある情報」をいいます。パスワードやAPIキーなどがあてはまります。
機密情報が漏洩すると、たとえばサーバに不正にアクセスされ、個人情報を取得されるおそれがあります。あるいは、クラウドリソースを消費され、巨額の費用を請求されるかもしれません。
機密情報をソースコード内に直接記述すると、バージョン管理システムをとおして意図しない人に公開される可能性があります。機密情報管理サービスを用いることで、このような問題を防ぐことにつながります。
機密情報管理サービスとは
機密情報管理サービスとは「機密情報を暗号化し、安全に保管した上で、権限をもったユーザーにAPIをとおして提供する機能をもつキーバリューストア」です。パスベースのものが広く使われており、たとえば次のようにパスをキーとして値を格納します。
キー | 値 |
---|---|
/example-com/production/google-api-key | abcde… |
値はAES-256などのアルゴリズムで暗号化されます。AWSなどの信頼できるマネージドサービスを用いることで、暗号化された値を安全に保管できます。また、値へのアクセス権限をポリシーにより管理する仕組みがあります。
機密情報管理サービスの要件
機密情報管理サービスには代表時なものにSecrets Managerとパラメータストア、Vaultがあると述べました。これらサービスがInfrastructure as Codeという文脈で満たすべき要件として、次のことがあります。
- 暗号化されること
- 安全に保管されること
- アクセス権限を管理できること
- APIにより情報を取得できること
この4つの項目を上記サービスはすべて満たしています。たとえば暗号化について、Secrets ManagerとパラメータストアはAWS Key Management Service (KMS)、VaultはAES-256を用いて暗号化します。
機密情報が保管されるストレージバックエンドについては、Secrets Managerとパラメータストアはマネージドになります。VaultはS3やAzure、PostgreSQLなどクラウドやリージョン、ストレージを自由に選択できます。
権限管理について、Secrets ManagerとパラメータストアはAWS Identity and Access Management (IAM)によりポリシーベースでアクセス権限を管理できます。VaultもポリシーをHCLで定義できます。
機密情報管理サービスの比較項目
次にプロダクトにあったサービスを選ぶ基準として、コスト、シークレットローテーション、パスワード生成という3つの項目で上記サービスを比較します。
項目 | Secrets Manager | パラメータストア | Vault |
---|---|---|---|
コスト | 有料 | 基本的に無料 | 無料/有料 |
シークレットローテーション | ◯ | - | ◯ |
パスワード生成 | ◯ | - | ◯ |
まずコストについて、Secrets Managerは機密情報1つにつき$0.4/月、また10,000回のAPIコールあたり$0.05かかります。パラメータストアは標準パラメータは無料、アドバンストパラメータは機密情報1つにつき$0.05/月かかります。
機密情報の基本的なユースケースにおいては標準パラメータの利用で問題ありません。パラメータの種類については「パラメータ層の管理」をお読みください。
VaultはOSSを利用する場合はサーバ代やメンテナンスコストがかかります。SaaS版は問い合わせによる料金開示となります。
シークレットローテーションとは、機密情報を定期的に自動で変更する機能で、安全性の向上に役立ちます。Secrets ManagerとVaultが対応しています。パスワードを生成する機能もSecrets ManagerとVaultのみが対応しています。
機密情報管理サービスごとの特徴
上記比較項目以外にも、サービスごとの特徴があります。機密情報管理サービスを選ぶ上での重要なポイントになります。以下に特徴を示します。
Secrets Manager
Secrets ManagerのシークレットローテーションはAmazon RedshiftといったAWS各サービスと統合しやすいという特徴をもっています。また、Amazon VPCエンドポイントをサポートしているため、機密情報がパブリックインターネットに送信されることを防げます。
そのほか、AWS CloudTrailを用いてログ監査ができます。CloudWatchやIAMとの統合もしやすいです。また、Secrets ManagerにはSLA99.9%が設定されています。
パラメータストア
Secrets Managerと同じくVPCエンドポイントをサポートしていたり、CloudTrailやIAMなどと統合することができます。SLAは標準パラメータには設定されていませんが、アドバンストパラメータにはSecrets Managerと同じレベルが設定されています。
スロットルについて、パラメータストアは1秒間に最大1,000リクエストがサポートされています。インフラ構築という文脈では十分な数値といえます。
Vault
Vaultのアーキテクチャはバックエンドストレージを信頼しておらず、Vaultサーバをとおるすべてのデータはセキュリティバリアという機構により自動的に暗号化されます。セキュリティバリアからデータが読みとられると改ざんが検出されるなど、安全性を高める仕組みがあります。
またVaultサーバへのアクセスキーはShamir's Secret Sharingというアルゴリズムで分割されます。これを複数の端末に配置することで、安全性を向上させることができます。
VaultにはDynamic Secrets: 有効期限つきの認証情報を動的に生成して安全性を高める機能があります。たとえば有効期限つきのIAMユーザーを作成できます。
機密情報管理サービスの選び方
パラメータストアはInfrastructure as Codeに必要な最低限の機能をもっています。無料で使用できるため、パラメータストアをベースに考えます。
シークレットローテーションやパスワード生成の機能が必要で、AWSのその他サービスを利用しており、かつ有償サービスも採用可能な場合はSecrets Managerが候補になります。
Vaultはもっとも高機能ですが、その分学習コストがかかります。OSS版の場合は運用コストも考慮しなければなりません。セキュリティに対する要件が高かったり、Dynamic SecretsなどVaultでしか対応が難しい機能がある場合にはVaultの採用を検討するとよいでしょう。