10

boto.cmdshell を使用して AWS EC2 インスタンス (Amazon Linux AMI) でコマンドを実行する必要がある Heroku でホストされているフラスコ アプリがあります。いくつかの質問:

  1. キー ペアを使用して EC2 インスタンスにアクセスするのがベスト プラクティスですか? または、ユーザー名/パスワードを使用したほうがよいですか?
  2. キー ペアを使用する方法が望ましい場合、Heroku で秘密キーを管理/保存するためのベスト プラクティスは何ですか? 明らかに、秘密鍵を git に入れることはオプションではありません。

ありがとう。

4

3 に答える 3

7

Heroku では、構成変数を利用してアプリケーションを管理できます。私のフラスコアプリケーション内にある私のconfig.pyファイルの例は次のとおりです。

import os

# flask
PORT = int(os.getenv("PORT", 5000))
basedir = str(os.path.abspath(os.path.dirname(__file__)))
SECRET_KEY = str(os.getenv("APP_SECRET_KEY"))
DEBUG = str(os.getenv("DEBUG"))
ALLOWED_EXTENSIONS = str(os.getenv("ALLOWED_EXTENSIONS"))
TESTING = os.getenv("TESTING", False)

# s3
AWS_ACCESS_KEY_ID = str(os.getenv("AWS_ACCESS_KEY_ID"))
AWS_SECRET_ACCESS_KEY = str(os.getenv("AWS_SECRET_ACCESS_KEY"))
S3_BUCKET = str(os.getenv("S3_BUCKET"))
S3_UPLOAD_DIRECTORY = str(os.getenv("S3_UPLOAD_DIRECTORY"))

これで、2 つの異なる結果セットを取得できます。それは私の環境変数から引き出します。1 つは、アプリケーションがローカル コンピューター上にあり、本番環境では Heroku 構成変数からのものです。例えば。

 DEBUG = str(os.getenv("DEBUG")) 

私のローカルコンピュータでは「TRUE」です。しかし、Heroku では False です。Heroku の設定を確認するために実行します。

Heroku config

また、いくつかのファイルをプロジェクトの一部としてローカルに保持したいが、heroku や github では保持したくない場合は、git ignoreを使用できます。もちろん、これらのファイルは本番アプリケーションには存在しません。

于 2013-01-06T00:06:47.640 に答える
6

私が探していたのは、秘密鍵の扱い方に関するガイダンスでした。@DrewV と @yfeldblum の両方が正しい方向を示してくれました。最終的に、秘密鍵を文字列に変換し、Heroku 構成変数に保存しました。

誰かが同様のことをしようとしている場合は、paramiko を使用したサンプル コード スニピットを次に示します。

import paramiko, base64
import StringIO
import os

key = paramiko.RSAKey.from_private_key(StringIO.StringIO(str(os.environ.get("AWS_PRIVATE_KEY"))))
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(str(os.environ.get("EC2_PUBLIC_DNS")), username='ec2-user', pkey=key)
stdin, stdout, stderr = ssh.exec_command('ps')

for line in stdout:
    print '... ' + line.strip('\n')
ssh.close()

助けてくれた@DrewVと@yfeldblumに感謝します(両方に賛成)。

于 2013-01-06T00:30:03.153 に答える
4

構成変数を使用して、Heroku で実行されているアプリケーションに構成項目を保存できます。

ユーザー名とパスワードの組み合わせを使用できます。ユーザー名を簡単なものにすることができます。ただし、強力なパスワードを生成するようにしてください。たとえば、openssl rand -base64 32.

于 2013-01-05T23:21:01.163 に答える