はじめに
GLUGの小林です。 テストサーバなどで、社内からのアクセスに制限したいときってよくありますよね。
あたりがよくありますが
というところで難点が。 そこで署名付きCookieと、弊社ではGoogle G Sutieを使っているので、Google認証を組み合わせて制限をかけます。
仕組み
- 認証用のエンドポイントへアクセス
- Googleの認証画面へリダイレクト
- Googleでの認証
- 認証完了後のcallback
- tokenを使ってGoogleのユーザー情報取得
- 署名付きCookieを発行
1と5のURLにはアクセス制限をかけないようにしてください。
事前準備
認証用のURLは http(s)://{hostname}/oauth/login CallbackのURLは http(s)://{hostname}//oauth/callback です。
デプロイ
ソースはGitHubにあります。 Goがインストール済みである必要があります。
ツールの入手
$ git clone git@github.com:n06uk06a/oid_connect.git $ cd oid_connect
ビルド
GOOS=linux go build -o build/oidc
環境変数の設定
名前 | 内容 |
---|---|
KMSPrincipal | KMSマスターキーのARN |
KMSAliasParameter | KMSマスターキーを格納しているパラメータのAlias |
OAuthClientID | GoogleのOAuth2のClient ID |
OAuthClientSecret | GoogleのOAuth2のClientシークレット |
CFKeyID | CloudFrontに設定したキーペアのキーのID |
CFKey | CloudFrontに設定したキーペアのキー |
URLPattern | Cookieに設定する許可するURLのパターン |
JWSKey | 仕組みの2でJWSを発行し、5で確認するためのキー(適当なもので) |
HostedDomain | G Suiteのドメイン |
デプロイ
$ aws cloudformation package \ --template-file template.yaml \ --s3-bucket ${BUCKET_NAME} \ --output-template-file package.yaml
$ aws cloudformation deploy \ --template-file package.yaml \ --stack-name OIDConnect \ --capabilities CAPABILITY_IAM \ --parameter-overrides \ KMSPrincipal=${KMS_KEY_ADMIN_ARN} \ KMSAliasParameter=${KMS_ALIAS} \ OAuthClientID=${OAUTH2_CLIENT_ID} \ OAuthClientSecret=${OAuthClientSecret} \ CFKeyID=${CLOUDFROMT_KEY_ID} \ CFKey=${CFKey} \ URLPattern=${URL_PATTERN} \ JWSKey=${JWSKey} \ HostedDomain=${GOOGLE_HOSTED_DOMAIN}
注意点
とりあえず有効期限を1時間にしていたり、ドメイン1個だけ許可していたり、認証要求やCallbackのパスとかが固定だったりするので、その辺はカスタマイズしてください。あとCookie使うので、同じDistribution(同じドメイン)に入れておかないとハマります(ハマりました)