使用云形成模板中的现有角色



我正在尝试使用其他服务已在使用的 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 函数,您需要role而不是instance-profile

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

附言

通常,您需要使用 lambda 的推力策略定义 AWS::IAM::角色。例如:

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

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

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

在控制台中,您可以获取适用于 IAM 角色的 ArnCapras999

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

相关内容

  • 没有找到相关文章

最新更新