将安全密钥存储到常量文件中是安全的或建议任何替代解决方案?

Security Key store into constant file is secure or suggest any alternate solution?

我正在使用 AWS 服务来 post 我的图像,并使用 SNS 服务来推送通知。 对于 AWS 服务器上的 post 图像,我有 secret key & access key 目前我正在使用常量文件中的密钥,这是一种非常简单易行的方法访问任何定义的键。

#define AWS_AccessKey               @"###############"
#define AWS_SecretKey               @"####################"

但我的问题是

此密钥是否安全?

是否有人可以轻松地从 Constant 文件中获取?如果是,怎么办?

此外,我的 SQLCypher 加密数据库还有一个密钥,因此该密钥也存储在我的 Constant 文件中。

#define DB_KEY             @"####################"

存储重要密钥的最佳方式是什么?在哪里?

提前致谢。

由于应用程序在 ec2 上运行,更安全的方法是使用附加到实例的 IAM 角色。参见:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html

这样您就不必将 AWS 密钥存储在任何地方。对于您的 SQLCypher 密钥,您可以使用用户数据脚本在第一次启动时将密钥传递给您的 ec2 实例并将其存储在那里,因此您至少不必将其存储在代码中。 一般这样的配置最好保存在environment.

如建议的那样,无需长期凭据即可从 EC2 使用 AWS 服务的最佳方式是为实例分配一个 IAM 角色 (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)。

如果安全对您来说很重要,我建议将 SQLCypher 密钥存储在 AWS KMS 中。然后您的 EC2 实例可以使用其 IAM 角色访问 KMS。

由于我在上述 secret key 商店问题中进行了更多调查,我找到了下面提到的解决方案。

安全密钥 AWS 的参考问题 link:https://forums.aws.amazon.com/thread.jspa?threadID=63089

根据上面的link,AWS建议我们需要实现TVM(Token Vending Machine)基于服务调用来赋予特殊权限用户上传数据到 S3 或使用特定 bucket.

上传数据到 S3

TVM是一种token服务,给用户Token有效期为12 hours36 hoursmax)与服务器通信。

如果令牌过期,它将再次调用该服务并从 AWS 获取新令牌。

AWS 安全令牌服务提供的临时凭证由四个部分组成:

  • 访问密钥
  • ID 秘密
  • 访问密钥
  • 会话令牌
  • 过期时间

匿名 TVM 和身份 TVM 的 TVM 源可在 GitHub 获得。通过这个例子,我们可以了解如何获取TVM以及如何使用它与服务器进行通信。

匿名 TVM: https://github.com/amazonwebservices/aws-tvm-anonymous

身份 TVM: https://github.com/amazonwebservices/aws-tvm-identity

希望这会帮助那些在存储密钥方面遇到相同安全问题的其他人。

完整 Link 用于 AWS 密钥存储:https://aws.amazon.com/articles/Mobile/4611615499399490