本指南适用于 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": "*" } ] }
该策略包含两条语句:
-
第一个语句使用 Amazon S3 的
s3:GetBucketLocation
Amazon 资源名称 (ARN)s3:GetObject
授予对所有s3:ListBucket
存储桶执行三个 Amazon S3 操作(、 和arn:aws:s3:::*
)的权限。 ARN 指定一个通配符 (*),以便用户可以选择要从中导出数据的任何或所有 Amazon S3 存储桶。 -
第二个语句授予执行全部 AWS Snowball 操作的权限。由于这些操作不支持资源级权限,该策略采用了通配符 (*),且
Resource
值也采用了通配符。
该策略不指定 Principal
元素,因为在基于身份的策略中,您未指定获取权限的委托人。附加了策略的用户是隐式委托人。向 IAM 角色挂载权限策略后,该角色的信任策略中标识的委托人获取权限。
有关显示所有 AWS Snowball 任务管理 API 操作及其适用资源的表,请参阅 AWS Snowball API 权限: 操作、资源和条件参考。
使用 AWS Snowball 控制台所需的权限
权限参考表列出了 AWS Snowball 任务管理 API 操作,并显示了执行每个操作所需的权限。有关任务管理 API 操作的更多信息,请参阅 AWS Snowball API 权限: 操作、资源和条件参考。
要使用 AWS Snow 系列管理控制台,您需要授予执行其他操作的权限,如以下权限策略所示:
{ "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 Snow 系列管理控制台中创建任务时,在 Permission (权限) 部分的步骤 4 中创建所需的 IAM 角色。此过程是自动的。您允许 Snowball 代入的 IAM 角色只用于在带有所传输数据的 Snowball 抵达 AWS 时将您的数据写入到存储桶。此流程包括下列步骤。
为导入任务创建 IAM 角色
-
登录 AWS 管理控制台并通过以下网址打开 AWS Snowball 控制台:https://console.amazonaws.cn/importexport/
。 -
选择创建作业。
-
在第一步中,填写 Amazon S3 导入任务的详细信息,然后选择 Next (下一步)。
-
在第二步中,在 Permission 下选择 Create/Select IAM Role。
IAM 管理控制台将打开,其中显示 AWS 用于将对象复制到您指定的 Amazon S3 存储桶的 IAM 角色。
-
检查此页上的详细信息,然后选择允许。
您将返回到 AWS Snow 系列管理控制台,其中 Selected IAM role ARN (选择的 IAM 角色 ARN) 包含您刚刚创建的 IAM 角色的 Amazon 资源名称 (ARN)。
-
选择 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
" }
如果对象大小较大,则用于执行导入过程的 Amazon S3 客户端会使用分段上传。如果启动使用 SSE-KMS 的分段上传,则系统会使用指定的 AWS KMS 密钥对所有已上传部分进行加密。由于上传的各部分内容已加密,因此必须先对其进行解密,然后才能组合起来完成分段上传。因此,您必须具有解密
AWS KMS密钥 (kms:Decrypt
) 的权限,才能对 Amazon S3 执行采用 SSE-KMS 的分段上传。
以下是需要 kms:Decrypt
权限的导入作业所需的 IAM 角色示例。
{ "Effect": "Allow", "Action": [ "kms:GenerateDataKey","kms:Decrypt" ], "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 用户或组。