如何将托管策略附加到无服务器框架中的 lambda 函数
How to attach a managed policy to a lambda function in serverless framework
如何将托管策略附加到 lambda 函数?
我试过了:
provider:
name: aws
role: arn:aws:iam::aws:policy/AmazonCognitoReadOnly
但这导致了以下错误:
An error occurred while provisioning your stack: GaDashextractLambdaFunction
- 1 validation error detected: Value 'arn:aws:iam::aws:policy/AmazonCognitoReadOnly'
at 'role' failed to satisfy constraint: Member must
satisfy regular expression pattern: arn:aws:iam::\d{12}:role/?[a-zA-Z_0-9+=,.@-_/]+.
注意错误 -- 它期望 role
而不是 policy
。
IAM 策略是定义权限的文档,不能直接附加到 lambda 函数。创建一个 IAM Role and attach the managed policy to the role。将角色视为策略的容器;策略不能直接附加到 lambda 函数,但角色可以。您可以自由地将托管和内联策略附加和分离到您的角色。
选项 1:使用预定义策略从 AWS 控制台修复此错误:
- 为您的 lambda 函数创建一个新的 IAM 角色。
- 在创建过程中,附加
AmazonCognitoReadOnly
托管策略。
- 将
role
定义中的 ARN 替换为新角色的 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: *
进一步阅读:
可以。只需在角色资源的 ManagedPolicyArns 中提供 ARN。
Resources:
RoleName:
ManagedPolicyArns:
- "arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess"
适用于所有功能的策略:
provider:
name: aws
iamManagedPolicies:
- "arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess"
如何将托管策略附加到 lambda 函数?
我试过了:
provider:
name: aws
role: arn:aws:iam::aws:policy/AmazonCognitoReadOnly
但这导致了以下错误:
An error occurred while provisioning your stack: GaDashextractLambdaFunction - 1 validation error detected: Value 'arn:aws:iam::aws:policy/AmazonCognitoReadOnly' at 'role' failed to satisfy constraint: Member must satisfy regular expression pattern: arn:aws:iam::\d{12}:role/?[a-zA-Z_0-9+=,.@-_/]+.
注意错误 -- 它期望 role
而不是 policy
。
IAM 策略是定义权限的文档,不能直接附加到 lambda 函数。创建一个 IAM Role and attach the managed policy to the role。将角色视为策略的容器;策略不能直接附加到 lambda 函数,但角色可以。您可以自由地将托管和内联策略附加和分离到您的角色。
选项 1:使用预定义策略从 AWS 控制台修复此错误:
- 为您的 lambda 函数创建一个新的 IAM 角色。
- 在创建过程中,附加
AmazonCognitoReadOnly
托管策略。 - 将
role
定义中的 ARN 替换为新角色的 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: *
进一步阅读:
可以。只需在角色资源的 ManagedPolicyArns 中提供 ARN。
Resources:
RoleName:
ManagedPolicyArns:
- "arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess"
适用于所有功能的策略:
provider:
name: aws
iamManagedPolicies:
- "arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess"