【问题标题】:AWS::IAM::Policy definition with "own" resource parameter带有“自己的”资源参数的 AWS::IAM::Policy 定义
【发布时间】:2021-09-05 09:07:07
【问题描述】:

我想定义可重用策略,类似于 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,但它基本上是( evil) 代码复制,我不想这样做。

有什么提示吗?

{
   "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"
                           }
                        }
                     ]
                  }
               }
            ]
         }
      }
   }
}

【问题讨论】:

  • 对您的函数使用嵌套模板和全局值有什么想法(在每个嵌套的 yaml 中分组)?

标签: amazon-web-services amazon-cloudformation amazon-iam aws-step-functions aws-sam


【解决方案1】:

您必须像 AWS 在您的链接中所做的那样。在 python 中开发您自己的此类 json 文件的解析器,它将采用您的策略并生成有效的模板文件。您还可以查看cloudformation macros 将您的自定义模板格式解析为要部署的有效模板。

【讨论】:

  • 我明白了。我希望找到一些“更正式”的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-17
相关资源
最近更新 更多