微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AWS::IAM::Policy 定义与“自己的”资源参数

如何解决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 举报,一经查实,本站将立刻删除。