【问题标题】:Using Existing Role in CloudFormation Template在 CloudFormation 模板中使用现有角色
【发布时间】:2020-09-30 20:26:41
【问题描述】:

我正在尝试在已被其他服务使用的 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)

我做错了什么?请帮帮我。

【问题讨论】:

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


    【解决方案1】:

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

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

    附言

    一般情况下,您需要使用 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
    

    【讨论】:

    • 您能告诉我如何为现有角色执行此操作吗?
    • @RedBottle 这个角色是专门为 lambda 函数定义的吗?您不能使用实例中的角色。
    • @RedBottle 是定义在同一个模板还是其他模板中?
    • @RedBottle 而且你不能使用它的 arn 并将其粘贴到你的模板中或使用 cfn 参数传递它?
    • 直接粘贴就可以了。 面部护理 谢谢。如果可以的话,请把它放在答案中。让我接受它
    【解决方案2】:

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

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

    您可以从控制台获取 Arn for IAM 角色 Capras999

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

    【讨论】:

    • 您能告诉我如何为现有角色执行此操作吗?
    • 如果您想使用现有的 IAM 角色,可以在模板中指定为 CloudFormation 参数:docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…。通过在模板中指定它,您可以使用 Ref 的内在函数来引用它
    猜你喜欢
    • 2020-07-12
    • 2021-09-28
    • 2017-06-18
    • 2017-07-26
    • 2021-06-07
    • 2017-05-16
    • 2021-02-19
    • 2021-08-20
    • 2017-03-01
    相关资源
    最近更新 更多