amazon-web-services - 使用 CloudFormation 模板中的现有角色

标签 amazon-web-services aws-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 个验证错误:“角色”处的值“capras-cluster-Prsr-DL-with-params-MyInstanceProfile-1R68JNUXU0SAA”未能满足约束:成员必须满足正则表达式模式:arn:(aws[ a-zA-Z-]*)?:iam::\d{12}:role/?[a-zA-Z_0-9+=,.@\-_/]+ (服务:AWSLambdaInternal;状态代码: 400;错误代码:ValidationException;请求 ID:5f75a56d-8ce4-473e-924e-626a5d3aab0a)

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

最佳答案

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

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

附注

一般需要定义AWS::IAM::Role具有 lambda 的推力策略。例如:

  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

关于amazon-web-services - 使用 CloudFormation 模板中的现有角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62320234/

相关文章:

amazon-web-services - 如何通过给定的 lambda 函数使角色扮演角色?

amazon-web-services - Kubectl不适用于AWS EC2实例

mysql - AWS MySQL 连接经常超时

amazon-ec2 - AMI 启动速度真的很慢

amazon-web-services - 如何限制 AWS Cognito 用户采取某些行动?

amazon-web-services - 启用 IAM 数据库身份验证后无法连接到 AWS Neptune 数据库

amazon-web-services - 使用 AWS Step 函数相对于(lambda 调用 lambda)的优势

amazon-web-services - 在 CloudFormation 模板中命名 EC2 实例?

amazon-web-services - 是否会使用 cloudformation 配置对 Amazon Elasticsearch Service 域的 VPC 支持

约束所需的正则表达式解决方案