クックパッド開発者ブログスマートフォン用の表示で見るクックパッド開発者ブログ2015-04-10コードで行うMySQLのアカウント管理インフラストラクチャー部の菅原(@sgwr_dts)です。インフラストラクチャー部のメンバーはオペレーションのため強力な権限のMySQLアカウントを使用していますが、サービス開発をするエンジニアも業務のためにサービスのDBの参照・更新権限を持ったアカウントが必要になることがあります。セキュリティやオペレーションミスのことを考えると、すべてのエンジニアのアカウントをスーパーユーザーにするわけにはいかないため、都度適切な権限を付与していますが、手動での作業は地味に手間がかかります。そこでクックパッドではMySQLのアカウント情報をコード化し、リポジトリで管理するようにしています。gratanによるコード化MySQLのアカウント管理はgratanという自作のツールを使って行っています。gratanを使うとMySQLのアカウントをRubyのDSLで記述することができるようになります。endend上記のDSLをMySQLに適用すると、たとえば以下のようなログが出力されます。PRIVILEGESgratanは冪等性を保証しているので、MySQLの権限がすでに定義ファイル通りである場合には、なにも変更を行いません。changeまた、expiredを記述すると、指定した日付以降にDSLを適用した場合に、期限の切れた権限をREVOKEするようになります。このため、現在の運用では定期的にDSLの適用を行い、期限が切れた権限がDBに残らないようにしています。このような定義ファイルを各エンジニアごとに作成し、以下のようなディレクトリ構成でGitに保存しています。tiger.grant権限付与のワークフローエンジニアへの権限の付与は次のようなワークフローで行われます。何がうれしいのかオペレーションのしやすさ権限付与の作業はrakeタスクで自動化されているので作業者はrakeコマンドを実行するだけでよく、オペレーションミスを防ぐことができます。アカウントの見通しの良さすべてのエンジニアのMySQLアカウントはテキストファイルとしてGitに保存されているため、誰が、どのDBに対して、どのような権限を持っているかがすぐに把握できます。そのため不必要なアカウントがずっと残ってしまうような問題を防ぐことができます。履歴が残るGitで管理しているので、いつ誰にどのDBの権限を与えたかがすべて残ります。Requestの形でレビューとともに履歴が残ります。Requestがマージされたタイミングで自動的に適用するのもそれほど難しいことではないため、できれば完全に自動化したいと考えています。インフラストラクチャー部では、刺身タンポポを撲滅できるエンジニアを募集しています。Cli...2019-06-17レシピ検索を支えるレガシーでクリティカルな大規模バッチを刷新した話こんにちは、会員事業部の新井です。