本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon S3 存储桶
主题
挂载 Amazon S3 存储桶
研究与工程工作室 (RES) 支持将 Amazon S3 存储桶挂载到 Linux 虚拟桌面基础设施 (VDI) 实例。RES 管理员可以将 S3 存储桶载入 RES,将其附加到项目,编辑其配置,并在 “环境管理” 下的 “S3 存储桶” 选项卡中删除存储桶。
S3 存储桶控制面板提供了可供您使用的已载入 S3 存储桶的列表。在 S3 存储桶控制面板中,您可以:
-
使用添加存储桶将 S3 存储桶加载到 RES。
-
选择一个 S3 存储桶,然后使用操作菜单执行以下操作:
-
编辑存储桶
-
移除存储桶
-
-
使用搜索字段按存储桶名称进行搜索并查找已加载的 S3 存储桶。
添加亚马逊 S3 存储桶
要将 S3 存储桶添加到您的 RES 环境,请执行以下操作:
-
选择 Add bucket (添加存储桶)。
-
输入存储桶的详细信息,例如存储桶名称、ARN 和挂载点。
重要
-
创建后无法更改所提供的存储桶 ARN、挂载点和模式。
-
存储桶 ARN 可以包含一个前缀,该前缀会将已加载的 S3 存储桶与该前缀隔离开来。
-
-
选择一种加载存储桶的模式。
重要
-
有关数据隔离使用特定模式进行数据隔离的更多信息,请参阅。
-
-
在 “高级选项” 下,您可以提供 IAM 角色 ARN 来挂载存储桶以进行跨账户访问。按照中的跨账户存储桶访问权限步骤创建跨账户访问所需的 IAM 角色。
-
(可选)将存储桶与项目关联,以后可以对其进行更改。但是,无法将 S3 存储桶装载到项目的现有 VDI 会话中。只有在项目与存储桶关联后启动的会话才会挂载存储桶。
-
选择提交。
编辑 Amazon S3 存储桶
-
在 S3 存储桶列表中选择一个 S3 存储桶。
-
从 “操作” 菜单中选择 “编辑”。
-
输入您的更新。
重要
-
将项目与 S3 存储桶关联不会将存储桶挂载到该项目的现有虚拟桌面基础架构 (VDI) 实例。只有在项目中启动的 VDI 会话与该存储桶关联后,该存储桶才会装载到该项目中启动的 VDI 会话。
-
取消项目与 S3 存储桶的关联不会影响 S3 存储桶中的数据,但会导致桌面用户无法访问该数据。
-
-
选择保存存储桶设置。
移除亚马逊 S3 存储桶
-
在 S3 存储桶列表中选择一个 S3 存储桶。
-
从 “操作” 菜单中选择 “删除”。
重要
-
您必须先从存储桶中移除所有项目关联。
-
删除操作不会影响 S3 存储桶中的数据。它只会移除 S3 存储桶与 RES 的关联。
-
移除存储桶将导致现有的 VDI 会话在该会话的凭证到期(大约 1 小时)时无法访问该存储桶中的内容。
-
数据隔离
将 S3 存储桶添加到 RES 时,您可以选择将存储桶内的数据隔离给特定的项目和用户。在添加存储桶页面上,您可以选择只读 (R) 或读写 (R/W) 模式。
只读
如果选中,Read Only (R)
则根据存储桶 ARN 的前缀(Amazon 资源名称)强制执行数据隔离。例如,如果管理员使用 ARN 向 RES 添加存储分区,arn:aws:s3:::
并将此存储分区与项目 A 和项目 B 关联起来,则 VDIs 从项目 A 和项目 B 中启动的用户只能读取位于路径bucket-name
/example-data
/bucket-name
下的数据。/example-data
他们将无法访问该路径之外的数据。如果存储桶 ARN 中没有附加前缀,则整个存储桶将可供与其关联的任何项目使用。
读和写
如果Read and Write (R/W)
选中,则仍会根据存储桶 ARN 的前缀强制执行数据隔离,如上所述。此模式还有其他选项,允许管理员为 S3 存储桶提供基于变量的前缀。选中后Read and Write (R/W)
,“自定义前缀” 部分将变为可用,该部分提供包含以下选项的下拉菜单:
没有自定义前缀
/%p
/%p/%u

- 没有自定义数据隔离
-
如果
No custom prefix
选择 “自定义前缀”,则在不进行任何自定义数据隔离的情况下添加存储桶。这允许与存储桶关联的任何项目具有读取和写入权限。例如,如果管理员使用No custom prefix
选定的 ARNarn:aws:s3:::
将存储分区添加到 RES,并将此存储分区与项目 A 和项目 B 相关联,则 VDIs 从项目 A 和项目 B 中启动的用户将拥有对该存储分区的无限制读写权限。bucket-name
- 在每个项目层面进行数据隔离
-
如果
/%p
选择 “自定义前缀”,则存储桶中的数据将与其关联的每个特定项目隔离。该%p
变量表示项目代码。例如,如果管理员使用/%p
选定的 ARNarn:aws:s3:::
、挂载点为的存储桶添加存储桶bucket-name
/bucket
,并将该存储桶与项目 A 和项目 B 关联起来,则项目 A 中的用户 A 可以向写入文件。/bucket
项目 A 中的用户 B 也可以看到用户 A 写入的文件/bucket
。但是,如果用户 B 在项目 B 中启动 VDI 并进行查看/bucket
,他们将看不到用户 A 写入的文件,因为数据是按项目隔离的。用户 A 写入的文件位于前缀下的 S3 存储桶中,/ProjectA
而用户 B 只能在使用项目 B VDIs 中的文件/ProjectB
时才能访问。 - 在每个项目、每个用户级别上进行数据隔离
-
如果
/%p/%u
选择 “自定义前缀”,则存储桶中的数据将与该项目关联的每个特定项目和用户隔离。%p
变量代表项目代码,%u
代表用户名。例如,管理员使用 ARNarn:aws:s3:::
将存储桶添加到 RES 中,bucket-name
/%p/%u
选中且挂载点为。/bucket
此存储桶与项目 A 和项目 B 相关联。项目 A 中的用户 A 可以向其写入文件/bucket
。与之前只有%p
隔离的场景不同,在这种情况下,用户 B 将看不到用户 A 在项目 A 中写入的文件/bucket
,因为项目和用户都隔离了数据。用户 A 写入的文件位于前缀下的 S3 存储桶中,/ProjectA/UserA
而用户 B 只能 VDIs 在项目 A 中使用他们的文件/ProjectA/UserB
时才能访问。
跨账户存储桶访问权限
RES 可以从其他 AWS 账户挂载存储桶,前提是这些存储桶具有适当的权限。在以下场景中,账户 A 中的 RES 环境想要在账户 B 中挂载 S3 存储桶。
步骤 1:在部署 RES 的账户中创建 IAM 角色(这将称为账户 A):
-
登录需要访问 S3 存储桶的 RES 账户(账户 A)的 AWS 管理控制台。
-
打开 IAM 控制台:
-
导航到 IAM 控制面板。
-
在导航窗格中,单选择 Policies。
-
-
创建策略:
-
选择创建策略。
-
选择 JSON 选项卡。
-
粘贴以下 JSON 策略(
<BUCKET-NAME>
替换为账户 B 中的 S3 存储桶的名称): -
选择下一步。
-
-
查看并创建策略:
-
提供策略的名称(例如,AccessPolicy“S3”)。
-
添加可选描述以解释政策的用途。
-
查看策略并选择创建策略。
-
-
打开 IAM 控制台:
-
导航到 IAM 控制面板。
-
在导航窗格中,选择角色。
-
-
创建角色:
-
选择创建角色。
-
选择自定义信任策略作为可信实体的类型。
-
粘贴以下 JSON 策略(
<ACCOUNT_ID>
替换为账户 A 的实际账户 ID、<ENVIRONMENT_NAME>
RES 部署的环境<REGION>
名称以及 RES 部署到的 AWS 区域): -
选择 “下一步”。
-
-
附加权限策略:
-
搜索并选择您之前创建的策略。
-
选择 “下一步”。
-
-
标记、查看和创建角色:
-
输入角色名称(例如,AccessRole“S3”)。
-
在 “步骤 3” 下,选择 “添加标签”,然后输入以下键和值:
-
键:
res:Resource
-
值:
s3-bucket-iam-role
-
-
查看角色并选择创建角色。
-
-
在 RES 中使用 IAM 角色:
-
复制您创建的 IAM 角色 ARN。
-
登录 RES 控制台。
-
在左侧导航窗格中,选择 S3 存储桶。
-
选择添加存储桶,然后使用跨账户 S3 存储桶 ARN 填写表单。
-
选择 “高级设置-可选” 下拉列表。
-
在 IAM 角色 ARN 字段中输入角色 ARN。
-
选择 “添加存储桶”。
-
步骤 2:修改账户 B 中的存储桶策略
-
登录账户 B 的 AWS 管理控制台
-
打开 S3 控制台:
-
导航到 S3 控制面板。
-
选择您要授予访问权限的存储桶。
-
-
编辑存储桶策略:
-
选择 “权限” 选项卡,然后选择 “存储桶策略”。
-
添加以下策略以授予账户 A 中的 IAM 角色访问存储桶的权限(
<AccountA_ID>
替换为账户 A 的实际账户 ID 和<BUCKET-NAME>
S3 存储桶的名称): -
选择保存。
-
防止私有 VPC 中的数据泄露
为防止用户将数据从安全 S3 存储桶泄露到自己账户中的 S3 存储桶中,您可以附加 VPC 终端节点来保护您的私有 VPC。以下步骤说明如何为 S3 服务创建 VPC 终端节点,该终端节点支持访问您的账户中的 S3 存储桶以及任何其他拥有跨账户存储桶的账户。
-
打开亚马逊 VPC 控制台:
-
登录到 AWS 管理控制台。
-
打开 Amazon VPC 控制台,网址为 https://console.aws.amazon.com/vpc/
。
-
-
为 S3 创建 VPC 终端节点:
-
在左侧导航窗格中,选择终端节点。
-
选择创建端点。
-
对于服务类别,请确保选中 AWS 服务。
-
在 “服务名称” 字段中,输入
com.amazonaws.
(<region>
.s3<region>
用您 AWS 所在的地区替换)或搜索 “S3”。 -
从列表中选择 S3 服务。
-
-
配置端点设置:
-
对于 VPC,请选择要在其中创建终端节点的 VPC。
-
对于子网,请选择部署期间用于 VDI 子网的两个私有子网。
-
对于启用 DNS 名称,请确保选中该选项。这允许将私有 DNS 主机名解析到端点网络接口。
-
-
将策略配置为限制访问:
-
在 “策略” 下,选择 “自定义”。
-
在策略编辑器中,输入限制访问您的账户或特定账户内资源的策略。以下是策略示例(
mybucket
替换为您的 S3 存储桶444455556666
名称111122223333
和您想要访问 IDs 的相应 AWS 账户):
-
-
创建端点:
-
检视您的设置。
-
选择创建终端节点。
-
-
验证端点:
-
创建终端节点后,在 VPC 控制台中导航至 “终端节点” 部分。
-
选择新创建的端点。
-
验证 “状态” 是否为 “可用”。
-
按照这些步骤操作,您可以创建一个允许 S3 访问的 VPC 终端节点,但仅限于您的账户或指定账户 ID 中的资源。
故障排除
如何检查存储桶是否无法在 VDI 上挂载
如果存储桶无法在 VDI 上装载,则可以在几个位置检查是否存在错误。请按照以下步骤操作。
-
查看 VDI 日志:
-
登录 AWS 管理控制台。
-
打开 EC2 控制台并导航到实例。
-
选择您启动的 VDI 实例。
-
通过会话管理器连接到 VDI。
-
运行以下 命令:
sudo su cd ~/bootstrap/logs
在这里,你可以找到引导日志。任何失败的详细信息都将在
configure.log.{time}
文件中找到。此外,请查看
/etc/message
日志以获取更多详细信息。
-
-
查看自定义凭证代理 CloudWatch Lambda 日志:
-
登录 AWS 管理控制台。
-
打开 CloudWatch 控制台并导航到日志组。
-
搜索日志组
/aws/lambda/
。<stack-name>
-vdc-custom-credential-broker-lambda -
检查第一个可用的日志组并在日志中找到所有错误。这些日志将包含有关为安装 S3 存储桶提供临时自定义凭证的潜在问题的详细信息。
-
-
查看自定义凭证代理 API Gateway CloudWatch 日志:
-
登录 AWS 管理控制台。
-
打开 CloudWatch 控制台并导航到日志组。
-
搜索日志组
。<stack-name>
-vdc-custom-credential-broker-lambdavdccustomcredentialbrokerapigatewayaccesslogs<nonce> -
检查第一个可用的日志组并在日志中找到所有错误。这些日志将包含有关向 API Gateway 发出的挂载 S3 存储桶所需的自定义凭据的任何请求和响应的详细信息。
-
如何在入职后编辑存储桶的 IAM 角色配置
-
登录 AWS DynamoDB 控制台
。 -
选择表格:
-
在左侧导航窗格中,选择表。
-
查找并选择
。<stack-name>
.cluster-settings
-
-
扫描桌子:
-
选择 “浏览表格项目”。
-
确保已选择 “扫描”。
-
-
添加过滤器:
-
选择 “筛选器” 以打开 “筛选器条目” 部分。
-
将过滤器设置为与您的密钥相匹配-
-
属性:输入密钥。
-
条件:选择 “开头为”。
-
值:输入
shared-storage.
<filesystem_id>
.s3_bucket.iam_role_arn<filesystem_id>
替换为需要修改的文件系统的值。
-
-
-
执行扫描:
选择 “运行” 以使用筛选器运行扫描。
-
检查值:
如果该条目存在,请确保使用正确的 IAM 角色 ARN 正确设置该值。
如果该条目不存在:
-
选择 “创建项目”。
-
输入商品详情:
-
对于关键属性,请输入
shared-storage.
。<filesystem_id>
.s3_bucket.iam_role_arn -
添加正确的 IAM 角色 ARN。
-
-
选择 “保存” 以添加该项目。
-
-
重新启动 VDI 实例:
重启实例, VDIs 确保再次挂载受错误 IAM 角色 ARN 影响的实例。
启用 CloudTrail
要使用 CloudTrail 控制台 CloudTrail 在您的账户中启用,请按照AWS CloudTrail 用户指南中使用 CloudTrail 控制台创建跟踪中提供的说明进行操作。 CloudTrail 将通过记录访问 S3 存储桶的 IAM 角色来记录对 S3 存储桶的访问权限。这可以链接回实例 ID,该实例ID链接到项目或用户。