如何解决AWS::IAM::Policy 定义与“自己的”资源参数
我想定义可重用的策略,类似于 AWS 托管策略,将其目标资源作为参数。
我的目标是学习实现它的一般方法,但让我们考虑 StepFunctionsExecutionPolicy,并假设我想定义它的孪生 StepFunctionsKillingPolicy。我想以与原始策略相同的方式将我的策略附加到我的 Lambda。
myLambdaFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: myLambdaCodeFolder/
Handler: app.lambda_handler
Runtime: python3.8
FunctionName: !Sub "${ProjectName}_DataProcessor_${StageParam}"
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref DynamoDBTable
- StepFunctionsExecutionPolicy:
StateMachineName: !Ref MySampleStateMachine
- StepFunctionsKillingPolicy:
StateMachineName: !Ref MySampleStateMachine
在 AWS repo on gitlab,我发现了 AWS IAM 托管策略的定义和 StateMachineName 似乎是一个策略范围的参数(所有这些策略都有自己的参数):如何定义类似的东西?
当然,我可以为我计划通过 Lambda 杀死的每个 SFN 编写一个(副本)“普通”AWS::IAM:Policy 并将正确的策略附加到正确的 Lambda,但基本上是(邪恶)代码复制,我不想。
有什么提示吗?
{
"Version":"0.0.1","Templates":{
... other policy deFinitions omitted ...
"StepFunctionsExecutionPolicy":{
"Description":"Gives permission to start a Step Functions state machine execution","Parameters":{
"StateMachineName":{
"Description":"The name of the state machine to execute."
}
},"DeFinition":{
"Statement":[
{
"Effect":"Allow","Action":[
"states:StartExecution"
],"Resource":{
"Fn::Sub":[
"arn:${AWS::Partition}:states:${AWS::Region}:${AWS::AccountId}:stateMachine:${stateMachineName}",{
"stateMachineName":{
"Ref":"StateMachineName"
}
}
]
}
}
]
}
}
}
}
解决方法
您必须像 AWS 在您的链接中所做的那样。 用python开发你自己的此类json文件的解析器,它将采用你的策略并生成有效的模板文件。您还可以查看 cloudformation macros 将您的自定义模板格式解析为要部署的有效模板。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。