RedashをGoogle Compute Engineに立てる


RedashをGoogle Compute Engineに立てる手順をまとめました。

環境

  • Google Compute Engine
  • Redash.2.0.0
  • Let's Encrypt

前提条件

  • GCPプロジェクトが作成できていること
  • ドメインが取得できていること

ゴール

  • RedashへGoogle認証でログインできる
  • HTTPS化する

手順

Redashの仮想マシンイメージから仮想マシンを立てる

GCEの仮想マシンイメージを作成。

gcloud compute images create "redash-2-0-0" --source-uri gs://redash-images/redash.2.0.0.b2990.tar.gz

GCEの仮想マシンを起動。推奨は、n1-standard-1だが、g1-smallで始める。
リソースが足りなければ、後でスケールアップする。

gcloud compute instances create redash \
--image redash-2-0-0 --scopes storage-ro,bigquery \
--machine-type g1-small --zone asia-east1-a

GCPのコンソールでファイヤーウォールの設定で、HTTPとHTTPSのトラフィックを許可する。
特定のIPからのみ接続したい場合は、事前に固定IPのみを許容するネットワークタグを作成し、設定する。

外部IPアドレス設定からタイプを"静的"に設定する。

Cloud DNSでドメインと静的IPをマッピングする。

Let's EncryptでHTTPS化する

Let's Encryptのクライアントcertbotをインストールする。

wget https://dl.eff.org/certbot-auto

一時的に、nginxの設定をデフォルトに戻す。

sudo rm /etc/nginx/sites-enabled/redash
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-available/

certbotで証明書を作成する。

./certbot-auto certonly --webroot -w /var/www/html -d {自身のドメイン}

nginxの設定を変更する。

upstream redash_servers {
  server 127.0.0.1:5000;
}

server {
  listen 80;

  # Allow accessing /ping without https. Useful when placing behind load balancer.
  location /ping {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass       http://redash_servers;
  }

  location / {
    # Enforce SSL.
    return 301 https://$host$request_uri;
  }
}

server {
  listen 443 ssl;

  # Make sure to set paths to your certificate .pem and .key files.
  ssl on;
  ssl_certificate /etc/letsencrypt/live/{自身のドメイン}/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/{自身のドメイン}/privkey.pem;

  # Specifies that we don't want to use SSLv2 (insecure) or SSLv3 (exploitable)
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  # Uses the server's ciphers rather than the client's
  ssl_prefer_server_ciphers on;
  # Specifies which ciphers are okay and which are not okay. List taken from https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
  ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";

  access_log /var/log/nginx/redash.access.log;

  gzip on;
  gzip_types *;
  gzip_proxied any;

  location / {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass       http://redash_servers;
    proxy_redirect   off;
  }
}

nginxの設定をもとに戻す。

sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/redash /etc/nginx/sites-available/

nginxを再起動する。

Google認証を有効化する

GoogleのクライアントIDとクライアントシークレットを環境変数に設定する。
/opt/redash/.env に設定すればよい。

export REDASH_GOOGLE_CLIENT_ID=""
export REDASH_GOOGLE_CLIENT_SECRET=""

ドメインを設定する。

cd /opt/redash/current
sudo -u redash bin/run ./manage.py org set_google_apps_domains {自身のドメイン}

参考