どうも。
ECS使ってます?
私は嫌いです。でもEFSの方がもっと嫌いです。
今回はECS FargateでEFSマウントしようとしたときに失敗した話です。
もっと良い解決方法を知ってる方がいたら教えてください。
ブラックサンダー奢ります。
現象
ECSのFargateコンテナからEFSマウント後にマウントしたフォルダにアクセスするとエラーになる。
permission denied的な文がでる。
事前にDockerfileのRUN部でchown 8983:8983 /var/solr とすることでマウントしたいフォルダのパーミッションをコンテナ実行ユーザーに変更したが、ECSでコンテナが立ち上がった直後にマウントできずコンテナが終了した。
細かいが、大切な部分として「EFSマウントは成功している」という点。
マウント後にフォルダにアクセスが必要な処理の際に権限不足になるというもの。
原因
Dockerfileで事前にマウントするフォルダの所有者を変更したが、EFSマウント後にフォルダの所有者がrootに変わっていた。
結局EFSマウント後にフォルダの所有者を変更しないと、この輪廻から脱せないことを悟った29歳の冬。
対応策
以下のようなことを行って回避した。
- chownを実行するため必要なsudoコマンドをインストール(ドン引き
- solrユーザーがchownを実行できるようにsudoersに追加(ドン引き
- コンテナ起動時に実行されるスクリプト内の冒頭にchownをするコマンド追記(ドン引き
Solrコンテナ(公式)でDockerfileに追加した例。
FROM solr:9.0.0
USER root
# EFSマウント後に/var/solrの所有者権限をchowmで変更できるようにする
RUN apt update -y && \
apt install -y sudo && \
echo "solr ALL=(ALL:ALL) NOPASSWD: /usr/bin/chown" >> /etc/sudoers && \
sed -i -e '2i sudo chown 8983:8983 /var/solr' /opt/solr/docker/scripts/docker-entrypoint.sh
USER solr元々solrコンテナはsudoが入ってない。
sudoを入れることで回避した形だが、セキュリティ上は良くない方法であると認識している。
そもそもsolrユーザーはchownできるようになった時点でかなりの権限が付いてしまっている気がする。
- sudo chown実行
- sudoを使ってsudoersを書き換えてsolrユーザーがsudo chownを実行できないようにする
とかいう冗長なことをすれば解決できる気もする。
誰かいい方法知ってたら教えてください。
以上。
コメント