

# 为 AWS Glue 配置 IAM 权限
<a name="configure-iam-for-glue"></a>

您可使用 AWS Identity and Access Management（IAM）定义访问由 AWS Glue 使用的资源所需的策略和角色。以下步骤将引导您完成为 AWS Glue 设置权限的各种选项。根据您的业务需求，您可能必须添加或减少对您的资源的访问权限。

**注意**  
要改为开始为 AWS Glue 使用基本 IAM 权限，请参阅 [为 AWS Glue 设置 IAM 权限](set-up-iam.md)。

1. [为 AWS Glue 服务创建 IAM policy](create-service-policy.md)：创建允许访问 AWS Glue 资源的服务策略。

1. [为 AWS Glue 创建 IAM 角色](create-an-iam-role.md)：创建 IAM 角色并附加 AWS Glue 服务策略和用于您的 Amazon Simple Storage Service（Amazon S3）资源的策略，这些资源供 AWS Glue 使用。

1. [将策略附加到访问 AWS Glue 的用户或组](attach-policy-iam-user.md)：将策略附加到登录 AWS Glue 控制台的任何用户或组。

1. [为笔记本创建 IAM policy](create-notebook-policy.md)：创建一个笔记本服务器策略，该策略用于在开发端点上创建笔记本服务器。

1. [为笔记本创建 IAM 角色](create-an-iam-role-notebook.md)：创建 IAM 角色并附加笔记本服务器策略。

1. [创建用于 Amazon SageMaker AI 笔记本的 IAM 策略](create-sagemaker-notebook-policy.md)：创建在开发端点上创建 Amazon SageMaker AI 笔记本时使用的 IAM 策略。

1. [为 Amazon SageMaker AI 笔记本创建 IAM 角色](create-an-iam-role-sagemaker-notebook.md)：创建 IAM 角色并附加策略，以便在开发端点上创建 Amazon SageMaker AI 笔记本时授予权限。

# 步骤 1：为 AWS Glue 服务创建 IAM policy
<a name="create-service-policy"></a>

对于访问其他AWS资源上的数据的任何操作（例如访问您在 Amazon S3 中的对象），AWS Glue 需要代表您访问该资源的权限。您通过使用 AWS Identity and Access Management（IAM）提供这些权限。

**注意**  
如果您使用了AWS托管式策略 `AWSGlueServiceRole`，则可跳过此步骤。

在此步骤中，您将创建一个类似于 `AWSGlueServiceRole` 的策略。您可以在 IAM 控制台中找到最新版本的 `AWSGlueServiceRole`。

**为 AWS Glue 创建 IAM policy**

此策略为某些 Amazon S3 操作授予管理您账户中某些资源的权限，这些资源是 AWS Glue 代入使用此策略的角色时需要的资源。此策略中指定的某些资源引用了 AWS Glue 对 Amazon S3 存储桶、Amazon S3 ETL 脚本、CloudWatch Logs 和 Amazon EC2 资源使用的默认名称。为简便起见，默认情况下，AWS Glue 会将某些 Amazon S3 对象写入到您的账户中带有前缀 `aws-glue-*` 的存储桶。

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在左侧导航窗格中，选择 **Policies（策略）**。

1. 选择**创建策略**。

1. 在 **Create Policy** (创建策略) 屏幕上，导航到用于编辑 JSON 的选项卡。使用以下 JSON 语句创建策略文档，然后选择 **Review policy** (查看策略)。
**注意**  
添加 Amazon S3 资源所需的任何权限。您可能需要将您的访问策略的资源部分限定为那些需要的资源。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "glue:*",
           "s3:GetBucketLocation",
           "s3:ListBucket",
           "s3:ListAllMyBuckets",
           "s3:GetBucketAcl",
           "ec2:DescribeVpcEndpoints",
           "ec2:DescribeRouteTables",
           "ec2:CreateNetworkInterface",
           "ec2:DeleteNetworkInterface",
           "ec2:DescribeNetworkInterfaces",
           "ec2:DescribeSecurityGroups",
           "ec2:DescribeSubnets",
           "ec2:DescribeVpcAttribute",
           "iam:ListRolePolicies",
           "iam:GetRole",
           "iam:GetRolePolicy",
           "cloudwatch:PutMetricData"
         ],
         "Resource": [
           "*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:CreateBucket",
           "s3:PutBucketPublicAccessBlock"
         ],
         "Resource": [
           "arn:aws:s3:::aws-glue-*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:PutObject",
           "s3:DeleteObject"
         ],
         "Resource": [
           "arn:aws:s3:::aws-glue-*/*",
           "arn:aws:s3:::*/*aws-glue-*/*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetObject"
         ],
         "Resource": [
           "arn:aws:s3:::crawler-public*",
           "arn:aws:s3:::aws-glue-*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "logs:CreateLogGroup",
           "logs:CreateLogStream",
           "logs:PutLogEvents",
           "logs:AssociateKmsKey"
         ],
         "Resource": [
           "arn:aws:logs:*:*:log-group:/aws-glue/*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "ec2:CreateTags",
           "ec2:DeleteTags"
         ],
         "Condition": {
           "ForAllValues:StringEquals": {
             "aws:TagKeys": [
               "aws-glue-service-resource"
             ]
           }
         },
         "Resource": [
           "arn:aws:ec2:*:*:network-interface/*",
           "arn:aws:ec2:*:*:security-group/*",
           "arn:aws:ec2:*:*:instance/*"
         ]
       }
     ]
   }
   ```

------

   下表描述了此策略授予的权限。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/create-service-policy.html)

1. 在 **Review Policy (查看策略)** 屏幕上，输入您的 **Policy Name (策略名称)**，例如 **GlueServiceRolePolicy**。输入可选描述，然后在您对该策略满意时选择 **Create policy (创建策略)**。

# 步骤 2：为 AWS Glue 创建 IAM 角色
<a name="create-an-iam-role"></a>

您需要向您的 IAM 角色授予在 AWS Glue 代表您调用其他服务时可使用的权限。这包括对 Amazon S3 的访问权限，针对用于 AWS Glue 的任何源、目标、脚本和临时目录。爬网程序、任务和开发端点需要权限。

您通过使用 AWS Identity and Access Management（IAM）提供这些权限。请向您传递到 AWS Glue 的 IAM 角色添加一个策略。

****在任务编辑器中创建 IAM 角色****

1. 在 AWS Glue 控制台中创建任务时，查找角色部分。

1. 选择 **Create new role**（创建新角色）。

1. 将打开内联角色创建表单，您可以：
   + 指定**角色名称**；例如 `AWSGlueServiceRoleDefault`。
   + 自动选择托管策略 `AWSGlueServiceRole`。
   + 查看信任策略，以代入该角色。
   + 为元数据添加可选标签。

1. 选择**创建角色**。

1. 自动为您的任务选择新创建的角色。

或者，您可以使用 IAM 控制台创建角色：

****使用适用于 AWS Glue 的 IAM 控制台创建 IAM 角色****

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在左侧导航窗格中，选择 **Roles (角色)**。

1. 选择**创建角色**。

1.  对于可信实体类型，请选择 **AWS 服务**。然后，对于服务或应用场景，请查找并选择 **AWS Glue**。选择**下一步**。

1. 在**添加权限**页面上，选择包含所需权限的策略；例如，适用于一般 AWS Glue 权限的 AWS 托管式策略 `AWSGlueServiceRole` 和用于访问 Amazon S3 资源的 AWS 托管式策略 **AmazonS3FullAccess**。然后选择**下一步**。
**注意**  
请确保此角色中的策略之一授予针对您的 Amazon S3 源和目标的权限。您可能想要提供您自己的策略来访问特定 Amazon S3 资源。数据源需要 `s3:ListBucket` 和 `s3:GetObject` 权限。数据目标需要`s3:ListBucket`、`s3:PutObject` 和 `s3:DeleteObject` 权限。有关为您的资源创建 Amazon S3 策略的更多信息，请参阅[在策略中指定资源](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-arn-format.html)。有关示例 Amazon S3 策略，请参阅[编写 IAM policy：如何授予对 Amazon S3 存储桶的访问权限](https://aws.amazon.com/blogs/security/writing-iam-policies-how-to-grant-access-to-an-amazon-s3-bucket/)。  
如果您计划访问使用 SSE-KMS 加密的 Amazon S3 资源和目标，请附加一个允许 AWS Glue 爬网程序、任务和开发终端节点解密数据的策略。有关更多信息，请参阅[使用具有 AWS KMS 托管式密钥的服务器端加密（SSE-KMS）保护数据](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)。  
示例如下：  

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "kms:Decrypt"
         ],
         "Resource": [
           "arn:aws:kms:*:111122223333:key/key-id"
         ]
       }
     ]
   }
   ```

1.  为角色命名并添加描述（可选），然后检查信任策略和权限。对于 **Role name (角色名称)**，输入您角色的名称，例如 `AWSGlueServiceRoleDefault`。使用以字符串 `AWSGlueServiceRole` 为前缀的名称创建角色,以允许角色从控制台用户传递到服务。AWS Glue 提供了要求 IAM 服务角色以 `AWSGlueServiceRole` 开头的策略。否则，您必须添加一个为您的用户授予对 IAM 角色的 `iam:PassRole` 权限的策略，以匹配您的命名约定。选择**创建角色**。
**注意**  
当您创建具有角色的笔记本时，该角色将传递至交互式会话，以便同一角色可以在两个位置使用。因此，`iam:PassRole` 权限需要成为角色策略的一部分。  
使用以下示例为您的角色创建新策略。将账号替换为您的账号，并将角色名称替换为您的角色名称。  

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": "iam:PassRole",
         "Resource": "arn:aws:iam::090000000210:role/<role_name>"
       }
     ]
   }
   ```

1.  向角色添加标签（可选）。标签是您可以添加到 AWS 资源的键值对，用来帮助标识、组织或搜索资源。然后，选择**创建角色**。

# 步骤 3：将策略附加到访问 AWS Glue 的用户或组
<a name="attach-policy-iam-user"></a>

管理员必须使用 AWS Glue 控制台或 AWS Command Line Interface（AWS CLI）为任何用户、组或角色分配权限。您可使用 AWS Identity and Access Management（IAM）通过策略提供这些权限。该步骤介绍向用户或组分配权限。

完成此步骤后，您的用户或组将附加以下策略：
+ AWS托管式策略 `AWSGlueConsoleFullAccess` 或自定义策略 **GlueConsoleAccessPolicy**
+ **`AWSGlueConsoleSageMakerNotebookFullAccess`**
+ **`CloudWatchLogsReadOnlyAccess`**
+ **`AWSCloudFormationReadOnlyAccess`**
+ **`AmazonAthenaFullAccess`**

**附加内联策略并将其嵌入到用户或组中**

您可以将 AWS 托管式策略或内联策略附加到用户或组以便访问 AWS Glue 控制台。在此策略中指定的某些资源引用了 AWS Glue 对 Amazon S3 存储桶、Amazon S3 ETL 脚本、CloudWatch Logs、CloudFormation 和 Amazon EC2 资源使用的默认名称。为简便起见，默认情况下，AWS Glue 会将某些 Amazon S3 对象写入到您的账户中带有前缀 `aws-glue-*` 的存储桶。
**注意**  
如果您使用了AWS托管式策略 **`AWSGlueConsoleFullAccess`**，则可跳过此步骤。
**重要**  
AWS Glue 需要代入用于代表您执行工作的角色的权限。**要达到此目的，您要将 `iam:PassRole` 权限添加到您的 AWS Glue 用户或组。**此策略向以 `AWSGlueServiceRole` 开头的角色授予对 AWS Glue 服务角色的权限，并向以 `AWSGlueServiceNotebookRole` 开头的角色授予对您创建笔记本服务器时所需的角色的权限。您还可以针对 `iam:PassRole` 权限创建您自己的遵循您的命名约定的策略。  
根据安全性最佳实践，建议通过收紧策略来限制访问，从而进一步限制对 Amazon S3 存储桶和 Amazon CloudWatch 日志组的访问。有关示例 Amazon S3 策略，请参阅[编写 IAM policy：如何授予对 Amazon S3 存储桶的访问权限](https://aws.amazon.com/blogs/security/writing-iam-policies-how-to-grant-access-to-an-amazon-s3-bucket/)。

在此步骤中，您将创建一个类似于 `AWSGlueConsoleFullAccess` 的策略。您可以在 IAM 控制台中找到最新版本的 `AWSGlueConsoleFullAccess`。

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择**用户**或**用户组**。

1. 在列表中，请选择要在其中嵌入策略的用户或组的名称。

1. 选择 **Permissions (权限)** 选项卡，然后展开 **Permissions policies (权限策略)** 部分（如有必要）。

1. 选择 **Add Inline policy** (添加内联策略) 链接。

1. 在 **Create Policy** (创建策略) 屏幕上，导航到用于编辑 JSON 的选项卡。使用以下 JSON 语句创建策略文档，然后选择 **Review policy** (查看策略)。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "glue:*",
           "redshift:DescribeClusters",
           "redshift:DescribeClusterSubnetGroups",
           "iam:ListRoles",
           "iam:ListUsers",
           "iam:ListGroups",
           "iam:ListRolePolicies",
           "iam:GetRole",
           "iam:GetRolePolicy",
           "iam:ListAttachedRolePolicies",
           "ec2:DescribeSecurityGroups",
           "ec2:DescribeSubnets",
           "ec2:DescribeVpcs",
           "ec2:DescribeVpcEndpoints",
           "ec2:DescribeRouteTables",
           "ec2:DescribeVpcAttribute",
           "ec2:DescribeKeyPairs",
           "ec2:DescribeInstances",
           "rds:DescribeDBInstances",
           "rds:DescribeDBClusters",
           "rds:DescribeDBSubnetGroups",
           "s3:ListAllMyBuckets",
           "s3:ListBucket",
           "s3:GetBucketAcl",
           "s3:GetBucketLocation",
           "cloudformation:DescribeStacks",
           "cloudformation:GetTemplateSummary",
           "dynamodb:ListTables",
           "kms:ListAliases",
           "kms:DescribeKey",
           "cloudwatch:GetMetricData",
           "cloudwatch:ListDashboards"
         ],
         "Resource": [
           "*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:PutObject"
         ],
         "Resource": [
           "arn:aws:s3:::*/*aws-glue-*/*",
           "arn:aws:s3:::aws-glue-*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "tag:GetResources"
         ],
         "Resource": [
           "*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:CreateBucket",
           "s3:PutBucketPublicAccessBlock"
         ],
         "Resource": [
           "arn:aws:s3:::aws-glue-*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "logs:GetLogEvents"
         ],
         "Resource": [
           "arn:aws:logs:*:*:/aws-glue/*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "cloudformation:CreateStack",
           "cloudformation:DeleteStack"
         ],
         "Resource": "arn:aws:cloudformation:*:*:stack/aws-glue*/*"
       },
       {
         "Effect": "Allow",
         "Action": [
           "ec2:RunInstances"
         ],
         "Resource": [
           "arn:aws:ec2:*:*:instance/*",
           "arn:aws:ec2:*:*:key-pair/*",
           "arn:aws:ec2:*:*:image/*",
           "arn:aws:ec2:*:*:security-group/*",
           "arn:aws:ec2:*:*:network-interface/*",
           "arn:aws:ec2:*:*:subnet/*",
           "arn:aws:ec2:*:*:volume/*"
         ]
       },
       {
         "Action": [
           "iam:PassRole"
         ],
         "Effect": "Allow",
         "Resource": "arn:aws:iam::*:role/AWSGlueServiceRole*",
         "Condition": {
           "StringLike": {
             "iam:PassedToService": [
               "glue.amazonaws.com"
             ]
           }
         }
       },
       {
         "Action": [
           "iam:PassRole"
         ],
         "Effect": "Allow",
         "Resource": "arn:aws:iam::*:role/AWSGlueServiceNotebookRole*",
         "Condition": {
           "StringLike": {
             "iam:PassedToService": [
               "ec2.amazonaws.com"
             ]
           }
         }
       },
       {
         "Action": [
           "iam:PassRole"
         ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:iam::*:role/service-role/AWSGlueServiceRole*"
         ],
         "Condition": {
           "StringLike": {
             "iam:PassedToService": [
               "glue.amazonaws.com"
             ]
           }
         }
       }
     ]
   }
   ```

------

   下表描述了此策略授予的权限。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/attach-policy-iam-user.html)

1. 在 **Review policy (查看策略)** 屏幕上，输入您的策略的名称，例如 **GlueConsoleAccessPolicy**。如果您对该策略感到满意，请选择 **Create policy (创建策略)**。确保屏幕顶部的红框中没有显示错误。更正报告的任何错误。
**注意**  
如果选择了 **Use autoformatting**，则每当您打开策略或选择 **Validate Policy** 时，都会重新设置策略的格式。

**附加 AWSGlueConsoleFullAccess 托管策略**

您可以附加 `AWSGlueConsoleFullAccess` 策略以提供 AWS Glue 控制台用户所需的权限。
**注意**  
如果您已针对 AWS Glue 控制台访问创建自己的策略，则可跳过此步骤。

1. 登录到 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择**策略**。

1. 在策略列表中，选中 **AWSGlueConsoleFullAccess** 旁边的复选框。您可以使用 **Filter** 菜单和搜索框来筛选策略列表。

1. 选择 **Policy actions（策略操作）**，然后选择 **Attach（附加）**。

1. 选择要将策略附加到的用户。您可以使用 **Filter**（筛选条件）菜单和搜索框来筛选委托人实体列表。在选择要将策略附加到的用户后，选择 **Attach policy** (附加策略)。

**附加 `AWSGlueConsoleSageMakerNotebookFullAccess` 托管式策略**

可将 `AWSGlueConsoleSageMakerNotebookFullAccess` 策略附加到用户，以管理在 AWS Glue 控制台中创建的 SageMaker AI 笔记本。除了其他必需的 AWS Glue 控制台权限外，此策略还授予管理 SageMaker AI 笔记本所需资源的访问权限。

1. 登录到 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择**策略**。

1. 在策略列表中，选中 **AWSGlueConsoleSageMakerNotebookFullAccess** 旁边的复选框。您可以使用 **Filter** 菜单和搜索框来筛选策略列表。

1. 选择 **Policy actions（策略操作）**，然后选择 **Attach（附加）**。

1. 选择要将策略附加到的用户。您可以使用 **Filter**（筛选条件）菜单和搜索框来筛选委托人实体列表。在选择要将策略附加到的用户后，选择 **Attach policy** (附加策略)。

**附加 CloudWatchLogsReadOnlyAccess 托管策略**

您可以将 **CloudWatchLogsReadOnlyAccess** 策略附加到用户以查看由 AWS Glue 在 CloudWatch Logs 控制台上创建的日志。

1. 登录到 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择**策略**。

1. 在策略列表中，选中 **CloudWatchLogsReadOnlyAccess** 旁边的复选框。您可以使用 **Filter** 菜单和搜索框来筛选策略列表。

1. 选择 **Policy actions（策略操作）**，然后选择 **Attach（附加）**。

1. 选择要将策略附加到的用户。您可以使用 **Filter**（筛选条件）菜单和搜索框来筛选委托人实体列表。在选择要将策略附加到的用户后，选择 **Attach policy** (附加策略)。

**附加 AWSCloudFormationReadOnlyAccess 托管策略**

您可以将 **AWSCloudFormationReadOnlyAccess** 策略附加到用户以查看 AWS Glue 在 CloudFormation 控制台上使用的 CloudFormation 堆栈。

1. 登录到 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择**策略**。

1. 在策略列表中，选中 **AWSCloudFormationReadOnlyAccess** 旁边的复选框。您可以使用 **Filter** 菜单和搜索框来筛选策略列表。

1. 选择 **Policy actions（策略操作）**，然后选择 **Attach（附加）**。

1. 选择要将策略附加到的用户。您可以使用 **Filter**（筛选条件）菜单和搜索框来筛选委托人实体列表。在选择要将策略附加到的用户后，选择 **Attach policy** (附加策略)。

**附加 AmazonAthenaFullAccess 托管策略**

您可以将 **AmazonAthenaFullAccess** 策略附加到用户，以在 Athena 控制台中查看 Amazon S3 数据。

1. 登录到 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择**策略**。

1. 在策略列表中，选中 **AmazonAthenaFullAccess** 旁边的复选框。您可以使用 **Filter** 菜单和搜索框来筛选策略列表。

1. 选择 **Policy actions（策略操作）**，然后选择 **Attach（附加）**。

1. 选择要将策略附加到的用户。您可以使用 **Filter**（筛选条件）菜单和搜索框来筛选委托人实体列表。在选择要将策略附加到的用户后，选择 **Attach policy** (附加策略)。

# 步骤 4：创建用于笔记本服务器的 IAM policy
<a name="create-notebook-policy"></a>

如果您计划将笔记本与开发终端节点结合使用，则必须在创建笔记本服务器时指定权限。您通过使用 AWS Identity and Access Management（IAM）提供这些权限。

此策略为某些 Amazon S3 操作授予管理您账户中某些资源的权限，这些资源是 AWS Glue 代入使用此策略的角色时需要的资源。此策略中指定的某些资源引用了 AWS Glue 对 Amazon S3 存储桶、Amazon S3 ETL 脚本和 Amazon EC2 资源使用的默认名称。为简便起见，默认情况下，AWS Glue 会将某些 Amazon S3 对象写入到您账户中带有前缀 `aws-glue-*` 的存储桶。

**注意**  
如果您使用了AWS托管式策略 **`AWSGlueServiceNotebookRole`**，则可跳过此步骤。

在此步骤中，您将创建一个类似于 `AWSGlueServiceNotebookRole` 的策略。您可以在 IAM 控制台中找到最新版本的 `AWSGlueServiceNotebookRole`。

**为笔记本创建 IAM policy**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在左侧导航窗格中，选择 **Policies（策略）**。

1. 选择**创建策略**。

1. 在 **Create Policy** (创建策略) 屏幕上，导航到用于编辑 JSON 的选项卡。使用以下 JSON 语句创建策略文档，然后选择 **Review policy** (查看策略)。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "glue:CreateDatabase",
           "glue:CreatePartition",
           "glue:CreateTable",
           "glue:DeleteDatabase",
           "glue:DeletePartition",
           "glue:DeleteTable",
           "glue:GetDatabase",
           "glue:GetDatabases",
           "glue:GetPartition",
           "glue:GetPartitions",
           "glue:GetTable",
           "glue:GetTableVersions",
           "glue:GetTables",
           "glue:UpdateDatabase",
           "glue:UpdatePartition",
           "glue:UpdateTable",
           "glue:GetJobBookmark",
           "glue:ResetJobBookmark",
           "glue:CreateConnection",
           "glue:CreateJob",
           "glue:DeleteConnection",
           "glue:DeleteJob",
           "glue:GetConnection",
           "glue:GetConnections",
           "glue:GetDevEndpoint",
           "glue:GetDevEndpoints",
           "glue:GetJob",
           "glue:GetJobs",
           "glue:UpdateJob",
           "glue:BatchDeleteConnection",
           "glue:UpdateConnection",
           "glue:GetUserDefinedFunction",
           "glue:UpdateUserDefinedFunction",
           "glue:GetUserDefinedFunctions",
           "glue:DeleteUserDefinedFunction",
           "glue:CreateUserDefinedFunction",
           "glue:BatchGetPartition",
           "glue:BatchDeletePartition",
           "glue:BatchCreatePartition",
           "glue:BatchDeleteTable",
           "glue:UpdateDevEndpoint",
           "s3:GetBucketLocation",
           "s3:ListBucket",
           "s3:ListAllMyBuckets",
           "s3:GetBucketAcl"
         ],
         "Resource": [
           "*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetObject"
         ],
         "Resource": [
           "arn:aws:s3:::crawler-public*",
           "arn:aws:s3:::aws-glue*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:DeleteObject"
         ],
         "Resource": [
           "arn:aws:s3:::aws-glue*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "ec2:CreateTags",
           "ec2:DeleteTags"
         ],
         "Condition": {
           "ForAllValues:StringEquals": {
             "aws:TagKeys": [
               "aws-glue-service-resource"
             ]
           }
         },
         "Resource": [
           "arn:aws:ec2:*:*:network-interface/*",
           "arn:aws:ec2:*:*:security-group/*",
           "arn:aws:ec2:*:*:instance/*"
         ]
       }
     ]
   }
   ```

------

   下表描述了此策略授予的权限。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/create-notebook-policy.html)

1. 在 **Review Policy (查看策略)** 屏幕上，输入您的 **Policy Name (策略名称)**，例如 **GlueServiceNotebookPolicyDefault**。输入可选描述，然后在您对该策略满意时选择 **Create policy (创建策略)**。

# 步骤 5：创建用于笔记本服务器的 IAM 角色
<a name="create-an-iam-role-notebook"></a>

如果您计划将笔记本与开发终端节点结合使用，则需要为 IAM 角色授予权限。您可使用 AWS Identity and Access Management（IAM）通过 IAM 角色提供这些权限。

**注意**  
使用 IAM 控制台创建 IAM 角色时，控制台自动创建实例配置文件，按相应的角色为文件命名。

**为笔记本创建 IAM 角色**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在左侧导航窗格中，选择 **Roles (角色)**。

1. 选择**创建角色**。

1. 对于角色类型，选择 **AWS Service（服务）**，找到并选择 **EC2**，然后选择 **EC2** 使用案例，再选择 **Next: Permissions（下一步：权限）**。

1. 在**附加权限策略**页面上，选择包含所需权限的策略；例如，适用于一般 AWS Glue 权限的 **AWSGlueServiceNotebookRole** 和适用于对 Amazon S3 资源的访问权限的 AWS 托管式策略 **AmazonS3FullAccess**。然后选择 **Next: Review**。
**注意**  
请确保此角色中的策略之一授予针对您的 Amazon S3 源和目标的权限。此外，确认您的策略支持对您在创建笔记本服务器时存储笔记本的位置的完全访问。您可能想要提供您自己的策略来访问特定 Amazon S3 资源。有关为您的资源创建 Amazon S3 策略的更多信息，请参阅[在策略中指定资源](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-arn-format.html)。  
如果您计划访问使用 SSE-KMS 加密的 Amazon S3 源和目标，请附加一个允许笔记本解密数据的策略。有关更多信息，请参阅[使用具有 AWS KMS 托管式密钥的服务器端加密（SSE-KMS）保护数据](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)。  
示例如下：  

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "kms:Decrypt"
         ],
         "Resource": [
           "arn:aws:kms:*:111122223333:key/key-id"
         ]
       }
     ]
   }
   ```

1. 对于**角色名称**，请为您的角色输入一个名称。使用以字符串 `AWSGlueServiceNotebookRole` 为前缀的名称创建角色，以允许角色从控制台用户传递到笔记本服务器。AWS Glue 提供了要求 IAM 服务角色以 `AWSGlueServiceNotebookRole` 开头的策略。否则，您必须向您的用户添加一个策略以允许适用于 IAM 角色的 `iam:PassRole` 权限与您的命名约定匹配。例如，输入 `AWSGlueServiceNotebookRoleDefault`。然后选择**创建角色**。

# 步骤 6：为 SageMaker AI 笔记本创建 IAM 策略
<a name="create-sagemaker-notebook-policy"></a>

如果计划将 SageMaker AI 笔记本与开发端点结合使用，则必须在创建笔记本时指定权限。您通过使用 AWS Identity and Access Management（IAM）提供这些权限。

**为 SageMaker AI 笔记本创建 IAM 策略**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在左侧导航窗格中，选择 **Policies（策略）**。

1. 选择**创建策略**。

1. 在 **Create Policy (创建策略)** 页面上，导航到用于编辑 JSON 的选项卡。使用以下 JSON 语句创建一个策略文档。编辑环境的 *bucket-name*、*region-code* 和 *account-id*。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Action": [
                   "s3:ListBucket"
               ],
               "Effect": "Allow",
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket"
               ]
           },
           {
               "Action": [
                   "s3:GetObject"
               ],
               "Effect": "Allow",
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket*"
               ]
           },
           {
               "Action": [
                   "logs:CreateLogStream",
                   "logs:DescribeLogStreams",
                   "logs:PutLogEvents",
                   "logs:CreateLogGroup"
               ],
               "Effect": "Allow",
               "Resource": [
                   "arn:aws:logs:us-east-1:111122223333:log-group:/aws/sagemaker/*",
                   "arn:aws:logs:us-east-1:111122223333:log-group:/aws/sagemaker/*:log-stream:aws-glue-*"
               ]
           },
           {
               "Action": [
                   "glue:UpdateDevEndpoint",
                   "glue:GetDevEndpoint",
                   "glue:GetDevEndpoints"
               ],
               "Effect": "Allow",
               "Resource": [
                   "arn:aws:glue:us-east-1:111122223333:devEndpoint/*"
               ]
           },
           {
               "Action": [
                   "sagemaker:ListTags"
               ],
               "Effect": "Allow",
               "Resource": [
                   "arn:aws:sagemaker:us-east-1:111122223333:notebook-instance/*"
               ]
           }
       ]
   }
   ```

------

   然后，选择**查看策略**。

   下表描述了此策略授予的权限。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/create-sagemaker-notebook-policy.html)

1. 在 **Review Policy (查看策略)** 屏幕上，输入您的 **Policy Name (策略名称)**，例如 `AWSGlueSageMakerNotebook`。输入可选描述，然后在您对该策略满意时选择 **Create policy (创建策略)**。

# 步骤 7：为 SageMaker AI 笔记本创建 IAM 角色
<a name="create-an-iam-role-sagemaker-notebook"></a>

如果计划将 SageMaker AI 笔记本与开发端点结合使用，则需要为 IAM 角色授予权限。您可使用 AWS Identity and Access Management（IAM）通过 IAM 角色提供这些权限。

**为 SageMaker AI 笔记本创建 IAM 角色**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在左侧导航窗格中，选择 **Roles (角色)**。

1. 选择**创建角色**。

1. 对于角色类型，选择 **AWS 服务**，找到并选择 **SageMaker**，然后选择 **SageMaker - 执行**使用案例。然后选择**下一步：权限**。

1. 在 **Attach permissions policy (附加权限策略)** 页面上，选择包含所需权限的策略；例如，**AmazonSageMakerFullAccess**。选择**下一步：审核**。

   如果您计划访问使用 SSE-KMS 加密的 Amazon S3 源和目标，则附加一个允许笔记本解密数据的策略，如以下示例所示。有关更多信息，请参阅[使用具有 AWS KMS 托管式密钥的服务器端加密（SSE-KMS）保护数据](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "kms:Decrypt"
         ],
         "Resource": [
           "arn:aws:kms:*:111122223333:key/key-id"
         ]
       }
     ]
   }
   ```

------

1. 对于**角色名称**，请为您的角色输入一个名称。要允许角色从控制台用户传递到 SageMaker AI，请使用以字符串 `AWSGlueServiceSageMakerNotebookRole` 为前缀的名称。AWS Glue 提供了要求 IAM 角色以 `AWSGlueServiceSageMakerNotebookRole` 开头的策略。否则，您必须向您的用户添加一个策略以允许适用于 IAM 角色的 `iam:PassRole` 权限与您的命名约定匹配。

   例如，输入 `AWSGlueServiceSageMakerNotebookRole-Default`，然后选择 **Create role (创建角色)**。

1. 创建角色之后，请附加策略以允许从 AWS Glue 创建 SageMaker AI 笔记本所需的其他权限。

   选择您刚刚创建的角色 `AWSGlueServiceSageMakerNotebookRole-Default`，然后选择 **Attach policy (附加策略)**。将您创建的名为 `AWSGlueSageMakerNotebook` 的策略附加到角色。