Goで始めるトークンバケット:基礎理論とgolang/x/time/rateの実装を読み解く
トークンバケットアルゴリズムの基本概念と、Goプロジェクトが提供するgolang.org/x/time/rateの実装を解説します。レート制限とスロットリングの実装方法から内部構造まで、実例を交えながら学びます。
ENGINEERING NOTES
72 / 72 articles
条件に一致する記事がありません。
トークンバケットアルゴリズムの基本概念と、Goプロジェクトが提供するgolang.org/x/time/rateの実装を解説します。レート制限とスロットリングの実装方法から内部構造まで、実例を交えながら学びます。
Next.js / PostgreSQL / Keycloak を使った社内経費申請システムを題材に、画面制御、業務ルール、RLS をどこに置くべきかを整理します。
アプリケーション認可を整理したメモです。PDP / PEP / PIP、RBAC / ABAC、入力検証とドメインルールの境界を踏まえ、認可ロジックの置き場所を判断する材料をまとめます。
Keycloak で ID トークンの JWE を有効にし、Protected Header の `alg` / `enc` と復号後の中身を対応づけて確認します。RFC 7516 を読みながら、JWS との違い、Nested JWT になる理由、鍵管理モードの見方も整理します。
OAuth 2.0 の Token Introspection(RFC 7662)を、Keycloak を使って再現して確認します。introspection は「トークン解析」ではなく、認可サーバへトークンの状態を問い合わせる仕組みです。Token Introspection の検討についても考えます。
Next.js 15.5.3 でのnonce ベースCSP 実装について、middleware.ts を使った設定方法から実装時に発生するクライアントサイド遷移での課題、UI ライブラリとの互換性問題まで実際の経験をもとに学習した内容をまとめます。
本記事では、Authelia を OIDC プロバイダーとして設定し、Next.js アプリケーションと Auth.js(NextAuth.js)を用いて認証連携を実現する手順を記録します。Docker Compose を使用したローカル開発環境の構築から、具体的な設定、動作確認まで記載します。
本記事は、Autheliaをローカル環境で実行する手順と設定の詳細を記録したブログです。Docker Composeを利用し、コンテナの起動からシークレット管理、ストレージ設定、ユーザーデータベースの生成方法まで、各ポイントを整理しています。
GitHub Actions から ECR への Docker コンテナ自動デプロイと Lambda でのコンテナ実行環境を構築した際の学習記録です。Terraform による AWS リソース構築、OIDC を利用した GitHub Actions の認証設定、ECR への継続的デプロイの実装手順をまとめました。distroless イメージでの Lambda 実行時の注意点も記録しています。
JavaScript の URL コンストラクターで `//evil.com` のようなネットワークパス参照を処理する際に発生するオープンリダイレクト脆弱性について、RFC 3986 の仕様解析と、ドメイン検証・相対パス限定・許可リスト制御の3つの対策パターンの実装方法を記録した備忘録です。
Amazon Cognito User Pools を使用した TypeScript 認証システムの実装についての記事です。Terraform でのインフラ構築、エイリアス属性の設定、MFA の有効化、ユーザー登録フロー(SignUpCommand、ConfirmSignUpCommand)、認証フロー(InitiateAuthCommand、RespondToAuthChallengeCommand)まで、実際のコード例と動作確認結果を交えて学んだ内容をまとめました
Next.js アプリケーションで Pino と OpenTelemetry を組み合わせ、trace_id が付与された構造化ログを実装する方法を解説します。従来のコンソールログから脱却し、エラー監視・パフォーマンス監視・開発運用効率化を実現するためのログ設計手法について学んだ記録です。
Helm Chart 開発においてバージョンの条件分岐があると互換性を気にすることなく設定できます。この記事では、Helm の `semverCompare` 関数の基本的な使い方から、具体的な活用例、注意点までを学習した内容をまとめました。
OpenTelemetry JS SDK を利用して、Winston の構造化ログに `trace_id` を自動で付与する方法とその仕組みを学習しました。`@opentelemetry/instrumentation-winston` がどのように `trace_id` をログに挿入するのか、コードを読み解きながら確認しました。Observability を高めるための具体的な設定方法と内部動作について、学んだことを記録します
MySQLのトランザクション分離レベルについての学習ログ。READ UNCOMMITTEDからSERIALIZABLEまでの特徴や、ダーティリード、反復不能読み取り、ファントムリードなどの問題を具体例とともに記述。
Next.js v15とAuth.js v5を使用して、Keycloakのロールベースアクセス制御(RBAC)を実装する方法を学習したのでまとめます。Keycloakでのロール設定から、Next.jsでのアクセス制御の実装まで、具体的なコード例を交えて解説します。
Next.js v15 と Auth.js v5 を使い、Keycloak と連携してログイン機能を実装する方法を学びます。今回は、セッションの有効期限やOIDCの設定を追加し、セキュリティを強化します。
Next.js v15とAuth.js v5を使ってKeycloakと連携したログイン機能の実装方法について学習した内容を説明します。特にSessionProviderの設定、ミドルウェアを使用した認証制御、複数のミドルウェアの組み合わせ方など、具体的な実装例を交えて解説していきます。
データベースのテーブル継承における3つの主要な戦略(単一テーブル継承、具象テーブル継承、クラステーブル継承)について学習した内容を説明します。それぞれの戦略のメリット・デメリットを比較し、sqlcを使用した具体的な実装例を通して解説していきます。
Pydantic Settingsを使用してCLIアプリケーションを作成する方法について学習した内容を説明します。特にリスト、辞書型、Enum型のオプション設定方法や、サブコマンドの実装方法、Booleanフラグの扱い方など、具体的な実装例を通して解説していきます。
AWS Systems Manager AutomationでタグベースのEC2インスタンス停止を実装する方法を説明します。事前定義済みのランブック「AWS-StopEC2Instance」を使用した基本的な実行方法と、レート制御を利用した複数インスタンスの一括停止方法について、具体的な手順を解説します。
KeycloakのアクセストークンにあるAudience(aud)クレームの設定方法について学習した内容を説明します。デフォルトで「account」となっているaudを変更する2つの方法(クライアントロールを使用した自動追加とハードコード)について、具体的な設定手順を解説していきます。
OAuth2 ProxyとKeycloakを使って認証を実装する方法について学習した内容を説明します。Docker ComposeでKeycloak、Nginx、OAuth2 Proxyを構築し、既存のアプリケーションに変更を加えることなく認証機能を追加する方法を、環境構築から設定まで具体的に解説していきます。
Firebase Authentication について学習した記録です。
Keycloakで Financial-grade API (FAPI) Baselineに対応するクライアントをGo言語で実装する方法について学習した内容を説明します。特にFAPIが要求するPKCEの使用、client_secret_jwtやprivate_key_jwtによるクライアント認証、HTTPSの導入について、具体的な実装例を交えて解説していきます。
Keycloakの新機能であるパスキー(Passkey)を使ったパスワードレス認証について学習した内容を説明します。パスキーの概要から実際の設定手順、さらにTerraformを使った自動化まで、具体的な実装方法を解説していきます。特にAuthentication Flowの設定とそのモジュール化について詳しく説明します。
Keycloakのロールベースのアクセス制御について学習しました。レルムロール、クライアントロール、グループロールの設定方法や、各ロールがアクセストークンにどのように反映されるのか、具体的な実装例を使って紹介していきます。
Terraformのtargetオプション使用時に生じる2つの疑問点について検証します。モジュール間の依存関係がある場合に、planやapplyの挙動がどのようになるのか、VPCとSecurity Groupのモジュールを例に実践的に確認していきます。
keycloakify を使うと React で Keycloak のカスタムテーマを作成することができます。keycloakify-starter を使用すると、環境構築が簡単にできます。この記事では、VS Code と devcontainer を使って keycloakify-starter をセットアップします。
Keycloakのログアウト機能の実装方法について学習した内容を説明します。特にRP-Initiated LogoutとAPIサーバーから直接リクエストを送信する2つの方法、そしてCookieに保存されたトークンの削除方法について、具体的な実装例を交えて解説していきます。
OpenID Providerから取得したリフレッシュトークンを使って、アクセストークンを再取得する方法について学習した内容を説明します。特にトークンの有効期限の設定方法や保存場所の選択、実際のコードでの実装方法について、具体的な例を交えて解説していきます。
Authorization Code FlowでOpenID Providerからトークンを取得する際のセキュリティ対策について学習した内容を説明します。特にstate、nonce、PKCEの実装方法や、それぞれのパラメータがどのような攻撃を防ぐのか、具体的なコード例を交えながら解説していきます。
Go言語でAPIサーバーを作成し、Keycloakとのやり取りを通じてAuthorization Code Flowについて学習した内容を説明します。認可コードの取得からトークンの検証まで、特にセキュリティ面での実装方法について、具体的なコード例を交えながら解説していきます。
Keycloakのチュートリアルを通じて基本機能を学び、その後TerraformのKeycloak Providerを使ってリソースを管理する方法について学習した内容を説明します。特にレルムの作成、ユーザー管理、クライアントの設定など、具体的な実装例を交えながら解説していきます。
データベースのスナップショットを作成したAWSアカウントから別のアカウントにコピーする方法について説明します。特に、スナップショットの暗号化に使用するカスタマーマネージドキー(CMK)の設定方法と、アカウント間でのスナップショット共有の手順を、具体的に解説していきます。
Ubuntuイメージを使用してLimaでVMを立ち上げ、その上でNICE DCVを起動します。これにより、Mac上からWebブラウザでアクセス可能な仮想環境を簡単に作成できます。
ローカル環境(M1 Mac)からAnsibleを実行してEC2インスタンスを設定する方法について説明します。Session Managerを使用したSSH接続方法と、community.awsコレクションを利用した接続方法の2つのアプローチを、具体的な実装手順と共に解説していきます。
PackerとAnsibleを使用してDockerイメージを作成する方法について説明します。特にDockerプラグインの設定方法、Ansibleを使用したnginxのインストール方法、NICE DCVの設定など、具体的な実装手順を段階的に解説していきます。
PackerとAnsibleを使用してAWS AMIを作成する方法について説明します。特にSession Managerを利用したEC2インスタンスへの接続方法や、Ansibleを使用したnginxのインストール方法など、具体的な実装手順をTerraformのコード例と共に紹介していきます。
NodeJS を rtx を使ってバージョン管理している場合、VSCode からコードのコミットを実行すると npx command not found というエラーになり husky がうまく動作しません。 pre-commit にコマンドを追加することで解決します。
NICE DCV を使ってUbuntuイメージで立ち上げたEC2インスタンスにリモートデスクトップを実装する方法について学習した内容を説明します。WebSocketベースのプロトコルを使用したDCVサーバーの構築から、Webブラウザからのアクセス方法まで、具体的な手順を解説していきます。
MacからUbuntu EC2インスタンスにVNC接続する方法について説明します。Terraformを使用したEC2インスタンスの構築方法、Session Managerを利用したSSH接続、VNCサーバーのインストールと設定方法など、具体的な手順を解説していきます。
Pythonのデータバリデーションツールpydanticの基本的な使い方について説明します。dict型データの扱いにくさを解消するため、pydanticのデータクラスを使用して型安全な実装方法を、具体的なコード例を交えながら紹介していきます。
boto3 を stub する方法について調査すると、ネットには stubber と unittest の組み合わせを使った方法が多く紹介されていました。しかし stubber と pytest の mock を組み合わせたは記事が少ないように感じたため、今回は boto3 を pytest の monkeypatch で stub する方法を備忘録として残します。
Go1.21 から新しく `log/slog` が追加されました。今回は `slog`に関するブログとドキュメントを読んで学んだことを備忘録として残します。
AWS をはじめとするクラウドや Kubernetes に触れていると、IaC を実践するために Terraform や Helm に触れる機会が多くなります。今回は、静的解析ツールと reviewdog を組み合わせたレビューの自動化について提案したいと思います。
業務でHelmの静的解析をするために、Trivy、Kics、Checkovについて調べてみたので、メモを残します。
Cloudflareがdevドメインに対応したらしいので、Google Domainsから移行します。
AWSのコスト分析をより効率的に行うため、CURのデータをS3に保存し、Athenaで分析する環境をTerraformで構築する方法を説明します。AWS Glueクローラーを使用して自動的にデータカタログを更新し、S3イベント通知とSQSを組み合わせて効率的なデータ処理を実現します。
Python で GET リクエストを実行する際、ページネーションの処理が必要な場合があります。AWS SDK のようなライブラリは Paginator クラスなどの実装が用意されていますが、REST API を使用するために HTTP クライアントを使う場合は、自分でページネーションの実装を行う必要があります。今回はaiohttpを使ってページネーションの処理を書いてみます。
ローカル環境に立ち上げたKubernetesクラスターにIngressを作成し、localhostにcurlできる環境をKustomize、Helm両方で作成します。
KubernetesのPodDisruptionBudget(PDB)について、基本概念や用途を解説します。Kind環境での実践的な検証例を示しながら、AWS EKSアップデート時に重要となるリソース制御の方法を学びます。環境構築手順やバージョン情報も併せて紹介します。
Kubernetes上で運用しているアプリケーションのデータベースマイグレーション方法について、様々なアプローチを検討します。手動実行、EC2インスタンス利用、CI実行、Init Containers使用、Kubernetes Job使用の5つの方法を比較し、最終的にHelmのhookを使用した実装方法を選択した過程を解説していきます。
プライベートサブネットに配置したEC2インスタンスにAWS Systems Manager(SSM)経由でログインする方法について説明します。AWSマネジメントコンソールからのアクセスと、ローカルPCからのaws ssm session-startコマンドによるアクセス、両方の実現方法を、Terraformを使って解説していきます。
EC2インスタンスをpublicサブネットに配置し、AWS Systems Manager Session Managerを使用してアクセスする方法について学習した内容を説明します。Terraformを使った環境構築から、マネジメントコンソールやCLIからのアクセス方法まで、具体的な手順を解説していきます。
2023年から個人ブログをHugoに書き出しましたが、ブログを書いていると自分好みにカスタマイズしたい欲が出たので、Astroで作りました。
GitHubを使用している組織が、CI/CDのデータを収集したりするためにGitHubのREST APIを使うことがあると思います。このとき言語としてはPythonが選ばれることが多いと思い、今回はPython + GitHub AppsでAPIを実行します。
GitLab CIのruleを使うと、いろいろな条件でパイプラインの実行を制御できます。その際にrulesキーワードを使用するのですが、理解が怪しかったので、実際に触りながら検証しいきます。
https://gitlab.com/ にあるリポジトリが持ってるgitlab-ci.ymlをローカルで立ち上げたDockerで実行してみます。
M1 MacにGitlab CIのrunnerのみをローカル環境で実行し、気軽に検証できる環境を構築します。
ExpressでGraceful Shutdownを設定した場合、リクエストがどのように見えるのか確認してみます。
awsでデータの一覧を取得するときnext tokenやcursorを指定したforループでページごとにデータを取得することがあると思います。しかしaws sdkにはpaginationをいい感じに扱える関数があるので、これを利用すると簡単にデータを取得できます。
今まで、AWSの資格を一度も受けたことがなかったので、備忘録として予約の取り方、勉強方法などを書きます。
cusrorを使ったページネーションは、ページネーションの一種で、データベースのクエリ結果やAPIのレスポンスにおいて、特定の位置を指定して結果を取得する方法です。今回はPrismaを使ってどうやってcursorベースのページネーションをするのか検証してみます。
あるデータをupdateで更新するのと一緒に、それと関連するデータ(中間テーブルにあるデータ)も更新したい場合、どのようにPrismaを書けば良いのでしょうか? この記事では、中間テーブルのデータも一緒にupdateする方法を考えます。
ネストしたデータ構造をフラットなデータにする方法は検索すれば、たくさん出てきます。しかし、フラットなデータをネストしたデータに変換するような記事はなかなか見当たりません。今回はそれをどうやってコードで実現するのかTypeScriptで考えてみようと思います。
M1 Macにlimaで起動したLinuxインスタンスを使って、DockerのMySQLを起動しようとしたところ複数のエラーでハマったので、備忘録としてブログにします。"read-only file system"、"permission denied"、"exec format error"、"[ERROR] [MY-010259] [Server] Another process with pid 63 is using unix socket file"を解決します。
TypeScriptでDateを使った期間の重複をマージして考える必要が出たので、マージを実現するコードを考えてみました。Go言語でも実装してみました。
CloudflareのTerraform providerを使用してCloudflare Pagesの環境構築を自動化する方法について学習した内容を説明します。特にゾーンの作成、プロジェクトの設定、カスタムドメインの設定、APIトークンの発行など、具体的な実装手順を解説していきます。
CloudflareのAPIを実行する際に発生したPermission Group一覧取得の問題について学習した内容を説明します。特に「Error: error listing API Token Permission Groups: Unauthorized」というエラーの原因と、カスタムトークンではなく追加トークンを使用することによる解決方法について解説していきます。
Github Actionsを使ってCloudflare Pagesのプレビュー環境と本番環境にデプロイします。しかし、Github ActionsとCloudflare Pagesのプレビュー環境の相性が良くないので、設定も考えてみます。
HugoのHBT(Hugo Bootstrap Theme)で作成したブログを、Cloudflare Pagesにアカウント作成から独自ドメインの設定までして公開します。