Amazon SAM 策略模板 - Amazon Serverless Application Model
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon SAM 策略模板

Amazon Serverless Application Model (Amazon SAM) 允许您从策略模板列表中选择来将您的 Lambda 函数和 Amazon Step Functions 状态机的权限范围限定为您的应用程序使用的资源。

Amazon SAM 中使用策略模板的 Amazon Serverless Application Repository 应用程序不需要任何特殊的客户确认,即可从 Amazon Serverless Application Repository 中部署应用程序。

如果要请求添加新的策略模板,请执行以下操作:

  1. 针对 Amazon SAM GitHub 项目的 develop 分支中的 policy_templates.json 源文件提交拉取请求。您可以在 GitHub 网站上的 policy_templates.json 中找到源文件。

  2. 在 Amazon SAM GitHub 项目中提交问题,其中包括拉取请求的理由和至请求的链接。使用此链接提交新问题:Amazon Serverless Application Model:问题

语法

对于您在 Amazon SAM 模板文件中指定的每个策略模板,必须始终指定一个包含策略模板占位符值的对象。如果策略模板不需要任何占位符值,则必须指定一个空对象。

YAML

MyFunction: Type: AWS::Serverless::Function Properties: Policies: - PolicyTemplateName1: # Policy template with placeholder value Key1: Value1 - PolicyTemplateName2: {} # Policy template with no placeholder value
注意

若您已设置常规 IAM 策略或通过 Lambda 管理策略,则无需使用空对象即可设置策略模板。

示例

示例 1:具有占位符值的策略模板

以下示例显示 SQSPollerPolicy 策略模板期待 QueueName 作为资源。Amazon SAM 模板检索“MyQueue”Amazon SQS 队列的名称,您可以在同一应用程序中创建该队列或作为应用程序的参数请求。

MyFunction: Type: 'AWS::Serverless::Function' Properties: CodeUri: ${codeuri} Handler: hello.handler Runtime: python2.7 Policies: - SQSPollerPolicy: QueueName: !GetAtt MyQueue.QueueName

示例 2:不具有占位符值的策略模板

以下示例包含 CloudWatchPutMetricPolicy 策略模板,该模板没有占位符值。

注意

即使没有占位符值,也必须指定一个空对象,否则会导致错误。

MyFunction: Type: 'AWS::Serverless::Function' Properties: CodeUri: ${codeuri} Handler: hello.handler Runtime: python2.7 Policies: - CloudWatchPutMetricPolicy: {}

示例 3:包含占位符值和常规 IAM 策略的策略模板

以下示例包含 AmazonsqsFullaCess 策略和 DynamoDBCrudPolicy 策略模板。AmazonSQSFullAccess 策略是 IAM 策略而非 Amazon SAM 策略,因此无需指定空对象,该策略将直接传递至 Amazon CloudFormation。

MyFunction: Type: 'AWS::Serverless::Function' Properties: CodeUri: ${codeuri} Handler: hello.handler Runtime: python2.7 Policies: - AmazonSQSFullAccess // IAM policy could be set without passing an empty object - DynamoDBCrudPolicy: // SAM specific policy, has a defined structure TableName: !Ref SampleTable

策略模板表

下表列出了可用的策略模板。

策略模板 描述
AcmGetCertificatePolicy 授予从 Amazon Certificate Manager 读取证书的权限。
AMIDescribePolicy 授予描述亚马逊机器映像(AMI)的权限。
AthenaQueryPolicy 授予执行 Athena 查询的权限。
AWSSecretsManagerGetSecretValuePolicy 授予获取指定 Amazon Secrets Manager 密钥的密钥值的权限。
AWSSecretsManagerRotationPolicy 授予在 Amazon Secrets Manager 中轮换密钥的权限。
CloudFormationDescribeStacksPolicy 授予描述 Amazon CloudFormation 堆栈的权限。
CloudWatchDashboardPolicy 授予在 CloudWatch 控制面板上放置要运行的指标的权限。
CloudWatchDescribeAlarmHistoryPolicy 授予描述 CloudWatch 警告历史记录的权限。
CloudWatchPutMetricPolicy 授予向 CloudWatch 发送指标的权限。
CodeCommitCrudPolicy 授予在特定 CodeCommit 存储库中创建/读取/更新/删除对象的权限。
CodeCommitReadPolicy 授予在特定 CodeCommit 存储库中读取对象的权限。
CodePipelineLambdaExecutionPolicy 授予由 CodePipeline 调用 Lambda 函数报告作业返回状态的权限。
CodePipelineReadOnlyPolicy 授予获取有关 CodePipeline 管道的详细信息的读取权限。
ComprehendBasicAccessPolicy 授予检测实体、关键短语、语言和情绪的权限。
CostExplorerReadOnlyPolicy 授予对只读 Cost Explorer API 读取对账单历史记录的只读权限。
DynamoDBBackupFullAccessPolicy 授予对表进行 DynamoDB 按需备份的读和写权限。
DynamoDBCrudPolicy 授予对 Amazon DynamoDB 表的创建、读取、更新和删除权限。
DynamoDBReadPolicy 授予对 DynamoDB 表的只读权限。
DynamoDBReconfigurePolicy 授予重新配置 DynamoDB 表的权限。
DynamoDBRestoreFromBackupPolicy 授予从备份还原 DynamoDB 表的权限。
DynamoDBStreamReadPolicy 授予描述和读取 DynamoDB 流和记录的权限。
DynamoDBWritePolicy 授予对 DynamoDB 表的只写权限。
EC2CopyImagePolicy 授予复制 Amazon EC2 映像的权限。
EC2DescribePolicy 授予描述 Amazon Elastic Compute Cloud (Amazon EC2) 实例的权限。
EcsRunTaskPolicy 授予根据任务定义启动新任务的权限。
EFSWriteAccessPolicy 授予挂载具有写入访问权限的 Amazon EFS 文件系统的权限。
EKSDescribePolicy 授予描述或列出 Amazon EKS 集群的权限。
ElasticMapReduceAddJobFlowStepsPolicy 授予将新步骤添加到运行的集群中的权限。
ElasticMapReduceCancelStepsPolicy 授予取消正在运行中的集群中的一个或多个待处理步骤的权限。
ElasticMapReduceModifyInstanceFleetPolicy 授予列出集群内实例集的详细信息和修改这些实例集的容量的权限。
ElasticMapReduceModifyInstanceGroupsPolicy 授予列出集群内实例组的详细信息和修改这些实例组的设置的权限。
ElasticMapReduceSetTerminationProtectionPolicy 授予为集群设置终止保护的权限。
ElasticMapReduceTerminateJobFlowsPolicy 授予关闭集群的权限。
ElasticsearchHttpPostPolicy 授予对 Amazon OpenSearch Service 的 POST 权限。
EventBridgePutEventsPolicy 授予向 EventBridge 发送事件的权限。
FilterLogEventsPolicy 授予筛选指定日志组中的 CloudWatch 日志事件的权限。
FirehoseCrudPolicy 授予创建、写入、更新和删除 Firehose 传输流的权限。
FirehoseWritePolicy 授予写入 Firehose 传输流的权限。
KinesisCrudPolicy 授予创建、发布和删除 Amazon Kinesis 流的权限。
KinesisStreamReadPolicy 授予列出和读取 Amazon Kinesis 流的权限。
KMSDecryptPolicy 授予使用 Amazon Key Management Service (Amazon KMS) 密钥进行解密的权限。
KMSEncryptPolicy 授予使用 Amazon Key Management Service (Amazon KMS) 密钥进行加密的权限。
LambdaInvokePolicy 授予调用 Amazon Lambda 函数、别名或版本的权限。
MobileAnalyticsWriteOnlyAccessPolicy 授予对所有应用程序资源放置事件数据的只写权限。
OrganizationsListAccountsPolicy 授予列出子账户名称和 ID 的只读权限。
PinpointEndpointAccessPolicy 授予为 Amazon Pinpoint 应用程序获取并更新端点的权限。
PollyFullAccessPolicy 授予对 Amazon Polly 词典资源的完全访问权限。
RekognitionDetectOnlyPolicy 授予检测人脸、标签和文本的权限。
RekognitionFacesManagementPolicy 授予在 Amazon Rekognition 集合中添加、删除和搜索人脸的权限。
RekognitionFacesPolicy 授予比较并检测面部和标签的权限。
RekognitionLabelsPolicy 授予检测对象和审核标签的权限。
RekognitionNoDataAccessPolicy 授予比较并检测面部和标签的权限。
RekognitionReadPolicy 授予列出和搜索人脸的权限。
RekognitionWriteOnlyAccessPolicy 授予创建集合和为人脸编制索引的权限。
Route53ChangeResourceRecordSetsPolicy 授予更改 Route 53 中的资源记录集的权限。
S3CrudPolicy 授予创建、读取、更新和删除权限,以便对 Amazon S3 存储桶中的对象执行操作。
S3FullAccessPolicy 授予完全访问权限,以便对 Amazon S3 存储桶中的对象执行操作。
S3ReadPolicy 授予读取 Amazon Simple Storage Service (Amazon S3) 存储桶中的对象的只读权限。
S3WritePolicy 授予将对象写入到 Amazon S3 存储桶的写入权限。
SageMakerCreateEndpointConfigPolicy 授予在 SageMaker AI 中创建端点配置的权限。
SageMakerCreateEndpointPolicy 授予在 SageMaker AI 中创建端点的权限。
ServerlessRepoReadWriteAccessPolicy 授予在 Amazon Serverless Application Repository 服务中创建和列出应用程序的权限。
SESBulkTemplatedCrudPolicy 授予发送电子邮件、模板化电子邮件和模板化批量电子邮件以及验证身份的权限。
SESBulkTemplatedCrudPolicy_v2 授予发送 Amazon SES 电子邮件、模板化电子邮件和模板化批量电子邮件以及验证身份的权限。
SESCrudPolicy 授予发送电子邮件和验证身份的权限。
SESEmailTemplateCrudPolicy 授予创建、获取、列出、更新和删除 Amazon SES 电子邮件模板的权限。
SESSendBouncePolicy 授予对 Amazon Simple Email Service (Amazon SES) 身份的 SendBounce 权限。
SNSCrudPolicy 授予创建、发布和订阅 Amazon SNS 主题的权限。
SNSPublishMessagePolicy 授予将消息发布到 Amazon Simple Notification Service (Amazon SNS)主题的权限。
SQSPollerPolicy 授予轮询 Amazon Simple Queue Service (Amazon SQS) 队列的权限。
SQSSendMessagePolicy 授予向 Amazon SQS 队列发送消息的权限。
SSMParameterReadPolicy 授予访问来自 Amazon EC2 Systems Manager (SSM) Parameter Store 的参数的权限,以便在此账户中加载密钥。在参数名称不包含斜杠前缀时使用。
SSMParameterWithSlashPrefixReadPolicy 授予访问来自 Amazon EC2 Systems Manager (SSM) Parameter Store 的参数的权限,以便在此账户中加载密钥。在参数名称包含斜杠前缀时使用。
StepFunctionsExecutionPolicy 授予开始执行 Step Functions 状态机的权限。
TextractDetectAnalyzePolicy 授予使用 Amazon Textract 检测和分析文档的权限。
TextractGetResultPolicy 授予从 Amazon Textract 中获取检测到和分析过的文档的权限。
TextractPolicy 授予对 Amazon Textract 的完全访问权限。
VPCAccessPolicy 授予访问权限以创建、删除、描述和分离弹性网络接口。

故障排除

SAM CLI 错误:“必须为策略模板 '<policy-template-name>' 指定有效的参数值”

执行 sam build 时,您会看到以下错误:

"Must specify valid parameter values for policy template '<policy-template-name>'"
            

这意味着您在声明没有任何占位符值的策略模板时没有传递空对象。

要解决此问题,请如以下示例所示声明策略:CloudWatchPutMetricPolicy

MyFunction: Policies: - CloudWatchPutMetricPolicy: {}