Help us understand the problem. What is going on with this article?

AWS Elastic BeanstalkでEBSボリュームを暗号化するには?

背景

現状Elastic Beanstalkのサービスとして、EBSを暗号化するための設定を行う機能はありません。

EBSを暗号化するには下記のうち、どちらかの方法をとる必要があります。

(1) EBSボリュームがデフォルトで暗号化されるよう設定する

(2) Elastic Beanstalk環境用のAMI から、EBSボリュームに対して暗号化の設定を行なったカスタムAMIを作成し、そのAMIを使用する

今回は(1)の方法を使ってEBSを暗号化する方法を紹介します。

この方法の注意点としてはデフォルト暗号化を有効化すると、以降設定したリージョン内で構築されるEBSが全て暗号化されます。

手順

KMSを作成する

デフォルトKMSキーを使用する場合はこの手順は飛ばして問題ないです。

※デフォルトKMSキーを使用すると暗号化したスナップショットをAWSアカウント間でコピーが行えなくなるので注意

カスタマーキーを作成する際、注意点としてオートスケーリングで使用するサービスロールからKMSへのアクセス許可をキーポリシーで明示しておく必要があります。

Elastic Beanstalkはオートスケーリングを使ってEC2を起動するため、サービスロールがKMSへのアクセスができないとEC2が起動できずターミネートされてしまいます。

スクリーンショット 2020-04-26 23.28.09.png

キーポリシー例

{
    "Id": "key-consolepolicy-3",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::アカウントID:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow use of the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "オートスケーリングのサービスロール"
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
            ],
            "Resource": "*"
        },
        {
            "Sid": "Allow attachment of persistent resources",
            "Effect": "Allow",
            "Principal": {
                "AWS": "オートスケーリングのサービスロール"
            },
            "Action": [
                "kms:CreateGrant",
                "kms:ListGrants",
                "kms:RevokeGrant"
            ],
            "Resource": "*",
            "Condition": {
                "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                }
            }
        }
    ]
}

※躓きメモ
僕は最初Elastic Beanstalkのサービスロールをキーポリシーで許可していました。

何度やってもEC2が立ち上がらず苦戦していたのですが、「どのサービスがEC2を起動しているのか?」を考えたら分かりました。

Elastic Beanstalkはオートスケーリングの設定を行う所までしか関与して良いないので、オートスケーリング側に対してKMSへのアクセス許可を与えてあげる必要があります。

EBSのデフォルト暗号化設定

KMSを作成したらEC2が起動する際にEBSがデフォルトで暗号化されるようにします。

EC2のダッシュボード画面から「設定」を押してください。

スクリーンショット 2020-04-26 23.54.40.png

設定画面が表示されるので以下のように設定してください。デフォルトKMSキーを使用する場合は「(デフォルト)aws/ebs」というものをデフォルトの暗号化キーで指定してください。

スクリーンショット 2020-04-26 23.58.42.png

Elastic Beanstalkを使って環境を作成する

これで準備は完了です。特にElastic Beanstalk側で設定を変更する必要は無いです。いつも通りのやり方でElastic Beanstalkを使って環境を作成すればEBSが暗号化された状態で構築されます。

まとめ

Elastic BeanstalkでEBSを暗号化するには現状だと少し工夫が必要になります。

カスタムAMIを作成して暗号化を行う方法だと別途AMIの作成を行う必要があるため工数がかかりますが、デフォルト暗号化を使った方法だと簡潔に実現できます。

カスタムAMIを作成する方法はいずれまた別の記事として投稿しようかなと考えてます。

Kikuchi_et_al
学生時代は生命情報を専攻していました。タンパク質の立体構造を眺めるのが好きです。 今はAWSを使ったインフラ構築および運用をメインに行なっています。
https://kikuchi-et-al.hatenablog.jp/
cloudpack
Amazon Web Services (AWS) の導入設計、環境構築、運用・保守をサポートするマネジドホスティングサービス
https://cloudpack.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした