

# 步骤 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** (附加策略)。