web-dev-qa-db-ja.com

Amazon s3または資格情報を必要とする別のソースからDockerfileコピーファイル

Dockerイメージを構築しようとしていますが、S3からいくつかのファイルをイメージにコピーする必要があります。

私が使用しているDockerfile内:

Dockerfile

FROM library/ubuntu:16.04
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8

# Copy files from S3 inside docker
RUN aws s3 COPY s3://filepath_on_s3 /tmp/

ただし、awsにはAWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEYが必要です。私はおそらくARGを使用してそれらを渡すことができることを知っています。しかし、ビルド時にそれらをイメージに渡すのは悪い考えですか?

画像に秘密鍵を保存せずにこれを達成するにはどうすればよいですか?

8
CentAu

私の意見では、S3アクセス許可をDockerコンテナに委任するにはRolesが最適です。

  1. IAMからロールを作成->ロール->ロールの作成->このロールを使用するサービスを選択し、EC2->次-> s3policiesを選択し、ロールを作成する必要があります。

  2. アクション->インスタンス設定->ロールのアタッチ/置換から、実行中/停止中のインスタンスにロールをアタッチします

これはDockerfileで正常に機能しました。

RUN aws s3 cp s3://bucketname/favicons /var/www/html/favicons --recursive

5
Ankita Dhandha

多くの人がargsを介して詳細を渡しますが、これはうまくいくと思いますし、私が個人的に行う方法です。特定のプロセスを過剰に実行できると思いますが、これはその1つだと思います。

argsを使用したdockerの例

docker run -e AWS_ACCESS_KEY_ID=123 -e AWS_SECRET_ACCESS_KEY=1234

一部の企業がこれを隠してプライベートAPIなどから取得したい理由がわかると言っています。これが、AWSがIAMロールを作成した理由です。 https://docs.aws.Amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-Amazon-ec2.html

S3がアクセスできるプライベートIPアドレスから詳細を取得できます。つまり、画像自体に資格情報を保存する必要はありません。

個人的には、あなたがやろうとしていることに対してはやり過ぎだと思います。誰かがあなたの画像をハッキングした場合、彼らは資格情報を慰め、それでもそれらの詳細にアクセスできます。 argsとして渡すことは、とにかく自分を守る限り安全です。

3
Josh Stevens