ネットワークとセキュリティ設定
CORS
CORS(クロスオリジンリソース共有)を設定するには、次の依存関係をインストールする必要があります。
pip install apache-superset[cors]
superset_config.py
内の次のキーを指定して、CORSを設定できます。
ENABLE_CORS
: CORSを有効にするにはTrue
に設定する必要があります。CORS_OPTIONS
: Flask-CORSに渡されるオプション(ドキュメント)
HTTPヘッダー
Supersetはflask-talismanをバンドルしています。これは、一般的なWebアプリケーションのセキュリティ問題を回避するのに役立つHTTPヘッダーの設定を処理する小さなFlask拡張機能です。
ダッシュボードとチャートのHTML埋め込み
ダッシュボードを埋め込む方法は2つあります。 SDKを使用するか、直接リンクを埋め込むかのどちらかです。後者の場合、リンクを知っている人は誰でもダッシュボードにアクセスできることに注意してください。
ダッシュボードへの公開直接リンクの埋め込み
これはまず、flask-talismanのコンテンツセキュリティポリシー(CSP)を変更して、特定のドメインでSupersetコンテンツを表示できるようにします。その後、ダッシュボードを公開アクセス可能にすることができます(つまり、**認証をバイパス**します)。公開されると、ダッシュボードのURLを別のWebサイトのHTMLコードのiframeに追加できます。
flask-talisman CSPの変更
superset_config.py
に、config.py
からのTALISMAN_CONFIG
セクション全体を追加し、frame-ancestors
セクションを含めます。
TALISMAN_ENABLED = True
TALISMAN_CONFIG = {
"content_security_policy": {
...
"frame-ancestors": ["*.my-domain.com", "*.another-domain.com"],
...
この設定変更を有効にするには、Supersetを再起動します。
ダッシュボードの公開化
公開ダッシュボードの埋め込み
これで、誰でもダッシュボードのURLに直接アクセスできるようになります。次のようにiframeに埋め込むことができます。
<iframe
width="600"
height="400"
seamless
frameBorder="0"
scrolling="no"
src="https://superset.my-domain.com/superset/dashboard/10/?standalone=1&height=400"
>
</iframe>
チャートの埋め込み
チャートの埋め込みコードは、チャートの編集ビューに移動し、右上の...
> 共有
> 埋め込みコード
をクリックして生成できます。
SDKによる埋め込みの有効化
ダッシュボードの概要ページの右上にあるダッシュボードの編集
の横にある...
をクリックすると、「ダッシュボードの埋め込み」エントリを含むドロップダウンメニューが表示されます。
このエントリを有効にするには、次の行を.env
ファイルに追加します。
SUPERSET_FEATURE_EMBEDDED_SUPERSET=true
CSRF設定
同様に、flask-wtfを使用して、いくつかのCSRF設定を管理します。エンドポイントをCSRFから除外する必要がある場合(カスタム認証ポストバックエンドポイントを実行している場合など)、エンドポイントをWTF_CSRF_EXEMPT_LIST
に追加できます。
SSHトンネリング
-
機能フラグを有効にする
SSH_TUNNELING
をTrue
に変更します。- トンネルの確立時にセキュリティを強化したい場合は、こちらで
SSHTunnelManager
クラスを上書きできます。 SSH_TUNNEL_LOCAL_BIND_ADDRESS
も設定できます。これは、トンネルがVPCでアクセスできるホストアドレスです。
-
SSHトンネルを有効にしてデータベースを作成する
- 機能フラグを有効にすると、SSHトンネルのトグルが表示されます。
- トグルをクリックしてSSHトンネリングを有効にし、必要に応じて資格情報を入力します。
- Supersetは、2種類の認証(Basicと秘密鍵)をサポートしています。これらの資格情報は、サービスプロバイダーから取得する必要があります。
-
データの転送を確認する
- SSHトンネリングが有効になったら、SQL Labに移動してクエリを記述し、データが正しく転送されていることを確認します。
ドメインシャード化
Chromeは、ドメインごとに一度に最大6つのオープン接続を許可します。ダッシュボードに6つ以上のスライスがある場合、多くの場合、フェッチ要求がキューに入れられ、次の利用可能なソケットを待ちます。PR 5039はSupersetにドメインシャード化を追加します。この機能は設定によってのみ有効になります(デフォルトでは、Supersetはクロスドメイン要求を許可しません)。
superset_config.py
ファイルに次の設定を追加します。
SUPERSET_WEBSERVER_DOMAINS
: ドメインシャード化機能で許可されるホスト名のリスト。
新しいドメインで認証が正しく機能するように、ドメインシャードをメインドメインのサブドメインとして作成してください。例:
SUPERSET_WEBSERVER_DOMAINS=['superset-1.mydomain.com','superset-2.mydomain.com','superset-3.mydomain.com','superset-4.mydomain.com']
または、ドメインシャードがメインドメインのサブドメインでない場合は、superset_config.py
ファイルに次の設定を追加します。
SESSION_COOKIE_DOMAIN = '.mydomain.com'
ミドルウェア
Supersetでは、独自のミドルウェアを追加できます。独自のミドルウェアを追加するには、superset_config.py
のADDITIONAL_MIDDLEWARE
キーを更新します。ADDITIONAL_MIDDLEWARE
は、追加のミドルウェアクラスのリストである必要があります。
たとえば、nginxなどのプロキシサーバーの背後からAUTH_REMOTE_USER
を使用するには、HTTP_X_PROXY_REMOTE_USER
(またはプロキシからのその他のカスタムヘッダー)の値をGunicornのREMOTE_USER
環境変数に追加する単純なミドルウェアクラスを追加する必要があります。