用于对话日志的 IAM 策略 - Amazon Lex V1

如果您使用的是 Amazon Lex V2,请改为参阅 Amazon Lex V2 指南

 

如果您使用的是 Amazon Lex V1,我们建议您将机器人升级到 Amazon Lex V2。我们不再向 V1 添加新功能,强烈建议使用 V2 以获得全新的机器人。

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

用于对话日志的 IAM 策略

根据您选择的日志记录类型,Amazon Lex 需要具有使用 Amazon CloudWatch Logs 和 Amazon Simple Storage Service (S3) 存储桶的权限才能存储日志。您必须创建允许 Amazon Lex 访问这些资源的 AWS Identity and Access Management 角色和权限。

为对话日志创建 IAM 角色和策略

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

您可以使用 IAM AWS Management Console、IAM API 或 AWS Command Line Interface 来创建角色和策略。这些说明使用 AWS CLI 创建角色和策略。有关使用控制台创建策略的更多信息,请参阅《AWS Identity and Access Management 用户指南》中的在 JSON 选项卡上创建策略

注意

以下代码针对 Linux 和 macOS 编排了格式。对于 Windows,将 Linux 行继续符 (\) 替换为脱字号 (^)。

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

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lex.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. 在 AWS CLI 中,运行以下命令为对话日志创建 IAM 角色。

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

接下来,创建策略并将其附加到允许 Amazon Lex 写入到 CloudWatch Logs 的角色。

创建用于将对话文本的日志记录到 CloudWatch Logs 的 IAM 策略
  1. 在名为 LexConversationLogsCloudWatchLogsPolicy.json 的当前目录中创建一个文档,向其中添加 IAM 策略并保存。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:region:account-id:log-group:log-group-name:*" } ] }
  2. 在 AWS CLI 中,创建向 CloudWatch Logs 日志组授予写入权限的 IAM 策略。

    aws iam create-policy \ --policy-name cloudwatch-policy-name \ --policy-document file://LexConversationLogsCloudWatchLogsPolicy.json
  3. 将该策略附加到您为对话日志创建的 IAM 角色中。

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

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

创建用于将音频日志记录到 S3 存储桶中的 IAM 策略
  1. 在名为 LexConversationLogsS3Policy.json 的当前目录中创建一个文档,向其中添加以下策略并保存。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::bucket-name/*" } ] }
  2. 在 AWS CLI 中,创建向 S3 存储桶授予写入权限的 IAM 策略。

    aws iam create-policy \ --policy-name s3-policy-name \ --policy-document file://LexConversationLogsS3Policy.json
  3. 将该策略附加到您为对话日志创建的角色。

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

授予传递 IAM 角色的权限

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

以下策略定义要授予用户、角色或组的权限。您可以使用 iam:AssociatedResourceArniam:PassedToService 条件键来限制权限的范围。有关更多信息,请参阅《AWS Identity and Access Management 用户指南》中的向用户授予将角色传递给 AWS 服务的权限以及 IAM 和 AWS STS 条件上下文键

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