AWS Snowball
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本指南适用于 Snowball Edge。如果您正在查找 Snowball 的相关文档,请参阅 AWS Snowball 用户指南

为 AWS Snowball 使用基于身份的策略(IAM 策略)

本主题提供了基于身份的策略的示例,这些示例演示了账户管理员如何向 IAM 身份 (即,用户、组和角色) 附加权限策略。这些策略进而授予权限,以便对 AWS 云中的 AWS Snowball 资源执行操作。

重要

我们建议您首先阅读以下介绍性主题,这些主题讲解了管理 AWS Snowball 资源访问的基本概念和选项。有关更多信息,请参阅AWS 云中资源的访问权限管理概述

本主题的各个部分涵盖以下内容:

下面介绍权限策略示例。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": [ "snowball:*", "importexport:*" ], "Resource": "*" } ] }

该策略包含两条语句:

  • 第一个语句使用 arn:aws:s3:::*Amazon 资源名称 (ARN) 授予对所有 Amazon S3 存储桶执行三个 Amazon S3 操作(s3:GetBucketLocations3:GetObjects3:ListBucket)。ARN 使用了通配符 (*),以便用户可以选择从任意或全部 Amazon S3 存储桶导出数据。

  • 第二个语句授予执行全部 AWS Snowball 操作的权限。由于这些操作不支持资源级权限,该策略采用了通配符 (*),且 Resource 值也采用了通配符。

该策略不指定 Principal 元素,因为在基于身份的策略中,您未指定获取权限的委托人。附加了策略的用户是隐式委托人。向 IAM 角色挂载权限策略后,该角色的信任策略中标识的委托人获取权限。

有关显示所有 AWS Snowball 任务管理 API 操作及其适用资源的表,请参阅 AWS Snowball API 权限:操作、资源和条件参考

使用 AWS Snowball 控制台所需要的权限

权限参考表列出了 AWS Snowball 任务管理 API 操作,并显示了执行每个操作所需的权限。有关任务管理 API 操作的更多信息,请参阅 AWS Snowball API 权限:操作、资源和条件参考

要使用 AWS Snowball 管理控制台,您需要授予执行其他操作的权限,如以下权限策略所示:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetBucketPolicy", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListAllMyBuckets" ], "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:PutObject", "s3:AbortMultipartUpload", "s3:ListMultipartUploadParts", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": [ "lambda:GetFunction", "lambda:GetFunctionConfiguration" ], "Resource": "arn:aws:lambda:::function:*" }, { "Effect": "Allow", "Action": [ "lambda:ListFunctions" ], "Resource": "arn:aws:lambda:::*" }, { "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:CreatePolicy", "iam:CreateRole", "iam:ListRoles", "iam:ListRolePolicies", "iam:PutRolePolicy", "iam:PassRole" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "ec2:DescribeImages", "ec2:ModifyImageAttribute", ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "sns:CreateTopic", "sns:ListTopics", "sns:GetTopicAttributes", "sns:SetTopicAttributes", "sns:ListSubscriptionsByTopic", "sns:Subscribe" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "greengrass:getServiceRoleForAccount" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "snowball:*" ], "Resource": [ "*" ] } ] }

AWS Snowball 控制台出于以下原因需要上述其他权限:

  • ec2: – 这些权限可让用户描述 Amazon EC2 实例并修改其属性以用于本地计算目的。有关更多信息,请参阅使用 Amazon EC2 计算实例

  • lambda: – 有了这些权限,用户可以选择将 Lambda 函数用于本地计算。有关更多信息,请参阅将 AWS Lambda 与 AWS Snowball Edge 配合使用

  • iam: – 有了这些权限,用户可以创建或选择一个将由 AWS Snowball 担任的 IAM 角色 ARN,用于访问与任务创建和处理相关的 AWS 资源。

  • sns: – 有了这些权限,用户可以为其创建的任务创建或选择 Amazon SNS 通知。有关更多信息,请参阅AWS Snowball Edge 的通知

适用于 AWS Snowball Edge 的 AWS 托管(预定义)策略

AWS 通过提供由 AWS 创建和管理的独立 IAM 策略来解决许多常用案例。托管策略可授予常用案例的必要权限,因此,您可以免去调查都需要哪些权限的工作。有关更多信息,请参阅 IAM 用户指南 中的 AWS 托管策略

您可以将以下 AWS 托管策略用于 AWS Snowball。

为 Snowball Edge 创建 IAM 角色策略

创建的 IAM 角色策略必须拥有对 Amazon S3 存储桶的读写权限。IAM 角色还必须与 Snowball 有信任关系。拥有信任关系意味着 AWS 可以在 Snowball 和 Amazon S3 存储桶中写入数据,具体取决于您是导入数据还是导出数据。

在 AWS Snowball 管理控制台中创建任务时,在 Permission (权限) 部分的步骤 4 中创建所需的 IAM 角色。此过程是自动的。您允许 Snowball 代入的 IAM 角色只用于在带有所传输数据的 Snowball 抵达 AWS 时将您的数据写入到存储桶。此流程包括下列步骤。

为导入任务创建 IAM 角色

  1. 登录 AWS 管理控制台并通过以下网址打开 AWS Snowball 控制台:https://console.amazonaws.cn/importexport/

  2. 选择 Create job

  3. 在第一步中,填写 Amazon S3 导入任务的详细信息,然后选择 Next (下一步)

  4. 在第二步中,在 Permission 下选择 Create/Select IAM Role

    IAM 管理控制台将打开,其中显示 AWS 用于将对象复制到您指定的 Amazon S3 存储桶的 IAM 角色。

  5. 检查此页上的详细信息,然后选择允许

    您将返回到 AWS Snowball 管理控制台,其中 Selected IAM role ARN (选择的 IAM 角色 ARN) 包含您刚刚创建的 IAM 角色的 Amazon 资源名称 (ARN)。

  6. 选择 Next (下一步) 完成创建您的 IAM 角色。

上述过程创建了一个对您计划将数据导入到的 Amazon S3 存储桶拥有写权限的 IAM 角色。创建的 IAM 角色具有以下结构之一,具体取决于它是用于导入任务还是用于导出任务。

用于导入任务的 IAM 角色

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:ListBucketMultipartUploads" ], "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": [ "s3:GetBucketPolicy", "s3:PutObject", "s3:AbortMultipartUpload", "s3:ListMultipartUploadParts", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::*" } ] }

如果您使用带有 AWS KMS– 托管密钥 (SSE-KMS) 的服务器端加密对与您的导出任务关联的 Amazon S3 存储桶进行加密,则您还需要将以下语句添加到您的 IAM 角色。

{ "Effect": "Allow", "Action": [ "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-west-2:123456789012:key/abc123a1-abcd-1234-efgh-111111111111" }

用于导出任务的 IAM 角色

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetBucketPolicy", "s3:GetObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::*" } ] }

如果您使用带有 AWS KMS– 托管密钥的服务器端加密对与您的导出任务关联的 Amazon S3 存储桶进行加密,则您还需要将以下语句添加到您的 IAM 角色。

{ "Effect": "Allow", "Action": [ “kms:Decrypt” ], "Resource": "arn:aws:kms:us-west-2:123456789012:key/abc123a1-abcd-1234-efgh-111111111111" }

可以创建自己的自定义 IAM 策略,以授予对于执行 AWS Snowball 任务管理的 API 操作的权限。您可以将这些自定义策略附加到需要这些权限的 IAM 用户或组。

客户托管策略示例

在本节,您将查看一些示例用户策略,这些策略可授予执行不同 AWS Snowball 任务管理操作的权限。当您使用 AWS 开发工具包或 AWS CLI 时,可以使用这些策略。当您使用控制台时,您需要授予特定于控制台的其他权限,使用 AWS Snowball 控制台所需要的权限中对此进行了讨论。

注意

所有示例都使用 us-west-2 区域和虚构的账户 ID。

示例 1:允许用户使用 API 创建任务的角色策略

以下权限策略是用于通过任务管理 API 授予任务或集群创建权限的任何策略的必要组成部分。用户还需要使用 AWS Snowball 控制台所需要的权限中指定的部分或全部权限,具体取决于创建的任务类型。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "importexport.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "AWSIE" } } } ] }

示例 2:用于创建导入任务的角色策略

您可以使用以下角色信任策略为 Snowball Edge 创建使用 由 AWS Greengrass 提供支持的 AWS Lambda函数的导入任务。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:ListBucketMultipartUploads" ], "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": [ "s3:GetBucketPolicy", "s3:PutObject", "s3:AbortMultipartUpload", "s3:ListMultipartUploadParts", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": [ "snowball:*" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "iot:AttachPrincipalPolicy", "iot:AttachThingPrincipal", "iot:CreateKeysAndCertificate", "iot:CreatePolicy", "iot:CreateThing", "iot:DescribeEndpoint", "iot:GetPolicy" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "lambda:GetFunction" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "greengrass:CreateCoreDefinition", "greengrass:CreateDeployment", "greengrass:CreateDeviceDefinition", "greengrass:CreateFunctionDefinition", "greengrass:CreateGroup", "greengrass:CreateGroupVersion", "greengrass:CreateLoggerDefinition", "greengrass:CreateSubscriptionDefinition", "greengrass:GetDeploymentStatus", "greengrass:UpdateGroupCertificateConfiguration", "greengrass:CreateGroupCertificateAuthority", "greengrass:GetGroupCertificateAuthority", "greengrass:ListGroupCertificateAuthorities", "greengrass:ListDeployments", "greengrass:GetGroup", "greengrass:GetGroupVersion", "greengrass:GetCoreDefinitionVersion" ], "Resource": [ "*" ] } ] }

示例 3:用于创建导出任务的角色策略

您可以使用以下角色信任策略为 Snowball Edge 创建使用 由 AWS Greengrass 提供支持的 AWS Lambda函数的导出任务。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": [ "snowball:*" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "iot:AttachPrincipalPolicy", "iot:AttachThingPrincipal", "iot:CreateKeysAndCertificate", "iot:CreatePolicy", "iot:CreateThing", "iot:DescribeEndpoint", "iot:GetPolicy" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "lambda:GetFunction" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "greengrass:CreateCoreDefinition", "greengrass:CreateDeployment", "greengrass:CreateDeviceDefinition", "greengrass:CreateFunctionDefinition", "greengrass:CreateGroup", "greengrass:CreateGroupVersion", "greengrass:CreateLoggerDefinition", "greengrass:CreateSubscriptionDefinition", "greengrass:GetDeploymentStatus", "greengrass:UpdateGroupCertificateConfiguration", "greengrass:CreateGroupCertificateAuthority", "greengrass:GetGroupCertificateAuthority", "greengrass:ListGroupCertificateAuthorities", "greengrass:ListDeployments", "greengrass:GetGroup", "greengrass:GetGroupVersion", "greengrass:GetCoreDefinitionVersion" ], "Resource": [ "*" ] } ] }