我正在AWS CDK中创建一个应用程序,该应用程序具有一个KMS IKey,该IKey具有附带PolicyStatement
s的IAM策略。我的代码没有将它们附加到PolicyDocument
,但是当它返回给我时,它有两个PolicyStatement
,它们实际上是相同的,只有一个区别,即主体。
其中一个定义了主体,另一个是{}
。AWS的方法hasPrincipal
对这两个都返回true,但是当我转到cdk deploy
时,它不会接受空对象1。我尝试从PolicyStatement
中完全删除主体,但它也不喜欢这样。
我想删除有问题的PolicyStatement
,因为两者之间的所有其他参数都相同。但是我需要进入PolicyDocument
中iKey的策略声明列表。
当我写代码进入IKey时,定义为:
var secretsKmsKey: IKey = generateEnvKMSKey(scope)
其中包括:
secretsKmsKey.policy['statements']
// or
secretsKmsKey['policy']['statements']
在我的调试器中,它存在,我可以用iKey PolicyDocument
做任何我想做的事情。然而,当我转译时,我得到:
Property 'policy' does not exist on type 'IKey'.
26 removeKmsEmptyPrincipalPolicy(secretsKmsKey['policy']['statements'])
debugger showing policy property exists on IKey object
如何进入IKey.policy
并使用它?文档和转译器说它不在那里,调试器说它在那里。
aws: aws-cli/2.12.0 Python/3.11.4 Darwin/22.5.0 source/x86_64 prompt/off
cdk: 2.83.1 (build 006b542)
constructs: 10.1.31
typeScript: Version 4.3.2
node: v16.18.1
npm: 8.19.4
已尝试使用以下两种不同的方式访问:
secretsKmsKey.policy['statements']
// or
secretsKmsKey['policy']['statements']
两者都在调试器中工作,而不是在编译器中。
还尝试从PolicyStatement中删除主体。
1条答案
按热度按时间7d7tgy0s1#
这是因为
IKey
是Typescript中的一个接口,而这个接口没有定义policy
字段,所以Typescript在抱怨。事实上,你的变量实际上是实现这个接口的Key
类的示例,TypeScript并不知道。如果你想解决Typescript的问题,你可以将它转换为Key
。或者,您可以将方法更改为返回Key
而不是IKey
,以保持其干净。