有没有办法保护我在客户拥有的AWS帐户上运行的R代码?

有没有办法保护我在客户拥有的AWS帐户上运行的R代码?,r,amazon-web-services,amazon-ec2,deployment,etl,R,Amazon Web Services,Amazon Ec2,Deployment,Etl,我刚刚加入了一家公司,该公司需要在客户拥有的AWS帐户中构建ETL管道。 ETL管道中有一部分运行一个用R编写的代码。问题是,这个R代码是我们业务中非常重要的一部分,也是我们的智能属性。我们的客户看不到此代码。 有没有办法在他们的AWS环境中运行,而不让他们访问我们的代码?R是不可编译的,所以我们不能只在那里部署一个可执行文件。我们必须在他们的环境中运行它。我建议创建一个API在我们的AWS环境中运行它,但这不是一个选项。根据我的经验,在这样的情况下,我已经意识到了这些选项,按照难度的增加顺序:

我刚刚加入了一家公司,该公司需要在客户拥有的AWS帐户中构建ETL管道。 ETL管道中有一部分运行一个用R编写的代码。问题是,这个R代码是我们业务中非常重要的一部分,也是我们的智能属性。我们的客户看不到此代码。
有没有办法在他们的AWS环境中运行,而不让他们访问我们的代码?R是不可编译的,所以我们不能只在那里部署一个可执行文件。我们必须在他们的环境中运行它。我建议创建一个API在我们的AWS环境中运行它,但这不是一个选项。

根据我的经验,在这样的情况下,我已经意识到了这些选项,按照难度的增加顺序:

  • 把计算从前提中去掉。这听起来不是你的选择

  • 生成一个API(例如,
    Shining
    opencpu
    Plumberer
    ),该API可从其场所调用。这可能需要一些技巧,因为我推断(因为他们希望在自己的环境中完成这一切),他们可能更喜欢锁定计算(可能禁用网络访问)

  • 重写
    Rcpp
    中的敏感部分。虽然这确实有可能提高速度的好处,但这使他们更难“发现”潜在的知识产权。认识到R和
    Rcpp
    都是GPL,这意味着通过R链接的任何东西都必须是GPL,这意味着源代码可用。(既然你没有公开,你可以在这里为你的案件辩护,这是可行的,但我不是律师,也不想成为第一个在GPL法律错误的一方找到的顾问。同样,伊纳尔。)

  • 重写非R可执行文件中的敏感部分(请注意,我没有说“作为非R库并通过R调用链接到它”,因为链接操作会用R的GPL污染库)。此可执行文件可由其他可发布的R包调用(通过
    system
    processx::run

    (对于记录,这里可以推断C或C++,但是其他高级语言允许编译的可执行文件而不是GPL。Python有一些这样的模式。一定要混淆变量:-)/P><


    我认为您的“最安全”选项是#2和#4。

    这段代码是否在他们帐户中的EC2实例上运行?如果不是,ETL工作流是什么样子的?有没有办法在您的帐户中运行该步骤,使用跨帐户角色访问他们的数据?不幸的是,确实如此。如果a有这个选项,我会在我们的环境中将代码作为API部署,但这不是一个选项,客户机要求脚本在他们的前提下执行。