Amazon Elastic Kubernetes Service (Amazon EKS) クラスター内の AWS Fargate ポッドにセキュリティグループを構成したいと考えています。このセキュリティグループにより、インバウンドおよびアウトバウンドのネットワークトラフィックを制御したいです。
簡単な説明
個別のポッド用のセキュリティグループを使用すると、カスタム Amazon Elastic Compute Cloud (Amazon EC2) セキュリティグループを Amazon EKS クラスター内の Fargate ポッドにアタッチできます。これらのセキュリティグループがアタッチされると、Fargate Pods に対するインバウンドおよびアウトバウンドのネットワークトラフィックに制限が適用されます。
デフォルトでは、Fargate ポッドは自動構成により、クラスターのセキュリティグループを使用して Kubernetes コントロールプレーンと通信するよう設定されます。セキュリティグループを使用すると、Fargate ポッドとのインバウンドおよびアウトバウンドのネットワークトラフィックに対するルールを構成できます。
Fargate Pod に指定するセキュリティグループは、次の条件を満たす必要があります。
- ポッドと Kubernetes コントロールプレーン間の通信を許可するルールが必要です。セキュリティグループの 1 つとして、クラスターのセキュリティグループを指定する必要があります。
- 他のポッドやエンドポイントと通信するために必須の、インバウンドルールとアウトバウンドルールが必要です。たとえば、名前解決を行うには、CoreDNS ポッドに TCP/UDP ポート 53 で接続するアウトバウンドルールが必要です。
解決策
Fargate Pod にセキュリティグループを適用するには、次の手順を実行します。
-
Amazon EKS セキュリティグループのポリシーをクラスターにデプロイします。
例:
apiVersion: vpcresources.k8s.aws/v1beta1
kind: SecurityGroupPolicy
metadata:
name: my-security-group-policy
namespace: my-namespace
spec:
podSelector:
matchLabels:
role: my-role
securityGroups:
groupIds:
- my_pod_security_group_id
注: my-security-group-policy、my-namespace、my-role、my-pod-security-group-id を実際の構成で使用する値に置き換えてください。podSelector ではなく、serviceAccountSelector を使用することもできます。
-
SecurityGroupPolicy と一致するラベルを持つアプリケーションをデプロイします。
例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
namespace: my-namespace
labels:
app: my-app
spec:
replicas: 4
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
role: my-role
spec:
terminationGracePeriodSeconds: 120
containers:
- name: nginx
image: public.ecr.aws/nginx/nginx:1.23
ports:
- containerPort: 80
-
ポッドがポッドのセキュリティグループを使用していることを確認します。その場合は、アノテーションに fargate.amazonaws.com/pod-sg が含まれています。次のコマンドを実行します。
kubectl describe pod pod name -n <namespace> | grep fargate.amazonaws.com/pod-sg
fargate.amazonaws.com/pod-sg: my_pod_security_group_id,...
注: pod-name をポッド名に、my_pod_security_group_id ポッドのセキュリティグループ ID に置き換えてください。
関連情報
ポッドにセキュリティグループを導入する