

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

# 用于对话日志的 IAM 策略
<a name="conversation-logs-policies"></a>

根据您选择的日志类型，Amazon Lex V2 需要权限才能使用亚马逊 CloudWatch 日志和亚马逊简单存储服务 (S3) 存储桶来存储您的日志。您必须创建 AWS Identity and Access Management 角色和权限才能让 Amazon Lex V2 访问这些资源。

## 为对话日志创建 IAM 角色和策略
<a name="conversation-logs-role-and-policy"></a>

要启用对话日志，您必须授予 CloudWatch 日志和 Amazon S3 的写入权限。如果您为 S3 对象启用对象加密，则需要向用于加密对象的 AWS KMS 密钥授予访问权限。

您可以使用 IAM 控制台、IAM API 或 AWS Command Line Interface 来创建角色和策略。这些说明使用 AWS CLI 创建角色和策略。

**注意**  
以下代码针对 Linux 和 macOS 编排了格式。对于 Windows，将 Linux 行继续符（\\）替换为脱字号（^）。



**为对话日志创建 IAM 角色**

1. 在名为 **LexConversationLogsAssumeRolePolicyDocument.json** 的当前目录中创建一个文档，向其中添加以下代码并保存。此策略文档将 Amazon Lex V2 作为受信任实体添加到角色中。这允许 Amazon Lex V2 担任向为对话日志配置的资源传送日志的角色。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "lexv2.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. 在 AWS CLI 中，运行以下命令为对话日志创建 IAM 角色。

   ```
   aws iam create-role \
       --role-name {{role-name}} \
       --assume-role-policy-document file://LexConversationLogsAssumeRolePolicyDocument.json
   ```

接下来，创建策略并将其附加到该角色以允许 Amazon Lex V2 写入 CloudWatch 日志。

**创建用于将对话文本记录到 Log CloudWatch s 的 IAM 策略**

1. 在名为 **LexConversationLogsCloudWatchLogsPolicy.json** 的当前目录中创建一个文档，向其中添加 IAM 策略并保存。

1. 在 AWS CLI 中，创建向 CloudWatch 日志组授予写入权限的 IAM 策略。

   ```
   aws iam create-policy \
       --policy-name {{cloudwatch-policy-name}} \
       --policy-document file://LexConversationLogsCloudWatchLogsPolicy.json
   ```

1. 将该策略附加到您为对话日志创建的 IAM 角色中。

   ```
   aws iam attach-role-policy \
       --policy-arn arn:aws:iam::{{account-id}}:policy/{{cloudwatch-policy-name}} \
       --role-name {{role-name}}
   ```

如果要将音频日志记录到 S3 存储桶，请创建允许 Amazon Lex V2 写入存储桶的策略。

**要创建用于将音频日志记录到 S3 存储桶中的 IAM 策略，请执行以下操作：**

1. 在名为 **LexConversationLogsS3Policy.json** 的当前目录中创建一个文档，向其中添加以下策略并保存。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
         {
             "Effect": "Allow",
             "Action": [
                 "s3:PutObject"
             ],
             "Resource": "arn:aws:s3:::{{bucket-name}}/*"
         }
     ]
   }
   ```

------

1. 在 AWS CLI 中，创建授予您的 S3 存储桶写入权限的 IAM 策略。

   ```
   aws iam create-policy \
       --policy-name {{s3-policy-name}} \
       --policy-document file://LexConversationLogsS3Policy.json
   ```

1. 将该策略附加到您为对话日志创建的角色。

   ```
   aws iam attach-role-policy \
       --policy-arn arn:aws:iam::{{account-id}}:policy/{{s3-policy-name}} \
       --role-name {{role-name}}
   ```

## 授予传递 IAM 角色的权限
<a name="conversation-logs-pass-role"></a>

当您使用控制台 AWS Command Line Interface、或 AWS 开发工具包指定用于对话日志的 IAM 角色时，指定对话日志 IAM 角色的用户必须有权将该角色传递给 Amazon Lex V2。要允许用户将角色传递给 Amazon Lex V2，您必须向该用户的 IAM 用户、角色或组授予 `PassRole` 权限。

以下策略定义要授予用户、角色或组的权限。您可以使用 `iam:AssociatedResourceArn` 和 `iam:PassedToService` 条件键来限制权限的范围。有关更多信息，请参阅 AWS Identity and [Access Management 用户指南中的授予用户向 AWS 服务传递角色的权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)*以及 IAM 和 AWS STS *[条件上下文密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_iam-condition-keys.html)。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::{{111122223333}}:role/{{role-name}}",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "lexv2.amazonaws.com"
                },
                "StringLike": {
                    "iam:AssociatedResourceARN": "arn:aws:lex:{{region}}:{{123456789012}}:bot:{{bot-name}}:{{bot-alias}}"
                }
            }
        }
    ]
}
```

------