Skip to content

(dynamodb): grant calls no longer working when passed a ManagedPolicy #32795

Open
@wilhen01

Description

@wilhen01

Describe the bug

Previously, it's been possible to use .grant functions on dynamoDB tables and pass them a ManagedPolicy (which is allowed by the type system since ManagedPolicy implements IGrantable).

Under 2.174.0, that results in an error:

Cannot use a ManagedPolicy as the 'Principal' or 'NotPrincipal' in an IAM Policy.

This is a change in behaviour, and it's also inconsistent with e.g. S3 where it's still possible to call bucket.grantReadWrite(managedPolicy);

Regression Issue

  • Select this option if this issue appears to be a regression.

Last Known Working CDK Version

2.131.0

Expected Behavior

.grant functions for dynamo tables work when passed a ManagedPolicy and add the appropriate policy statements.

Current Behavior

Error thrown: Cannot use a ManagedPolicy as the 'Principal' or 'NotPrincipal' in an IAM Policy

Reproduction Steps

const table = TableV2.fromTableArn(
  this,
  'Table',
  arnForTable,
);
table.grantReadWriteData(managedPolicy);

Error is visible in CDK unit tests which verify the managed policy composition.

Possible Solution

No response

Additional Information/Context

I'm not sure if the new behaviour is correct in that a ManagedPolicy is not in fact a Principal, and hence the previous behaviour shouldn't have been allowed, but it should be consistent and obvious from documentation where you can and can't use the convenience grant functions. At present they work in this scenario for other library areas e.g. S3.

CDK CLI Version

2.174.0

Framework Version

No response

Node.js Version

18

OS

Mac OS

Language

TypeScript

Language Version

5.x

Other information

No response

Metadata

Metadata

Labels

@aws-cdk/aws-dynamodbRelated to Amazon DynamoDBbugThis issue is a bug.p3potential-regressionMarking this issue as a potential regression to be checked by team member

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions