如何将托管策略附加到lambda函数?
我尝试了:
provider:
name: aws
role: arn:aws:iam::aws:policy/AmazonCognitoReadOnly
,但这导致以下错误:
在配置堆栈时发生错误:gadashextractlambdafunction -1检测到的验证错误:值'arn:aws:iam :: aws:policy/amazonCognitoreadly' 在"角色"无法满足约束:成员必须 满足正则表达模式:ARN:AWS:IAM :: D {12}:requ/?[A-ZA-Z_0-9 =,。@-_/] 。
您可以。只需在角色资源的托管托管中提供ARN即可。
Resources:
RoleName:
ManagedPolicyArns:
- "arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess"
用于应用于所有功能的策略:
provider:
name: aws
iamManagedPolicies:
- "arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess"
注意错误 - 它期望role
而不是policy
。
iam策略是定义权限,不能直接附加到lambda函数的文档。创建IAM角色并将托管政策附加到角色上。将角色视为您政策的容器;策略不能直接附加到lambda功能上,但角色可以。您可以自由地依附并分离托管和内联策略。
选项1:使用预定义的策略从AWS控制台中修复此错误:
- 为您的lambda功能创建一个新的IAM角色。
- 在创建期间,附加
AmazonCognitoReadOnly
托管策略。 - 用新角色的ARN替换
role
定义中的ARN。
选项2:定义AmazonCognitoreadly策略在serverless.yml中的操作:
这有效地将托管策略转换为内联策略。警告:这是未经测试的。
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: *
进一步阅读:
- AWS文档-AWS lambda权限模型
- AWS文档 - 创建(IAM)执行角色(教程)