web-dev-qa-db-ja.com

R Shinyアプリケーションのセキュリティ

R Shiny Webアプリケーション( http://www.rstudio.com/shiny/ )をWeb上で公開したいのですが、パスワードで保護して、資格情報を持つ人だけが何を表示できるようにします公開しました。これを行う最良の方法は何ですか?

34

これは少し遅れるかもしれませんが、とにかく答えます。すでに解決策を持っている場合、それを私たちと共有してください。

私の主な目的は非常にシンプルでした。私はラップトップ上で光沢のあるアプリの作業バージョンを持っていました。ローカルでテストするために、以下で説明するように実行していました。

R -e "shiny::runApp('.')"

それから、Amazon EC2インスタンスにこれを配置する必要がありました。

最初は、アプリがリッスンするポート8100にApacheを直接プロキシしようとしました。しかし、この方法でサーバーを実行すると、実際にはrawソケットが使用され、shiny-serverの使用はsock.jsの使用にフォールバックするため、通信はHTTP経由で行われるように見えるため、うまくいきませんでした。

次の手順に従ってEC2インスタンスにshiny-serverアプリをダウンロードしました: https://github.com/rstudio/shiny-server

ところで、RHELインスタンスを使用している場合は、ソースからnode.jsをインストールするように指示されていますが、yumのインストール方法を使用することで、かなりうまく機能しました。 これらの手順はここにあります。

Node.js、shiny-serverのインストールとセットアップに従って、Apache confを編集しました(UbuntuとRHELはconfを異なる方法で呼び出します。したがって、持っているものを編集します)。リクエストを処理する仮想ホストを追加しました。また、お気づきのように、Apache Locationディレクティブを使用してApache Basicダイジェスト認証でマスクしました。

<VirtualHost *:80>

    ProxyPass / http://localhost:3838/
    ProxyPassReverse / http://localhost:3838/
    ProxyPreserveHost On

    <Location />
        AuthType Basic
        AuthName "Restricted Access - Authenticate"
        AuthUserFile /etc/httpd/htpasswd.users
        Require valid-user
    </Location>

</VirtualHost>

これとは別に、shiny-server confも編集して、127.0.0.1からのリクエストのみをリッスンします(localhostのみ)。私の光沢のあるサーバーには次のものがあります:

listen 3838 127.0.0.1;

ところで、Amazon EC2環境ではEC2ダッシュボードのsecurity-group設定を使用して同じことを行うことができるため、これは必要ありません。とにかくこれを良い方法としてやった。

今のところ、これは非常に迅速でシンプルなものを探していたので十分です。

エンタープライズ版の契約の一環として、素晴らしいRShinyの人々がauthを提供するのを必死に待っています。

お役に立てれば。

23
shingav

これは、OPではlittle遅くなる可能性がありますが、ユースケースには役立つ場合があります。

https://auth0.com/blog/2015/09/24/adding-authentication-to-shiny-open-source-edition/

Rohithの答えに似ていますが、代わりにAuth0を使用しているため、より多くの認証オプション(接続、Googleアカウント、Active Directory、LDAPなど)を使用できます。

免責事項:私はAuth0で働いています。この構成で内部的にShinyを使用しており、正常に動作します。

9
Sicarul

もう少し遅れますが、プロキシとしてngnixを使用する別のオプションが見つかりました。

このガイドは、次のガイドラインに従って部分的に完了しています: https://support.rstudio.com/hc/en-us/articles/213733868-Running-Shiny-Server-with-a-Proxy

Ubuntu 14.04の場合:

  1. Nginxをインストールする
  2. ファイル構成/etc/nginx/nginx.confを次のように変更します。

この:

events {
        worker_connections 768;
        multi_accept on;
}

http {

  map $http_upgrade $connection_upgrade {
      default upgrade;
      ''      close;
    }

  server {
    listen XX;



    location / {
      proxy_pass http://localhost:YY;
      proxy_redirect http://localhost:YY/ $scheme://$Host/;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
      proxy_read_timeout 20d;

      auth_basic "Restricted Content";
      auth_basic_user_file /etc/nginx/.htpasswd;
    }
  }
}

XX:nginxがリッスンするポート

YY:光沢のあるサーバーが使用するポート

  1. このチュートリアルを使用して、nginxサーバーにパスワード認証を追加しました: https://www.digitalocean.com/community/tutorials/how-to-set-up-password-authentication-with-nginx-on-ubuntu -14-04

  2. Localhost(127.0.0.1)のみをリッスンするように、光沢のあるプロセスまたは光沢のあるサーバーを設定します

4

これは、HTTP機能ではなく、Shiny要件と見なすことができます。その場合、最初にHTTP認証を実装することを検討し、資格情報を確認したら、ShinyアプリのURLにリダイレクトできます。

SOまたは基本認証用のWebを検索すると、いくつかの便利なリンクが表示され、より近くに移動できます。

2
Ram Narasimhan

現時点では、これを行う簡単な方法はありません。ただし、近い将来、Shiny Serverの商用バージョンをリリースする予定です。私たちは、来月かそこらでベータを行い、年末までに公式リリースを行います。これには、Shiny Appsのパスワード認証機能が含まれます。さらに、Shiny Server Proには、セキュリティ、認証、スケーラビリティ、サーバー監視、およびプレミアムサポートに関する機能があります。

フィードバックを得ることができる別の場所は、 Shiny Mailing List です。いくつかのアイデアを持っているかもしれないアクティブなユーザーがたくさんいます。それ以外の場合、これについて直接お問い合わせをご希望の場合は、info @ rstudio.comにメールしてください。返信させていただきます。

ベスト、

ジョシュ

プロダクトマネージャー-RStudio

1
Josh Paulson