ACM for Nitro Enclaves が Apache HTTP ウェブサーバーのサポートを開始
ドキュメント
やってみる
ドキュメントに従って試してみました。
EC2
いずれかの方法でEC2を準備します。
a.AWS Marketplace から Nitro Enclaves AMI 用の ACM を使用する。
b.RPM パッケージを使用して Nitro Enclaves 用の ACM とウェブサーバーをインストールする。
こんかいは、b.の方法で実施します。
利用可能なインスタンスタイプを指定します。
Nitro Enclave を有効化します。
SSH などで入り、Amazon Linux Extras リポジトリから Nitro Enclaves 用の ACM をインストールします。
# aws-nitro-enclaves-cliAmazon Linux Extras ライブラリでトピックを有効にします。
$ sudo amazon-linux-extras enable aws-nitro-enclaves-cli
# Apache と SSLモジュールをインストールします。
$ sudo yum -y install httpd mod_ssl
# Amazon Linux Extras ライブラリから Nitro Enclaves 用の ACM をインストールします。
$ sudo yum install aws-nitro-enclaves-acm -y
IAM ロールを準備する
次の信頼関係を付与したIAMロールを準備します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
IAMロールとACM証明書を紐付けます。
$ aws ec2 --region ap-northeast-1 associate-enclave-certificate-iam-role --certificate-arn <certificate_ARN> --role-arn <role_ARN>
{
"CertificateS3BucketName": "aws-ec2-enclave-certificate-ap-northeast-1-prod",
"CertificateS3ObjectKey": "arn:aws:iam::XXXXXXXXXXXX:role/acm-role/arn:aws:acm:ap-northeast-1:XXXXXXXXXXXX:certificate/XXX-XXX-XXX-XXX",
"EncryptionKmsKeyId": "XXX-XXX-XXX-XXX-XXX"
}
証明書と暗号化キーにアクセスするIAMポリシーを作成しロールに付与する。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": ["arn:aws:s3:::<CertificateS3BucketName>/*"]
},
{
"Effect": "Allow",
"Action": [
"kms:Decrypt"
],
"Resource": "arn:aws:kms:ap-northeast-1:*:key/<EncryptionKmsKeyId>"
},
{
"Effect": "Allow",
"Action": "iam:GetRole",
"Resource": "arn:aws:iam::<123456789012>:role/<acm-role>"
}
]
}
EC2にIAMロールをアタッチする。
#インスタンスプロファイルを作成する。
$ aws iam create-instance-profile --instance-profile-name acm-instance-profile
#IAMロールにインスタンスプロファイルを追加する。
$ aws iam add-role-to-instance-profile --instance-profile-name acm-instance-profile --role-name acm-role
#EC2インスタンスにインスタンスプロファイルをアタッチする。
$ aws ec2 --region ap-northeast-1 associate-iam-instance-profile --instance-id <instance_id> --iam-instance-profile Name=acm-instance-profile
Nitro Enclaves に ACM を使用するように Web サーバーを構成する
Nitro Enclaves の構成ファイルをリネームする。
$ sudo mv /etc/nitro_enclaves/acm-httpd.example.yaml /etc/nitro_enclaves/acm.yaml
リネームした構成ファイルを開き、certificate_arn
にACM証明書のarnを記述し、保存する。
certificate_arn:"<ACM証明書のarn>"
Apache HTTPサーバーのの構成ファイルを編集する。
<VirtualHost *:443>
ServerName <www.example.com>
SSLEngine on
SSLProtocol -all +TLSv1.2
SSLCertificateKeyFile "/etc/pki/tls/private/localhost.key"
SSLCertificateFile "/etc/pki/tls/certs/localhost.crt"
</VirtualHost>
Apache HTTP サーバーの構成ファイルをリネームする。
$ sudo mv /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/httpd-acm.conf
ACM for Nitro Enclaves サービスを開始し、インスタンスの起動時に自動的に開始されるようにする。
$ sudo systemctl start nitro-enclaves-acm.service
$ sudo systemctl enable nitro-enclaves-acm
テストする。
$ curl https://www.example.com