web-dev-qa-db-ja.com

Dockerコンテナーで実行されているコードにAWS認証情報(IAMロール認証情報)を渡す

EC2インスタンスでコードを実行すると、AWSリソースへのアクセスに使用するSDKは、169.254.169.254でローカルにリンクされたウェブサーバーと自動的に通信し、他のAWSサービスとの通信に必要なAWS認証情報(access_key、secret)をインスタンスに取得します。

ENV変数に資格情報を設定したり、コマンドライン引数として渡すなど、他のオプションもあります...

ここでのベストプラクティスは何ですか?私は、コンテナーが169.254.169.254にアクセスできるようにする(要求をルーティングする)か、169.254.169.254の実サーバーの動作を模倣するプロキシコンテナーを実行する方がよいと考えています。

そこにすでに解決策はありますか?

12
Ali

EC2メタデータサービスは通常、Docker内から利用できます(よりカスタムなネットワーク設定を使用しない限り、同様の質問については この回答 を参照してください)。

Dockerネットワークの設定でアクセスできない場合は、ENVDockerfileディレクティブを使用するか、実行中に直接渡すことができますが、IAMロールからの認証情報は自動的にローテーションされることに注意してください。 AWS。

9
dcro

Amazonには、コンテナーがSDKを介してIAMロールにアクセスし、ECSエージェントコンテナーまたはホストを介してリクエストをルーティング/転送できるようにするためのメカニズムがいくつかあります。コピーして貼り付ける方法は多すぎますが、--net Hostを使用することは、最も推奨されないオプションです。これは、ホストが実行する権限を持つすべてのコンテナへのフルアクセスをコンテナに許可する追加のフィルタがないためです。

https://docs.aws.Amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html

0
dragon788