如何防止容器存取 Amazon ECS 中的 Amazon EC2 執行個體中繼資料?

1 分的閱讀內容
0

我想防止容器在 Amazon Elastic Container Service (Amazon ECS) 中存取 Amazon Elastic Compute Cloud (Amazon EC2) 的執行個體中繼資料。

簡短說明

如果您在 Amazon EC2 執行個體中執行容器,基於安全理由,最佳做法是避免允許應用程式擔任執行個體角色。

Amazon ECS 提供下列聯網模式來執行具有外部連線能力的任務:

  • **橋接模式。**該任務使用 Docker 的內建虛擬網路。
  • **提示模式。**任務分配一個彈性網路介面,並且所有容器共享相同的網路命名空間。
  • **主機模式。**容器共用主機的網路命名空間。

下列解決方案說明如何防止容器使用橋接器awsvpc 網路模式存取執行個體中繼資料。

注意:無法阻止使用主機聯網模式存取,因為 Amazon ECS 代理程式在主機網路命名空間上執行,需要存取該代理程式。

解決方法

對於使用 awsvpc 網路模式的任務,請將下列參數新增至 Amazon ECS 組態檔案 /etc/ecs/ecs.config 中:

ECS_AWSVPC_BLOCK_IMDS=true

對於使用橋接器網路模式的任務,請使用 iptables 封鎖來自 docker0 橋接器的網路流量。

您可以在自訂 Amazon Machine Image (AMI) 或 Amazon EC2 執行個體使用者資料啟動時指定 iptables 的組態。請參閱下列範例,瞭解 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==--

AWS 官方
AWS 官方已更新 2 年前