建立支持 IPv6 的 權限給 EKS
EKS 中的配置 Cluster IP address family 選擇 IPv6 時,需要設定 Amazon VPC CNI 外掛程式以使用 IRSA。
環境定義:
參數說明 | 參數內容 |
---|---|
eks cluster 名稱 | development-souffle |
policy 名稱 | development-souffle-VPCCNIIPv6 |
role 名稱 | development-souffle-VPCCNIIPv6 |
從 EKS 中取得 OIDC URL
透過 aws cli 命令取得 EKS 中的 OIDC URL。
1aws eks describe-cluster --name development-souffle --query "cluster.identity.oidc.issuer" --output text
回傳的結果如下。
1https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
建立 IAM policy 並定義可以使用的權限
因為 AWS 維護的 AmazonEKS_CNI_Policy 權限不足沒辦法分配 IPv6 地址,所以需要建立新 policy,下面為配置定義。
1{
2 "Version": "2012-10-17",
3 "Statement": [
4 {
5 "Effect": "Allow",
6 "Action": [
7 "ec2:AssignIpv6Addresses",
8 "ec2:DescribeInstances",
9 "ec2:DescribeTags",
10 "ec2:DescribeNetworkInterfaces",
11 "ec2:DescribeInstanceTypes"
12 ],
13 "Resource": "*"
14 },
15 {
16 "Effect": "Allow",
17 "Action": [
18 "ec2:CreateTags"
19 ],
20 "Resource": [
21 "arn:aws:ec2:*:*:network-interface/*"
22 ]
23 }
24 ]
25}
建立 VPC CNI role 並定義 trust relationships
要配置 IRSA(IAM role for service account) 讓 pod kube-system:aws-node 可以提權,所以需要定義 trust relationships,下面 json 是 Trusted entities 的定義,其中:
- Effect 固定 Allow
- Federated 為 OIDC 的 arn,可以去 IAM > Identity providers 底下找
- Action 固定 "sts:AssumeRoleWithWebIdentity"
- StringEquals
- aud (Audience) 為 sts.amazonaws.com 可以使用 Token 授權
- sub (Subject) 為 system:serviceaccount:kube-system:aws-node 可以提權
1{
2 "Version": "2012-10-17",
3 "Statement": [
4 {
5 "Effect": "Allow",
6 "Principal": {
7 "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
8 },
9 "Action": "sts:AssumeRoleWithWebIdentity",
10 "Condition": {
11 "StringEquals": {
12 "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com",
13 "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:aws-node"
14 }
15 }
16 }
17 ]
18}
將 policy 權限加入到 role 中
1aws iam attach-role-policy \
2 --policy-arn arn:aws:iam::111122223333:policy/development-souffle-VPCCNIIPv6 \
3 --role-name development-souffle-VPCCNIIPv6
加入 ann 到 serviceaccount aws-node 中,使其角色可以提權
1kubectl get serviceaccount -n kube-system aws-node -o yaml
2
3kubectl annotate serviceaccount \
4 -n kube-system aws-node \
5 eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/development-souffle-VPCCNIIPv6