Amazon web services 我们可以通过AWS Cloudformation动态创建密钥对并将.PEM文件复制到EC2 Linux实例吗
我的需求是创建一个EC2实例,该实例将从相同的Cloudformation模板动态创建密钥对。目前,我正在从AWS控制台创建密钥对,并通过Cloudformation将其分配给EC2实例,方法是获取用户的输入 我检查了AWS文档,发现可以从AWS控制台创建密钥对Amazon web services 我们可以通过AWS Cloudformation动态创建密钥对并将.PEM文件复制到EC2 Linux实例吗,amazon-web-services,amazon-ec2,amazon-cloudformation,aws-cloudformation-custom-resource,Amazon Web Services,Amazon Ec2,Amazon Cloudformation,Aws Cloudformation Custom Resource,我的需求是创建一个EC2实例,该实例将从相同的Cloudformation模板动态创建密钥对。目前,我正在从AWS控制台创建密钥对,并通过Cloudformation将其分配给EC2实例,方法是获取用户的输入 我检查了AWS文档,发现可以从AWS控制台创建密钥对 是否存在可以从Cloudformation创建密钥对并复制实例中的.PEM文件的方法。这是关于私钥管理的 EC2密钥对有两个组件。公共和私人的。公钥是AWS在创建实例时存储并推送到实例的内容。私钥从不存储在AWS中。从您使用控制台或通过
是否存在可以从Cloudformation创建密钥对并复制实例中的.PEM文件的方法。这是关于私钥管理的 EC2密钥对有两个组件。公共和私人的。公钥是AWS在创建实例时存储并推送到实例的内容。私钥从不存储在AWS中。从您使用控制台或通过CLI创建密钥对的那一刻起,您就有机会将其存储在您的计算机上 作为堆栈初始化的一部分,Cloud formation无法在您的计算机上存储私钥 你可以考虑两步方法:< /P> 1) 创建密钥或从计算机导入密钥。无论采用哪种方式,您都可以并且只有您可以访问私钥部分
aws ec2 import-key-pair
or
aws ec2 create-key-pair
2) 在cloudformation中使用这个新创建的键
SshKeyParameter:
Description: SSH Keypair to login to the instance
Type: AWS::EC2::KeyPair::KeyName
...
KeyName: !Ref SshKeyParameter
这是关于私钥管理的 EC2密钥对有两个组件。公共和私人的。公钥是AWS在创建实例时存储并推送到实例的内容。私钥从不存储在AWS中。从您使用控制台或通过CLI创建密钥对的那一刻起,您就有机会将其存储在您的计算机上 作为堆栈初始化的一部分,Cloud formation无法在您的计算机上存储私钥 你可以考虑两步方法:< /P> 1) 创建密钥或从计算机导入密钥。无论采用哪种方式,您都可以并且只有您可以访问私钥部分
aws ec2 import-key-pair
or
aws ec2 create-key-pair
2) 在cloudformation中使用这个新创建的键
SshKeyParameter:
Description: SSH Keypair to login to the instance
Type: AWS::EC2::KeyPair::KeyName
...
KeyName: !Ref SshKeyParameter
安东的回答是正确的。
但是,也有使用其他工具的替代方案。通常,它们允许自动导入公钥
Ansible:
地形:
甚至:安东的回答是正确的。
但是,也有使用其他工具的替代方案。通常,它们允许自动导入公钥
Ansible:
地形:
甚至:遵循安东的答案,作品也很好。编写的shell脚本正在启动一个cloudformation模板,如果没有预设密钥,脚本将创建它并将其上传到s3 bucket
#!/bin/bash
Region=eu-central-1
key=myapp-engine-$Region
Available_key=`aws ec2 describe-key-pairs --key-name $key | grep KeyName | awk -F\" '{print $4}'`
if [ "$key" = "$Available_key" ]; then
echo "Key is available."
else
echo "Key is not available: Creating new key"
aws ec2 create-key-pair --key-name $key --region $Region > myapp-engine-$Region.pem
aws s3 cp myapp-engine-$Region.pem s3://mybucket/myapp-engine-$Region.pem
fi
##### create stack #########
/usr/local/bin/aws cloudformation deploy --stack-name myapp-engine --template-file ./lc.yml --parameter-overrides file://./config.json --region $Region
下面是一个CloudFormation启动配置堆栈的示例,您可以在其中传递密钥
Resources:
renderEnginelc:
Type: AWS::AutoScaling::LaunchConfiguration
Properties:
ImageId:
Ref: "AMIID"
SecurityGroups:
- Fn::ImportValue:
!Sub "${SGStackName}-myapp"
InstanceType:
Ref: InstanceType
LaunchConfigurationName : !Join [ "-", [ !Ref Environment, !Ref ApplicationName, lc ] ]
KeyName: !Join [ "-", [ !Ref KeyName, !Ref AWS::Region ] ]
传递KyNyNm的参数值是“MyAPP引擎”,它将根据AWS::区域
< P>考虑Anton的回答,其工作精细。编写的shell脚本正在启动一个cloudformation模板,如果没有预设密钥,脚本将创建它并将其上传到s3 bucket#!/bin/bash
Region=eu-central-1
key=myapp-engine-$Region
Available_key=`aws ec2 describe-key-pairs --key-name $key | grep KeyName | awk -F\" '{print $4}'`
if [ "$key" = "$Available_key" ]; then
echo "Key is available."
else
echo "Key is not available: Creating new key"
aws ec2 create-key-pair --key-name $key --region $Region > myapp-engine-$Region.pem
aws s3 cp myapp-engine-$Region.pem s3://mybucket/myapp-engine-$Region.pem
fi
##### create stack #########
/usr/local/bin/aws cloudformation deploy --stack-name myapp-engine --template-file ./lc.yml --parameter-overrides file://./config.json --region $Region
下面是一个CloudFormation启动配置堆栈的示例,您可以在其中传递密钥
Resources:
renderEnginelc:
Type: AWS::AutoScaling::LaunchConfiguration
Properties:
ImageId:
Ref: "AMIID"
SecurityGroups:
- Fn::ImportValue:
!Sub "${SGStackName}-myapp"
InstanceType:
Ref: InstanceType
LaunchConfigurationName : !Join [ "-", [ !Ref Environment, !Ref ApplicationName, lc ] ]
KeyName: !Join [ "-", [ !Ref KeyName, !Ref AWS::Region ] ]
传递KyNyNm的参数值是“MyApp引擎”,它将根据AWS考虑一个区域:区域A/P>在AWS中,无论如何,我可以安全地保存.PEM文件,同时在CuldDebug中创建EC2实例,我可以在EC2机器上下载文件。您可以使用实例/容器创建嵌套模板,该实例/容器将使用ssh keygen生成密钥,向AWS EC2注册该密钥,将私钥保存在AWS Secrets中,并将密钥名称作为模板输出返回。但这似乎太麻烦了,而且可能会违反安全最佳实践。AWS中是否有任何地方可以安全保存.PEM文件,并且在从cloudformation创建EC2实例时,我可以在EC2机器上下载该文件。理论上,您可以使用实例/容器创建嵌套模板,该实例/容器将使用ssh keygen生成密钥,向AWS EC2注册该密钥,将私钥保存在AWS Secrets中,并将密钥名称作为模板输出返回。但这似乎是一个太大的麻烦,而且很可能与安全最佳实践背道而驰。