

# IVS 中的身份和访问管理
<a name="security-iam"></a>

AWS Identity and Access Management（IAM）是一项 AWS 服务，可以帮助账户管理员安全地控制对 AWS 资源的访问。每个 AWS 资源都归某个 AWS 账户所有，创建和访问资源的权限由权限策略进行管理。IAM 账户管理员控制可以通过身份验证（登录）和授权（具有权限）使用 Amazon IVS 资源的用户。IAM 是为您的 AWS 账户提供的一项功能，不会额外收费。

**重要提示**：有关完整信息，请参阅 [AWS IAM 产品页面](https://aws.amazon.com/iam/)、[IAM 用户指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/) 以及 [签署 AWS API 请求](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html)。在本节中，我们还提供了指向《IAM 用户指南》中特定章节的链接。您应在熟悉本材料后再继续使用。

## 受众
<a name="security-iam-audience"></a>

如何使用 IAM 因您可以在 Amazon IVS 中执行的操作而异。
+ **服务用户** – 如果您使用 Amazon IVS 服务来完成工作，则管理员会为您提供所需的凭证和权限。随着您使用更多 Amazon IVS 功能来完成工作，您可能需要额外权限。了解如何管理访问权限可帮助您向管理员请求适合的权限。如果您无法访问 Amazon IVS 中的功能，请参阅 [问题排查](#security-iam-troubleshooting)。
+ **服务管理员** – 如果您在公司负责管理 Amazon IVS 资源，您可能对 Amazon IVS 具有完全访问权限。您有责任确定您的员工应访问哪些 Amazon IVS 功能和资源。然后，您必须向 IAM 管理员提交请求以更改服务用户的权限。请查看该页面上的信息以了解 IAM 的基本概念。要了解有关您的公司如何将 IAM 与 Amazon IVS 搭配使用的更多信息，请参阅 [Amazon IVS 如何与 IAM 配合使用](#security-iam-how-ivs-works)。
+ **IAM 管理员** – 如果您是 IAM 管理员，您可以编写策略以管理对 Amazon IVS 的访问的详细信息。要查看您可在 IAM 中使用的 Amazon IVS 基于身份的策略示例，请参阅 [基于身份的策略示例](#security-iam-policy-examples)。

## Amazon IVS 如何与 IAM 配合使用
<a name="security-iam-how-ivs-works"></a>

在您发出 Amazon IVS API 请求之前，您必须创建一个或多个 IAM*身份*（用户、组和角色）和 IAM*策略*，然后向身份附加策略。传播权限最多需要几分钟时间；在此之前，API 请求会被拒绝。

要简要了解 Amazon IVS 如何与 IAM 结合使用，请参阅《IAM 用户指南》中的 [与 IAM 配合使用的 AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)**。

## 身份
<a name="security-iam-identities"></a>

您可以创建 IAM 身份，以便为向您的 AWS 账户中的人员和进程提供身份验证。IAM 组是 IAM 用户的集合，可以将其作为一个单位进行管理。请参阅《IAM 用户指南》中的[身份（用户、组和角色）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)。

## 策略
<a name="security-iam-policies"></a>

请参阅《IAM 用户指南》中的以下章节：
+ [访问管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html) – 关于策略的所有信息。
+ [Amazon IVS 的操作、资源和条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoninteractivevideoservice.html)
+ [AWS 全局条件上下文键](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) 
+ [IAM JSON 策略元素参考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html) – 可以在 JSON 策略中使用的所有元素。

默认情况下，IAM 用户和角色没有创建或修改 Amazon IVS 资源（甚至更改自己的密码）的权限。他们也不能使用 AWS 控制台、AWS CLI 或 AWS API 执行任务。IAM 管理员必须创建 IAM 策略，以便为用户和角色授予权限以对所需的指定资源执行特定的 API 操作。

IAM 策略定义操作的权限，无关乎您使用哪种方法执行操作。例如，假设您有一个允许 `iam:GetRole` 操作的策略。具有该策略的用户可以从 AWS 管理控制台、AWS CLI 或 AWS API 获取角色信息。

策略是由*元素*组成的 JSON 权限策略文档。Amazon IVS 支持三个元素：
+ **操作** – Amazon IVS 的策略操作在操作前使用 `ivs` 前缀。例如，要授予某人使用 Amazon IVS `CreateChannel` API 方法创建 Amazon IVS 通道的权限，您应将 `ivs:CreateChannel` 操作纳入其策略中。策略语句必须包含 `Action` 或 `NotAction` 元素。
+ **资源** – Amazon IVS 通道资源采用以下 [ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html) 格式：

  ```
  arn:aws:ivs:${Region}:${Account}:channel/${channelId}
  ```

  例如，要在语句中指定 `VgNkEJgOVX9N` 通道，请使用以下 ARN：

  ```
  "Resource": "arn:aws:ivs:us-west-2:123456789012:channel/VgNkEJgOVX9N"
  ```

  无法对特定资源执行某些 Amazon IVS 操作，例如，用于创建资源的操作。在这些情况下，您必须使用通配符 (`*`)：

  ```
  "Resource":"*"
  ```
+ **条件** – Amazon IVS 支持部分全局条件键：`aws:RequestTag`、`aws:TagKeys` 和 `aws:ResourceTag`。

在策略中，您可以使用变量作为占位符。例如，只有在使用用户的 IAM 用户名标记 IAM 用户时，您才能为其授予访问资源的权限。请参阅 *IAM 用户指南*中的[变量和标签](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html)。

Amazon IVS 提供 AWS 托管式策略，可用于向身份授予一组预配置的权限（只读或完全访问权限）。您可以选择使用托管式策略，而不是下面所示的基于身份的策略。有关详细信息，请参阅 [Managed Policies for Amazon IVS](security-iam-awsmanpol.md)。

## 基于 Amazon IVS 标签的授权
<a name="security-iam-authorization"></a>

您可以将标签附加到 Amazon IVS 资源，或者在请求中将标签传递给 Amazon IVS。要基于标签控制访问，您需要使用 `aws:ResourceTag/key-name`、`aws:RequestTag/key-name` 或 `aws:TagKeys` 条件键在策略的条件元素中提供标签信息。有关标记 Amazon IVS 资源的更多信息，请参阅 [IVS Low-Latency Streaming API Reference](https://docs.aws.amazon.com/ivs/latest/LowLatencyAPIReference/Welcome.html) 中的“Tagging”、[IVS Real-Time Streaming API Reference](https://docs.aws.amazon.com/ivs/latest/RealTimeAPIReference/Welcome.html)，以及 [IVS Chat API Reference](https://docs.aws.amazon.com/ivs/latest/ChatAPIReference/Welcome.html)。

有关示例，请参阅[基于标签查看 Amazon IVS 通道](#security-iam-policy-examples-tags)。

## 角色
<a name="security-iam-roles"></a>

请参阅《IAM 用户指南》中的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)和[临时安全凭证](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)。

*IAM 角色*是 AWS 账户中具有特定权限的实体。

Amazon IVS 支持使用*临时安全凭证*。您可以使用临时凭证进行联合身份登录，担任 IAM 角色或担任跨账户角色。您可以调用 [AWS Security Token Service](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html) API 操作（如 `AssumeRole` 或 `GetFederationToken`）以获取临时安全凭证。

## 特权访问和非特权访问
<a name="security-iam-privileged-access"></a>

API 资源具有特权访问权限。非特权播放访问权限可以通过专有通道进行设置；请参阅 [设置私有频道](private-channels.md)。

## 使用策略的最佳实践
<a name="security-iam-policy-best-practices"></a>

请参阅 [IAM 用户指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)中的 *IAM 最佳实践*。

基于身份的策略非常强大。它们确定某个人是否可以创建、访问或删除您账户中的 Amazon IVS 资源。这些操作可能会使 AWS 账户产生成本。请遵循以下建议：
+ **授予最低权限** – 创建自定义策略时，仅授予执行任务所需的许可。最开始只授予最低权限，然后根据需要授予其他权限。这样做比起一开始就授予过于宽松的权限而后再尝试收紧权限来说更为安全。具体而言，预留 `ivs:*` 供管理员访问使用；请勿在应用程序中使用它。
+ **为敏感操作启用多重身份验证（MFA）**– 为了提高安全性，要求 IAM 用户使用 MFA 访问敏感资源或 API 操作。
+ **使用策略条件来增强安全性** – 在切实可行的范围内，定义基于身份的策略在哪些情况下允许访问资源。例如，您可编写条件来指定请求必须来自允许的 IP 地址范围。您也可以编写条件，以便仅允许指定日期或时间范围内的请求，或者要求使用 SSL 或 MFA。

## 基于身份的策略示例
<a name="security-iam-policy-examples"></a>

### 使用 Amazon IVS 控制台
<a name="security-iam-policy-examples-console"></a>

要访问 Amazon IVS 控制台，您必须具有一组最小权限，以允许您列出和查看有关 AWS 账户中 Amazon IVS 资源的详细信息。如果创建比必需的最低权限更为严格的基于身份的策略，对于附加了该策略的实体，控制台将无法按预期正常运行。为确保对 Amazon IVS 控制台的访问权限，请将以下策略附加到身份（参阅《IAM 用户指南》中的[添加和删除 IAM 权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)）。

以下策略的各个部分提供了对以下内容的访问权限：
+ 所有 Amazon IVS API 操作
+ 您的 Amazon IVS [服务限额](service-quotas.md)
+ IVS 自动记录到 S3 功能所需的 Amazon S3 端点（低延迟直播功能）和 IVS 复合记录功能（实时直播功能）。
+ 自动记录到 S3 服务链接角色创建
+ Amazon Cloudwatch 用于获取实时流会话的指标

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": "ivs:*",
      "Effect": "Allow",
      "Resource": "*"
    },
    {
      "Action": [
        "servicequotas:ListServiceQuotas"
      ],
      "Effect": "Allow",
      "Resource": "*"
    },
    {
      "Action": [
        "s3:CreateBucket",
        "s3:DeleteBucketPolicy",
        "s3:GetBucketLocation",
        "s3:GetBucketPolicy",
        "s3:ListAllMyBuckets",
        "s3:PutBucketPolicy"
      ],
      "Effect": "Allow",
      "Resource": "*"
    },
    {
      "Action": [
        "iam:AttachRolePolicy",
        "iam:CreateServiceLinkedRole",
        "iam:PutRolePolicy"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:iam::*:role/aws-service-role/ivs.amazonaws.com/AWSServiceRoleForIVSRecordToS3*"
    },
    {
      "Action": [
        "cloudwatch:GetMetricData"
      ],
      "Effect": "Allow",
      "Resource": "*"
    },
    {
      "Action": [
        "lambda:AddPermission",
        "lambda:ListFunctions"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
```

------

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

该示例显示了一项策略，该策略允许 IAM 用户查看附加到其用户身份的内联和托管策略。此策略包含在 AWS 控制台上或者使用 AWS CLI 或 AWS API 以编程方式完成此操作所需的权限。

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

****  

```
{
   "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": "*"
      }
   ]
}
```

------

### 访问 Amazon IVS 通道
<a name="security-iam-policy-examples-channel"></a>

在本示例中，您想要为您 AWS 账户中的 IAM 用户授予访问其中一个 Amazon IVS 通道 `VgNkEJgOVX9N` 的权限。您还希望允许用户停止流（`ivs:StopStream`）、添加元数据（`ivs:PutMetadata`）和更新通道（`ivs:UpdateChannel`）。策略还授予了 Amazon IVS 控制台所需的权限：`ivs:ListChannels`、`ivs:ListStreams`、`ivs:GetChannel` 和 `ivs:GetStream`。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"ListChannelsInConsole",
         "Effect":"Allow",
         "Action":[
            "ivs:ListChannels",
            "ivs:ListStreams"

         ],
         "Resource":"arn:aws:ivs:*:*:channel/*"
      },
      {
         "Sid":"ViewSpecificChannelInfo",
         "Effect":"Allow",
         "Action":[
            "ivs:GetChannel",
            "ivs:GetStream"
         ],
         "Resource":"arn:aws:ivs:*:*:channel/VgNkEJgOVX9N"
      },
      {
         "Sid":"ManageChannel",
         "Effect":"Allow",
         "Action":[
            "ivs:StopStream",
            "ivs:PutMetadata",
            "ivs:UpdateChannel"
         ],
         "Resource":"arn:aws:ivs:*:*:channel/VgNkEJgOVX9N" 
      }
   ]
}
```

------

### 基于标签查看 Amazon IVS 通道
<a name="security-iam-policy-examples-tags"></a>

您可以在基于身份的策略中使用条件，以便基于标签控制对 Amazon IVS 资源的访问。此示例显示一项允许查看通道的策略。此策略还授予在 Amazon IVS 控制台上完成此操作的必要权限。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "ListWidgetsInConsole",
         "Effect": "Allow",
         "Action": "ivs:ListChannels",
         "Resource": "arn:aws:ivs:*:*:channel/*"
      },
      {
         "Sid": "ViewChannelIfOwner",
         "Effect": "Allow",
         "Action": "ivs:GetChannel",
         "Resource": "arn:aws:ivs:*:*:channel/*",
         "Condition": {
            "StringEquals": {"aws:ResourceTag/Owner": "${aws:username}"}
         }
      }
   ]
}
```

------

您可以将该策略附加到您账户中的 IAM 用户。但是，仅当通道使用用户的用户名作为拥有者进行标记时，才授予此权限。如果用户 richard-roe 尝试查看 Amazon IVS 通道，则该通道必须标记为 `Owner=richard-roe` 或 `owner=richard-roe`；否则他会被拒绝访问。（条件标签键 `Owner` 匹配 `Owner` 和 `owner`，因为条件键名称不区分大小写。）

## 问题排查
<a name="security-iam-troubleshooting"></a>

可以使用以下信息，以帮助您诊断和修复在使用 Amazon IVS 和 IAM 时可能遇到的常见问题。
+ **我无权在 Amazon IVS 中执行操作。**

  当 mateojackson IAM 用户尝试使用 AWS 控制台查看有关 API 的详细信息，但不具有 `ivs:GetChannel` 权限时，会发生以下示例错误。

  ```
  User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: ivs:GetChannel on resource: arn:aws:ivs:us-west-2:123456789012:channel/VgNkEJgOVX9N
  ```

  在这种情况下，Mateo 请求他的管理员更新其策略，以允许他使用 `ivs:GetChannel` 操作访问 `arn:aws:ivs:us-west-2:123456789012:channel/VgNkEJgOVX9N` 资源。
+ **我想要查看我的访问密钥**。

  在创建 IAM 用户访问密钥后，您可以随时查看您的访问密钥 ID。但是，您无法再查看您的秘密访问密钥。如果您丢失了私有密钥，则必须创建一个新的访问密钥对。访问密钥分为两部分：
  + 访问密钥 ID（例如 `AKIAIOSFODNN7EXAMPLE`）
  + 秘密访问密钥（例如 `wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY`）

  与用户名和密码一样，您必须同时使用访问密钥 ID 和秘密访问密钥对请求执行身份验证。像对用户名和密码一样，安全地管理访问密钥。

  ***重要提示：请不要向第三方提供访问密钥，甚至为了帮助[找到您的规范用户 ID](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html#FindingCanonicalId) 也是如此。如果您这样做，可能会向某人提供对您的账户的永久访问权限。***

  当您创建访问密钥对时，系统会提示您将访问密钥 ID 和秘密访问密钥保存在一个安全位置。秘密访问密钥仅在您创建它时可用。如果丢失了您的秘密访问密钥，您必须为 IAM 用户添加新的访问密钥。

  您最多可拥有两个访问密钥。如果您已有两个密钥，则必须删除一个密钥对，然后再创建新的密钥。请参阅 *IAM 用户指南*中的[管理 IAM 用户的访问密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)。
+ **我是管理员并希望允许其他人访问 Amazon IVS。**

  要允许其他人访问 Amazon IVS，您必须为需要访问权限的人员或应用程序创建一个 IAM 实体（用户或角色）。人员或应用程序将使用该实体的凭证访问 AWS。然后，您必须将策略附加到实体，以便在 Amazon IVS 中为他们（它们）授予正确的权限。

  要开始使用，请参阅 *IAM 用户指南*中的[创建您的第一个 IAM 委派用户和组](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html)。
+ **我希望允许我的 AWS 账户以外的人访问我的 Amazon IVS 资源。**

  您可以创建一个角色，以便其他账户中的用户或您组织外的人员可以使用该角色来访问您的资源。您可以指定谁值得信赖，可以代入角色。对于支持基于资源的策略或访问控制列表 (ACL) 的服务，您可以使用这些策略向人员授予对您的资源的访问权。如需了解相关信息，请参阅 *IAM 用户指南*：    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/ivs/latest/LowLatencyUserGuide/security-iam.html)