【问题标题】:How to pass environment variables to shinyapps如何将环境变量传递给 Shinyapps
【发布时间】:2016-08-22 16:17:19
【问题描述】:

我想将安全参数传递给 shinyapps.io 部署,以便我的应用程序可以通过以下方式获取它们:

Sys.getenv('PASSWORD_X')

我在 rsconnect 包的 deployApp 函数中找不到任何相关内容。

【问题讨论】:

  • 一般来说是个好问题。但是关于安全性的说明,一旦您将这些参数传递给 shinyapps.io,它们就不再安全:您已将它们提供给第三方。
  • 好吧,任何第三方都是如此,例如亚马逊会有我们的钥匙
  • 顺便说一句,任何其他发送密钥以便应用程序可以从 S3 读取的方法都会有所帮助。我当前的选项是在文本文件(例如 json)中发送密钥,但无论如何我都必须设置环境变量,因为所有与 aws 相关的包都是以这种方式实现的。
  • 如果您在 EC2 实例上使用环境变量作为机密信息,如果您真的相信“Amazon 将拥有您的密钥”,那么您将不得不严重怀疑 Amazon EC2 管理员或其虚拟机管理程序的实施。跨度>
  • @hrbrmstr 你是对的,我不相信。 Shiny 也是如此。

标签: r shiny


【解决方案1】:

您可以使用 Renviron.site.Renviron 将私有数据存储和访问到您闪亮的应用程序中。 (see here for Hadley Wickham's recommendations and instructions - ref example below)。


解决方案:

存储 API 身份验证密钥/令牌 (Attribution: Hadley Wickham)

如果您的包支持基于 API 密钥或令牌的身份验证工作流程,请鼓励用户将其存储在环境变量中。我们使用包装了 Github v3 API 的 github R 包来说明这一点。根据您的 API + 包定制此模板并包含在 README.md 或小插图中。

  1. 在个人访问令牌区域创建个人访问令牌 您的 GitHub 个人设置。将令牌复制到剪贴板。
  2. 确定您的主目录。没有把握?在 R 中输入 normalizePath("~/") 安慰。
  3. 创建一个新的文本文件。如果在 RStudio 中,请执行 File > New File > 文本文件。
  4. 像这样创建一行:

    GITHUB_PAT=blahblahblahblahblahblah

名称 GITHUB_PAT 提醒您这是用于哪个 API,blahblahblahblahblahblah 是您的个人访问令牌,从剪贴板粘贴。

  1. 确保文件中的最后一行为空(如果不是,R 将静默加载文件失败。如果您使用显示行号的编辑器,则应该有两行,其中第二个是空的。

  2. 使用文件名 .Renviron 保存在您的主目录中。如果被问到, 是的,您确实想使用以点开头的文件名 ..

    • 请注意,默认情况下,点文件通常是隐藏的。但在 RStudio 中,文件浏览器将使 .Renviron 可见,因此将来易于编辑。
  3. 重新启动 R。.Renviron 仅在 R 会话开始时处理。

  4. 使用 Sys.getenv() 访问您的令牌。例如,以下是如何将 GITHUB_PAT 与 github 包一起使用:

    library(github)
    ctx <- create.github.context(access_token = Sys.getenv("GITHUB_PAT"))
    # ... proceed to use other package functions to open issues, etc.
    

常见问题解答:为什么要通过 .Renviron 而不是在 .bash_profile 或 .bashrc 中定义此环境变量?

因为有许多操作系统和运行 R 的方式的组合,其中 .Renviron 方法“正常工作”,而 bash 的东西却不行。当 R 是 Emacs 或 RStudio 的子进程时,您不能总是指望将环境变量传递给 R。将它们放在特定于 R 的启动文件中,这样可以省去一些麻烦。

【讨论】:

  • 您可以删除有关 s3 的详细信息,这是一个示例,但与解决方案无关。查看.Renviron,我认为这就是我真正需要的。需要用 shinyapps 测试一下。
  • 乐于助人——保重
  • 在我的 Shiny 应用程序的根目录中创建了 .Renviron 文件的副本后,这对我有用。
  • 从安全的角度来看,将.Renviron 中的 API 密钥部署到 shinyapps.io 是否安全?
  • 劳伦,我相信如此受制于文件权限。就个人而言,我不相信那个答案会轻笑。您可能想通过 security@rstudio.com docs.rstudio.com/shinyapps.io/security-and-compliance.html 与 RStudio 联系我已向 RStudio 发送了一封电子邮件...
猜你喜欢
  • 2013-12-29
  • 2016-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-05
  • 2020-03-27
  • 2017-03-30
相关资源
最近更新 更多