安全和权限 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

安全和权限

当您查询来自 Athena 或 Amazon Redshift 的数据时,查询的数据集将自动存储在您使用 Studio 的 Amazon 区域的默认 SageMaker S3 存储桶中。此外,当您从 Amazon SageMaker Data Wrangler 导出 Jupyter 笔记本并运行它时,您的数据流或 .flow 文件也将保存到前缀 data_wrangler_flow 下的同一默认存储桶中。

对于高级安全需求,您可以配置存储桶策略,限制可访问此默认 SageMaker S3 存储桶的 Amazon 角色。可使用以下部分将此策略类型添加到 S3 存储桶。要按照本页上的说明操作,请使用 Amazon Command Line Interface (Amazon CLI)。要了解如何操作,请参阅《IAM 用户指南》中的配置 Amazon CLI

此外,您需要授予每个使用 Data Wrangler 的 IAM 角色,访问所需资源的权限。对于用于访问 Data Wrangler 的 IAM 角色,如果您不需要精细的权限,那么可以将 IAM 托管策略 AmazonSageMakerFullAccess 添加到用于创建 Studio 用户的 IAM 角色。此策略授予您使用 Data Wrangler 的完全权限。如果您需要更精细的权限,请参阅以下部分:授予 IAM 角色使用 Data Wrangler 的权限

添加存储桶策略以限制对导入到 Data Wrangler 的数据集的访问

您可以使用 Amazon S3 存储桶策略,向包含 Data Wrangler 资源的 S3 存储桶添加策略。Data Wrangler 上传至您使用 Studio 的 Amazon 区域中的默认 SageMaker S3 存储桶的资源包括以下内容:

  • 查询的 Amazon Redshift 结果。这些结果存储在 redshift/ 前缀下。

  • 查询的 Athena 结果。这些结果存储在 athena/ 前缀下。

  • 在运行 Data Wrangler 所生成的导出的 Jupyter 笔记本时,上传至 Amazon S3 的 .flow 文件。这些文件存储在 data_wrangler_flow/ 前缀下。

可使用以下过程创建 S3 存储桶策略,您可以添加此策略以限制 IAM 角色对该存储桶的访问。要了解如何向 S3 存储桶添加策略,请参阅如何添加 S3 存储桶策略

要对存储 Data Wrangler 资源的 S3 存储桶设置存储桶策略,请执行以下操作:
  1. 配置一个或多个您希望能访问 Data Wrangler 的 IAM 角色。

  2. 打开命令提示符或 Shell。对于创建的每个角色,将 role-name 替换为角色名称,并运行以下命令:

    $ aws iam get-role --role-name role-name

    在回复中,您会看到以 AROA 开头的 RoleId 字符串。复制此字符串。

  3. 将以下策略添加到您使用 Data Wrangler 的 Amazon 区域中的 SageMaker 默认存储桶。将 region 替换为存储桶所在的 Amazon 区域,将 account-id 替换为您的 Amazon 账户 ID。将以 AROAEXAMPLEID 开头的 userId,替换为您希望授予其 Data Wrangler 使用权限的 Amazon 角色的 ID。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::sagemaker-region-account-id/data_wrangler_flows/", "arn:aws:s3:::sagemaker-region-account-id/data_wrangler_flows/*", "arn:aws:s3:::sagemaker-region-account-id/athena", "arn:aws:s3:::sagemaker-region-account-id/athena/*", "arn:aws:s3:::sagemaker-region-account-id/redshift", "arn:aws:s3:::sagemaker-region-account-id/redshift/*" ], "Condition": { "StringNotLike": { "aws:userId": [ "AROAEXAMPLEID_1:*", "AROAEXAMPLEID_2:*" ] } } } ] }

为 Data Wrangler 创建允许列表

每当用户从 Amazon SageMaker Studio 用户界面开始运行 Data Wrangler 时,该用户界面会调用 SageMaker 应用程序编程接口 (API) 创建 Data Wrangler 应用程序。

默认情况下,您的组织可能不会向用户提供调用这些 API 的权限。要提供权限,必须使用以下策略模板创建策略并附加到用户的 IAM 角色:Data Wrangler 允许列表示例

注意

上述策略示例仅为用户提供访问 Data Wrangler 应用程序的权限。

有关创建策略的信息,请参阅在 JSON 选项卡中创建策略。创建策略时,可将 JSON 策略从 Data Wrangler 允许列表示例中复制并粘贴到 JSON 选项卡中。

重要

删除阻止用户运行以下操作的任何 IAM 策略:

如果不删除这些政策,用户仍可能受其影响。

使用模板创建策略后,将其附加到用户的 IAM 角色。有关附加策略的信息,请参阅添加 IAM 身份权限(控制台)

授予 IAM 角色使用 Data Wrangler 的权限

您可以通过一般 IAM 托管策略 AmazonSageMakerFullAccess,授予 IAM 角色使用 Data Wrangler 的权限。这是一个通用策略,包括使用所有 SageMaker 服务所需的权限。此策略授予 IAM 角色对 Data Wrangler 的完全访问权限。在使用 AmazonSageMakerFullAccess 授予 Data Wrangler 访问权限时,应该知晓以下事项:

  • 如果从 Amazon Redshift 导入数据,数据库用户名称必须具有前缀 sagemaker_access

  • 此托管策略仅授予名称中包含以下词组之一的存储桶的访问权限:SageMakerSageMakersagemakeraws-glue。如果要使用 Data Wrangler,从名称中不含以上词组的 S3 存储桶导入,那么请参阅本页最后一部分,了解如何向 IAM 实体授予访问 S3 存储桶的权限。

如果您有高安全性需求,可以将本部分中的策略附加到 IAM 实体,以授予使用 Data Wrangler 所需的权限。

如果 IAM 角色需要从 Data Wrangler 导入 Amazon Redshift 或 Athena 中的数据集,那么必须向该实体添加策略才能访问这些资源。以下策略是可用于授予 IAM 角色从 Amazon Redshift 和 Athena 导入数据的权限最严格的策略。

要了解如何将自定义策略附加到 IAM 角色,请参阅《IAM 用户指南》中的管理 IAM 策略

授予 Athena 数据集导入访问权限的策略示例

以下策略假定 IAM 角色有权访问底层 S3 存储桶,数据通过单独的 IAM 策略存储在此存储桶中。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "athena:ListDataCatalogs", "athena:ListDatabases", "athena:ListTableMetadata", "athena:GetQueryExecution", "athena:GetQueryResults", "athena:StartQueryExecution", "athena:StopQueryExecution" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "glue:CreateTable" ], "Resource": [ "arn:aws:glue:*:*:table/*/sagemaker_tmp_*", "arn:aws:glue:*:*:table/sagemaker_featurestore/*", "arn:aws:glue:*:*:catalog", "arn:aws:glue:*:*:database/*" ] }, { "Effect": "Allow", "Action": [ "glue:DeleteTable" ], "Resource": [ "arn:aws:glue:*:*:table/*/sagemaker_tmp_*", "arn:aws:glue:*:*:catalog", "arn:aws:glue:*:*:database/*" ] }, { "Effect": "Allow", "Action": [ "glue:GetDatabases", "glue:GetTable", "glue:GetTables" ], "Resource": [ "arn:aws:glue:*:*:table/*", "arn:aws:glue:*:*:catalog", "arn:aws:glue:*:*:database/*" ] }, { "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:GetDatabase" ], "Resource": [ "arn:aws:glue:*:*:catalog", "arn:aws:glue:*:*:database/sagemaker_featurestore", "arn:aws:glue:*:*:database/sagemaker_processing", "arn:aws:glue:*:*:database/default", "arn:aws:glue:*:*:database/sagemaker_data_wrangler" ] } ] }

授予 Amazon Redshift 数据集导入访问权限的策略示例

以下策略授予如下权限:使用名称中具有 sagemaker_access 前缀的数据库用户,设置 Amazon Redshift 与 Data Wrangler 的连接。要授权使用其他数据库用户进行连接,可在以下策略的 "Resources" 下添加其他条目。以下策略假定 IAM 角色有权访问底层 S3 存储桶,数据通过单独的 IAM 策略存储在此存储桶中(如果适用)。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "redshift-data:ExecuteStatement", "redshift-data:DescribeStatement", "redshift-data:CancelStatement", "redshift-data:GetStatementResult", "redshift-data:ListSchemas", "redshift-data:ListTables" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "redshift:GetClusterCredentials" ], "Resource": [ "arn:aws:redshift:*:*:dbuser:*/sagemaker_access*", "arn:aws:redshift:*:*:dbname:*" ] } ] }

授予 S3 存储桶访问权限的策略

如果数据集存储在 Amazon S3 中,那么可以通过类似以下的策略,授予 IAM 角色访问此存储桶的权限。此示例授予对名为 test 的存储桶的可编程读写访问权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::test"] }, { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": ["arn:aws:s3:::test/*"] } ] }

要从 Athena 和 Amazon Redshift 导入数据,必须授予 IAM 角色必要的权限,以访问正使用 Data Wrangler 的 Amazon 区域中默认 Amazon S3 存储桶下的以下前缀:athena/redshift/。如果默认的 Amazon S3 存储桶尚未存在于 Amazon 区域中,那么还必须向 IAM 角色授予在此区域创建存储桶的权限。

此外,如果希望 IAM 角色能使用 Amazon SageMaker Feature Store、SageMaker Pipelines 和 Data Wrangler 作业导出选项,还必须授予对此存储桶中前缀 data_wrangler_flows/ 的访问权限。

Data Wrangler 使用 athena/redshift/ 前缀存储预览文件和导入的数据集。要了解更多信息,请参阅导入的数据存储

当您运行从 Data Wrangler 导出的 Jupyter 笔记本时,Data Wrangler 使用 data_wrangler_flows/ 前缀存储 .flow 文件。要了解更多信息,请参阅导出

可以使用类似以下的策略授予上文中所述的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::sagemaker-region-account-id/data_wrangler_flows/", "arn:aws:s3:::sagemaker-region-account-id/data_wrangler_flows/*", "arn:aws:s3:::sagemaker-region-account-id/athena", "arn:aws:s3:::sagemaker-region-account-id/athena/*", "arn:aws:s3:::sagemaker-region-account-id/redshift", "arn:aws:s3:::sagemaker-region-account-id/redshift/*" ] }, { "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:ListBucket" ], "Resource": "arn:aws:s3:::sagemaker-region-account-id" }, { "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Resource": "*" } ] }

您还可以通过指定 Amazon S3 存储桶 URI,从另一个 Amazon 账户访问 Amazon S3 存储桶中的数据。为此,授予对另一账户中 Amazon S3 存储桶的访问权限的 IAM 策略,应使用类似以下示例的策略,其中 BucketFolder 是用户存储桶 UserBucket 中的特定目录。此策略应添加到授权其他用户访问其存储桶的用户。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::UserBucket/BucketFolder/*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::UserBucket", "Condition": { "StringLike": { "s3:prefix": [ "BucketFolder/*" ] } } } ] }

访问存储桶的用户(非存储桶所有者)必须向其用户添加类似以下示例的策略。请注意,下面的 AccountXTestUser 分别代表存储桶所有者和其用户。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountX:user/TestUser" }, "Action": [ "s3:GetObject", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::UserBucket/BucketFolder/*" ] }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountX:user/TestUser" }, "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::UserBucket" ] } ] }

授予使用 SageMaker Studio 的访问权限的策略示例

可使用类似以下的策略,创建可用于设置 Studio 实例的 IAM 执行角色。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:CreatePresignedDomainUrl", "sagemaker:DescribeDomain", "sagemaker:ListDomains", "sagemaker:DescribeUserProfile", "sagemaker:ListUserProfiles", "sagemaker:*App", "sagemaker:ListApps" ], "Resource": "*" } ] }

Snowflake 和 Data Wrangler

Amazon 资源的所有权限通过附加到 Studio 实例的 IAM 角色进行管理。特定于 Snowflake 的权限将由 Snowflake 管理员管理,因为他们可以向每个 Snowflake 用户授予精细权限/特权。包括数据库、架构、表、仓库和存储集成对象。您必须确保在 Data Wrangler 外部设置了正确的权限。

请注意,默认情况下 Snowflake COPY INTO Amazon S3 命令通过公共互联网将数据从 Snowflake 移动到 Amazon S3,但传输中数据使用 SSL 进行保护。Amazon S3 中的静态数据使用默认的 Amazon KMS key,用 SSE-KMS 进行加密。

在 Snowflake 凭证存储方面,Data Wrangler 不存储客户凭证。Data Wrangler 使用 Secrets Manager 将凭证存储在密钥中,并将密钥轮换作为最佳实践安全计划的一部分。Snowflake 或 Studio 管理员需要确保,向数据科学家的 Studio 执行角色授予对存储凭证的密钥执行 GetSecretValue 的权限。如果已将 AmazonSageMakerFullAccess 策略附加到 Studio 执行角色,那么此策略具备必要的权限,可读取 Data Wrangler 创建的密钥,以及按照上述说明中的命名和标记约定创建的密钥。未遵守约定的密钥必须单独授权。我们建议使用 Secrets Manager 来防止通过不安全的渠道共享凭证,但请注意,登录用户可以通过在 Studio 中启动终端或 Python 笔记本,然后从 Secret Manager API 调用 API 来检索明文密码。

使用 Amazon KMS 进行数据加密

在 Data Wrangler 中,您可以对加密的文件进行解密,并将其添加到 Data Wrangler 流中。也可以使用默认的 Amazon KMS 密钥或您提供的密钥,对转换的输出进行加密。

您可以导入具以下特点的文件:

  • 服务器端加密

  • 采用 SSE-KMS 作为加密类型

要解密文件并导入 Data Wrangler 流,必须将所使用的 SageMaker Studio 用户添加为密钥用户。

以下屏幕截图显示了添加为密钥用户的 Studio 用户角色。请参阅 IAM 角色,访问左侧面板下的用户以进行此更改。

适用于 Data Wrangler 导入的数据存储的 Amazon S3 客户托管密钥设置

默认情况下,Data Wrangler 使用具以下命名约定的 Amazon S3 存储桶:sagemaker-region-account number。例如,如果您的账户编号为 111122223333,并且您在 us-east-1 中使用 Studio,那么导入的数据集将按照以下命名约定存储:sagemaker-us-east-1-111122223333

以下说明阐释了如何为默认 Amazon S3 存储桶设置客户托管密钥。

  1. 要启用服务器端加密并为默认 S3 存储桶设置客户托管密钥,请参阅使用 KMS 加密

  2. 完成步骤 1 后,导航至 Amazon Web Services Management Console中的 Amazon KMS。找到在步骤 1 中选择的客户托管密钥,然后将 Studio 角色添加为密钥用户。为此,请按照允许密钥用户使用客户托管密钥中的说明进行操作。

加密导出的数据

您可以使用以下方法之一,对导出的数据进行加密:

  • 指定 Amazon S3 存储桶包含使用 SSE-KMS 加密的对象。

  • 指定 Amazon KMS 密钥以加密从 Data Wrangler 导出的数据。

导出数据页面中,为Amazon KMS密钥 ID 或 ARN 指定值。

有关使用 Amazon KMS 密钥的更多信息,请参阅使用存储在 AmazonAmazon Key Management Service (SSE-KMS) 中的 Amazon KMS 密钥,采用服务器端加密保护数据

Amazon AppFlow 权限

执行传输时,必须指定有权执行传输的 IAM 角色。您可以使用有权使用 Data Wrangler 的同一 IAM 角色。默认情况下,用于访问 Data Wrangler 的 IAM 角色是 SageMakerExecutionRole

IAM 角色必须具有以下权限:

  • 对 Amazon AppFlow 的权限

  • 对 Amazon Glue 数据目录的权限

  • 发现可用数据源的 Amazon Glue 权限

运行传输时,Amazon AppFlow 将传输的元数据存储在 Amazon Glue 数据目录中。Data Wrangler 使用目录中的元数据来确定是否可供您查询和导入。

要向 Amazon AppFlow 添加权限,可将 AmazonAppFlowFullAccess Amazon 托管策略添加到 IAM 角色。有关添加策略的更多信息,请参阅添加或删除 IAM 身份权限

如果要将数据传输到 Amazon S3,那么还必须附加以下策略。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:GetBucketTagging", "s3:ListBucketVersions", "s3:CreateBucket", "s3:ListBucket", "s3:GetBucketPolicy", "s3:PutEncryptionConfiguration", "s3:GetEncryptionConfiguration", "s3:PutBucketTagging", "s3:GetObjectTagging", "s3:GetBucketOwnershipControls", "s3:PutObjectTagging", "s3:DeleteObject", "s3:DeleteBucket", "s3:DeleteObjectTagging", "s3:GetBucketPublicAccessBlock", "s3:GetBucketPolicyStatus", "s3:PutBucketPublicAccessBlock", "s3:PutAccountPublicAccessBlock", "s3:ListAccessPoints", "s3:PutBucketOwnershipControls", "s3:PutObjectVersionTagging", "s3:DeleteObjectVersionTagging", "s3:GetBucketVersioning", "s3:GetBucketAcl", "s3:PutObject", "s3:GetObject", "s3:GetAccountPublicAccessBlock", "s3:ListAllMyBuckets", "s3:GetAnalyticsConfiguration", "s3:GetBucketLocation" ], "Resource": "*" } ] }

要添加 Amazon Glue 权限,可将 AWSGlueConsoleFullAccess 托管策略添加到 IAM 角色。有关使用 Amazon AppFlow 的 Amazon Glue 权限的更多信息,请参阅 [link-to-appflow-page]。

Amazon AppFlow 需要访问 Amazon Glue 和 Data Wrangler,才能导入您传输的数据。要授予 Amazon AppFlow 访问权限,可将以下信任策略添加到 IAM 角色。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root", "Service": [ "appflow.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

要在 Data Wrangler 中显示 Amazon AppFlow 数据,可将以下策略添加到 IAM 角色:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "glue:SearchTables", "Resource": [ "arn:aws:glue:*:*:table/*/*", "arn:aws:glue:*:*:database/*", "arn:aws:glue:*:*:catalog" ] } ] }

在 Data Wrangler 中使用生命周期配置

您可能有一个 Amazon EC2 实例,配置为运行内核网关应用程序,而不是 Data Wrangler 应用程序。内核网关应用程序可提供对用于运行 Studio 笔记本和终端的环境和内核的访问。Data Wrangler 应用程序是运行 Data Wrangler 的用户界面应用程序。非 Data Wrangler 实例的 Amazon EC2 实例,需要修改其生命周期配置才能运行 Data Wrangler。生命周期配置即自动执行 Amazon SageMaker Studio 环境的自定义的 Shell 脚本。

有关生命周期配置的更多信息,请参阅在 Amazon SageMaker Studio 中使用生命周期配置

实例的默认生命周期配置不支持使用 Data Wrangler。您可以对默认配置进行以下修改,以便在实例中使用 Data Wrangler。

#!/bin/bash set -eux STATUS=$( python3 -c "import sagemaker_dataprep" echo $? ) if [ "$STATUS" -eq 0 ]; then echo 'Instance is of Type Data Wrangler' else echo 'Instance is not of Type Data Wrangler' # Replace this with the URL of your git repository export REPOSITORY_URL="https://github.com/aws-samples/sagemaker-studio-lifecycle-config-examples.git" git -C /root clone $REPOSTIORY_URL fi

可以将脚本另存为 lifecycle_configuration.sh

您可将生命周期配置附加到 Studio 域或用户配置文件。有关创建和附加生命周期配置的更多信息,请参阅创建并关联生命周期配置

后面的说明将向您演示如何将生命周期配置附加到 Studio 域或用户配置文件。

在创建或附加生命周期配置时,可能会遇到错误。有关生命周期配置错误调试的信息,请参阅KernelGateway 应用程序失败