Skip to content

Commit 0ec46d7

Browse files
authored
Merge pull request #1256 from RyanStan/cross-account-mount-fixes
Allow controller SA to describe Secrets - fixes cross account dynamic provisioning
2 parents 68853f8 + cc355e1 commit 0ec46d7

File tree

3 files changed

+117
-28
lines changed

3 files changed

+117
-28
lines changed

charts/aws-efs-csi-driver/templates/controller-serviceaccount.yaml

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,19 @@ rules:
4040
- apiGroups: ["coordination.k8s.io"]
4141
resources: ["leases"]
4242
verbs: ["get", "watch", "list", "delete", "update", "create"]
43-
# - apiGroups: [ "" ]
44-
# resources: [ "secrets" ]
45-
# verbs: [ "get", "watch", "list" ]
46-
4743
---
48-
44+
kind: ClusterRole
45+
apiVersion: rbac.authorization.k8s.io/v1
46+
metadata:
47+
name: efs-csi-external-provisioner-role-describe-secrets
48+
labels:
49+
app.kubernetes.io/name: {{ include "aws-efs-csi-driver.name" . }}
50+
rules:
51+
- apiGroups: [ "" ]
52+
resources: [ "secrets" ]
53+
resourceNames: ["x-account"]
54+
verbs: [ "get", "watch", "list" ]
55+
---
4956
kind: ClusterRoleBinding
5057
apiVersion: rbac.authorization.k8s.io/v1
5158
metadata:
@@ -60,3 +67,20 @@ roleRef:
6067
kind: ClusterRole
6168
name: efs-csi-external-provisioner-role
6269
apiGroup: rbac.authorization.k8s.io
70+
---
71+
# We use a RoleBinding to restrict Secret access to the namespace that the
72+
# RoleBinding is created in (typically kube-system)
73+
kind: RoleBinding
74+
apiVersion: rbac.authorization.k8s.io/v1
75+
metadata:
76+
name: efs-csi-provisioner-binding-describe-secrets
77+
labels:
78+
app.kubernetes.io/name: {{ include "aws-efs-csi-driver.name" . }}
79+
subjects:
80+
- kind: ServiceAccount
81+
name: {{ .Values.controller.serviceAccount.name }}
82+
namespace: {{ .Release.Namespace }}
83+
roleRef:
84+
kind: ClusterRole
85+
name: efs-csi-external-provisioner-role-describe-secrets
86+
apiGroup: rbac.authorization.k8s.io

deploy/kubernetes/base/controller-serviceaccount.yaml

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,19 @@ rules:
3636
- apiGroups: ["coordination.k8s.io"]
3737
resources: ["leases"]
3838
verbs: ["get", "watch", "list", "delete", "update", "create"]
39-
# - apiGroups: [ "" ]
40-
# resources: [ "secrets" ]
41-
# verbs: [ "get", "watch", "list" ]
39+
---
40+
# Source: aws-efs-csi-driver/templates/controller-serviceaccount.yaml
41+
kind: ClusterRole
42+
apiVersion: rbac.authorization.k8s.io/v1
43+
metadata:
44+
name: efs-csi-external-provisioner-role-describe-secrets
45+
labels:
46+
app.kubernetes.io/name: aws-efs-csi-driver
47+
rules:
48+
- apiGroups: [ "" ]
49+
resources: [ "secrets" ]
50+
resourceNames: ["x-account"]
51+
verbs: [ "get", "watch", "list" ]
4252
---
4353
# Source: aws-efs-csi-driver/templates/controller-serviceaccount.yaml
4454
kind: ClusterRoleBinding
@@ -55,3 +65,20 @@ roleRef:
5565
kind: ClusterRole
5666
name: efs-csi-external-provisioner-role
5767
apiGroup: rbac.authorization.k8s.io
68+
---
69+
# We use a RoleBinding to restrict Secret access to the namespace that the
70+
# RoleBinding is created in (typically kube-system)
71+
kind: RoleBinding
72+
apiVersion: rbac.authorization.k8s.io/v1
73+
metadata:
74+
name: efs-csi-provisioner-binding-describe-secrets
75+
labels:
76+
app.kubernetes.io/name: aws-efs-csi-driver
77+
subjects:
78+
- kind: ServiceAccount
79+
name: efs-csi-controller-sa
80+
namespace: kube-system
81+
roleRef:
82+
kind: ClusterRole
83+
name: efs-csi-external-provisioner-role-describe-secrets
84+
apiGroup: rbac.authorization.k8s.io
Lines changed: 58 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,62 @@
11
{
22
"Version": "2012-10-17",
33
"Statement": [
4-
{
5-
"Sid" : "Stmt1DescribeMountTargets",
6-
"Effect": "Allow",
7-
"Action": [
8-
"elasticfilesystem:DescribeFileSystems",
9-
"elasticfilesystem:DescribeMountTargets",
10-
"elasticfilesystem:CreateAccessPoint"
11-
],
12-
"Resource": "arn:aws:elasticfilesystem:us-west-2:123456789012:file-system/file-system-ID"
13-
},
14-
{
15-
"Sid" : "Stmt2AdditionalEC2PermissionsToDescribeMountTarget",
16-
"Effect": "Allow",
17-
"Action": [
18-
"ec2:DescribeSubnets",
19-
"ec2:DescribeNetworkInterfaces"
20-
],
21-
"Resource": "*"
22-
}
4+
{
5+
"Sid": "AllowDescribe",
6+
"Effect": "Allow",
7+
"Action": [
8+
"elasticfilesystem:DescribeAccessPoints",
9+
"elasticfilesystem:DescribeFileSystems",
10+
"elasticfilesystem:DescribeMountTargets",
11+
"ec2:DescribeAvailabilityZones"
12+
],
13+
"Resource": "*"
14+
},
15+
{
16+
"Sid": "AllowCreateAccessPoint",
17+
"Effect": "Allow",
18+
"Action": [
19+
"elasticfilesystem:CreateAccessPoint"
20+
],
21+
"Resource": "*",
22+
"Condition": {
23+
"Null": {
24+
"aws:RequestTag/efs.csi.aws.com/cluster": "false"
25+
},
26+
"ForAllValues:StringEquals": {
27+
"aws:TagKeys": "efs.csi.aws.com/cluster"
28+
}
29+
}
30+
},
31+
{
32+
"Sid": "AllowTagNewAccessPoints",
33+
"Effect": "Allow",
34+
"Action": [
35+
"elasticfilesystem:TagResource"
36+
],
37+
"Resource": "*",
38+
"Condition": {
39+
"StringEquals": {
40+
"elasticfilesystem:CreateAction": "CreateAccessPoint"
41+
},
42+
"Null": {
43+
"aws:RequestTag/efs.csi.aws.com/cluster": "false"
44+
},
45+
"ForAllValues:StringEquals": {
46+
"aws:TagKeys": "efs.csi.aws.com/cluster"
47+
}
48+
}
49+
},
50+
{
51+
"Sid": "AllowDeleteAccessPoint",
52+
"Effect": "Allow",
53+
"Action": "elasticfilesystem:DeleteAccessPoint",
54+
"Resource": "*",
55+
"Condition": {
56+
"Null": {
57+
"aws:ResourceTag/efs.csi.aws.com/cluster": "false"
58+
}
59+
}
60+
}
2361
]
24-
}
62+
}

0 commit comments

Comments
 (0)