Skip to content

Commit 9e109ed

Browse files
authored
feat: add permission boundary as optional input to all modules (#415)
1 parent 86845d0 commit 9e109ed

82 files changed

Lines changed: 300 additions & 46 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
### **Added**
1111

12+
- added permission boundary as optional input to all modules
13+
1214
### **Changed**
1315

1416
## v3.2.2

modules/eks/ray-cluster/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ This module creates a Ray cluster in AWS EKS Kubernetes cluster. It deploys a Ra
6868
```
6969
- `pvc_name` - Persistent volume claim name. Empty by defeault. If no PVC is provided, the volume will not be mounted.
7070
- `dra_export_path` - Persistent volume mount path. Defaults to `/ray/export/`. Must start with a `/`.
71+
- `permissions_boundary_name` - IAM Policy Name to attach to all roles as permissions boundary. Empty by default.
7172
- `tags` - List of additional tags to apply to all resources
7273

7374
## User Guide

modules/eks/ray-cluster/app.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
worker_labels=app_settings.parameters.worker_labels,
4343
pvc_name=app_settings.parameters.pvc_name,
4444
dra_export_path=app_settings.parameters.dra_export_path,
45+
permissions_boundary_name=app_settings.parameters.permissions_boundary_name,
4546
env=env,
4647
)
4748

modules/eks/ray-cluster/ray_cluster_stack.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ def __init__(
4444
worker_labels: Dict[str, str],
4545
pvc_name: Optional[str],
4646
dra_export_path: str,
47+
permissions_boundary_name: Optional[str] = None,
4748
**kwargs: Any,
4849
) -> None:
4950
self.project_name = project_name
@@ -56,6 +57,13 @@ def __init__(
5657
**kwargs,
5758
)
5859

60+
# Apply permissions boundary to all roles in this stack if provided
61+
if permissions_boundary_name:
62+
permissions_boundary_policy = iam.ManagedPolicy.from_managed_policy_name(
63+
self, "PermBoundary", permissions_boundary_name
64+
)
65+
iam.PermissionsBoundary.of(self).apply(permissions_boundary_policy)
66+
5967
dep_mod = f"{project_name}-{deployment_name}-{module_name}"
6068
# used to tag AWS resources. Tag Value length can't exceed 256 characters
6169
full_dep_mod = dep_mod[:256] if len(dep_mod) > 256 else dep_mod

modules/eks/ray-cluster/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ class SeedFarmerParameters(CdkBaseSettings):
6060
worker_resources: Dict[str, Dict[str, str]] = Field(default=DEFAULT_POD_RESOURCES)
6161
worker_tolerations: List[Dict[str, str]] = Field(default=[])
6262
worker_labels: Dict[str, str] = Field(default={})
63+
permissions_boundary_name: Optional[str] = Field(default=None)
6364
tags: Optional[Dict[str, str]] = Field(default=None)
6465

6566

modules/eks/ray-cluster/tests/test_stack.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ def ray_cluster_stack(stack_defaults) -> cdk.Stack:
5353
worker_labels = {}
5454
pvc_name = "pvc"
5555
dra_export_path = "/ray/export"
56+
permissions_boundary_name = None
5657

5758
return ray_cluster_stack.RayCluster(
5859
scope=app,
@@ -82,6 +83,7 @@ def ray_cluster_stack(stack_defaults) -> cdk.Stack:
8283
worker_labels=worker_labels,
8384
pvc_name=pvc_name,
8485
dra_export_path=dra_export_path,
86+
permissions_boundary_name=permissions_boundary_name,
8587
env=cdk.Environment(
8688
account=os.environ["CDK_DEFAULT_ACCOUNT"],
8789
region=os.environ["CDK_DEFAULT_REGION"],

modules/eks/ray-operator/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ This module runs Ray Operator in AWS EKS Kubernetes cluster. It deploys a KubeRa
2525
#### Optional
2626

2727
- `data_bucket_name` - Name of the bucket to grant service account permissions to
28+
- `permissions_boundary_name` - IAM Policy Name to attach to all roles as permissions boundary. Empty by default.
2829
- `tags` - List of additional tags to apply to all resources
2930

3031
### Sample manifest declaration
@@ -78,6 +79,8 @@ parameters:
7879
- name: Namespace
7980
valueFrom:
8081
parameterValue: rayNamespaceName
82+
- name: permissions-boundary-name
83+
value: my-permissions-boundary
8184
```
8285
8386
### Module Metadata Outputs

modules/eks/ray-operator/app.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
eks_openid_issuer=app_settings.parameters.eks_openid_issuer,
2929
namespace_name=app_settings.parameters.namespace,
3030
data_bucket_name=app_settings.parameters.data_bucket_name,
31+
permissions_boundary_name=app_settings.parameters.permissions_boundary_name,
3132
env=env,
3233
)
3334

@@ -46,6 +47,7 @@
4647
namespace_name=app_settings.parameters.namespace,
4748
service_account_name=rbac_stack.service_account.service_account_name,
4849
service_account_role=rbac_stack.service_account.role,
50+
permissions_boundary_name=app_settings.parameters.permissions_boundary_name,
4951
env=env,
5052
)
5153

modules/eks/ray-operator/ray_stack.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ def __init__(
3131
namespace_name: str,
3232
service_account_name: str,
3333
service_account_role: iam.IRole,
34+
permissions_boundary_name: str | None = None,
3435
**kwargs: Any,
3536
) -> None:
3637
self.project_name = project_name
@@ -43,6 +44,13 @@ def __init__(
4344
**kwargs,
4445
)
4546

47+
# Apply permissions boundary to all roles in this stack if provided
48+
if permissions_boundary_name:
49+
permissions_boundary_policy = iam.ManagedPolicy.from_managed_policy_name(
50+
self, "PermBoundary", permissions_boundary_name
51+
)
52+
iam.PermissionsBoundary.of(self).apply(permissions_boundary_policy)
53+
4654
dep_mod = f"{project_name}-{deployment_name}-{module_name}"
4755
# used to tag AWS resources. Tag Value length can't exceed 256 characters
4856
full_dep_mod = dep_mod[:256] if len(dep_mod) > 256 else dep_mod

modules/eks/ray-operator/rbac_stack.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ def __init__(
2929
eks_handler_role_arn: str,
3030
namespace_name: str,
3131
data_bucket_name: Optional[str],
32+
permissions_boundary_name: str | None = None,
3233
**kwargs: Any,
3334
) -> None:
3435
self.project_name = project_name
@@ -43,6 +44,13 @@ def __init__(
4344
**kwargs,
4445
)
4546

47+
# Apply permissions boundary to all roles in this stack if provided
48+
if permissions_boundary_name:
49+
permissions_boundary_policy = iam.ManagedPolicy.from_managed_policy_name(
50+
self, "PermBoundary", permissions_boundary_name
51+
)
52+
iam.PermissionsBoundary.of(self).apply(permissions_boundary_policy)
53+
4654
dep_mod = f"{project_name}-{deployment_name}-{module_name}"
4755
# used to tag AWS resources. Tag Value length can't exceed 256 characters
4856
full_dep_mod = dep_mod[:256] if len(dep_mod) > 256 else dep_mod

0 commit comments

Comments
 (0)