新しいクラウド形成テンプレートのElastic Load Balancingインスタンスの1つに現在使用しているSSL証明書を添付しようとしましたが、次のような場合は常に取得します。
キーのサーバー証明書が見つかりません
そして、Cloudformationテンプレートはその時点でロールバックを開始します。
"Listeners" : [
{
"LoadBalancerPort" : "443",
"InstancePort" : "80",
"SSLCertificateId" : "start_certname_com",
"Protocol" : "HTTPS"
},...
Amazonは、使用するSSL証明書のARNを求めています。これは正しいと思います。これは、インスタンスのポート80に443を取る現在のセットアップELB。
リスナーに何か不足していますか?
私は実際に答えを待っている間にこれを行う方法を理解しました、あなたはAmazonが提供するIAM CLIツールを使用し、次にコマンドを使用する必要がありますiam-servercertgetattributes -s certname
これにより、次のような文字列が提供されます。
arn:aws:iam::123456789123:server-certificate/start_certname_com
これは、「SSLCertificateId」値ペアフィールドに配置する値です
IAMコマンドラインツール(CLI)のセットアップ手順は、次の場所にあります。
http://docs.aws.Amazon.com/IAM/latest/CLIReference/Setup.html
こちらからawsからツールキットをダウンロードしてください
http://aws.Amazon.com/developertools/AWS-Identity-and-Access-Management/414
すべての最終ブロックは次のようになります。
"Listeners" : [
{
"LoadBalancerPort" : "443",
"InstancePort" : "80",
"SSLCertificateId" : "arn:aws:iam::123456789123:server-certificate/start_certname_com",
"Protocol" : "HTTPS"
},...
CloudFormationの証明書の [〜#〜] arn [〜#〜] は、証明書名のみで導出できます。コマンドラインツールを実行して値をCloudFormationテンプレートにハードコードする必要はありません。
"Parameters":{
"Path":{
"Description":"AWS Path",
"Default":"/",
"Type":"String"
}
}
...
"Listeners" : [
{
"LoadBalancerPort" : "443",
"InstancePort" : "80",
"SSLCertificateId" : {
"Fn::Join":[
"",
[
"arn:aws:iam::",
{
"Ref":"AWS::AccountId"
},
":server-certificate",
{
"Ref":"Path"
},
"start_certname_com"
]
]
},
"Protocol" : "HTTPS"
},...
これにより、{"Ref":"AWS::AccountId"}
pseudo parameter および combines でアカウントIDが決まります [〜#〜] arn [ 〜#〜] 。証明書のパスを設定した場合に備えて、Path
という変数を使用していることに注意してください。そうでない場合は、デフォルトの「/」で問題なく動作します。
このソリューションは@Tristanによって言及され、 merrix143243のソリューション の拡張です。
最新のAWS CLIで長い証明書名を取得する方法は次のとおりです。
pip install awscli
aws iam list-server-certificates