【问题标题】:A secure way to verify instance is running within AWS验证实例的安全方法在 AWS 中运行
【发布时间】:2014-09-08 19:49:16
【问题描述】:

我是这个社区的新手,刚刚开始使用 AWS java API 进行开发。我的问题如下:

是否有一种万无一失的安全方法来验证运行 AWS Java API 程序的底层实例是否确实在 AWS 中的实例上运行?

我的要求是明确验证给定实例是否在 AWS 上,并且用户没有在 AWS 之外的本地环境中运行它。我想使用 AWS Java API 来做到这一点。对此的任何指示/建议将不胜感激。

【问题讨论】:

    标签: java amazon-web-services amazon-ec2


    【解决方案1】:

    由于主机系统控制着可执行代码,因此用户总是有可能删除您的检查、模拟 AWS 或系统的任何其他部分。

    没有万无一失的方法可以做你想做的事,因为通常称为the DRM problem

    【讨论】:

      【解决方案2】:

      正如 Michael J Gray 所提到的,由于欺骗或检查消除(基本上有人在没有检查的情况下复制您的代码、修改检查或想办法通过其他方式绕过检查),因此没有万无一失的方法来做到这一点)。

      如果您不担心有人以某种方式绕过您的检查,而只是想在运行之前检查它是否在实例上以防止由于在实例外部运行而可能出现的错误,您可以执行使用以下代码检查实例的 ID:

      public String retrieveInstanceId() throws IOException {
          String EC2Id = null;
          String inputLine;
          URL EC2MetaData = new URL("http://169.254.169.254/latest/meta-data/instance-id");
          URLConnection EC2MD = EC2MetaData.openConnection();
          BufferedReader in = new BufferedReader(new InputStreamReader(EC2MD.getInputStream()));
          while ((inputLine = in.readLine()) != null) {
              EC2Id = inputLine;
          }
          in.close();
          return EC2Id;
      }
      

      如果程序未在 EC2 实例上运行,此方法将返回 null(大约 15-30 秒后)。此外,如果您在一个实例上运行,您可以检索有关该实例的信息,这些信息可能允许您验证它是您的实例,例如读取附加到实例 ID 的特定于实例的标签(这可以让您了解仿真/ “欺骗”问题,如果做得对的话)。

      您可以使用以下方法检查实例信息:

      try {
          myEC2Id = retrieveInstanceId();
      } catch (IOException e1) {
          e1.printStackTrace(getErrorStream());
      }
      DescribeInstancesRequest describeInstanceRequest = new DescribeInstancesRequest().withInstanceIds(myEC2Id);
      DescribeInstancesResult describeInstanceResult = ec2.describeInstances(describeInstanceRequest);
      String firstTag = describeInstanceResult.getReservations().get(0).getInstances().get(0).getTags().get(0);
      System.out.println(firstTag);
      

      如果他们想办法一起绕过你的支票,这将无济于事,在这种情况下几乎没有任何帮助。

      编辑:您可以通过检查实例的获取命令here 来找到可以检索的可用实例信息列表。

      【讨论】:

      • 非常感谢 DGolberg 和 Michael J. Gray 的快速回复。我的想法也朝着类似的方向发展,但我想验证一下。
      猜你喜欢
      • 2018-05-24
      • 2017-08-01
      • 2017-04-22
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 2017-08-13
      • 2020-07-04
      • 2014-10-07
      相关资源
      最近更新 更多