コンテナが Amazon ECS の Amazon EC2 インスタンスメタデータにアクセスできないようにするにはどうすればよいですか?

最終更新日: 2020 年 2 月 11 日

コンテナが Amazon Elastic Container Service (Amazon ECS) の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスメタデータにできないようにしたいと考えています。

簡単な説明

Amazon EC2 インスタンスでコンテナを実行する場合、セキュリティ上の理由から、アプリケーションがインスタンスロールを引き受けることを避けるのがベストプラクティスです。

Amazon ECS には、外部接続でタスクを実行するための次のネットワーキングモードが用意されています。

  • ブリッジモード。 タスクでは、Docker の組み込み仮想ネットワークを使用します。
  • awsvpc モード。 タスクは Elastic Network Interface を割り当て、すべてのコンテナが同じネットワーク名前空間を共有します。
  • ホストモード。 コンテナはホストのネットワーク名前空間を共有します。

次の解決方法は、ブリッジおよび awsvpc ネットワーキングモードを使用してコンテナがインスタンスメタデータにアクセスできないようにする方法を示しています。

注意: Amazon ECS エージェントはホストネットワーク名前空間で実行され、これにアクセスする必要があるため、ホストネットワーキングモードでのアクセスを防ぐことはできません。

解決方法

awsvpc ネットワーキングモードを使用するタスクの場合、Amazon ECS 設定ファイル /etc/ecs/ecs.config に以下のパラメータを追加します。

ECS_AWSVPC_BLOCK_IMDS=true

ブリッジネットワーキングモードを使用するタスクの場合、iptables を使用して docker0 ブリッジからのネットワークトラフィックをブロックします。

iptables の設定は、カスタム Amazon マシンイメージ (AMI) または Amazon EC2 インスタンスのユーザーデータで起動時に指定できます。Amazon Linux 2 AMI については、以下の例を参照してください。

注意: Amazon EC2 インスタンスのユーザーデータを選択した場合、Docker デーモンが起動する前に次の設定を記述する必要があります。cloud-boothook のユーザーデータ形式は、ブートプロセスでほとんどのサービスよりも前に実行されます。

#cloud-boothook

yum install iptables-services -y

cat <<EOF > /etc/sysconfig/iptables 
*filter
:DOCKER-USER - [0:0]
-A DOCKER-USER -d 169.254.169.254/32 -j DROP
COMMIT
EOF

systemctl enable iptables && systemctl start iptables

この設定を既存のユーザーデータに含めるには、MIME マルチパートアーカイブを使用します。次の例を参照してください。

Content-Type: multipart/mixed; boundary="==BOUNDARY=="
MIME-Version: 1.0

--==BOUNDARY==
Content-Type: text/cloud-boothook; charset="us-ascii"

# Set iptables configuration

yum install iptables-services -y

cat <<EOF > /etc/sysconfig/iptables 
*filter
:DOCKER-USER - [0:0]
-A DOCKER-USER -d 169.254.169.254/32 -j DROP
COMMIT
EOF

systemctl enable iptables && systemctl start iptables

--==BOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"

#!/bin/bash
# Set any ECS agent configuration options
echo "ECS_CLUSTER=my-ecs-cluster" >> /etc/ecs/ecs.config

--==BOUNDARY==--

この記事は役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合