为 Amazon Forecast 设置权限 - Amazon Forecast

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

为 Amazon Forecast 设置权限

Amazon Forecast 使用 Amazon Simple Storage Service(Amazon S3)存储目标时间序列数据,这些数据用于训练可生成预测的预测器。要代表您访问 Amazon S3,Amazon Forecast 需要您的权限。

要向 Amazon Forecast 授予代表您使用 Amazon S3 的权限,您的账户中必须具有 AWS Identity and Access Management(IAM)角色和 IAM policy。IAM policy 指定所需权限,并且必须附加到 IAM 角色。

要创建 IAM 角色和策略并将策略附加到该角色,您可以使用 IAM 控制台或 AWS Command Line Interface(AWS CLI)。

注意

Forecast 不与 Amazon Virtual Private Cloud 通信,也无法支持 Amazon S3 VPCE 网关。使用仅允许 VPC 访问的 S3 存储桶会导致 AccessDenied 错误。

为 Amazon Forecast(IAM 控制台)创建 IAM 角色

您可以使用 AWS IAM 控制台执行以下操作:

  • 创建一个将 Amazon Forecast 作为可信实体的 IAM 角色

  • 创建一个具有允许 Amazon Forecast 在 Amazon S3 存储桶中显示、读取和写入数据的权限的 IAM policy

  • 将 IAM policy 附加到 IAM 角色。

创建允许 Amazon Forecast 访问 Amazon S3(IAM 控制台) 的 IAM 角色和 IAM policy
  1. 登录 IAM 控制台 (https://console.aws.amazon.com/iam)。

  2. 选择策略并执行以下操作来创建所需策略:

    1. 单击创建策略

    2. 创建策略页面上的策略编辑器中,选择 JSON 选项卡。

    3. 复制以下策略并通过在其上粘贴此策略来替换编辑器中的文本。请务必将 bucket-name 替换为您的 S3 存储桶的名称,然后选择查看策略

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

      单击下一步:标签

    4. 或者,您可以为此策略分配标签。单击 Next: Review (下一步: 审核)

    5. 查看策略中,对于名称,输入策略的名称。例如,AWSS3BucketAccess。(可选)为此策略提供描述,然后选择创建策略

  3. 在导航窗格中,选择角色。然后执行以下操作来创建 IAM 角色:

    1. 选择创建角色

    2. 对于 Trusted entity type(可信实体类型),选择 AWS 服务

      对于用例,从常见用例部分或其他 AWS 服务 用例下拉列表中选择 Forecast。如果找不到 Forecast,请选择 EC2

      单击下一步

    3. 添加权限部分中,单击下一步

    4. 命名、检查和创建部分,针对角色名称,输入角色的名称(例如 ForecastRole)。在角色描述中更新角色描述,然后选择创建角色

    5. 现在,您应该返回角色页面。选择新角色以打开角色的详细信息页面。

    6. 摘要中,复制角色 ARN 值并保存它。您需要此值才能将数据集导入 Amazon Forecast。

    7. 如果您未选择 Amazon Forecast 作为将使用此角色的服务,则选择信任关系,然后选择编辑信任关系以更新信任策略,如下所示。

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "forecast.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:forecast:region:account-id:*" } } } ] }
    8. [可选]使用 KMS 密钥启用加密时,请附上 KMS 密钥和 ARN:

      { "Version": "2012-10-17", "Statement": [ { "Sid": "ForecastKMS", "Effect": "Allow", "Action": "kms:*", "Resource": "arn:aws:kms:region:account-id:key/KMS-key-id" } ] }

为 Amazon Forecast 创建 IAM 角色 (AWS CLI)

您可以使用 AWS CLI 来执行以下操作:

  • 创建一个将 Amazon Forecast 作为可信实体的 IAM 角色

  • 创建一个具有允许 Amazon Forecast 在 Amazon S3 存储桶中显示、读取和写入数据的权限的 IAM policy

  • 将 IAM policy 附加到 IAM 角色。

创建允许 Amazon Forecast 访问 Amazon S3(AWS CLI)的 IAM 角色和策略
  1. 创建将 Amazon Forecast 作为可信实体(可为您代入角色)的 IAM 角色:

    aws iam create-role \ --role-name ForecastRole \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "forecast.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:forecast:region:account-id:*" } } } ] }'

    此命令假定默认 AWS 配置文件是针对 Amazon Forecast 支持的 AWS 区域。如果您已配置另一个配置文件(例如,aws-forecast)以定位 Amazon Forecast 不支持的 AWS 区域,则必须通过在命令中包含 profile 参数来显式指定此配置,例如 --profile aws-forecast。有关设置 AWS CLI 配置文件的更多信息,请参阅 AWS CLI configure 命令。

    如果此命令成功创建了角色,则它会将角色作为输出返回,此输出应类似于以下内容:

    { "Role": { "Path": "/", "RoleName": "ForecastRole", "RoleId": your-role-ID, "Arn": "arn:aws:iam::your-acct-ID:role/ForecastRole", "CreateDate": "creation-date", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "forecast.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "your-acct-ID" }, "ArnLike": { "aws:SourceArn": "arn:aws:forecast:region:your-acct-ID:*" } } } ] } } }

    记录角色的 ARN。您在导入数据集以训练 Amazon Forecast 预测器时会需要它。

  2. 创建具有在 Amazon S3 中列出、读取和写入数据的权限的 IAM policy,并将此策略附加到您在步骤 1 中创建的 IAM 角色:

    aws iam put-role-policy \ --role-name ForecastRole \ --policy-name ForecastBucketAccessPolicy \ --policy-document '{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:Get*", "s3:List*", "s3:PutObject" ], "Resource":[ "arn:aws:s3:::bucket-name", "arn:aws:s3:::bucket-name/*" ] } ] }'

  3. [可选]使用 KMS 密钥启用加密时,请附上 KMS 密钥和 ARN:

    aws iam put-role-policy \ --role-name ForecastRole \ --policy-name ForecastBucketAccessPolicy \ --policy-document '{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:Get*", "s3:List*", "s3:PutObject" ], "Resource":[ "arn:aws:s3:::bucket-name", "arn:aws:s3:::bucket-name/*" ] } ] }'aws iam put-role-policy \ --role-name ForecastRole \ --policy-name ForecastKMSAccessPolicy \ --policy-document ‘{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "kms:DescribeKey", "kms:CreateGrant", "kms:RetireGrant" ], "Resource":[ "arn:aws:kms:region:account-id:key/KMS-key-id" ] } ] }’

防止跨服务混淆座席

混淆代理问题是一个安全问题,即没有执行操作权限的实体可能会迫使更具权限的实体执行该操作。在 AWS 中,跨服务模拟可能会导致混淆代理问题。一个服务(呼叫服务)调用另一项服务(所谓的服务)时,可能会发生跨服务模拟。可以操纵调用服务以使用其权限对另一个客户的资源进行操作,否则该服务不应有访问权限。为防止这种情况,AWS 提供可帮助您保护所有服务的数据的工具,而这些服务中的服务主体有权限访问账户中的资源。

我们建议在资源策略中使用 aws:SourceArnaws:SourceAccount 全局条件上下文键来限制 Identity and Access Management(IAM)授予 Amazon Forecast 对您的资源的访问权限。如果使用两个全局条件上下文键,在同一策略语句中使用时,aws:SourceAccount 值和 aws:SourceArn 值中的账户必须使用相同的账户 id。