如何将托管策略附加到无服务器框架中的 lambda 函数

Ren*_*rop 8 amazon-web-services amazon-iam amazon-cognito aws-lambda serverless-framework

如何将托管策略附加到 lambda 函数?

我试过:

provider:
  name: aws
  role: arn:aws:iam::aws:policy/AmazonCognitoReadOnly
Run Code Online (Sandbox Code Playgroud)

但这导致了以下错误:

配置堆栈时发生错误:GaDashextractLambdaFunction - 检测到 1 个验证错误:“角色”处的值“arn:aws:iam::aws:policy/AmazonCognitoReadOnly”无法满足约束:成员必须满足正则表达式模式:arn:aws: iam::\d{12}:角色/?[a-zA-Z_0-9+=,.@-_/]+.

Yan*_*Yan 6

你可以。只需在角色资源的 ManagedPolicyArns 中提供 ARN。

Resources:
  RoleName:
    ManagedPolicyArns:
      - "arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess"
Run Code Online (Sandbox Code Playgroud)

对于应用于所有功能的策略:

provider:
  name: aws
  iamManagedPolicies:
    - "arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess"
Run Code Online (Sandbox Code Playgroud)


Ant*_*ace 4

请注意错误 - 它需要role而不是policy.

IAM 策略是定义权限的文档,不能直接附加到 lambda 函数。创建IAM 角色并将托管策略附加到该角色。将角色视为策略的容器;策略不能直接附加到 lambda 函数,但角色可以。您可以自由地将托管策略和内联策略附加到您的角色或将其分离。

选项 1:使用预定义策略从 AWS 控制台修复此错误:

  • 为您的 lambda 函数创建一个新的 IAM 角色。
  • 在创建过程中,附加AmazonCognitoReadOnly托管策略。
  • 将定义中的 ARN 替换role为新角色的 ARN。

选项 2:在 serverless.yml 中定义 AmazonCognitoReadOnly 策略的操作:

这有效地将托管策略转换为内联策略。警告:这未经测试。

provider:
  ...
  iamRoleStatements:
    - Effect: Allow
      Action:
        - cognito-identity:Describe*
        - cognito-identity:Get*
        - cognito-identity:List*
        - cognito-idp:Describe*
        - cognito-idp:AdminGetUser
        - cognito-idp:List*
        - cognito-sync:Describe*
        - cognito-sync:Get*
        - cognito-sync:List*
        - iam:ListOpenIdConnectProviders
        - iam:ListRoles
        - sns:ListPlatformApplication
      Resource: *
Run Code Online (Sandbox Code Playgroud)

进一步阅读: