

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

# AWS Serverless Application Repository 基于身份的策略示例
<a name="security_iam_id-based-policy-examples"></a>

默认情况下，IAM 用户和角色没有创建或修改 AWS Serverless Application Repository 资源的权限。他们也无法使用 AWS 管理控制台 AWS CLI、或 AWS API 执行任务。IAM 管理员必须创建 IAM 策略，以便为用户和角色授予权限以对所需的指定资源执行特定的 API 操作。然后，管理员必须将这些策略附加到需要这些权限的 IAM 用户或组。

要了解如何使用这些示例 JSON 策略文档创建基于 IAM 身份的策略，请参阅 I *AM 用户*指南中的 [“在 JSON” 选项卡上创建策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-json-editor)。

**Topics**
+ [策略最佳实践](#security_iam_service-with-iam-policy-best-practices)
+ [使用控制 AWS Serverless Application Repository 台](#security_iam_id-based-policy-examples-console)
+ [允许用户查看他们自己的权限](#security_iam_id-based-policy-examples-view-own-permissions)
+ [客户托管策略示例](#security_iam_id-examples)

## 策略最佳实践
<a name="security_iam_service-with-iam-policy-best-practices"></a>

基于身份的策略非常强大。它们决定是否有人可以在您的账户中创建、访问或删除 AWS Serverless Application Repository 资源。这些操作可能会给您的 AWS 账户带来费用。创建或编辑基于身份的策略时，请遵循以下指南和建议：
+ **授予最低权限**：创建自定义策略时，仅授予执行任务所需的许可。最开始只授予最低权限，然后根据需要授予其它权限。这样做比起一开始就授予过于宽松的权限而后再尝试收紧权限来说更为安全。有关更多信息，请参阅 *IAM 用户指南*中的[授予最低权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)。
+ **为敏感操作启用 MFA** – 为增强安全性，要求 IAM 用户使用多重身份验证 （MFA) 来访问敏感资源或 API 操作。有关更多信息，请参阅 *IAM 用户指南*中的[在 AWS中使用多重身份验证（MFA）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa.html)。
+ **使用策略条件来增强安全性** – 在切实可行的范围内，定义基于身份的策略在哪些情况下允许访问资源。例如，您可编写条件来指定请求必须来自允许的 IP 地址范围。您也可以编写条件，以便仅允许指定日期或时间范围内的请求，或者要求使用 SSL 或 MFA。有关更多信息，请参阅 *IAM 用户指南* 中的 [IAM JSON 策略元素：条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)。

## 使用控制 AWS Serverless Application Repository 台
<a name="security_iam_id-based-policy-examples-console"></a>

 AWS Serverless Application Repository 控制台为您提供了一个用于发现和管理 AWS Serverless Application Repository 应用程序的集成环境。该控制台提供的功能和工作流程通常需要管理 AWS Serverless Application Repository 应用程序的权限，此外还需要中记录的特定于 API 的权限。[AWS Serverless Application Repository API 权限：操作和资源参考](serverlessrepo-api-permissions-ref.md)

有关使用 AWS Serverless Application Repository 控制台所需权限的更多信息，请参阅[客户托管策略示例](#security_iam_id-examples)。

## 允许用户查看他们自己的权限
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

该示例说明了您如何创建策略，以允许 IAM 用户查看附加到其用户身份的内联和托管式策略。此策略包括在控制台上或使用 AWS CLI 或 AWS API 以编程方式完成此操作的权限。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

## 客户托管策略示例
<a name="security_iam_id-examples"></a>

此部分中的示例提供了一组可附加到用户的示例策略。如果您是首次创建策略，建议您先在账户中创建 IAM 用户并按顺序将策略附加到用户。您还可以使用这些示例创建单个自定义策略（其中包括执行多个操作的权限），然后将其附加到用户。

 有关如何向用户关联策略的更多信息，请参阅 *IAM 用户指南中的向用户*[添加权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)。

**Topics**
+ [发布者示例 1：允许发布者列出应用程序](#security_iam_id-example-publisher-list-apps)
+ [发布者示例 2：允许发布者查看应用程序或应用程序版本的详细信息](#security_iam_id-example-publisher-view-app-details)
+ [发布者示例 3：允许发布者创建应用程序或应用程序版本](#security_iam_id-example-publisher-create-apps)
+ [发布者示例 4：允许发布者创建应用程序策略以与其他人共享应用程序](#security_iam_id-example-publisher-create-app-policies)
+ [使用者示例 1：允许使用者搜索应用程序](#security_iam_id-example-consumer-search-apps)
+ [使用者示例 2：允许使用者查看应用程序的详细信息](#security_iam_id-example-consumer-view-app-details)
+ [使用者示例 3：允许使用者部署应用程序](#security_iam_id-example-consumer-deploy-apps)
+ [使用者示例 4：拒绝访问部署资产](#security_iam_id-example-consumer-deny-deployment-assets)
+ [使用者示例 5：防止使用者搜索和部署公有应用程序](#access-control-identity-based-example-consumer-deny-public-apps)

### 发布者示例 1：允许发布者列出应用程序
<a name="security_iam_id-example-publisher-list-apps"></a>

您的账户中的 IAM 用户必须先具有 `serverlessrepo:ListApplications` 操作权限，然后才能在控制台中查看任何内容。当您授予这些权限时，控制台可以显示在该用户所属的特定 AWS 区域中创建的 AWS 账户中的 AWS Serverless Application Repository 应用程序列表。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ListExistingApplications",
            "Effect": "Allow",
            "Action": [
                "serverlessrepo:ListApplications"
            ],
            "Resource": "*"
        }
    ]
}
```

------

 

### 发布者示例 2：允许发布者查看应用程序或应用程序版本的详细信息
<a name="security_iam_id-example-publisher-view-app-details"></a>

用户可以选择 AWS Serverless Application Repository 应用程序并查看该应用程序的详细信息。此类详细信息包括作者、说明、版本和其他配置信息。为此，用户需要 AWS Serverless Application Repository的 `serverlessrepo:ListApplicationVersions` 和 `serverlessrepo:GetApplication` API 操作的权限。

在以下示例中，为将其 Amazon 资源名称 (ARN) 指定为 `Resource` 值的特定应用程序授予这些权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewApplication",
            "Effect": "Allow",
            "Action": [
                "serverlessrepo:GetApplication",
                "serverlessrepo:ListApplicationVersions"
            ],
            "Resource": "arn:aws:serverlessrepo:{{us-east-1}}:{{111122223333}}:applications/{{application-name}}"
        }
    ]
}
```

------

 

### 发布者示例 3：允许发布者创建应用程序或应用程序版本
<a name="security_iam_id-example-publisher-create-apps"></a>

如果要允许用户拥有创建 AWS Serverless Application Repository 应用程序的权限，则需要向`serverlessrepo:CreateApplication`和`serverlessrepo:CreateApplicationVersions`操作授予权限，如以下策略所示。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CreateApplication",
            "Effect": "Allow",
            "Action": [
                "serverlessrepo:CreateApplication",
                "serverlessrepo:CreateApplicationVersion"
            ],
            "Resource": "*"
        }
    ]
}
```

------

 

### 发布者示例 4：允许发布者创建应用程序策略以与其他人共享应用程序
<a name="security_iam_id-example-publisher-create-app-policies"></a>

要使用户与其他人共享应用程序，您必须向这些用户授予创建应用程序策略的权限，如以下策略所示。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ShareApplication",
            "Effect": "Allow",
            "Action": [
                "serverlessrepo:PutApplicationPolicy",
                "serverlessrepo:GetApplicationPolicy"
            ],
            "Resource": "*"
        }
    ]
}
```

------

 

### 使用者示例 1：允许使用者搜索应用程序
<a name="security_iam_id-example-consumer-search-apps"></a>

要使使用者能够搜索应用程序，您必须向他们授予以下权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "SearchApplications",
            "Effect": "Allow",
            "Action": [
                "serverlessrepo:SearchApplications"
            ],
            "Resource": "*"
        }
    ]
}
```

------

 

### 使用者示例 2：允许使用者查看应用程序的详细信息
<a name="security_iam_id-example-consumer-view-app-details"></a>

用户可以选择 AWS Serverless Application Repository 应用程序并查看应用程序的详细信息，例如作者、描述、版本和其他配置信息。为此，用户必须具有执行以下 AWS Serverless Application Repository 操作的权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewApplication",
            "Effect": "Allow",
            "Action": [
                "serverlessrepo:GetApplication",
                "serverlessrepo:ListApplicationVersions"
            ],
            "Resource": "*"
        }
    ]
}
```

------

 

### 使用者示例 3：允许使用者部署应用程序
<a name="security_iam_id-example-consumer-deploy-apps"></a>

要使使用者能够部署应用程序，您必须向他们授予执行许多操作的权限。以下策略为客户提供了所需权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "DeployApplication",
            "Effect": "Allow",
            "Action": [
                "serverlessrepo:CreateCloudFormationChangeSet",
                "cloudformation:CreateChangeSet",
                "cloudformation:ExecuteChangeSet",
                "cloudformation:DescribeStacks"

            ],
            "Resource": "*"
        }
    ]
}
```

------

**注意**  
部署应用程序可能需要权限才能使用其他 AWS 资源。由于 AWS Serverless Application Repository 使用的底层部署机制与相同，因此有关更多信息 CloudFormation，请参阅使用 Ident [AWS ity and Access Management 控制访问权限](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html)。如需有关解决与权限相关的部署问题的帮助，请参阅[问题排查：IAM 权限不足](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html#troubleshooting-errors-insufficient-iam-permissions)。

### 使用者示例 4：拒绝访问部署资产
<a name="security_iam_id-example-consumer-deny-deployment-assets"></a>

当应用程序与 AWS 账户私下共享时，默认情况下，该账户中的所有用户都可以访问同一账户中所有其他用户的部署资产。以下策略禁止账户中的用户访问存储在 Amazon S3 存储桶中的部署资产 AWS Serverless Application Repository。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "DenyDeploymentAssetAccess",
            "Effect": "Deny",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::awsserverlessrepo-changesets*/*"
            ]
        }
    ]
}
```

------

### 使用者示例 5：防止使用者搜索和部署公有应用程序
<a name="access-control-identity-based-example-consumer-deny-public-apps"></a>

您可以阻止用户对应用程序执行某些操作。

以下策略通过将 `serverlessrepo:applicationType` 指定为 `public` 来应用于公有应用程序。它可以通过将 `Effect` 指定为 `Deny` 来阻止用户执行许多操作。有关可用条件键的更多信息 AWS Serverless Application Repository，请参阅的[操作、资源和条件键 AWS Serverless Application Repository](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_awsserverlessapplicationrepository.html)。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Condition": {
                "StringEquals": {
                    "serverlessrepo:applicationType": "public"
                }
            },
            "Action": [
                "serverlessrepo:SearchApplications",
                "serverlessrepo:GetApplication",
                "serverlessrepo:CreateCloudFormationTemplate",
                "serverlessrepo:CreateCloudFormationChangeSet",
                "serverlessrepo:ListApplicationVersions",
                "serverlessrepo:ListApplicationDependencies"
            ],
            "Resource": "*",
            "Effect": "Deny"
        }
    ]
}
```

------

**注意**  
此政策声明也可以用作服务控制策略并应用于 AWS 组织。有关服务控制策略的更多信息，请参阅《*AWS Organizations 用户指南》*中的[服务控制策略](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scp.html)。