1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWS CloudFrontのキーローテーションを考えてみた

Last updated at Posted at 2020-04-27

はじめに

CloudFrontの署名付きURLを使用して画像などを配信する際に、
キーペアのローテーションをどうすれば良いのか?検討する必要があったため考えてみました。

AWSの推奨としてはセキュリティ担保のため、90日以内にキーローテーションすべきとのこと。

結論

結論から言いますと、AWSのドキュメントに丁寧に書いてあったため、 基本はそちらの手順に従いました。。

サマリだけ記載すると、以下になります。

  • キーペアは2つまで作成できるため、更新時は2つ目を作成する
  • キーペアを利用しているアプリケーションの環境変数などを更新する
  • 古いキーペアの使用がなくなった時点で無効化→削除する

自システムに適用するなら、、

実際にシステムに適用する場合をイメージしてみた。
アプリケーションの実行基盤は、AWS Lambda(python3.8)を想定する。

① 秘匿情報を含むので、SSM Parameter Store(SecureString)に格納
キー名は/cf/key、複数情報をまとめて管理したいためJSON文字列とした。

{
    "keyPairId": "aaa-key-pair-id",
    "privateKey": "bbb-private-key"
} 

② Lambda内でParameter Storeから取得

import json
import boto3

def get_parameter(param_key):
    ssm = boto3.client('ssm')
    response = ssm.get_parameters(
        Names=[
            param_key,
        ],
        WithDecryption=True
    )
    return response['Parameters'][0]['Value']

def lambda_handler(event, context):
    # キーペアをSSM Parameter Storeから取得
    value = get_parameter('/cf/key')
    params = json.loads(value)
    print(params['keyPairId'])
    
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

③ 上記Parameter Storeにあるキーペア情報で署名URLを発行

それで、キーをローテーションする場合は、上記のParameter Storeを手動で更新するかな。
次回のLambda実行時から新しいキーペアが使用されるはずです。

課題

  • 90日毎にローテーションするとなると、以外と面倒な運用である。
    • キーペアはrootアカウントしか作成できないため、自動化するのも難しいと思い実現方法が想像できず。
  • 古い署名付きURLの期限が切れるまで、古いキーペアを無効化→削除できない
    • 単に待てば良いのだが、本番運用のオペレーション期間が長くなるので色々面倒
  • Lambda内でParameter Storeの値をキャッシュする場合は、いつ新しい値に切り替わるか分からない
    • 期限付きのキャッシュを実装する、DynamoDBにTTL付きで格納する、とかでしょうか。

おわりに

rootアカウントだったりもあり、いまいち使いにくい印象です。
もっと良い方法や、そもそも違うサービスを使うものなのでしょうかね。。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?