首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS Cloudformation:模板验证错误角色和策略

AWS Cloudformation:模板验证错误角色和策略
EN

Stack Overflow用户
提问于 2022-09-09 05:55:16
回答 1查看 26关注 0票数 0

我是cloudformation的新手,我试图创建一个模板,它可以为我的lambda函数创建一个执行角色和相关策略。

代码语言:javascript
复制
AWSTemplateFormatVersion: 2010-09-09
Description: AWS CloudFormation Template for creating iam role for SSM lambda
Parameters:
  rolename:
    Type: String
    Description: The name of the iam role for SSM Lambda
    Default: SSM_lambda_role
  policyname:
    Type: String
    Description: pcluster lambda iam policy for SSM Lambda
    Default: SSM_lambda_policy
Resources:
  ssmlambdarole:
    Type: 'AWS::IAM::Role'
    Properties:
      RoleName: !Sub '${rolename}'
      Description: iam role for ssm lambda role
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - lambda.amazonaws.com
            Action:
              - 'sts:AssumeRole'
      Path: /
      ManagedPolicyArns:
        - !Sub 'arn:aws:iam::${AWS::AccountId}:policy/${policyname}'
  ssmlambdapolicy:
    Type: 'AWS::IAM::ManagedPolicy'
    Properties:
      ManagedPolicyName: !Sub '${policyname}'
      Description: The name of the iam role for SSM Lambda
      Path: '/'
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
        - Action:
          - logs:CreateLogGroup
          Resource: arn:aws:logs:${AWS::Region}:${AWS::AccountId}:*
          Effect: Allow
          Sid: CloudWatchLogsPolicy
        - Action:
          - logs:CreateLogStream
          - logs:PutLogEvents
          Resource:
          - arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/${policyname}:*
          Effect: Allow
          Sid: CloudWatchLogsPolicy
        - Action:
          - ssm:Describe*
          - ssm:Get*
          - ssm:List*
          Resource: "*"
          Effect: Allow

如果我在上面的模板中首先定义了一个角色,那么在堆栈创建过程中我会看到一个错误,提到没有找到策略,如果我按照上面的顺序创建策略,我会一直得到一个验证错误。有人能告诉我我哪里错了吗。

EN

回答 1

Stack Overflow用户

发布于 2022-09-16 19:50:06

有一个属性可以帮助实现这一点:DependsOn

但是更好的方法是使用- !Ref ssmlambdapolicy而不是- !Sub 'arn:aws:iam::${AWS::AccountId}:policy/${policyname}'

在每种情况下,它都将在资源之间建立依赖关系。由于AWS能够识别资源创建命令--您没有使用它们中的任何一个,所以AWS第一次尝试创建一个角色(或策略,取决于模板中的顺序),并附加一个还不存在的策略。

验证错误是由于您错过了策略语句中的!sub

顺便说一句,我强烈建议在CFN文档方面寻求帮助--有时会有一个关于用例示例的章节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73657851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档