AWS Serverless Application Repository 基于资源的策略示例 - AWS Serverless Application Repository
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS Serverless Application Repository 基于资源的策略示例

附加到 AWS Serverless Application Repository 应用程序的权限策略称为基于资源的策略(或应用程序策略)。基于资源的策略确定指定的委托人可以对 AWS Serverless Application Repository 资源执行的操作和所需的条件。

AWS Serverless Application Repository 应用程序 是 AWS Serverless Application Repository 中的主要 AWS 资源。AWS Serverless Application Repository 应用程序策略主要由发布者用于向使用者授予部署其应用程序以及执行相关操作(如搜索和查看这些应用程序的详细信息)的权限。

发布者可以将应用程序权限设置为以下三个类别:

  • 私有 – 使用同一账户创建但尚未与任何其他账户共享的应用程序。只有共享您的 AWS 账户的使用者才拥有部署私有应用程序的权限。

  • 私下共享 – 发布者已明确与特定的一组 AWS 账户或与 AWS 组织中的 AWS 账户共享的应用程序。使用者有权部署已与其 AWS 账户或 AWS 组织共享的应用程序。有关 AWS 组织的更多信息,请参阅 AWS Organizations 用户指南

  • 公开共享 – 发布者已与所有人共享的应用程序。所有使用者都有权部署任何公开共享的应用程序。

注意

对于私下共享的应用程序,AWS Serverless Application Repository 唯一支持 AWS 账户作为委托人。发布者可以将 AWS 账户中的所有用户作为单个组授予或拒绝对 AWS Serverless Application Repository 应用程序的权限。发布者不能向 AWS 账户中的个别用户授予或拒绝对 AWS Serverless Application Repository 应用程序的权限。

有关使用 AWS 管理控制台设置应用程序权限的说明,请参阅共享应用程序

有关使用 AWS CLI 和示例设置应用程序权限的说明,请参阅以下部分。

应用程序权限(AWS CLI 和 AWS 开发工具包)

当您使用 AWS CLI 或 AWS 开发工具包设置 AWS Serverless Application Repository 应用程序的权限时,您可以指定以下操作:

操作 描述
GetApplication

授予查看有关应用程序的信息的权限。

CreateCloudFormationChangeSet

授予部署应用程序的权限。

注意:此操作不会授予除部署之外的任何其他权限。

CreateCloudFormationTemplate

授予为应用程序创建 AWS CloudFormation 模板的权限。

ListApplicationVersions 授予列出应用程序的版本的权限。
ListApplicationDependencies 授予列出包含应用程序中嵌套的应用程序的权限。
SearchApplications 授予搜索应用程序的权限。
部署

此操作启用表中前面列出的所有操作。也就是说,它授予查看应用程序、部署应用程序、列出版本以及搜索应用程序的权限。

基于资源的策略示例

以下示例演示如何使用 AWS CLI 授予权限。有关如何使用 AWS 管理控制台授予权限的信息,请参阅共享应用程序

本节中的所有示例都使用这些 AWS CLI 命令来管理与 AWS Serverless Application Repository 应用程序关联的权限策略:

示例 1:与其他账户共享应用程序

要与另一个特定账户共享应用程序,但阻止与其他账户共享,请将要与其共享的 AWS 账户 ID 指定为委托人。这也称为将应用程序设置为私下共享。要执行此操作,请使用以下 AWS CLI 命令。

aws serverlessrepo put-application-policy \ --region region \ --application-id application-arn \ --statements Principals=account-id,Actions=Deploy
注意

私下共享的应用程序只能在创建应用程序的同一 AWS 区域中使用。

示例 2:公开共享应用程序

要使应用程序公开,请通过将“*”指定为委托人来与每个人共享应用程序,如以下示例所示。公开共享的应用程序在所有区域中都可用。

aws serverlessrepo put-application-policy \ --region region \ --application-id application-arn \ --statements Principals=*,Actions=Deploy
注意

要公开共享应用程序,它必须同时设置了 SemanticVersionLicenseUrl 属性。

示例 3:使应用程序成为私有的

您可以使应用程序成为私有的,从而不与任何人共享,并且只能由拥有它的 AWS 账户部署。为此,您需要清除策略中的委托人和操作,这也会删除通过 AWS 组织内的其他账户部署应用程序的权限。

aws serverlessrepo put-application-policy \ --region region \ --application-id application-arn \ --statements '[]'
注意

私有应用程序只能在创建应用程序的同一 AWS 区域中使用。

示例 4:指定多个账户和权限

您可以授予多个权限,并且可以一次向多个 AWS 账户授予这些权限。为此,您可以将列表指定为委托人和操作,如以下示例所示。

aws serverlessrepo put-application-policy \ --region region \ --application-id application-arn \ --statements Principals=account-id-1,account-id-2,Actions=GetApplication,CreateCloudFormationChangeSet

示例 5:与 AWS 组织中的所有账户共享应用程序

可以向 AWS 组织内的所有用户授予权限。您可以通过指定组织 ID 来执行此操作,如以下示例所示。

aws serverlessrepo put-application-policy \ --region region \ --application-id application-arn \ --statements Principals=*,PrincipalOrgIDs=org-id,Actions=Deploy,UnshareApplication

有关 AWS 组织的更多信息,请参阅 AWS Organizations 用户指南

注意

只能指定您的 AWS 账户所属的 AWS 组织。如果您尝试指定您不是其成员的 AWS 组织,则会导致错误。

要与 AWS 组织共享您的应用程序,您必须包括 UnshareApplication 操作的权限,以防将来需要撤销共享。

示例 6:与 AWS 组织中的某些账户共享应用程序

可以向 AWS 组织内的特定账户授予权限。您可以通过指定 AWS 账户的列表作为委托人以及您的组织 ID 来执行此操作,如以下示例所示。

aws serverlessrepo put-application-policy \ --region region \ --application-id application-arn \ --statements Principals=account-id-1,account-id-2,PrincipalOrgIDs=org-id,Actions=Deploy,UnshareApplication
注意

只能指定您的 AWS 账户所属的 AWS 组织。如果您尝试指定您不是其成员的 AWS 组织,则会导致错误。

要与 AWS 组织共享您的应用程序,您必须包括 UnshareApplication 操作的权限,以防将来需要撤销共享。

示例 7:检索应用程序策略

要查看应用程序的当前策略,例如,要查看它当前是否共享,您可以使用 get-application-policy 命令,如以下示例所示。

aws serverlessrepo get-application-policy \ --region region \ --application-id application-arn

示例 8:允许特定账户嵌套应用程序

允许任何人嵌套公有应用程序。如果您希望只允许特定账户嵌套您的应用程序,则必须设置以下最低权限,如以下示例所示。

aws serverlessrepo put-application-policy \ --region region \ --application-id application-arn \ --statements Principals=account-id-1,account-id-2,Actions=GetApplication,CreateCloudFormationTemplate