aws-sagemaker-update-pipeline-config
UpdatePipeline can also change the pipeline's RoleArn (with PassRole), swapping the execution identity for all future pipeline executions.
match (effective permission)
{
"action": "sagemaker:UpdatePipeline",
"resource_type": "AWS::SageMaker::Pipeline"
}
emit
| source type | Identity |
|---|---|
| target type | Workflow |
| source | <principal> |
| target | <SageMaker Pipeline> |
| permissions | sagemaker:UpdatePipeline |
| conditions | iam_permission |
Narrative
{principal.name} can also swap {pipeline.name}'s execution role via sagemaker:UpdatePipeline, redirecting all future executions to a different (possibly more privileged) identity.
Raw rule rules/derived/aws/sagemaker.yaml
id: aws-sagemaker-update-pipeline-config
emits: CanModifyConfiguration
description: UpdatePipeline can also change the pipeline's RoleArn (with PassRole), swapping the execution
identity for all future pipeline executions.
match_effective_permission:
action: sagemaker:UpdatePipeline
resource_type: AWS::SageMaker::Pipeline
emit:
source_type: Identity
target_type: Workflow
source: <principal>
target: <SageMaker Pipeline>
permissions:
- sagemaker:UpdatePipeline
conditions:
- iam_permission
false_positive_note: 'This overlaps with aws-sagemaker-update-pipeline-definition (CanModifyCode). When
UpdatePipeline changes the RoleArn with PassRole, it is a config-identity swap (CanModifyConfiguration
+ CanPassIdentity -> CanExecuteAs via can-execute-as execute-as-via-config-identity-swap). The de-duplication
of the two matching rules on the same action is intentional: code-injection and role-swap are distinct
attack paths off the same permission.'
narrative: '{principal.name} can also swap {pipeline.name}''s execution role via sagemaker:UpdatePipeline,
redirecting all future executions to a different (possibly more privileged) identity.'