使用 AWS re:Post 即表示您同意 AWS re:Post 使用條款

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

1 分的閱讀內容
0

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

簡短說明

如果您在 Amazon EC2 執行個體中執行容器,則最佳做法是封鎖應用程式,以免它們擔任執行個體角色。

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

  • **橋接模式:**該任務使用 Docker 的內建虛擬網路。
  • **awsvpc 模式:**該任務分配彈性網路介面。在此設定中,所有容器都共用相同的網路命名空間。
  • **主機模式:**容器共用主機的網路命名空間。

您可以使用橋接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 的範例

**注意:**如果您選擇 Amazon EC2 執行個體使用者資料,則必須在 Docker 常駐程式啟動之前寫入組態。與大多數服務相比,cloud-boothook 使用者資料格式在開機程序中執行得更早。

若要將此組態包含在您現有的使用者資料中,請在 cloud-init 網站上使用 MIME 多部分歸檔。請參閱下列範例:

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

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

#!/bin/sh
# 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 官方已更新 6 個月前