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
を使用してそれらを渡すことができることを知っています。しかし、ビルド時にそれらをイメージに渡すのは悪い考えですか?
画像に秘密鍵を保存せずにこれを達成するにはどうすればよいですか?
私の意見では、S3アクセス許可をDockerコンテナに委任するにはRolesが最適です。
IAMからロールを作成->ロール->ロールの作成->このロールを使用するサービスを選択し、EC2->次-> s3policiesを選択し、ロールを作成する必要があります。
アクション->インスタンス設定->ロールのアタッチ/置換から、実行中/停止中のインスタンスにロールをアタッチします
これはDockerfileで正常に機能しました。
RUN aws s3 cp s3://bucketname/favicons /var/www/html/favicons --recursive
多くの人が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
として渡すことは、とにかく自分を守る限り安全です。