Carpe Diem

備忘録

ConsulでService登録をした時のACLでハマった話

概要 Consulではserviceを登録することでService Discovery機能を活用することができます。 例えば "service": { "name": "payment", "port": 9090, "tags": ["development"] } のように設定をすると、 $ dig @localhost -p 8600 payment.service.consul でp…

Assume Roleの用途・メリット

概要 sts:Assume Roleは第三者に自分のAWSアカウントのAPI権限を委譲する仕組みです。 ここで言う第三者というのは EC2/IAM/KinesisといったAWSサービス 他AWSアカウント Googleアカウント のように様々なモノに委譲が可能です。 sts:Assume Role どういう用…

ConsulのACLを後から有効化する

概要 christina04.hatenablog.com ではConsulのACLの基本的な設定方法を説明しました。その時は "default_policy": "deny"のようにデフォルトで全リソースのアクセス禁止にしてwhitelist形式で扱っていきます。 と言いましたが、そもそもACL未設定なConsulを…

CloudWatch LogsのログをS3へ【Kinesis Firehose編】

概要 前回 christina04.hatenablog.com にてCloudWatch Logsの過去ログをS3へエクスポートする方法を説明しました。 今回はリアルタイムにS3に転送する方法を紹介します。 手順 管理ポリシーではないIAMポリシーが何度も出てくるので、自動生成してくれるWeb…

VaultのPolicyでハマったこと

概要 christina04.hatenablog.com で説明したようにVaultでは柔軟な権限設定ができますが、触っていて「え、こういう挙動・設定なの?」とハマった事がいくつかあったのでまとめます。 環境 vault v0.11.5 ハマったところ pathは前方一致 例えば path "secre…

CloudWatch LogsのログをS3へ【エクスポート編】

概要 CloudWatch LogsはAWSでは一番簡単に用意できる検索可能なログ基盤だと思います。 一方で 詳細な検索がしにくい(クエリやUI的に) ログが大量に増えると料金も嵩んでくる Terraformや操作ミス(保持期間の誤設定など)で間違って消してしまうリスク と…

Dockerの--initフラグについて

概要 dockerのコンテナは指定したコマンドがPID 1で起動されており、使い方によってはシグナルハンドリングできないことがありますよ、という話です。 それによってプロセスをGracefulに終了できなかったりリソースリークが起きたりするので注意する必要があ…

ConsulのACLでアクセス制御

概要 ConsulにはACL(Access Control List)といって、AWSのIAMに似たアクセスコントロールの仕組みがあります。 今回はそれの設定方法を説明します。 環境 Consul v1.4.0 Consul ACL ACL System 大きく分けて ACL Policies ACL Tokens というコンポーネントが…

TerraformでECSのService Discoveryを使う

概要 少し前にECSのサービスディスカバリが東京リージョンにも登場しました。 Amazon ECS Service Discovery がフランクフルト、ロンドン、東京、シドニー、シンガポールの各リージョンで利用可能に 今回Terraformでの使い方を説明します。 環境 Terraform v…

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 | Vault - HashiCorp Learn この図ではRole IDとSecret IDというID & Password…

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のように暗号化データを保存することはなく、暗号化するための暗号化キーを保存&バージョン管理します。 また複数の機能を持…