簡體   English   中英

在 CloudFormation 模板中使用現有角色

[英]Using Existing Role in CloudFormation Template

我正在嘗試在其他服務已在使用的 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)

我究竟做錯了什么? 請幫我。

對於 lambda function 你需要role而不是instance-profile

解決方案是將現有角色的 ARN復制並粘貼到模板中。 另一種可能性是使用參數傳遞它。

附言

一般需要定義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

然后對於你的 function 你會這樣做:

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

您將實例名稱指定為值,此參數應該改為相關 IAM 角色的 Arn。

根據您的問題,您正在嘗試將實例配置文件附加到您的 Lambda,這些僅適用於 EC2 實例。 相反,您需要角色本身的 Arn。

您可以從控制台獲取 IAM 角色Capras999的 Arn。

如果您使用的是現有角色,請確保將您的 AssumeRolePolicy 更新為還包含lambda.amazonaws.com (如果將其用於 Lambda@Edge,則包含lambdaedge.amazonaws.com )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM