ECSクラスターのボリュームをKMSで暗号化する


概要

システム要件の都合上、ECSで作成するEC2インスタンスのボリュームの暗号化が必要になりました。
AWSマネジメントコンソールでは、ECSクラスターを作成時に暗号化できないため、ecs-cliコマンドを利用してボリュームを暗号化します。
事前に暗号化済みAMIを作成するなど、一工夫必要になります。

手順

ecs-cliをインストール

インストール手順はこちらを参照してください。

  • ecs-cliインストール(Macの場合。最後のコマンドでバージョンが表示されればOK)。
$ sudo curl -o /usr/local/bin/ecs-cli https://s3.amazonaws.com/amazon-ecs-cli/ecs-cli-darwin-amd64-latest
$ sudo chmod +x /usr/local/bin/ecs-cli
$ ecs-cli --version
  • 初期設定(デフォルトのprofileとconfigを使う場合)
# AWS認証情報を登録
$ ecs-cli configure profile \
    --access-key <AWSアクセスキー> \
    --secret-key <AWSシークレットアクセスキー>

# ECSの設定を登録
$ ecs-cli configure \
    --cluster <クラスター名> \
    --default-launch-type EC2 \
    --region ap-northeast-1

ボリューム暗号化済みAMIを作成

デフォルトのECS用AMIは暗号化されていないため、AMIをコピーします(コピー時にボリュームを暗号化)。
以前はパブリックなAMIはコピーできず、インスタンス作成→AMI作成→AMIコピー時に暗号化という手順を踏まなければいけなかったので、かなり便利になりました。

  • 対象のAMIを検索して[アクション]→[AMIのコピー]を選択する

  • [送信先のリージョン]、[暗号化]を選択し、[名前]、[説明]を入力して[AMIのコピー]を選択する。作成したAMIのIDは控えておく

ECSクラスター構築

ecs-cliコマンドでECSクラスターを構築します。
使用できるオプションはこちらを参照してください。

$ ecs-cli up \
    --capability-iam \
    --keypair <キーペア名> \
    --size <インスタンス数> \
    --instance-type <インスタンスタイプ> \
    --image-id <暗号化済みAMIのID> \
    --vpc <VPC ID> \
    --subnets <サブネットID>,<サブネットID> \
    --security-group <セキュリティグループID> \

# 例
$ ecs-cli up \
    --capability-iam \
    --keypair sample-key \
    --size 1 \
    --instance-type t2.micro \
    --image-id ami-xxxxxxxx \
    --vpc vpc-xxxxxxxxx \
    --subnets subnet-xxxxxxxx,subnet-xxxxxxxx \
    --security-group sg-xxxxxxxx \

確認

作成したインスタンスのボリュームを確認すると、暗号化されていることがわかります。

最後に

ボリュームの暗号化は普段あまり意識されないかもしれませんが、機密情報を扱うシステムではボリュームを全て暗号化することのような要件が出てくることがあるため、そんな時に使ってください。
また、ECSはマネジメントコンソールでの操作が限られているため、できる限りコード化しておくと安心だと思います。