秘密キーを Amazon S3 に安全に保存する
パブリック証明書の署名に使用するプライベートキーはプライベートであるため、ソースコードにコミットしないでください。プライベートキーファイルを Amazon S3 にアップロードした後にアプリケーションのデプロイ時に Amazon S3 からダウンロードするように Elastic Beanstalk を設定することで、設定ファイルにプライベートキーが保存されるのを回避できます。
次の例で示している設定ファイルの Resources と files のセクションでは、Amazon S3 バケットからプライベートキーファイルをダウンロードしています。
例 .ebextensions/privatekey.config
Resources: AWSEBAutoScalingGroup: Metadata: AWS::CloudFormation::Authentication: S3Auth: type: "s3" buckets: ["
elasticbeanstalk-us-west-2-123456789012
"] roleName: "Fn::GetOptionSetting": Namespace: "aws:autoscaling:launchconfiguration" OptionName: "IamInstanceProfile" DefaultValue: "aws-elasticbeanstalk-ec2-role" files: # Private key "/etc/pki/tls/certs/server.key": mode: "000400" owner: root group: root authentication: "S3Auth" source:https://elasticbeanstalk-us-west-2-123456789012.s3-us-west-2.amazonaws.com/server.key
例に使用しているバケット名と URL は独自のものに置き換えてください。このファイルの最初のエントリは、環境の Auto Scaling グループのメタデータに S3Auth
という名前の認証方法を追加します。お客様の環境用にカスタムインスタンスプロファイルを設定している場合はそのプロファイルが使用されますが、設定していない場合は aws-elasticbeanstalk-ec2-role
のデフォルト値が適用されます。デフォルトのインスタンスプロファイルには、Elastic Beanstalk ストレージバケットからの読み取り権限があります。別のバケットを使用する場合は、インスタンスプロファイルに許可を追加します。
2 番目のエントリは、S3Auth
認証方法を使用して、指定された URL からプライベートキーをダウンロードし、/etc/pki/tls/certs/server.key
に保存します。プロキシサーバーは、この場所からプライベートキーを読み取って、インスタンスで HTTPS 接続を終了できます。
環境の EC2 インスタンスに割り当てられるインスタンスプロファイルには、指定したバケットからキーオブジェクトを読み取るための権限がなければなりません。インスタンスプロファイルが IAM のオブジェクトを読み取るアクセス許可を持っており、バケットとオブジェクトのアクセス許可がインスタンスプロファイルを禁止していないことを確認します。
バケットの権限を表示するには
-
Amazon S3 マネジメントコンソールを開きます。
-
バケットを選択します。
-
[プロパティ] を選択して、[アクセス許可] を選択します。
-
アカウントがバケットの読み取り権限を持っていることを確認します。
-
バケットポリシーがアタッチされている場合は、[バケットポリシー] を選択して、バケットに割り当てられているアクセス許可を表示します。