0
1

More than 1 year has passed since last update.

【AWS】S3からアクセス拒否されてElastic Beanstalkのデプロイが失敗する

Posted at

何が起こった?

Elastic Beanstalk(以下EB)のプラットフォームをLinux 2ベースへアップグレードするためにGreen環境を用意し、ローカルからeb deployを行ったところデプロイが反映されないという事象が発生しました。
EC2インスタンスに出力されるログを確認したところ、デプロイ途中でS3へのアクセスが拒否されてデプロイが失敗していることがわかりました。

/var/log/eb-engine.log
2021/10/29 15:51:57.334639 [ERROR] failed to populate deployment meta data with error failed to generate App version manifest file with error AccessDenied: Access Denied
status code: 403, request id: XXXXXXXXXX, host id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

もとのAmazon Linux AMIベースのプラットフォーム(Green環境)では問題なくデプロイが行えており、またEB経由でアタッチしているインスタンスプロファイルにもS3へのアクセスを許可している状態のためすぐには原因がわかりませんでした。

原因は?

🚨 ECインスタンスのrootユーザーにAWS認証情報ファイルを設定していたため🚨

上記のようにすぐには原因がわからずクラスメソッドメンバーズ技術サポート経由でAWSサポートに問い合わせたところ、以下の回答が来ました。

インスタンスの root ユーザーに認証情報ファイルが作成されておりますと、デプロイ時にもこの認証情報が使用されます。

自分の環境では以下のように設定ファイル (.ebextensions)を使用して、aws cliを設定するノリでEC2インスタンスに.aws/credentialsに認証情報ファイルを設定していました。

echo "[default]" > ~/.aws/credentials
/opt/elasticbeanstalk/bin/get-config environment -k IAM_ACCESS_KEY_ID | xargs -I ACCESS_KEY
echo "aws_access_key_id = ACCESS_KEY" >> ~/.aws/credentials
/opt/elasticbeanstalk/bin/get-config environment -k IAM_SECRET_ACCESS_KEY | xargs -I SEC_KEY
echo "aws_secret_access_key = SEC_KEY" >> ~/.aws/credentials

実際にこちらのIAM権限ではS3アクセス権限がなかったため、認証情報ファイルをインスタンスから取り除いたところeb deployが成功するようになりました!!

まとめ

インスタンスからAWSリソースの操作する場合は

  • インスタンスに認証情報ファイルに置かない
  • EB経由でアタッチするインスタンスプロファイルを利用する
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1