在CloudFormation模板中使用现有角色

时间:2020-06-11 08:32:57

标签: amazon-web-services amazon-cloudformation amazon-iam

我正在尝试在已被其他服务使用的CFN模板中使用现有的IAM角色。

Resource定义如下:

MyInstanceProfile:
  Type: "AWS::IAM::InstanceProfile"
  Properties: 
    Path: "/"
    Roles: ["Capras999"]

我是这样引用的:

LambdaFunction:
  Type: AWS::Lambda::Function
  Properties:
    Role: !Ref MyInstanceProfile

但是我收到此错误:

1 validation error detected: Value 'capras-cluster-Prsr-DL-with-params-MyInstanceProfile-1R68JNUXU0SAA' at 'role' failed to satisfy constraint: Member must satisfy regular expression pattern: arn:(aws[a-zA-Z-]*)?:iam::\d{12}:role/?[a-zA-Z_0-9+=,.@\-_/]+ (Service: AWSLambdaInternal; Status Code: 400; Error Code: ValidationException; Request ID: 5f75a56d-8ce4-473e-924e-626a5d3aab0a)

我在做什么错?请帮助我。

2 个答案:

答案 0 :(得分:2)

对于lambda函数,您需要role而不是instance-profile

解决方案是将现有角色的ARN 复制并粘贴到模板中。另一种可能性是使用parameter来传递它。

p.s。

通常,您需要为lambda的推力策略定义AWS::IAM::Role。例如:

  LambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
        RoleName: my-lambda-execution-role
        AssumeRolePolicyDocument:
          Version: '2012-10-17'               
          Statement:
            - Effect: Allow
              Principal: {'Service': ['lambda.amazonaws.com']}
              Action: ['sts:AssumeRole']
        ManagedPolicyArns:
          - arn:aws:iam::aws:policy/AWSLambdaExecute

然后要执行的功能:

LambdaFunction:
  Type: AWS::Lambda::Function
  Properties:
    Role: !GetAtt LambdaExecutionRole.Arn

答案 1 :(得分:1)

您将实例名称指定为值,此参数应改为所讨论的IAM角色的Arn。

根据您的问题,您尝试将实例配置文件附加到Lambda,这些仅适用于EC2实例。相反,您需要角色本身的Arn。

您可以从控制台获得IAM角色的Arn Capras999

如果您使用的是现有角色,请确保将AssumeRolePolicy更新为也包含lambda.amazonaws.com(如果将其用于Lambda @ Edge,则还要包含lambdaedge.amazonaws.com)。

相关问题