Мне нравится, как создается встроенная политика роль + при развертывании шаблона:
Ресурсы:
MyFUnction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
Description: Enter description of what this specific Lambda does
CodeUri: hello_world/build/
Handler: app.lambda_handler
Runtime: python2.7
Environment: # More info about Env Vars: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#environment-object
Variables:
PARAM1: VALUE
Policies:
# Using AWSLambdaExecute automatically creates a role named: <StackName>Role-<UUID>
- AWSLambdaExecute
# This policy is assigned as an Inline policy to the role
- Version: '2012-10-17' # Policy Document
Statement:
Effect: Allow
Action: ......
Теперь я могу указать роль, которая создается динамически, и добавить для нее Выход: в шаблоне SAM?
на самом деле это не нужно, но мне нравятся мои выходы, чтобы иметь эту информацию - приятно иметь





Результирующая роль, которую SAM создает для вас, - это просто имя вашей функции с добавлением «Роль» в конце. Вы можете использовать эту информацию, чтобы получить роль или ее свойства с помощью обычных функций CloudFormation.
Например, если вы хотите получить доступ к роли ARN MyFunction, вы должны использовать !GetAtt MyFunctionRole.Arn в своем шаблоне SAM YAML. Тот же принцип должен применяться к !Ref и другим функциям.
Мне удалось протестировать решение этой проблемы, в SAM template.yaml вы можете добавить выход, как в CloudFormation, для логического идентификатора, который создается автоматически для вас как часть преобразования при использовании таких свойств, как Policies для AWS::Serverless::Function.
Логический идентификатор результирующей роли IAM - <Function Logical ID>Role, я использовал следующее:
Outputs:
LambdaRole:
Value:
Fn::GetAtt:
- "LambdaFunctionRole"
- "Arn"
Description: "Lambda IAM Role"
Документы, похоже, не предоставляют вам способа получить роль выполнения IAM. Вы могли бы написать макрос CloudFormation, чтобы получить эту информацию, если это абсолютно необходимо. Вы уверены, что вам это действительно нужно? Я бы подумал, что это внутреннее для этого конкретного бессерверного развертывания.