将安全密钥存储到常量文件中是安全的或建议任何替代解决方案?
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 hours
到36 hours
(max)与服务器通信。
如果令牌过期,它将再次调用该服务并从 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
我正在使用 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 hours
到36 hours
(max)与服务器通信。
如果令牌过期,它将再次调用该服务并从 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