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

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

安全和权限

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

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

此外,您需要授予使用 Data Wrangler 权限的每个 IAM 角色访问所需资源。如果您不需要用于访问 Data Wrangler 的 IAM 角色的精细权限,则可以添加 IAM 托管策略AmazonSageMakerFullAccess添加到用于创建 Studio 用户的 IAM 角色。此策略授予您使用数据牧师的完全权限。如果您需要更精细的权限,请参阅部分中的授予 IAM 角色使用数据工作者的权限.

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

您可以使用 Amazon S3 存储桶策略向包含您的 Data Wrangler 资源的 S3 存储桶添加策略。数据工作人员上传到您的默认 SageMaker S3 存储桶的资源Amazon您正在使用 Studio 的区域包括以下内容:

  • 已查询 Amazon Redshift 结果。这些都存储在redshift/prefix.

  • 查询 Athena 结果。这些都存储在athena/prefix.

  • 当您运行导出的 Jupyter 笔记本数据工作者生成时,上传到 Amazon S3 的 .flow 文件。这些都存储在数据工作者流量/prefix.

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

要在 S3 存储桶上设置存储 Data Wrangler 资源的存储桶策略,请执行以下操作:

  1. 配置一个或多个您希望能够访问数据工作者的 IAM 角色。

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

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

    在响应中,您将看到RoleId开始的字符串将AROA. 复制此字符串。

  3. 将以下策略添加到 SageMaker 默认存储桶中的Amazon您正在使用数据牧师的区域。Replace区域使用Amazon存储桶所在的区域,以及account-id与您的Amazon账户 ID。ReplaceuserIds 开始甲状体的 IDAmazon角色以使用 Data Wrangler 的权限。

    { "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:*" ] } } } ] }

授予 IAM 角色使用数据工作者的权限

您可以授予 IAM 角色权限,以便将数据工作者与常规 IAM 托管策略一起使用,AmazonSageMakerFullAccess. 这是一个一般政策,其中包括权限需要使用所有 SageMaker 服务。此策略授予 IAM 角色对数据 Wrangler 的完全访问权限。使用时,您应注意以下事项。AmazonSageMakerFullAccess授予对数据牧师的访问权限:

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

  • 此托管策略仅授予访问名称中具有以下内容之一的存储桶的权限:SageMakerSageMakersagemaker,或者aws-glue. 如果希望使用 Data Wrangler 从 S3 存储桶导入名称中没有这些短语,请参阅本页上的最后一节,了解如何向 IAM 实体授予访问 S3 存储桶的权限。

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

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

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

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

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

{ "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 数据集导入访问权限的策略示例

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

{ "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 角色访问此存储桶的权限,以使用类似于以下内容的策略。此示例授予对名为测试

{ "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 角色权限才能访问Amazon区域数据牧羊人正在用于:athena/redshift/. 如果默认 Amazon S3 存储桶在中尚不存在Amazon区域,您还必须授予 IAM 角色在此区域中创建存储桶的权限。

此外,如果您希望 IAM 角色能够使用 SageMaker 功能存储、SageMaker 管道和数据工作者作业导出选项,则必须授予对前缀data_wrangler_flows/在此存储桶中。

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

数据牧羊人使用data_wrangler_flows/前缀来存储 .flow 文件,当您运行从数据工作者导出的 Jupyter 笔记本。要了解更多信息,请参阅“Export”。

使用类似于以下内容的策略授予上述权限:

{ "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 存储桶中的数据AmazonAmazon 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 实例的 IAM 执行角色。

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

雪花和数据牧马

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

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

关于雪花凭据存储,数据牧羊人不存储客户凭据。数据牧人使用Amazon密钥管理器,用户可将凭证存储在密钥中,并将密钥作为最佳实践安全计划的一部分轮换。Snowflake 或 Studio 管理员需要确保数据科学家的 Studio 执行角色有权执行GetSecretValue在存储凭据的密钥上。如果已附加到 Studio 执行角色,AmazonSageMakerFullAccess策略将具有读取由 Data Wrangler 创建的机密和按照上述说明中的命名和标记约定创建的机密的必要权限。不遵循约定的机密需要单独授予访问权限。建议使用 Secrets Manager 来防止通过不安全的通道共享凭据,但请注意,登录的用户可以通过在 Studio 中启动终端或 Python 笔记本,然后从 Secrets Manager API 调用来检索纯文本密码。

使用数据加密Amazon KMS

对于存储在 Amazon S3 中且启用了服务器端加密且加密类型为 SSE-KMS 的文件,需要将 SageMaker Studio 用户角色添加为密钥用户,才能解密文件并在 Data Wrangler 中导入。

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

Amazon S3 客户管理的数据牧师导入的数据存储密钥设置

默认情况下,数据工作者使用具有以下命名约定的 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. 找到您在上一步的步骤 1 中选择的客户管理密钥,然后将 Studio 角色添加为密钥用户。为此,请按照允许密钥用户使用客户管理的密钥.