Carpe Diem

備忘録

OpenSSH 7.8p1でCA認証によるsshができない

概要 christina04.hatenablog.com でCA認証をしていたのですが、ある日急にsshできなくなったので原因を調査したところOpenSSH側のバグでした。 bugs.launchpad.net 環境 OpenSSH 7.8p1 macOS Mojave 10.14.1

VPNで特定のサーバに繋がらない

概要 先日VPNサーバを再起動したところ、基本的に内部ネットワークに接続できるものの特定のサーバに対し 疎通(ncコマンド)自体はできる 3 way handshakeもできる Webページは見れない 会社からのアクセスだとWebページも見れる という状況に陥ったのでその…

Golangの良いところ

Go

概要 Golangの良いところってなんだろう?と思ってまとめます。 多分新しいことを知ったら追記していきます。 よく言われるところ コンパイルが速い JavaやC++に比べてかなり高速です。 メモリ安全 golangはC言語に近いですが、C言語で問題になっていたメモ…

goroutineはなぜ軽量なのか

Go

概要 以前の記事で christina04.hatenablog.com golangはスレッドよりはるかに軽量なgoroutineでC10K問題を解決する、という話をしましたが、goroutineが軽量なのはなぜか?という理由を深掘りしたことがなかったのでしてみました。 環境 golang 1.11.1 Darw…

Golangのpprofの使い方【メモリ編】

概要 前回 christina04.hatenablog.com にてpprofのコマンドラインツールの使い方を説明しました。 今回はメモリについて このバッチ処理、メモリすごく喰うけどどこが原因? メモリリークしてない? といったところの調査方法を説明します。 環境 golang 1.…

Golangのpprofの使い方【コマンドラインツール編】

概要 前回 christina04.hatenablog.com にてpprofの基本的な使い方を説明しました。 今回はさらに詳細に調べるためのコマンドラインツールの使い方を説明します。 環境 golang 1.11.0

ECS Fargateを本番環境で使用する前に知っておくべき注意点

概要 ECS Fargateがリリースされてから検証・導入を進めています。 インスタンスの管理をする必要がなくなり非常にメリットを感じている一方、本番環境で使う上で注意すべき点もあるのでそこをまとめます。 環境 Fargateプラットフォーム 1.2.0 問題点 dev, …

会社のディベロッパーブログを書きました

概要 会社の公式ブログに投稿したのでその紹介です。 developers.cyberagent.co.jp AWAではサブスクリプション(定期購読)型の課金体系をとっているのでそういったサービスを出す方の参考になれば幸いです。

Webサーバにおけるソケット周りの知識

概要 サーバサイドの仕事をしているとソケットという概念に遭遇すると思います。 ソケットを理解すると TCPセッションの流れ ulimitでnofileを上げないとコネクション増加した時のToo many open filesが出るのはなぜか なぜサーバの待ち受けポートは1つで、…

Golang 1.11 で導入された ListenConfig を使って SO_REUSEPORT を利用する

概要 先日リリースされた1.11でソケットオプションを設定できるようになりました。 これによってLinux 3.9から導入されたSO_REUSEPORTという、同じポートでbindすることが可能になる機能が利用可能になります。 環境 golang 1.11 macOS 10.13.6 (Darwin Kern…

fluentdをローカルで簡単に検証する

概要 ローカルでサクッとfluentdの検証をしたい時に毎回調べ直していたのでメモ。 設定ファイル fluentd.confという名前で設定を用意します。 forwardされたログをstdoutに出力します。 <source> @type forward port 24224 bind 0.0.0.0 </source> <match *.*> @type stdout </match>

bindアドレスとadvertiseアドレス

概要 ConsulやVaultのクラスタ構成をしていると bind address advertise address という2つのアドレスを設定する必要が出てきます。 この2つをしっかり理解しておかないとクラスタ構成で思わぬ落とし穴にハマったりするので今回はこれを紹介します。 bind…

VaultのKVの基本的な使い方

概要 VaultのKey/Valueの基本的な使い方を紹介します。 このKey/Valueは少し前にv2が出ているため、v1と混同しないよう注意してください。 v1ドキュメント v2ドキュメント 今回はKey/Valueのバージョン管理が可能なv2を想定して説明します。 環境 Vault v0.1…

Consulクラスタをアップグレードした時に起きた問題と対応

概要 先日Consulクラスタのアップグレードをしたところちょこちょこ問題にぶち当たって解決に時間がかかったので、同じ症状に遭ったりした人用にメモ。 環境 Consul 1.1.0 -> 1.2.2 Ubuntu 16.04 問題背景 Consulはクライアントエージェントが追加されたり死…

VaultのAppRoleを使ってトークン取得

概要 Vaultではトークンを取得するための様々な認証方法がありますが、その中でアプリケーションに向いたAppRoleという認証方法があります。 ref: AppRole Pull Authentication - Guides - Vault by HashiCorp この図ではRole IDとSecret IDというID & Passw…

SSHのCA認証で Certificate lacks principal list

背景 christina04.hatenablog.com を元に本番環境を用意していたところ、ubuntuで作ったインスタンスはsshできるもののAmazon Linuxで作られたec2-userのインスタンスはsshできない現象に遭遇しました。 sshのログを調べるために # /etc/ssh/sshd_config # .…

VaultのAudit Devicesでオペレーションをロギング

概要 Vaultの売りは Secure secret management Dynamic secrets Encryption as a Service Leasing and Renewal など多々ありますが、その中でもAudit(監査)ログ(Vaultの操作ログ)の管理はとても重要です。 今回はその設定を紹介します。 Audit Devices 公…

AngularのPipeでデータの表示形式を簡単に操作する

概要 元はunixtimeだったり、単純な数値データなものだったりを以下のようなフォーマットにしたいことは往々にしてあります。 日付 通過 パーセント 大文字に統一 AngularではPipesという機能を使うことでテンプレート上で簡単に実現できます。 ビルトインPi…

VaultのPKI(公開鍵基盤)でルート証明書・中間証明書・サーバ証明書を発行

概要 VaultにはPKI(公開鍵基盤)の機能もあります。 これを使って ルートCA 中間CA を用意し、 ルート証明書 (root certificate) 中間証明書 (intermediate certificate) サーバ証明書 (primary certificate) を作成します。 環境 Vault 0.10.3

SSL/TLS周りで必要な知識

概要 SSL/TLSでは ルート証明書 (root certificate) 中間証明書 (intermediate certificate) サーバ証明書 (primary certificate) など色々なファイルや用語があり、混乱しやすいのでまとめます。 認証局(CA)について ルートCA 認証局です。 この認証局が発…

VaultのTransit secret engineでデータを暗号化・復号する

概要 VaultにはTransit Secrets Engineという、暗号化・復号をしてくれる機能があります。 このTransit Secrets EngineはKey/Valueのように暗号化データを保存することはなく、暗号化するための暗号化キーを保存&バージョン管理します。 また複数の機能を持…

GolangでVaultを操作

概要 これまで紹介したVaultの使い方はCLIを使うのがメインでしたが、実際はアプリケーション内で秘密情報を扱うケースが多々あります。 Vaultはgolangのライブラリを提供しているので、様々なログイン方法を紹介しつつ秘密情報にアクセスしてみます。 環境 …

IAMユーザを持っていたらVaultにログインできるようにする

概要 Vaultのデフォルトのログインはトークンですが、これだと漏れた時など管理しにくいのでAWSのIAMユーザ情報を元にログインできるようにします。 前提 ログインするメンバーはAWSのIAMユーザを持つ 環境 Vault 0.10.3

VaultのPolicyを使った運用

概要 VaultはPolicyを使って各APIの権限を設定します。 これによって権限を細かく設定することができますが、実際の運用ではどんな形で進めるのがいいのかがドキュメントでは分かりにくかったのでまとめした。 環境 Vault 0.10.3 Policy付与のフロー 以下の…

VaultでSSHをCA認証に

背景 AWSを運用しているとEC2のsshのキーペア管理が難しいです。 GCPであればアカウントを持てば自動で各ノードにsshできる仕組みがありますが、AWSは各インスタンスにsshのキーペアを1つだけ登録するようになっているため、複数人で運用するにはぱっと以下…

VaultのSeal/Unseal

概要 Hashicorp Vaultは起動時はsealedというステータスになっており、リストを取得したりKey-Valueの値を取得することができません。 Vaultはセキュリティのため、データにアクセスする手段は知っていても起動時は復号の方法を知らないのです。 そこでUnsea…

KubernetesでEnvoyを使ったSidecarパターンを実装

概要 前回書いた構成をKubernetesで実装してみます。 christina04.hatenablog.com 環境 minikube v0.26.1 kubernetes v1.10.0 成果物 今回のソースです。 github.com

マイクロサービスでのSidecarパターンとは何か

概要 マイクロサービス化したシステムを運用する上で出てくる課題を解決するパターンとしてService Meshというものがあります。 このService Meshというものは以下の2つのコンポーネントで構成されます。 Data plain アプリケーションの代わりにネットワー…

EnvoyのFrontProxyを用意してgRPCの負荷分散をする

概要 gRPCはHTTP/2プロトコルをベースとしたRPCです。 なのでコネクションが永続化され、その中で複数のストリームがリクエスト・レスポンスを取り扱うため負荷分散に注意する必要があります。 今回はEnvoyというgRPCに向いたproxyを使うことでそれを実現し…

curlのresolvオプションで名前解決

背景 ドメイン移管の関係でCloudFrontのDNSレコードをDNSimpleからRoute53へ移そうとしていたのですが、完全な移管手続前にRoute53側のレコードでエッジサーバにちゃんとアクセスできるか確認する必要がありました。 digのNS指定を使えばエッジサーバのIPは…