问题描述
我们有一个用例,其中包括从用户那里获取包含密码的输入,并将其传递给EC2实例。在Ec2实例中,我们从URL中找到http://169.254.169.254/latest/user-data/并获取用户数据并设置适当的密码。
问题是用户数据可以通过AWS CLI工具看到:
aws ec2 describe-instance-attribute --instance-id --attribute userData --output text --query "UserData.Value" | base64 --decode
这带来了巨大的安全风险。
发送敏感/机密数据的最佳方法是什么?
我尝试创建一个密钥对,该密钥对在本地实例上创建私钥,在EC2上创建公钥。使用PowerShell进行加密/解密并在EC2中取回它的正确方法是什么?
解决方法
建议的方法是将任何秘密存储在外部源中。
AWS提供了一个用于存储机密的服务Secrets Manager。通过使用此服务,您将创建一个机密,其中包含您的实例需要在其用户数据中访问的机密。然后,为您的实例赋予IAM角色特权,以获取秘密值via the AWS CLI。
或者,您也可以使用AWS SSM Parameter Store服务,将机密存储为SecureString类型。检索秘密via the AWS CLI,然后在脚本中使用它,这将类似于秘密管理器。
如果您不想将机密存储在AWS解决方案中,还有Hashicorp Vault等第三方解决方案可以提供类似的功能。