$30 off During Our Annual Pro Sale. View Details »

HashiCorp Vaultを使った セキュアなDBアクセスの実現/Secure DB access with HashiCorp Vault

HashiCorp Vaultを使った セキュアなDBアクセスの実現/Secure DB access with HashiCorp Vault

JAWSDAYS2021

Yokoyama Tatsuo

March 20, 2021
Tweet

More Decks by Yokoyama Tatsuo

Other Decks in Technology

Transcript

  1. HashiCorp Vaultを使った
    セキュアなDBアクセスの実現
    横山達男(@tatsuo4848) | 2021/03/20

    View Slide

  2. 本セッションのターゲット
    ● RDSのパスワード管理に悩んでいる方
    ● HashiCorp Vaultでどんなことができるのか興味がある方

    View Slide

  3. 小田原にあるHameeから来ました!

    View Slide

  4. 自己紹介
    twitterアカウント:@tatsuo4848
    GitHubアカウント:tatsuo48
    ~ これまでの経歴 ~
    拝承系SIer(インフラエンジニア、お客様サポート)

    株式会社みんなのウェディング(インフラエンジニア、SRE)

    Hamee株式会社(SRE、TechLead)
    三度の飯よりAWSが好き

    View Slide

  5. Hameeについて

    View Slide

  6. Hameeについて

    View Slide

  7. Hameeについて

    View Slide

  8. Next Engineの機能

    View Slide

  9. Next Engineのシステム構成
    メイン機能
    Platform
    API
    アプリ
    アプリ
    アプリ
    アプリ アプリ
    アプリ

    View Slide

  10. Next Engineのシステム構成
    メイン機能
    Platform
    API
    アプリ
    アプリ
    アプリ
    アプリ アプリ
    アプリ
    AWSで運用中

    View Slide

  11. Next Engineのシステム構成
    メイン機能
    Platform
    API
    アプリ
    アプリ
    アプリ
    アプリ アプリ
    アプリ
    AWSで運用予定
    (さくらインターネットから移行中 )
    AWSで運用中

    View Slide

  12. Next Engineのシステム構成
    メイン機能
    Platform
    API
    アプリ
    アプリ
    アプリ
    アプリ アプリ
    アプリ

    View Slide

  13. Next Engineのシステム構成(移行完了後)
    メイン機能
    Platform
    API
    アプリ
    アプリ
    アプリ
    アプリ アプリ
    アプリ
    Auroraクラスター

    View Slide

  14. メイン機能
    Next Engineのシステム構成(移行完了後)
    Platform
    API
    アプリ
    アプリ
    アプリ
    アプリ アプリ
    アプリ
    Auroraクラスター Auroraクラスター
    Auroraクラスター Auroraクラスター

    View Slide

  15. メイン機能
    Next Engineのシステム構成(移行完了後)
    Platform
    API
    アプリ
    アプリ
    アプリ
    アプリ アプリ
    アプリ
    Auroraクラスター Auroraクラスター
    Auroraクラスター Auroraクラスター
    Auroraクラスター
    Auroraクラスター
    Auroraクラスター
    Auroraクラスター
    Auroraクラスター

    View Slide

  16. 増え続けるDBインスタンスの
    ユーザ管理をどうする?

    View Slide

  17. 課題
    ● サービス成長と共に増えつづけるDBインスタンスのユーザ管理をどうする?
    ○ 問い合わせ対応などで開発者ごとのDBユーザ発行は必須!

    View Slide

  18. 課題
    ● サービス成長と共に増えつづけるDBインスタンスのユーザ管理をどうする?
    ○ 共通ユーザを作成
    ■ 定期的なパスワードローテーションが必要
    ■ パスワードの安全な共有方法が必要

    View Slide

  19. 課題
    ● サービス成長と共に増えつづけるDBインスタンスのユーザ管理をどうする?
    ○ 共通ユーザを作成
    ■ 定期的なパスワードローテーションが必要
    ■ パスワードの安全な共有方法が必要
    ○ 開発者ごとにDBユーザを作成
    ■ 定期的なパスワードローテーションが必要
    ■ 入社、退社時の作業コストが大

    View Slide

  20. どちらの手段も一長一短

    View Slide

  21. HashiCorp Vaultで解決!

    View Slide

  22. HashiCorp Vaultで解決!
    ● IAM認証情報を元にRDSの期限付きユーザを発行する仕組みを構築
    ○ パスワードローテーション不要
    ○ パスワード共有方法も考えなくていい
    ○ 入社退社時にIAMの更新対応は元から必要なので新規コストは発生せず

    View Slide

  23. 全体構成図

    View Slide

  24. HashiCorp Vaultについて

    View Slide

  25. HashiCorp Vaultについて
    ● Terraformで有名なHashiCorp社が開発したプロダクト
    ● 機密情報管理
    ● 以下を行ってくれる
    ○ 任意の認証基盤(Auth Methods)を使った認証
    ○ ポリシー(Policies)に基づき機密情報(Secrets Engines)へのアクセスを認可
    ● Dynamic Secretsという動的な機密情報生成の仕組み

    View Slide

  26. 認証と認可
    ● めちゃくちゃわかりやすい記事がありますのでそちらをお読みください
    ○ 出典:DevelopersIO,よくわかる認証と認可
    ○ https://dev.classmethod.jp/articles/authentication-and-authorization/

    View Slide

  27. 認証と認可
    ● めちゃくちゃわかりやすい記事がありますのでそちらをお読みください
    ○ 出典:DevelopersIO,よくわかる認証と認可
    ○ https://dev.classmethod.jp/articles/authentication-and-authorization/
    ● 認証は「通信の相手が誰(何)であるかを確認すること」
    ● 認可は「とある特定の条件に対して、リソースアクセスの権限を与えること」

    View Slide

  28. 認証と認可(HashiCorp Vaultの場合)

    View Slide

  29. 認証と認可(HashiCorp Vaultの場合)
    認証は「認証情報を元に、認証基盤に正しい通信相手か確認すること」

    View Slide

  30. 認証と認可(HashiCorp Vaultの場合)
    認証は「認証情報を元に、認証基盤に正しい通信相手か確認すること」
    認可は「認証が通ったユーザに、ポリシーに基づいて機密情報へのアクセス権限を与えること」

    View Slide

  31. Dynamic Secrets
    ● 通常の機密情報(Secrets Engines)はVault内に暗号化して保存
    ● Dynamic Secretsは少し特殊
    ○ アクセスのたびに自動で生成される

    View Slide

  32. Dynamic Secrets
    アクセスのたびに自動でIAMユーザが作成される
    設定したTTLが切れた際のIAMユーザ削除までVaultが責任を持って実施

    View Slide

  33. 認証にIAM、SecretsEngineにRDS

    View Slide

  34. 構成図

    View Slide

  35. 認証にIAM
    ● AWS SSOログイン後、接続したいDBが存在するアカウントに設定した
    IAMロールのCredentials
    を取得

    View Slide

  36. 認証にIAM
    ● Credentialsを使って署名した、署名済みリクエスト
    (sts:GetCallerIdentityRequest)を渡す

    View Slide

  37. 認証にIAM
    ● 署名済みリクエストをIAMのエンドポイントに送り、どのロールの
    Credentialsで署名したのか?を
    確認

    View Slide

  38. 認証にIAM
    ● 認証完了!

    View Slide

  39. SecretsEngineにRDS
    ● 正しいトークンが付与されたリクエストをなげる

    View Slide

  40. SecretsEngineにRDS
    ● 認証済みユーザに対して何が認可できるか?をポリシーで確認
    ○ 対象となるRDSインスタンス
    ○ 発行するDBユーザの権限

    View Slide

  41. SecretsEngineにRDS
    ● DBユーザ/パスワードを作成する

    View Slide

  42. SecretsEngineにRDS
    ● DBユーザ/パスワードをレスポンスとして返す

    View Slide

  43. DBアクセスについて

    View Slide

  44. Vaultは認証、認可のみ
    ● VaultによってDBの一時ユーザ/パスワードを入手
    ● プライベートサブネットに配置したRDSに安全に接続する仕組みが必要
    ● 開発者はSequelProなどのGUIツールが使いたい
    ○ SSMを使って踏み台インスタンスを用意するだけではだめ
    ○ SSHトンネリングが必要

    View Slide

  45. SSM with SSH
    ● SSMを使ってSSH接続
    ● SSH接続なのでSCPもSSHトンネリングもできる!
    ● ssm-userではなく、任意のユーザでSSH接続させられるのでルート権限も渡さずに済

    View Slide

  46. まとめ

    View Slide

  47. 全体構成図

    View Slide

  48. まとめと今後の展望
    ● まとめ
    ○ VaultとIAMを組み合わせることでセキュアなDBアクセスの仕組みを実現
    ● 今後の展望
    ○ EC2によるDB踏み台がいらない構成にしてみたい!
    ■ Fargate踏み台やってみたいな〜

    View Slide

  49. 最後に宣伝!

    View Slide

  50. 積極採用中です!
    ● 採用ページ
    ○ https://recruit.hamee.co.jp/odawara
    ● 珍しい福利厚生
    ○ 小田原手当
    ■ 小田原周辺地域に居住する正社員に対し、月2万円を支給!
    ○ いざ!小田原
    ■ 正社員の新幹線・特急電車・飛行機・船・高速バスでの通勤OK

    View Slide

  51. ご静聴ありがとうございました!

    View Slide

  52. View Slide