手順1:Secrets Managerの作成
シークレットのタイプを選択
設定項目 | 入力内容 |
---|---|
シークレットのタイプ | その他のシークレットのタイプ |
キー | SECRET_KEY |
パスワード | パスワード入力 |
暗号化キー | aws/secretsmanager |
入力が完了しましたら、次へ
をクリックします
シークレットを設定
設定項目 | 入力内容 |
---|---|
シークレットの名前 | sample/demo/secret_key |
入力が完了しましたら、次へ
をクリックします
ローテーションを設定する
- 自動ローテーションは設定しない
- 入力が完了しましたら、
次へ
をクリックします
レビュー
変更がなければ、保存
をクリックします
手順2:DjangoでSecrets Managerのシークレットを読み込む設定
settings.py
import boto3
from botocore.exceptions import ClientError
import json
def get_secret_key():
secret_name = "sample/demo/secret_key"
region_name = "ap-northeast-1"
# Create a Secrets Manager client
session = boto3.session.Session()
client = session.client(
service_name='secretsmanager',
region_name=region_name
)
try:
get_secret_value_response = client.get_secret_value(
SecretId=secret_name
)
except ClientError as e:
# For a list of exceptions thrown, see
# https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html
raise e
secret = get_secret_value_response['SecretString']
return json.loads(secret)
secret_keys = get_secret_key()
SECRET_KEY = secret_keys["SECRET_KEY"]
おまけ:EC2インスタンスにIAMロールをアタッチ
EC2を作成済みという前提で進みます
手順1:IAMロールの作成
IAMのロールのロールを作成
をクリック
信頼されたエンティティを選択
設定項目 | 入力内容 |
---|---|
信頼されたエンティティタイプ | AWSのサービス |
サービスまたはユースケース | EC2 |
ユースケース | EC2 |
入力が完了しましたら、次へ
をクリックします
許可を追加
設定項目 | 入力内容 |
---|---|
許可ポリシー | SecretsManagerReadWrite |
入力が完了しましたら、次へ
をクリックします
名前、確認、および作成
設定項目 | 入力内容 |
---|---|
ロール名 | sample-ec2-role |
説明 | Allows EC2 instances to call AWS services on your behalf. |
入力が完了しましたら、ロールを作成
をクリックします
手順2:EC2のIAMロールを変更
EC2管理画面 → インスタンス選択 → 「アクション」→「セキュリティ」→「IAM ロールの変更」
設定項目 | 入力内容 |
---|---|
IAMロール | sample-ec2-role |
入力が完了しましたら、IAM ロールの更新
をクリックします
手順3:EC2インスタンス上で再実行
指定したシークレット名の情報を取得できるかを確認
aws secretsmanager get-secret-value --secret-id <シークレット名>
成功した場合は、SecretStringなどが表示されます
まとめ
AWS Secrets Managerに保存したSECRET_KEYを、Djangoアプリケーションのsettings.pyでboto3を用いて安全に取得する設定方法を解説しました。