步骤 3:将策略附加到访问 AWS Glue 的 IAM 用户 - AWS Glue
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

步骤 3:将策略附加到访问 AWS Glue 的 IAM 用户

登录 AWS Glue 控制台或 AWS Command Line Interface (AWS CLI) 的任何 IAM 用户都必须具有访问特定资源的权限。您可使用 AWS Identity and Access Management (IAM) 通过策略提供这些权限。

完成此步骤后,您的 IAM 用户将附加以下策略:

  • AWS 托管策略 AWSGlueConsoleFullAccess 或自定义策略 GlueConsoleAccessPolicy

  • AWSGlueConsoleSageMakerNotebookFullAccess

  • CloudWatchLogsReadOnlyAccess

  • AWSCloudFormationReadOnlyAccess

  • AmazonAthenaFullAccess

附加内联策略并将其嵌入到 IAM 用户中

您可以将 AWS 托管策略或内联策略附加到 IAM 用户以便访问 AWS Glue 控制台。此策略中指定的某些资源引用了 AWS Glue 对 Amazon S3 存储桶、Amazon S3 ETL 脚本、CloudWatch Logs、AWS CloudFormation 和 Amazon EC2 资源使用的默认名称。为简便起见,默认情况下,AWS Glue 会将某些 Amazon S3 对象写入到您的账户中带有前缀 aws-glue-* 的存储桶。

注意

如果您使用了 AWS 托管策略 AWSGlueConsoleFullAccess,则可跳过此步骤。

重要

AWS Glue 需要代入用于代表您执行工作的角色的权限。要达到此目的,您要将 iam:PassRole 权限添加到您的 AWS Glue 用户。 此策略向以 AWSGlueServiceRole 开头的角色授予对 AWS Glue 服务角色的权限,并向以 AWSGlueServiceNotebookRole 开头的角色授予对您创建笔记本服务器时所需的角色的权限。您还可以针对 iam:PassRole 权限创建您自己的遵循您的命名约定的策略。

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

  1. 登录 AWS 管理控制台 并通过以下网址打开 IAM 控制台 https://console.amazonaws.cn/iam/

  2. 在导航窗格中,选择 Users

  3. 在列表中,选择要在其中嵌入策略的用户的名称。

  4. 选择 Permissions (权限) 选项卡,然后展开 Permissions policies (权限策略) 部分(如有必要)。

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

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

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:*", "redshift:DescribeClusters", "redshift:DescribeClusterSubnetGroups", "iam:ListRoles", "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", "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-*/*", "arn:aws:s3:::aws-glue-*" ] }, { "Effect": "Allow", "Action": [ "tag:GetResources" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "s3:CreateBucket" ], "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/*" ] }, { "Effect": "Allow", "Action": [ "ec2:TerminateInstances", "ec2:CreateTags", "ec2:DeleteTags" ], "Resource": [ "arn:aws:ec2:*:*:instance/*" ], "Condition": { "StringLike": { "ec2:ResourceTag/aws:cloudformation:stack-id": "arn:aws:cloudformation:*:*:stack/aws-glue-*/*" }, "StringEquals": { "ec2:ResourceTag/aws:cloudformation:logical-id": "ZeppelinInstance" } } }, { "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" ] } } } ] }

    下表描述了此策略授予的权限。

    操作 资源 描述

    "glue:*"

    "*"

    授予运行所有 AWS Glue API 操作的权限。

    如果您之前已创建策略而未使用 "glue:*" 操作,则必须将以下各个权限添加到策略:

    • "glue:ListCrawlers"

    • "glue:BatchGetCrawlers"

    • "glue:ListTriggers"

    • "glue:BatchGetTriggers"

    • "glue:ListDevEndpoints"

    • "glue:BatchGetDevEndpoints"

    • "glue:ListJobs"

    • "glue:BatchGetJobs"

    "redshift:DescribeClusters", "redshift:DescribeClusterSubnetGroups"

    "*"

    允许创建与 Amazon Redshift 的连接。

    "iam:ListRoles", "iam:ListRolePolicies", "iam:GetRole", "iam:GetRolePolicy", "iam:ListAttachedRolePolicies"

    "*"

    允许在使用爬网程序、作业、开发终端节点和笔记本服务器时列示 IAM 角色。

    "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DescribeVpcEndpoints", "ec2:DescribeRouteTables", "ec2:DescribeVpcAttribute", "ec2:DescribeKeyPairs", "ec2:DescribeInstances"

    "*"

    允许在运行作业、爬网程序和开发终端节点时设置 Amazon EC2 网络项,如 VPC。

    "rds:DescribeDBInstances"

    "*"

    允许创建与 Amazon RDS 的连接。

    "s3:ListAllMyBuckets", "s3:ListBucket", "s3:GetBucketAcl", "s3:GetBucketLocation"

    "*"

    允许在使用爬网程序、作业、开发终端节点和笔记本服务器时列示 Amazon S3 存储桶。

    "dynamodb:ListTables"

    "*"

    允许列示 DynamoDB 表。

    "kms:ListAliases", "kms:DescribeKey"

    "*"

    允许使用 KMS 密钥。

    "cloudwatch:GetMetricData", "cloudwatch:ListDashboards"

    "*"

    允许使用 CloudWatch 指标。

    "s3:GetObject", "s3:PutObject"

    "arn:aws:s3::: aws-glue-*/*", "arn:aws:s3::: */*aws-glue-*/*", "arn:aws:s3::: aws-glue-*"

    允许在存储 ETL 脚本和笔记本位置等对象时在您的账户中获取和放置 Amazon S3 对象。

    命名约定:授予对名称以 aws-glue- 为前缀的 Amazon S3 存储桶或文件夹的权限。

    "tag:GetResources"

    "*"

    允许检索 AWS 标签。

    "s3:CreateBucket"

    "arn:aws:s3::: aws-glue-*"

    允许在存储 ETL 脚本和笔记本服务器位置等对象时在您的账户中创建 Amazon S3 存储桶。

    命名约定:授予对名称以 aws-glue- 为前缀的 Amazon S3 存储桶的权限。

    "logs:GetLogEvents"

    "arn:aws:logs:*:*: /aws-glue/*"

    允许检索 CloudWatch Logs。

    命名约定:AWS Glue 将日志写入到名称以 aws-glue- 开头的日志组。

    "cloudformation:CreateStack", "cloudformation:DeleteStack"

    "arn:aws: cloudformation:*:*:stack/ aws-glue*/*"

    允许在使用笔记本服务器时管理 AWS CloudFormation 堆栈。

    命名约定:AWS Glue 创建名称以 aws-glue 开头的堆栈。

    "ec2:RunInstances"

    "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/*"

    允许运行开发终端节点和笔记本服务器。

    "ec2:TerminateInstances", "ec2:CreateTags", "ec2:DeleteTags"

    "arn:aws:ec2:*:*:instance/*"

    允许操作开发终端节点和笔记本服务器。

    命名约定:AWS Glue AWS CloudFormation 堆栈使用前缀为 aws-glue- 和 logical-id ZeppelinInstance 的名称。

    "iam:PassRole"

    "arn:aws:iam::*:role/ AWSGlueServiceRole*"

    允许 AWS Glue 使用针对以 AWSGlueServiceRole 开头的角色的 PassRole 权限。

    "iam:PassRole"

    "arn:aws:iam::*:role/ AWSGlueServiceNotebookRole*"

    允许 Amazon EC2 使用针对以 AWSGlueServiceNotebookRole 开头的角色的 PassRole 权限。

    "iam:PassRole"

    "arn:aws:iam::*:role/service-role/ AWSGlueServiceRole*"

    允许 AWS Glue 使用针对以 service-role/AWSGlueServiceRole 开头的角色的 PassRole

  7. Review policy (查看策略) 屏幕上,输入您的策略的名称,例如 GlueConsoleAccessPolicy。如果您对该策略感到满意,请选择 Create policy (创建策略)。确保屏幕顶部的红框中没有显示错误。更正报告的任何错误。

    注意

    如果选择了 Use autoformatting,则每当您打开策略或选择 Validate Policy 时,都会重新设置策略的格式。

附加 AWSGlueConsoleFullAccess 托管策略

您可以附加 AWSGlueConsoleFullAccess 策略以提供 AWS Glue 控制台用户所需的权限。

注意

如果您已针对 AWS Glue 控制台访问创建自己的策略,则可跳过此步骤。

  1. 登录 AWS 管理控制台 并通过以下网址打开 IAM 控制台 https://console.amazonaws.cn/iam/

  2. 在导航窗格中,选择 Policies

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

  4. 选择 Policy actions,然后选择 Attach

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

附加 AWSGlueConsoleSageMakerNotebookFullAccess 托管策略

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

  1. 登录 AWS 管理控制台 并通过以下网址打开 IAM 控制台 https://console.amazonaws.cn/iam/

  2. 在导航窗格中,选择 Policies

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

  4. 选择 Policy actions,然后选择 Attach

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

附加 CloudWatchLogsReadOnlyAccess 托管策略

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

  1. 登录 AWS 管理控制台 并通过以下网址打开 IAM 控制台 https://console.amazonaws.cn/iam/

  2. 在导航窗格中,选择 Policies

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

  4. 选择 Policy actions,然后选择 Attach

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

附加 AWSCloudFormationReadOnlyAccess 托管策略

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

  1. 登录 AWS 管理控制台 并通过以下网址打开 IAM 控制台 https://console.amazonaws.cn/iam/

  2. 在导航窗格中,选择 Policies

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

  4. 选择 Policy actions,然后选择 Attach

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

附加 AmazonAthenaFullAccess 托管策略

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

  1. 登录 AWS 管理控制台 并通过以下网址打开 IAM 控制台 https://console.amazonaws.cn/iam/

  2. 在导航窗格中,选择 Policies

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

  4. 选择 Policy actions,然后选择 Attach

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