GeekFactory

int128.hatenablog.com

nextcloudとKeycloakのSAML SSO

TL;DR nextcloudはオープンソースのファイルストレージサービスです。SAML SSOに対応しています。 Keycloakはオープンソースの統合ID管理ツールです。OpenID ConnectやSAMLによる認証を提供しています。 以下の環境で確認しています。 nextcloud 12.0 Keyclo…

Deploy static site on nginx pod

滅多に変更しない静的ページを配置したい時に便利です。 apiVersion: v1 kind: ConfigMap metadata: name: landing-page data: index.html: | <html> <body> <h2>Welcome</h2> </body> </html> --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: landing-page spec: rules: - …

KeycloakのOpenID ConnectでKubernetesにアクセスする

TL;DR Kubernetesの認証はクライアント証明書やID/パスワードだけでなく、OpenID Connectに対応している。 RBACを設定することで、ユーザやグループによるアクセス制御ができる。 以下の設定が必要になる。 Keycloak(OpenID Connect IdP) kube-apiserver(…

Keycloakでユーザ管理してJIRAやConfluenceにログインする(SAML SSO)

KeycloakとJIRAやConfluenceでSAML SSOを設定する方法を説明します。KeycloakでID管理を行いながら、JIRAやConfluenceにSSOできるので便利です。 TL;DR Keycloakはオープンソースの統合ID管理ツールです。OpenID ConnectやSAMLによる認証を提供しています。…

kubectl completionの遅延実行によるzshの起動時間短縮

kubectl にはシェルの補完機能が用意されています。 .zshrc で補完機能を有効化するとzshの起動に時間がかかるため、補完機能の有効化を遅延実行するようにしてみました。 具体的には、 kubectl コマンドの初回実行時のみ source <(kubectl completion zsh) …

2017年の振り返り

2017年のアウトプットを振り返り。 ブクマとスターを合わせて多い順から。 2018年もよろしくお願いします。

Kubernetes nodesをMulti-AZからSingle-AZに移行した

kopsで運用しているKubernetes nodesをMulti-AZからSingle-AZに移行したので作業メモを残しておきます。 us-west-2b や us-west-2c にあるNodesとPersistent Volumesを us-west-2a に移行します。Masterは us-west-2a のままにします。 kops 1.8.0, Kubernet…

VPC内部からALBにアクセスする場合の設計

aws

AWSでALBを使う場合に、インターネット側のIPアドレスを制限しながら、VPC内部から同じFQDNでサービスにアクセスできるようにしたい。 TL;DR Requirement: インターネットから https://api.example.com でサービスにアクセスできること EC2から https://api.…

Keycloakでユーザ管理してGitLabやMattermostにログインする(SAML SSO)

KeycloakとGitLabでSAML SSOを設定する方法を説明します。ユーザ管理をKeycloakで行いながら、GitLabやMattermostにSSOできるのでとても便利です。 TL;DR Keycloakはオープンソースの統合ID管理ツールです。OpenID ConnectやSAMLによる認証を提供しています…

GitLabでRDS for PostgreSQLを使う

GitLabでRDS for PostgreSQLを使う場合にハマったのでメモです。 TL;DR GitLabを起動した時のマイグレーションスクリプトで CREATE EXTENSION pg_trgm; が実行されます。 一般ユーザは CREATE EXTENSION の権限を持っていないのでエラーが発生します。 あら…

GKE with HTTPS by kube-lego

GKEでHTTPSを使う場合のメモです。 kube-legoのサンプルに書いてある通りですが、一部注意が必要です。 github.com まず、kube-legoをデプロイします。 cd lego vim configmap.yaml #...snip data: # modify this to specify your address lego.email: "int1…

AWSでメールを受信してLambdaで処理する

AWSでメールを受信してLambdaで処理するには以下の方法があります。 SES→S3, SES→Lambda SES→SNS→Lambda 大きなメールを受信したい場合は1を選びます。1はS3にメールを格納してから読みに行くため、サイズの大きなメールも受信できます。2では160kB以下のメ…

How to upgrade to ownCloud 10

This will explain how to upgrade ownCloud on Docker Compose. Pull a new image. # docker-compose pull owncloud Run migration. # docker-compose exec --user www-data owncloud /bin/bash $ php occ upgrade If error occurred, remove /apps and ext…

WSLでIDEAを使う

wsl

WSL(Bash on Windows)でIDEA(IntelliJ)を使い始めて少し経ったので雑感をまとめてみます。 IDEAにはJDKなしとJDKありがあります。IDEAに同梱されているJDKはフォントレンダラーが改善されているため、JDKありを使った方がフォントが綺麗になります。これ…

Springでリクエストとレスポンスのログを出力する

Spring MVCでリクエストとレスポンスのログを出力する方法を説明します。 リクエストログだけなら CommonsRequestLoggingFilter もしくは AbstractRequestLoggingFilter を使う方法が簡単です。詳しくは下記の記事で説明しています。 int128.hatenablog.com …

AppEngine + Spring SessionでCookieが出力されない問題

AppEngine/Java + Spring Sessionを使っていて気づいたのですが、セッションの使い方によってクッキーにセッションIDが出力されない場合があります。具体的には以下の場合があります。 Spring SecurityのCSRFフィルタ:OK Spring Securityのログイン:OK Con…

JavaScriptにおけるURLエンコードされたCookieの取得

JavaScriptでURLエンコードされた文字列を変換するには decodeURIComponent を使用しますが、UTF-8以外の場合(Shift-JIS等)は文字コード変換が必要です。encoding.jsを使うと下記のように書けます。 github.com Encoding.codeToString(Encoding.convert(En…

ZipkinのトレースIDを生成して引き継ぐ

ZipkinのトレースIDを引き継ぐ方法のメモです。 ブラウザ or 外部サービス ↓ フロントエンド(トレースIDを生成) ↓ ↓ X-B3-TraceId: xxxx ↓ バックエンドAPI(トレースIDを中継) ↓ ↓ X-B3-TraceId: xxxx ↓ バックエンドAPI フロントエンドがPHPの場合は以…

CircleCIでApp Engine Javaアプリをデプロイする

CircleCI 2.0でGoogle App Engine (Java8 Standard) をデプロイする方法を調べたのでメモ。 google/cloud-sdk イメージを使う。 App Engine SDKとGradleでJavaが必要になるので、 google/cloud-sdk:alpine イメージに openjdk8 を追加する。DebianはJavaの依…

#渋谷java でSwaggerのテンプレートを魔改造した話をした

第二十回 #渋谷java で、複数チームの並行開発におけるSwagger(OpenAPI)の活用についてお話しさせていただきました。 Swaggerのテンプレートを魔改造した話 #渋谷java from Hidetake Iwata www.slideshare.net TL;DR 複数チームが並行開発を行う場合はイ…

Spring Boot + Gradleで依存関係のバージョンが下がる場合の対応策

GradleでSpring Boot Pluginを利用している場合、依存関係のバージョンが勝手に下がることがあります。例えば、 テスティングフレームワークのプロジェクト → spock-core-1.1-groovy-2.4 アプリのプロジェクト → テスティングフレームワークのプロジェクト …

Gradle Swagger Generator Plugin 2.6.0をリリースした

Gradle Swagger Generator Plugin 2.6.0をリリースしました。OpenAPI YAMLのバリデーション、コード生成、Swagger UI生成を行うためのプラグインです。 github.com New features 複数のOpenAPI YAMLを扱う場合に簡潔に記述できるようになりました。これまで…

CloudFront→ELB→EC2構成におけるIPアドレスのアクセス制御

AWSでCloudFront → ELB → EC2の構成を採用する場合に、IPアドレスによるアクセス制御を行う方法を説明します。 方法1: EC2上のWebサーバによるアクセス制御 CloudFrontやELBはリクエストを受けると x-forwarded-for ヘッダにクライアントのIPアドレスを付与…

OpenAPIで同じキーのパラメータを複数受け取る

OpenAPIで同じキーのパラメータを複数受け取りたい場合は collectionFormat: multi を使います。 collectionFormat Determines the format of the array if type array is used. Possible values are: csv - comma separated values foo,bar. ssv - space se…

GitHubのGit Data APIでコミットを作成する

本記事ではGitHub APIを利用してコミットを作成する方法を紹介します。通常はGitクライアントでcommitとpushを行うことでコミットを作成しますが、GitHub APIだけでもコミットを作成できます。 まずはGitのデータ構造を把握しておく必要があります。下図のよ…

Swagger Codegenにおけるカスタムバリデーションの追加

Swagger(OpenAPI)では必須チェック(required: true)や数値型チェック(type: integer)などが用意されており、コード生成時にバリデーションコードを出力できます。しかし、複雑なバリデーションルールを定義するには正規表現に頼らざるを得ないため、YA…

Circle CIでCloud Functionをデプロイする

以前に Circle CIでCloud Functionをデプロイする - GeekFactory というエントリを書きましたが、gcloudコマンドでデプロイする方が簡単でした。gcloudコマンドでデプロイする手順を説明します。 GCPの設定 デプロイに使用するサービスアカウントを作成しま…

Spring Security OAuthにおけるアクセストークン取得失敗時の例外

Spring Security OAuthでアクセストークンの取得に失敗した場合のリトライを設計するため、エラーケースと例外の対応を調べてみました。 アクセストークンの取得をリトライするには以下の2つの方法があります。 アクセストークン取得(AccessTokenProvider#o…

Jenkinsでテストケースを並列実行して所要時間を短縮する

プロダクトが成長するにつれてCIの所要時間が長くなる悩みを抱えている方は多いと思います。本稿では、テストケースの並列実行でスローテストを乗り越える方法を検討します。 CIの所要時間を短縮する戦略 CIの所要時間が長くなる主な原因はテストです。だが…

Circle CIでCloud Functionをデプロイする

Circle CIからGoogle Cloud Functionsに関数をデプロイする方法を調べたのでメモします。 具体的には、GitHub → Circle CI → Cloud Source Repository → Cloud Functionの流れで継続的インテグレーションと継続的デプロイを行います。 開発者がGitHubのリポ…