

# 适用于 AWS Glue 的 Identity and Access Management
<a name="security-iam"></a>



AWS Identity and Access Management（IAM）是一项，AWS 服务可以帮助管理员安全地控制对 AWS 资源的访问。IAM 管理员控制谁可以通过*身份验证*（登录）并*授权*（具有权限）使用 AWS Glue 资源。IAM 是一项无需额外费用即可使用的。AWS 服务

**注意**  
您可以使用 AWS Glue 方法或 AWS Lake Formation 授权来授予对 AWS Glue Data Catalog 中数据的访问权限。您可以使用 AWS Identity and Access Management（IAM）policy 用 AWS Glue 方法设置精细访问控制。Lake Formation 使用更简单的 `GRANT/REVOKE` 权限模型，类似于关系数据库系统中的 `GRANT/REVOKE` 命令。  
本节包括有关如何使用 AWS Glue 方法的信息。有关使用 Lake Formation 授权的信息，请参阅 *AWS Lake Formation 开发人员指南*中的[授予 Lake Formation 权限](https://docs.aws.amazon.com/lake-formation/latest/dg/lake-formation-permissions.html)。

**Topics**
+ [

## 受众
](#security_iam_audience)
+ [

## 使用身份进行身份验证
](#security_iam_authentication)
+ [

## 使用策略管理访问
](#security_iam_access-manage)
+ [

# AWS Glue 如何与 IAM 协同工作
](security_iam_service-with-iam.md)
+ [

# 为 AWS Glue 配置 IAM 权限
](configure-iam-for-glue.md)
+ [

# AWS Glue 访问控制策略示例
](glue-policy-examples.md)
+ [

# 授予 AWS Glue 的 AWS 托管式策略
](security-iam-awsmanpol.md)
+ [

# 为作业执行授予动态范围限定策略
](dynamically-scoped-policies.md)
+ [

# 指定 AWS Glue 资源 ARN
](glue-specifying-resource-arns.md)
+ [

# 授予跨账户访问权限
](cross-account-access.md)
+ [

# 对 AWS Glue 身份和访问进行故障排除
](security_iam_troubleshoot.md)

## 受众
<a name="security_iam_audience"></a>

您使用 AWS Identity and Access Management（IAM）的方式因您的角色而异：
+ **服务用户**：如果您无法访问功能，请从管理员处请求权限（请参阅[对 AWS Glue 身份和访问进行故障排除](security_iam_troubleshoot.md)）
+ **服务管理员**：确定用户访问权限并提交权限请求（请参阅[AWS Glue 如何与 IAM 协同工作](security_iam_service-with-iam.md)）
+ **IAM 管理员**：编写用于管理访问权限的策略（请参阅[适用于 AWS Glue 的基于身份的策略示例](security_iam_id-based-policy-examples.md)）

## 使用身份进行身份验证
<a name="security_iam_authentication"></a>

身份验证是您使用身份凭证登录 AWS 的方法。您必须作为 AWS 账户根用户、IAM 用户或通过担任 IAM 角色进行身份验证。

您可以使用来自 AWS IAM Identity Center（IAM Identity Center）等身份源的凭证、单点登录身份验证或 Google/Facebook 凭证，以联合身份进行登录。有关登录的更多信息，请参阅《AWS 登录 用户指南》**中的[如何登录您的 AWS 账户](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)。

对于编程访问，AWS 提供了 SDK 和 CLI 来对请求进行加密签名。有关更多信息，请参阅*《IAM 用户指南》*中的[适用于 API 请求的 AWS 签名版本 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)。

### AWS 账户 根用户
<a name="security_iam_authentication-rootuser"></a>

 当您创建 AWS 账户 时，最初使用的是一个对所有 AWS 服务和资源拥有完全访问权限的登录身份（称为 AWS 账户*根用户*）。我们强烈建议不要使用根用户进行日常任务。有关需要根用户凭证的任务，请参阅《IAM 用户指南》**中的[需要根用户凭证的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

### 联合身份
<a name="security_iam_authentication-federated"></a>

作为最佳实践，请要求人类用户必须使用带有身份提供者的联合身份验证才能使用临时凭证访问 AWS 服务。

*联合身份*是来自企业目录、Web 身份提供者的用户，或 Directory Service 中的用户（这些用户使用来自身份源的凭证访问 AWS 服务）。联合身份代入可提供临时凭证的角色。

要集中管理访问权限，建议使用。AWS IAM Identity Center有关更多信息，请参阅《AWS IAM Identity Center 用户指南》**中的[什么是 IAM Identity Center？](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)。

### IAM 用户和群组
<a name="security_iam_authentication-iamuser"></a>

*[IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)*是对某个人员或应用程序具有特定权限的一个身份。建议使用临时凭证，而非具有长期凭证的 IAM 用户。有关更多信息，请参阅*《IAM 用户指南》*中的[要求人类用户使用带有身份提供商的联合身份验证才能使用临时凭证访问 AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)。

[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)指定一组 IAM 用户，便于更轻松地对大量用户进行权限管理。有关更多信息，请参阅*《IAM 用户指南》*中的 [IAM 用户使用案例](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html)。

### IAM 角色
<a name="security_iam_authentication-iamrole"></a>

*[IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)*是具有特定权限的身份，可提供临时凭证。您可以通过[从用户切换到 IAM 角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)或调用 AWS CLI 或 AWS API 操作来担任角色。有关更多信息，请参阅《IAM 用户指南》**中的[担任角色的方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)。

IAM 角色对于联合用户访问、临时 IAM 用户权限、跨账户访问、跨服务访问以及在 Amazon EC2 上运行的应用程序非常有用。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

## 使用策略管理访问
<a name="security_iam_access-manage"></a>

您将创建策略并将其附加到 AWS 身份或资源，以控制 AWS 中的访问。策略在与身份或资源关联时定义权限。当主体发出请求时，AWS 会评估这些策略。大多数策略在 AWS 中存储为 JSON 文档。有关 JSON 策略文档的更多信息，请参阅*《IAM 用户指南》*中的 [JSON 策略概述](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json)。

管理员使用策略，通过定义哪个**主体**可以在什么**条件**下对哪些**资源**执行哪些**操作**来指定谁有权访问什么。

默认情况下，用户和角色没有权限。IAM 管理员创建 IAM 策略并将其添加到角色中，然后用户可以担任这些角色。IAM 策略定义权限，与执行操作所用的方法无关。

### 基于身份的策略
<a name="security_iam_access-manage-id-based-policies"></a>

基于身份的策略是您附加到身份（用户、组或角色）的 JSON 权限策略文档。这些策略控制身份可以执行什么操作、对哪些资源执行以及在什么条件下执行。要了解如何创建基于身份的策略，请参阅《IAM 用户指南》**中的[使用客户管理型策略定义自定义 IAM 权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

基于身份的策略可以是*内联策略*（直接嵌入到单个身份中）或*托管策略*（附加到多个身份的独立策略）。要了解如何在托管策略和内联策略之间进行选择，请参阅*《IAM 用户指南》*中的[在托管策略与内联策略之间进行选择](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html)。

### 基于资源的策略
<a name="security_iam_access-manage-resource-based-policies"></a>

基于资源的策略是附加到资源的 JSON 策略文档。示例包括 IAM *角色信任策略*和 Amazon S3 *存储桶策略*。在支持基于资源的策略的服务中，服务管理员可以使用它们来控制对特定资源的访问。您必须在基于资源的策略中[指定主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。

基于资源的策略是位于该服务中的内联策略。您不能在基于资源的策略中使用来自 IAM 的 AWS 托管策略。

### 其他策略类型
<a name="security_iam_access-manage-other-policies"></a>

AWS 支持额外的策略类型，这些策略类型可以设置由更常用的策略类型授予的最大权限：
+ **权限边界** – 设置基于身份的策略可以授予 IAM 实体的最大权限。有关更多信息，请参阅《 IAM 用户指南》**中的 [IAM 实体的权限边界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)。
+ **服务控制策略（SCP）**– 指定 AWS Organizations 中组织或组织单元的最大权限。有关更多信息，请参阅《AWS Organizations 用户指南》**中的[服务控制策略](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)。
+ **资源控制策略（RCP）**– 设置对账户中资源的最大可用权限。有关更多信息，请参阅《AWS Organizations 用户指南》**中的[资源控制策略（RCP）](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)。
+ **会话策略** – 在为角色或联合用户创建临时会话时，作为参数传递的高级策略。有关更多信息，请参阅《IAM 用户指南》**中的[会话策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)。

### 多个策略类型
<a name="security_iam_access-manage-multiple-policies"></a>

当多个类型的策略应用于一个请求时，生成的权限更加复杂和难以理解。要了解 AWS 如何确定在涉及多种策略类型时是否允许请求，请参阅 *IAM 用户指南*中的[策略评测逻辑](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)。

# AWS Glue 如何与 IAM 协同工作
<a name="security_iam_service-with-iam"></a>

在使用 IAM 管理对 AWS Glue 的访问之前，您应该了解哪些 IAM 功能可用于 AWS Glue。






**您可以与 AWS Glue 搭配使用的 IAM 功能**  

| IAM 功能 | AWS Glue 支持 | 
| --- | --- | 
|  [基于身份的策略](#security_iam_service-with-iam-id-based-policies)  |   是  | 
|  [基于资源的策略](#security_iam_service-with-iam-resource-based-policies)  |   部分  | 
|  [策略操作](#security_iam_service-with-iam-id-based-policies-actions)  |   是  | 
|  [策略资源](#security_iam_service-with-iam-id-based-policies-resources)  |   是  | 
|  [策略条件键（特定于服务）](#security_iam_service-with-iam-id-based-policies-conditionkeys)  |   是  | 
|  [ACL](#security_iam_service-with-iam-acls)  |   否   | 
|  [ABAC（策略中的标签）](#security_iam_service-with-iam-tags)  |   部分  | 
|  [临时凭证](#security_iam_service-with-iam-roles-tempcreds)  |   是  | 
|  [主体权限](#security_iam_service-with-iam-principal-permissions)  |   否   | 
|  [服务角色](#security_iam_service-with-iam-roles-service)  |   是  | 
|  [服务关联角色](#security_iam_service-with-iam-roles-service-linked)  |   否   | 

要大致了解 AWS Glue 和其他 AWS 服务如何与大多数 IAM 功能一起使用，请参阅*IAM 用户指南*中的[与 IAM 一起使用的 AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。

## 适用于 AWS Glue 的基于身份的策略
<a name="security_iam_service-with-iam-id-based-policies"></a>

**支持基于身份的策略：**是

基于身份的策略是可附加到身份（如 IAM 用户、用户组或角色）的 JSON 权限策略文档。这些策略控制用户和角色可在何种条件下对哪些资源执行哪些操作。要了解如何创建基于身份的策略，请参阅《IAM 用户指南》**中的[使用客户管理型策略定义自定义 IAM 权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

通过使用 IAM 基于身份的策略，您可以指定允许或拒绝的操作和资源以及允许或拒绝操作的条件。要了解可在 JSON 策略中使用的所有元素，请参阅《IAM 用户指南》**中的 [IAM JSON 策略元素引用](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)。

AWS Glue 对所有 AWS Glue 操作均支持基于身份的策略 (IAM policy)。通过附加策略，可向其授予创建、访问或修改 AWS Glue 资源（例如 AWS Glue Data Catalog 中的表）的权限。

### 适用于 AWS Glue 的基于身份的策略示例
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>



要查看 AWS Glue 基于身份的策略的示例，请参阅 [适用于 AWS Glue 的基于身份的策略示例](security_iam_id-based-policy-examples.md)。

## AWS Glue 内基于资源的策略
<a name="security_iam_service-with-iam-resource-based-policies"></a>

**支持基于资源的策略：**部分支持

基于资源的策略是附加到资源的 JSON 策略文档。基于资源的策略的示例包括 IAM *角色信任策略*和 Amazon S3 *存储桶策略*。在支持基于资源的策略的服务中，服务管理员可以使用它们来控制对特定资源的访问。对于在其中附加策略的资源，策略定义指定主体可以对该资源执行哪些操作以及在什么条件下执行。您必须在基于资源的策略中[指定主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。主体可以包括账户、用户、角色、联合用户或。AWS 服务

要启用跨账户访问，您可以将整个账户或其他账户中的 IAM 实体指定为基于资源的策略中的主体。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

**注意**  
只能使用 AWS Glue 资源策略来管理 Data Catalog 资源的权限。不能将其附加到任何其他 AWS Glue 资源，如任务、触发器、开发终端节点、爬网程序或分类器。  
每个目录只允许使用*一个*资源策略，大小限制为 10KB。

在 AWS Glue 中，资源策略附加到*目录*，目录是上面提到的各种 Data Catalog 资源的虚拟容器。每个 AWS 账户在 AWS 区域中有单个目录，其目录 ID 与 AWS 账户 ID 相同。您无法删除或修改目录。

将对目录的所有 API 调用评估资源策略，其中调用方委托人包含在策略文档的 `"Principal"` 块中。



要查看 AWS Glue 基于资源的策略的示例，请参阅 [AWS Glue 基于资源的策略示例](security_iam_resource-based-policy-examples.md)。

## 适用于 AWS Glue 的策略操作
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

**支持策略操作：**是

管理员可以使用 AWS JSON 策略来指定谁有权访问什么内容。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

JSON 策略的 `Action` 元素描述可用于在策略中允许或拒绝访问的操作。在策略中包含操作以授予执行关联操作的权限。



要查看 AWS Glue 操作的列表，请参阅*服务授权参考*中的 [AWS Glue 定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-actions-as-permissions)。

AWS Glue 中的策略操作在操作前使用以下前缀：

```
glue
```

要在单个语句中指定多项操作，请使用逗号将它们隔开。

```
"Action": [
      "glue:action1",
      "glue:action2"
         ]
```





您也可以使用通配符（\$1）指定多个操作。例如，要指定以单词 `Get` 开头的所有操作，包括以下操作：

```
"Action": "glue:Get*"
```

要查看示例策略，请参阅 [AWS Glue 访问控制策略示例](glue-policy-examples.md)。

## AWS Glue 的策略资源
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

**支持策略资源：**是

管理员可以使用 AWS JSON 策略来指定谁有权访问什么内容。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

`Resource` JSON 策略元素指定要向其应用操作的一个或多个对象。作为最佳实践，请使用其 [Amazon 资源名称（ARN）](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)指定资源。对于不支持资源级权限的操作，请使用通配符 (\$1) 指示语句应用于所有资源。

```
"Resource": "*"
```

有关如何使用 ARN 控制对 AWS Glue 资源的访问的更多信息，请参阅 [指定 AWS Glue 资源 ARN](glue-specifying-resource-arns.md)。

要查看 AWS Glue 资源类型及其 ARN 的列表，请参阅*服务授权参考*中的 [AWS Glue 定义的资源](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-resources-for-iam-policies)。要了解可以对哪些操作指定每个资源的 ARN，请参阅 [AWS Glue 定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-actions-as-permissions)。



## AWS Glue 的策略条件键
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

**支持特定于服务的策略条件键：**是

管理员可以使用 AWS JSON 策略来指定谁有权访问什么内容。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

`Condition` 元素根据定义的条件指定语句何时执行。您可以创建使用[条件运算符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)（例如，等于或小于）的条件表达式，以使策略中的条件与请求中的值相匹配。要查看所有 AWS 全局条件键，请参阅《IAM 用户指南》**中的 [AWS 全局条件上下文键](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。

要查看 AWS Glue 条件键的列表，请参阅*服务授权参考*中的 [AWS Glue 的条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-policy-keys)。要了解您可以对哪些操作和资源使用条件键，请参阅 [AWS Glue 定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-actions-as-permissions)。

要查看示例策略，请参阅 [使用条件键或上下文键控制设置](security_iam_id-based-policy-examples.md#glue-identity-based-policy-condition-keys)。

## AWS Glue 中的 ACL
<a name="security_iam_service-with-iam-acls"></a>

**支持 ACL：**否 

访问控制列表（ACL）控制哪些主体（账户成员、用户或角色）有权访问资源。ACL 与基于资源的策略类似，但它们不使用 JSON 策略文档格式。

## 使用 AWS Glue 的 ABAC
<a name="security_iam_service-with-iam-tags"></a>

**支持 ABAC（策略中的标签）：**部分支持

基于属性的访问权限控制（ABAC）是一种授权策略，该策略基于称为标签的属性来定义权限。您可以将标签附加到 IAM 实体和 AWS 资源，然后设计 ABAC 策略，以支持在主体的标签与资源上的标签匹配时执行操作。

要基于标签控制访问，您需要使用 `aws:ResourceTag/key-name``aws:RequestTag/key-name` 或 `aws:TagKeys` 条件键在策略的[条件元素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)中提供标签信息。

如果某个服务对于每种资源类型都支持所有这三个条件键，则对于该服务，该值为**是**。如果某个服务仅对于部分资源类型支持所有这三个条件键，则该值为**部分**。

有关 ABAC 的更多信息，请参阅《IAM 用户指南》**中的[使用 ABAC 授权定义权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)。要查看设置 ABAC 步骤的教程，请参阅《IAM 用户指南》**中的[使用基于属性的访问权限控制（ABAC）](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)。

**重要**  
条件上下文键仅应用于针对爬网程序、作业、触发器和开发端点的 AWS Glue API 操作。有关受影响的 API 操作的更多信息，请参阅 [AWS Glue的条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-policy-keys)。  
AWS Glue Data Catalog API 操作目前不支持 `aws:referer` 和 `aws:UserAgent` 全局条件上下文键。

要查看基于身份的策略（用于根据资源上的标签来限制对该资源的访问）的示例，请参阅 [使用标签授权](security_iam_id-based-policy-examples.md#tags-control-access-example-triggers-allow)。

## 将临时凭证用于 AWS Glue
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

**支持临时凭证：**是

临时凭证提供对 AWS 资源的短期访问权限，并且是在您使用联合身份验证或切换角色时自动创建的。AWS 建议您动态生成临时凭证，而不是使用长期访问密钥。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的临时安全凭证](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)和[使用 IAM 的。AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)

## AWS Glue 的跨服务主体权限
<a name="security_iam_service-with-iam-principal-permissions"></a>

**支持转发访问会话（FAS）：**否 

 转发访问会话（FAS）使用调用 AWS 服务的主体的权限，与发出请求的 AWS 服务结合，来向下游服务发出请求。有关发出 FAS 请求时的策略详情，请参阅[转发访问会话](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)。

## AWS Glue 的服务角色
<a name="security_iam_service-with-iam-roles-service"></a>

**支持服务角色：**是

 服务角色是由一项服务担任、代表您执行操作的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。IAM 管理员可以在 IAM 中创建、修改和删除服务角色。有关更多信息，请参阅《IAM 用户指南》**中的[创建向 AWS 服务 委派权限的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

**警告**  
更改服务角色的权限可能会破坏 AWS Glue 的功能。仅当 AWS Glue 提供相关指导时才编辑服务角色。

有关为 AWS Glue 创建服务角色的详细说明，请参阅 [步骤 1：为 AWS Glue 服务创建 IAM policy](create-service-policy.md) 和 [步骤 2：为 AWS Glue 创建 IAM 角色](create-an-iam-role.md)。

## AWS Glue 的服务相关角色
<a name="security_iam_service-with-iam-roles-service-linked"></a>

**支持服务相关角色：**否 

 服务关联角色是一种与 AWS 服务 关联的服务角色。服务可以代入代表您执行操作的角色。服务关联角色显示在您的 AWS 账户 中，并由该服务拥有。IAM 管理员可以查看但不能编辑服务关联角色的权限。

有关创建或管理服务相关角色的详细信息，请参阅[能够与 IAM 搭配使用的 AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。在表中查找**服务相关角色**列中包含 `Yes` 的表。选择**是**链接以查看该服务的服务相关角色文档。

# 为 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` 的策略附加到角色。

# AWS Glue 访问控制策略示例
<a name="glue-policy-examples"></a>

本部分包含基于身份的（IAM）访问控制策略和 AWS Glue 资源策略的示例。

**Contents**
+ [

# 适用于 AWS Glue 的基于身份的策略示例
](security_iam_id-based-policy-examples.md)
  + [

## 策略最佳实践
](security_iam_id-based-policy-examples.md#security_iam_service-with-iam-policy-best-practices)
  + [

## 资源级权限仅应用于特定的 AWS Glue 对象
](security_iam_id-based-policy-examples.md#glue-identity-based-policy-limitations)
  + [

## 使用 AWS Glue 控制台
](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-console)
  + [

## 允许用户查看他们自己的权限
](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-view-own-permissions)
  + [

## 授予对表的只读权限
](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-read-only-table-access)
  + [

## 通过 GetTables 权限筛选表
](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-filter-tables)
  + [

## 授予对表和所有分区的完整访问权限
](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-full-access-tables-partitions)
  + [

## 通过名称前缀和显式拒绝控制访问权限
](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-deny-by-name-prefix)
  + [

## 使用标签授权
](security_iam_id-based-policy-examples.md#tags-control-access-example-triggers-allow)
  + [

## 使用标签拒绝访问
](security_iam_id-based-policy-examples.md#tags-control-access-example-triggers-deny)
  + [

## 将标签与 List 和 Batch API 操作结合使用
](security_iam_id-based-policy-examples.md#tags-control-access-example-triggers-list-batch)
  + [

## 使用条件键或上下文键控制设置
](security_iam_id-based-policy-examples.md#glue-identity-based-policy-condition-keys)
    + [

### 使用条件键控制设置的策略
](security_iam_id-based-policy-examples.md#glue-identity-based-policy-condition-key-vpc)
    + [

### 控制使用上下文键控制设置的策略
](security_iam_id-based-policy-examples.md#glue-identity-based-policy-context-key-glue)
  + [

## 拒绝某个身份创建数据预览会话
](security_iam_id-based-policy-examples.md#deny-data-preview-sessions-per-identity)
+ [

# AWS Glue 基于资源的策略示例
](security_iam_resource-based-policy-examples.md)
  + [

## 将基于资源的策略用于 AWS Glue 的注意事项
](security_iam_resource-based-policy-examples.md#security_iam_resource-based-policy-examples-considerations)
  + [

## 使用资源策略控制同一账户中的访问
](security_iam_resource-based-policy-examples.md#glue-policy-resource-policies-example-same-account)

# 适用于 AWS Glue 的基于身份的策略示例
<a name="security_iam_id-based-policy-examples"></a>

默认情况下，用户和角色没有创建或修改 AWS Glue 资源的权限。要授予用户对所需资源执行操作的权限，IAM 管理员可以创建 IAM 策略。

要了解如何使用这些示例 JSON 策略文档创建基于 IAM 身份的策略，请参阅《IAM 用户指南》**中的[创建 IAM 策略（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)。

有关 AWS Glue 定义的操作和资源类型的详细信息，包括每种资源类型的 ARN 格式，请参阅*服务授权参考*中的 [AWS Glue 的操作、资源和条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html)。

**注意**  
本节中提供的示例均使用 `us-west-2` 区域。您可以将其替换为要使用的 AWS 区域。

**Topics**
+ [

## 策略最佳实践
](#security_iam_service-with-iam-policy-best-practices)
+ [

## 资源级权限仅应用于特定的 AWS Glue 对象
](#glue-identity-based-policy-limitations)
+ [

## 使用 AWS Glue 控制台
](#security_iam_id-based-policy-examples-console)
+ [

## 允许用户查看他们自己的权限
](#security_iam_id-based-policy-examples-view-own-permissions)
+ [

## 授予对表的只读权限
](#security_iam_id-based-policy-examples-read-only-table-access)
+ [

## 通过 GetTables 权限筛选表
](#security_iam_id-based-policy-examples-filter-tables)
+ [

## 授予对表和所有分区的完整访问权限
](#security_iam_id-based-policy-examples-full-access-tables-partitions)
+ [

## 通过名称前缀和显式拒绝控制访问权限
](#security_iam_id-based-policy-examples-deny-by-name-prefix)
+ [

## 使用标签授权
](#tags-control-access-example-triggers-allow)
+ [

## 使用标签拒绝访问
](#tags-control-access-example-triggers-deny)
+ [

## 将标签与 List 和 Batch API 操作结合使用
](#tags-control-access-example-triggers-list-batch)
+ [

## 使用条件键或上下文键控制设置
](#glue-identity-based-policy-condition-keys)
+ [

## 拒绝某个身份创建数据预览会话
](#deny-data-preview-sessions-per-identity)

## 策略最佳实践
<a name="security_iam_service-with-iam-policy-best-practices"></a>

基于身份的策略确定某个人是否可以创建、访问或删除您账户中的 AWS Glue 资源。这些操作可能会使 AWS 账户产生成本。创建或编辑基于身份的策略时，请遵循以下指南和建议：
+ **AWS 托管式策略及转向最低权限许可入门**：要开始向用户和工作负载授予权限，请使用 *AWS 托管式策略*来为许多常见使用场景授予权限。您可以在 AWS 账户 中找到这些策略。建议通过定义特定于您的使用场景的 AWS 客户托管式策略来进一步减少权限。有关更多信息，请参阅《IAM 用户指南》**中的 [AWS 托管策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)或[工作职能的 AWS 托管策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)。
+ **应用最低权限**：在使用 IAM 策略设置权限时，请仅授予执行任务所需的权限。为此，您可以定义在特定条件下可以对特定资源执行的操作，也称为*最低权限许可*。有关使用 IAM 应用权限的更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的策略和权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。
+ **使用 IAM 策略中的条件进一步限制访问权限**：您可以向策略添加条件来限制对操作和资源的访问。例如，您可以编写策略条件来指定必须使用 SSL 发送所有请求。如果通过特定 AWS 服务（例如 CloudFormation）使用服务操作，您还可以使用条件来授予对服务操作的访问权限。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM JSON 策略元素：条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)。
+ **使用 IAM Access Analyzer 验证您的 IAM 策略，以确保权限的安全性和功能性**：IAM Access Analyzer 会验证新策略和现有策略，以确保策略符合 IAM 策略语言（JSON）和 IAM 最佳实践。IAM Access Analyzer 提供 100 多项策略检查和可操作的建议，以帮助您制定安全且功能性强的策略。有关更多信息，请参阅《IAM 用户指南》**中的[使用 IAM Access Analyzer 验证策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)。
+ **需要多重身份验证（MFA）**：如果您所处的场景要求您的 AWS 账户 中有 IAM 用户或根用户，请启用 MFA 来提高安全性。若要在调用 API 操作时需要 MFA，请将 MFA 条件添加到您的策略中。有关更多信息，请参阅《IAM 用户指南》**中的[使用 MFA 保护 API 访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)。

有关 IAM 中的最佳实操的更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

## 资源级权限仅应用于特定的 AWS Glue 对象
<a name="glue-identity-based-policy-limitations"></a>

您只能定义 AWS Glue 中特定对象的精细控制。因此，您必须编写客户端的 IAM policy，以便允许 `Resource` 语句的 Amazon Resource Name（ARN）的 API 操作与不允许使用 API 的操作不混合。

例如，以下 IAM policy 允许 `GetClassifier` 和 `GetJobRun` 的 API 操作。它将 `Resource` 定义为 `*`，因为 AWS Glue 不允许分类符和作业运行的 ARN。由于允许将 ARN 用于 `GetDatabase` 和 `GetTable` 等特定 API 操作，因此，可以在策略的第二部分中指定 ARN。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:GetClassifier*",
        "glue:GetJobRun*"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "glue:Get*"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/default",
        "arn:aws:glue:us-east-1:111122223333:table/default/e*1*",
        "arn:aws:glue:us-east-1:111122223333:connection/connection2"
      ]
    }
  ]
}
```

------

有关允许 ARN 的 AWS Glue 对象的列表，请参阅[指定 AWS Glue 资源 ARN](glue-specifying-resource-arns.md)。

## 使用 AWS Glue 控制台
<a name="security_iam_id-based-policy-examples-console"></a>

要访问 AWS Glue 控制台，您必须拥有一组最低的权限。这些权限必须允许您列出和查看有关您的 AWS 账户 中的 AWS Glue 资源的详细信息。如果创建比必需的最低权限更为严格的基于身份的策略，对于附加了该策略的实体（用户或角色），控制台将无法按预期正常运行。

对于只需要调用 AWS CLI 或 AWS API 的用户，无需为其提供最低控制台权限。相反，只允许访问与其尝试执行的 API 操作相匹配的操作。

为确保用户和角色仍可使用 AWS Glue 控制台，请同时将 AWS Glue `ConsoleAccess` 或 `ReadOnly` AWS 托管策略添加到实体。有关更多信息，请参阅《IAM 用户指南》**中的[为用户添加权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)。

某个用户要能够使用 AWS Glue 控制台，必须拥有一组允许其使用其 AWS 账户的 AWS Glue 资源的最低权限。除这些 AWS Glue 权限以外，控制台还需要来自以下服务的权限：
+ 用于显示日志的 Amazon CloudWatch Logs 权限。
+ 用于列出并传递角色的 AWS Identity and Access Management（IAM）权限。
+ 用于处理堆栈的 AWS CloudFormation 权限。
+ 用于列出 VPC、子网、安全组、实例和其他对象的 Amazon Elastic Compute Cloud（Amazon EC2）权限。
+ 用于列出存储桶和对象以及检索和保存脚本的 Amazon Simple Storage Service（Amazon S3）权限。
+ 用于使用集群的 Amazon Redshift 权限。
+ 用于列出实例的 Amazon Relational Database Service（Amazon RDS）权限。

有关用户查看和使用 AWS Glue 控制台所需的权限的更多信息，请参阅 [步骤 3：将策略附加到访问 AWS Glue 的用户或组](attach-policy-iam-user.md)。

如果创建比必需的最低权限更为严格的 IAM 策略，对于附加了该 IAM 策略的用户， 控制台将无法按预期正常运行。为确保这些用户仍可使用 AWS Glue 控制台，同时如 [适用于 AWS Glue 的 AWS 托管（预定义）策略](security-iam-awsmanpol.md#access-policy-examples-aws-managed) 中所述附加 `AWSGlueConsoleFullAccess` 托管策略。

## 允许用户查看他们自己的权限
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

该示例说明了您如何创建策略，以允许 IAM 用户查看附加到其用户身份的内联和托管式策略。此策略包括在控制台上完成此操作或者以编程方式使用 AWS CLI 或 AWS API 所需的权限。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

## 授予对表的只读权限
<a name="security_iam_id-based-policy-examples-read-only-table-access"></a>

以下策略授予对数据库 `db1` 中的 `books` 表的只读权限。有关资源的 Amazon Resource Name（ARN）的更多信息，请参阅 [数据目录 ARN](glue-specifying-resource-arns.md#data-catalog-resource-arns)。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GetTablesActionOnBooks",
      "Effect": "Allow",
      "Action": [
        "glue:GetTables",
        "glue:GetTable"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1",
        "arn:aws:glue:us-east-1:111122223333:table/db1/books"
      ]
    }
  ]
}
```

------

此策略授予对名为 `db1` 的数据库中的名为 `books` 的表的只读权限。要授予对表的 `Get` 权限，同时需要对目录和数据库资源授予这一权限。

以下策略授予在数据库 `db1` 中创建表 `tb1` 所需的最低权限：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:CreateTable"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:table/db1/tbl1",
        "arn:aws:glue:us-east-1:111122223333:database/db1",
        "arn:aws:glue:us-east-1:111122223333:catalog"
      ]
    }
  ]
}
```

------

## 通过 GetTables 权限筛选表
<a name="security_iam_id-based-policy-examples-filter-tables"></a>

假设在数据库 `db1` 中有三个表，即 `customers`、`stores` 和 `store_sales`。以下策略向 `stores` 和 `store_sales` 授予 `GetTables` 权限，但不向 `customers` 授予此权限。当您使用此策略调用 `GetTables` 时，结果将只包含两个授权表（不返回 `customers` 表）。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GetTablesExample",
      "Effect": "Allow",
      "Action": [
        "glue:GetTables"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1",
        "arn:aws:glue:us-east-1:111122223333:table/db1/store_sales",
        "arn:aws:glue:us-east-1:111122223333:table/db1/stores"
      ]
    }
  ]
}
```

------

通过使用 `store*` 匹配以 `store` 开头的任何表名称，可简化上面的策略。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GetTablesExample2",
      "Effect": "Allow",
      "Action": [
        "glue:GetTables"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1",
        "arn:aws:glue:us-east-1:111122223333:table/db1/store*"
      ]
    }
  ]
}
```

------

同样，使用 `/db1/*` 匹配 `db1` 中的所有表，以下策略将授予对 `db1` 中所有表的 `GetTables` 访问权限。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GetTablesReturnAll",
      "Effect": "Allow",
      "Action": [
        "glue:GetTables"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1",
        "arn:aws:glue:us-east-1:111122223333:table/db1/*"
      ]
    }
  ]
}
```

------

如果未提供表 ARN，调用 `GetTables` 将成功，但会返回空列表。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GetTablesEmptyResults",
      "Effect": "Allow",
      "Action": [
        "glue:GetTables"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1"
      ]
    }
  ]
}
```

------

如果策略中缺少数据库 ARN，则调用 `GetTables` 将失败，并出现 `AccessDeniedException`。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GetTablesAccessDeny",
      "Effect": "Allow",
      "Action": [
        "glue:GetTables"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:table/db1/*"
      ]
    }
  ]
}
```

------

## 授予对表和所有分区的完整访问权限
<a name="security_iam_id-based-policy-examples-full-access-tables-partitions"></a>

以下策略授予对数据库 `db1` 中名为 `books` 的表的所有权限。这包括对表本身、对其存档版本及其所有分区的读取和写入权限。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "FullAccessOnTable",
      "Effect": "Allow",
      "Action": [
        "glue:CreateTable",
        "glue:GetTable",
        "glue:GetTables",
        "glue:UpdateTable",
        "glue:DeleteTable",
        "glue:BatchDeleteTable",
        "glue:GetTableVersion",
        "glue:GetTableVersions",
        "glue:DeleteTableVersion",
        "glue:BatchDeleteTableVersion",
        "glue:CreatePartition",
        "glue:BatchCreatePartition",
        "glue:GetPartition",
        "glue:GetPartitions",
        "glue:BatchGetPartition",
        "glue:UpdatePartition",
        "glue:DeletePartition",
        "glue:BatchDeletePartition"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1",
        "arn:aws:glue:us-east-1:111122223333:table/db1/books"
      ]
    }
  ]
}
```

------

在实践中，可以简化上述策略。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "FullAccessOnTable",
      "Effect": "Allow",
      "Action": [
        "glue:*Table*",
        "glue:*Partition*"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1",
        "arn:aws:glue:us-east-1:111122223333:table/db1/books"
      ]
    }
  ]
}
```

------

请注意，精细访问控制的最小粒度在表级别。这意味着，您不能向用户授予对表中某些分区的访问权限，而不授予对表中其他分区的访问权限，或授予对表中部分列的访问权限，而不授予对其他列的访问权限。用户要么可以访问表的所有内容，要么不能访问表的任何内容。

## 通过名称前缀和显式拒绝控制访问权限
<a name="security_iam_id-based-policy-examples-deny-by-name-prefix"></a>

在本示例中，假设您的 AWS Glue 数据目录中的数据库和表使用名称前缀来组织。发展阶段的数据库具有名称前缀 `dev-`，生产阶段的数据库具有名称前缀 `prod-`。您可以使用以下策略向开发人员授予对具有 `dev-` 前缀的所有数据库、表、UDF 等的完整访问权限。但是，您会对带有 `prod-` 前缀的所有内容授予只读访问权限。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DevAndProdFullAccess",
      "Effect": "Allow",
      "Action": [
        "glue:*Database*",
        "glue:*Table*",
        "glue:*Partition*",
        "glue:*UserDefinedFunction*",
        "glue:*Connection*"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/dev-*",
        "arn:aws:glue:us-east-1:111122223333:database/prod-*",
        "arn:aws:glue:us-east-1:111122223333:table/dev-*/*",
        "arn:aws:glue:us-east-1:111122223333:table/*/dev-*",
        "arn:aws:glue:us-east-1:111122223333:table/prod-*/*",
        "arn:aws:glue:us-east-1:111122223333:table/*/prod-*",
        "arn:aws:glue:us-east-1:111122223333:userDefinedFunction/dev-*/*",
        "arn:aws:glue:us-east-1:111122223333:userDefinedFunction/*/dev-*",
        "arn:aws:glue:us-east-1:111122223333:userDefinedFunction/prod-*/*",
        "arn:aws:glue:us-east-1:111122223333:userDefinedFunction/*/prod-*",
        "arn:aws:glue:us-east-1:111122223333:connection/dev-*",
        "arn:aws:glue:us-east-1:111122223333:connection/prod-*"
      ]
    },
    {
      "Sid": "ProdWriteDeny",
      "Effect": "Deny",
      "Action": [
        "glue:*Create*",
        "glue:*Update*",
        "glue:*Delete*"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:database/prod-*",
        "arn:aws:glue:us-east-1:111122223333:table/prod-*/*",
        "arn:aws:glue:us-east-1:111122223333:table/*/prod-*",
        "arn:aws:glue:us-east-1:111122223333:userDefinedFunction/prod-*/*",
        "arn:aws:glue:us-east-1:111122223333:userDefinedFunction/*/prod-*",
        "arn:aws:glue:us-east-1:111122223333:connection/prod-*"
      ]
    }
  ]
}
```

------

上述策略中的第二条语句使用显式 `deny`。您可以使用显式 `deny` 覆盖被授予委托人的任何 `allow` 权限。这样，您就可以锁定关键资源的访问权限，并阻止其他策略意外授予这些资源的访问权限。

在上述示例中，尽管第一条语句授予对 `prod-` 资源的完整访问权限，第二条语句则显式撤消这些资源的写入访问权限，只保留 `prod-` 资源的读取访问权限。

## 使用标签授权
<a name="tags-control-access-example-triggers-allow"></a>

例如，假设您想将对触发器 `t2` 的访问限制为您账户中名为 `Tom` 的特定用户。所有其他用户（包括 `Sam`）都有权访问触发器 `t1`。触发器 `t1` 和 `t2` 具有以下属性。

```
aws glue get-triggers
{
    "Triggers": [
        {
            "State": "CREATED",
            "Type": "SCHEDULED",
            "Name": "t1",
            "Actions": [
                {
                    "JobName": "j1"
                }
            ],
            "Schedule": "cron(0 0/1 * * ? *)"
        },
        {
            "State": "CREATED",
            "Type": "SCHEDULED",
            "Name": "t2",
            "Actions": [
                {
                    "JobName": "j1"
                }
            ],
            "Schedule": "cron(0 0/1 * * ? *)"
        }
    ]
}
```

AWS Glue 管理员已将标签值 `Tom` (`aws:ResourceTag/Name": "Tom"`) 附加到触发器 `t2`。AWS Glue 管理员还为 Tom 提供了一个 IAM policy，其中包含基于标签的条件语句。因此，Tom 只能使用对带标签值 `Tom` 的资源有效的 AWS Glue 操作。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "glue:*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Name": "Tom"
        }
      }
    }
  ]
}
```

------

当 Tom 尝试访问触发器 `t1` 时，他收到一条指示访问被拒绝的消息。同时，他可以成功检索触发器 `t2`。

```
aws glue get-trigger --name t1

An error occurred (AccessDeniedException) when calling the GetTrigger operation: User: Tom is not authorized to perform: glue:GetTrigger on resource: arn:aws:glue:us-east-1:123456789012:trigger/t1

aws glue get-trigger --name t2
{
    "Trigger": {
        "State": "CREATED",
        "Type": "SCHEDULED",
        "Name": "t2",
        "Actions": [
            {
                "JobName": "j1"
            }
        ],
        "Schedule": "cron(0 0/1 * * ? *)"
    }
}
```

Tom 无法使用复数 `GetTriggers` API 操作列出触发器，因为此操作不支持对标签进行筛选。

为了向 Tom 提供对 `GetTriggers` 的访问权限，AWS Glue 管理员创建了一个将权限拆分为两部分的策略。一个部分允许 Tom 使用 `GetTriggers` API 操作访问所有触发器。另一个部分允许 Tom 访问使用值 `Tom` 标记的 API 操作。利用此策略，Tom 可以使用 `GetTriggers` 和 `GetTrigger` 来访问触发器 `t2`。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "glue:GetTriggers",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "glue:*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Name": "Tom"
        }
      }
    }
  ]
}
```

------

## 使用标签拒绝访问
<a name="tags-control-access-example-triggers-deny"></a>

另一种资源策略方法是明确拒绝对资源的访问。

**重要**  
显式拒绝策略不适用于复数 API 操作（如 `GetTriggers`）。

在以下示例策略中，允许所有 AWS Glue 任务操作。但是，第二条 `Effect` 语句*明确*拒绝访问带有 `Team` 键和 `Special` 值标记的任务。

当管理员将以下策略附加到身份时，该身份可以访问*除*标记为 `Team` 键和 `Special` 值之外的所有任务。

## 将标签与 List 和 Batch API 操作结合使用
<a name="tags-control-access-example-triggers-list-batch"></a>

编写资源策略的第三种方法是允许使用 `List` API 操作访问资源以列出标签值的资源。然后，使用相应的 `Batch` API 操作以允许访问特定资源的详细信息。利用此方法，管理员无需允许访问复数 `GetCrawlers`、`GetDevEndpoints`、`GetJobs` 或 `GetTriggers` API 操作。相反，您可以允许使用以下 API 操作列出资源：
+ `ListCrawlers`
+ `ListDevEndpoints`
+ `ListJobs`
+ `ListTriggers`

此外，您可以允许使用以下 API 操作获取有关各个资源的详细信息：
+ `BatchGetCrawlers`
+ `BatchGetDevEndpoints`
+ `BatchGetJobs`
+ `BatchGetTriggers`

作为管理员，要使用此方法，您可以执行以下操作：

1. 将标签添加到您的爬网程序、开发终端节点、作业和触发器。

1. 拒绝用户对 `Get` API 操作（例如 `GetCrawlers`、`GetDevEndponts`、`GetJobs` 和 `GetTriggers`）的访问。

1. 要使用户能够查明他们有权访问的标记资源，请允许用户访问 `List` API 操作，例如 `ListCrawlers`、`ListDevEndponts`、`ListJobs` 和 `ListTriggers`。

1. 拒绝用户对 AWS Glue 标记 API（例如 `TagResource` 和 `UntagResource`）的访问。

1. 允许用户使用 `BatchGet` API 操作（例如 `BatchGetCrawlers`、`BatchGetDevEndponts`、`BatchGetJobs` 和 `BatchGetTriggers`）访问资源详细信息。

例如，在调用 `ListCrawlers` 操作时，请提供标签值以匹配用户名。然后，结果是与提供的标签值匹配的爬网程序的列表。向 `BatchGetCrawlers` 提供名称列表以获取有关每个带给定标签的爬网程序的详细信息。

例如，如果 Tom 应只能检索标记了 `Tom` 的触发器的详细信息，管理员可将标签添加到 `Tom` 的触发器，拒绝所有用户对 `GetTriggers` API 操作的访问，并允许所有用户访问 `ListTriggers` 和 `BatchGetTriggers`。

以下是 AWS Glue 管理员向 Tom 授予的资源策略。在此策略的第一个部分中，`GetTriggers` 拒绝 AWS Glue API 操作。在此策略的第二个部分中，所有资源允许 `ListTriggers`。但在第三个部分中，允许使用 `BatchGetTriggers` 访问标记了 `Tom` 的那些资源。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "glue:GetTriggers",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListTriggers"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "glue:BatchGetTriggers"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Name": "Tom"
        }
      }
    }
  ]
}
```

------

通过使用上一个示例中的相同触发器，Tom 可以访问触发器 `t2` 而不是触发器 `t1`。以下示例显示了 Tom 尝试使用 `BatchGetTriggers` 访问 `t1` 和 `t2` 时的结果。

```
aws glue batch-get-triggers --trigger-names t2
{
    "Triggers": {
        "State": "CREATED",
        "Type": "SCHEDULED",
        "Name": "t2",
        "Actions": [
            {
                "JobName": "j2"
            }
        ],
        "Schedule": "cron(0 0/1 * * ? *)"
    }
}

aws glue batch-get-triggers  --trigger-names t1

An error occurred (AccessDeniedException) when calling the BatchGetTriggers operation: No access to any requested resource.
```

以下示例显示了 Tom 尝试通过同一 `BatchGetTriggers` 调用访问触发器 `t2` 和触发器 `t3`（不存在）时的结果。请注意，由于 Tom 有权访问触发器 `t2` 且该触发器存在，因此，仅返回 `t2`。虽然 Tom 有权访问触发器 `t3`，但触发器 `t3` 不存在，因此在 `"TriggersNotFound": []` 列表的响应中将返回 `t3`。

```
aws glue batch-get-triggers --trigger-names t2 t3
{
    "Triggers": {
        "State": "CREATED",
        "Type": "SCHEDULED",
        "Name": "t2",
        "Actions": [
            {
                "JobName": "j2"
            }
        ],
        "TriggersNotFound": ["t3"],
        "Schedule": "cron(0 0/1 * * ? *)"
    }
}
```

## 使用条件键或上下文键控制设置
<a name="glue-identity-based-policy-condition-keys"></a>

授予创建和更新任务的权限时，可以使用条件键或上下文键。以下部分讨论了这些键：
+ [使用条件键控制设置的策略](#glue-identity-based-policy-condition-key-vpc)
+ [控制使用上下文键控制设置的策略](#glue-identity-based-policy-context-key-glue)

### 使用条件键控制设置的策略
<a name="glue-identity-based-policy-condition-key-vpc"></a>

AWS Glue 提供了三个 IAM 条件键，分别是 `glue:VpcIds`、`glue:SubnetIds` 和 `glue:SecurityGroupIds`。授予创建和更新任务的权限时，可以使用 IAM policy 中的条件键。您可以使用此设置确保创建（或更新）的作业或会话不会在所需 VPC 环境之外运行。VPC 设置信息不是 `CreateJob` 请求中的直接输入，而是从指向 AWS Glue 连接的任务“连接”字段推断得出。

**示例用法**  
使用所需的 VpcId "vpc-id1234"、SubnetIds 和 SecurityGroupIds 创建名为 "traffic-monitored-connection"（流量监控连接）的 AWS Glue 网络类型连接。

为 IAM policy 中的 `CreateJob` 和 `UpdateJob` 操作指定条件键条件。

```
{
  "Effect": "Allow",
  "Action": [
    "glue:CreateJob",
    "glue:UpdateJob"
  ],
  "Resource": [
    "*"
  ],
  "Condition": {
    "ForAnyValue:StringLike": {
      "glue:VpcIds": [
        "vpc-id1234"
      ]
    }
  }
}
```

 您可以创建类似的 IAM policy，以禁止在不指定连接信息的情况下创建 AWS Glue 任务。

**限制 VPC 上的会话**

 要强制创建的会话在指定的 VPC 内运行，您可以通过对 `glue:CreateSession` 操作添加 `Deny` 效果来限制角色权限，条件是 glue:vpc-id 不等于 vpc-<123>。例如：

```
"Effect": "Deny",
"Action": [
    "glue:CreateSession"
 ],
"Condition": {
    "StringNotEquals" : {"glue:VpcIds" : ["vpc-123"]} 
}
```

 您还可以将创建的会话强制在 VPC 内运行，方法是为 `Deny` 是空的 `glue:CreateSession` 操作添加 `glue:vpc-id` 效果。例如：

```
{
    "Effect": "Deny",
    "Action": [
        "glue:CreateSession"
    ],
      "Condition": {
        "Null": {"glue:VpcIds": true}
    }
}, 
{
    "Effect": "Allow",
    "Action": [
        "glue:CreateSession"
    ],
    "Resource": ["*"]
}
```

### 控制使用上下文键控制设置的策略
<a name="glue-identity-based-policy-context-key-glue"></a>

AWS Glue 为 AWS Glue 提供给任务和开发人员端点的每个角色会话提供了上下文键 (`glue:CredentialIssuingService= glue.amazonaws.com`)。这允许您对 AWS Glue 脚本执行的操作实施安全控制。AWS Glue 还为每个角色会话提供了另一个上下文键（`glue:RoleAssumedBy=glue.amazonaws.com`），其中 AWS Glue 会代表客户调用另一个 AWS 服务（不是通过任务/开发端点，而是直接通过 AWS Glue 服务）。

**示例用法**  
在 IAM policy 中指定条件权限，并将其附上 AWS Glue 任务要使用的角色。这确保了可以基于角色会话是否用于 AWS Glue 任务运行时环境而允许/拒绝某些操作。

```
{
    "Effect": "Allow",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
    "Condition": {
        "StringEquals": {
            "glue:CredentialIssuingService": "glue.amazonaws.com"
        }
    }
}
```

## 拒绝某个身份创建数据预览会话
<a name="deny-data-preview-sessions-per-identity"></a>

该部分包含一个 IAM policy 示例，用于拒绝某个身份创建数据预览会话。将此策略附加到身份，该身份与数据预览会话在运行期间使用的角色是分开的。

```
{
    "Sid": "DatapreviewDeny",
    "Effect": "Deny",
     "Action": [
           "glue:CreateSession"
     ],
     "Resource": [
          "arn:aws:glue:*:*:session/glue-studio-datapreview*"
      ]
 }
```

# AWS Glue 基于资源的策略示例
<a name="security_iam_resource-based-policy-examples"></a>

本部分包含基于资源的策略示例，其中包括用于授予跨账户存取的策略。

此示例使用 AWS Command Line Interface（AWS CLI）与 AWS Glue 服务 API 操作进行交互。您可以使用 AWS Glue 控制台或使用 AWS SDK 之一执行相同操作。

**重要**  
通过更改 AWS Glue 资源策略，您可能意外撤消您账户中现有 AWS Glue 用户的权限并导致意外中断。仅在开发或测试账户中尝试这些示例，并确保它们不会中断任何现有的工作流，然后再进行更改。

**Topics**
+ [

## 将基于资源的策略用于 AWS Glue 的注意事项
](#security_iam_resource-based-policy-examples-considerations)
+ [

## 使用资源策略控制同一账户中的访问
](#glue-policy-resource-policies-example-same-account)

## 将基于资源的策略用于 AWS Glue 的注意事项
<a name="security_iam_resource-based-policy-examples-considerations"></a>

**注意**  
IAM policy 和 AWS Glue 资源策略都需要几秒钟进行传播。附加新策略后，您可能会注意到，旧策略仍有效，直至新策略传播到整个系统。

可使用以 JSON 格式编写的策略文档来创建或修改资源策略。策略语法与基于身份的 IAM policy 相同（请参阅 [IAM JSON 策略参考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)），但存在以下例外：
+ 每条策略语句需要一个 `"Principal"` 或 `"NotPrincipal"` 块。
+ `"Principal"` 或 `"NotPrincipal"` 必须识别有效的现有主体。不允许使用通配符模式（如 `arn:aws:iam::account-id:user/*`）。
+ 策略中的 `"Resource"` 块要求所有资源 ARN 均与以下正则表达式语法匹配（其中第一个 `%s` 为 *region*，第二个 `%s` 为 *account-id*）：

  ```
  *arn:aws:glue:%s:%s:(\*|[a-zA-Z\*]+\/?.*)
  ```

  例如，`arn:aws:glue:us-west-2:account-id:*` 和 `arn:aws:glue:us-west-2:account-id:database/default` 都允许使用，但不允许 `*`。
+ 与基于身份的策略不同，AWS Glue 资源策略只能包含属于该策略附加到的目录的资源的 Amazon 资源名称（ARN）。此类 ARN 总是以 `arn:aws:glue:` 开头。
+ 策略不能导致创建它的身份被锁定，无法进一步创建或修改策略。
+ 资源策略 JSON 文档的大小不能超过 10 KB。

## 使用资源策略控制同一账户中的访问
<a name="glue-policy-resource-policies-example-same-account"></a>

在此示例中，账户 A 中的管理员用户创建一个资源策略，该策略向账户 A 中的 IAM 用户 `Alice` 授予对目录的完整访问权限。Alice 未附加 IAM policy。

为执行此操作，管理员用户需运行以下 AWS CLI 命令。

```
# Run as admin of Account A
$ aws glue put-resource-policy --profile administrator-name --region us-west-2 --policy-in-json '{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Principal": {
        "AWS": [
          "arn:aws:iam::account-A-id:user/Alice"
        ]
      },
      "Effect": "Allow",
      "Action": [
        "glue:*"
      ],
      "Resource": [
        "arn:aws:glue:us-west-2:account-A-id:*"
      ]
    }
  ]
}'
```

不是在 AWS CLI 命令中输入 JSON 策略文档，您可以将策略文档保存在一个文件中，然后在 AWS CLI 命令中引用该文件路径，前缀为 `file://`。下面是具体操作示例。

```
$ echo '{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Principal": {
        "AWS": [
          "arn:aws:iam::account-A-id:user/Alice"
        ]
      },
      "Effect": "Allow",
      "Action": [
        "glue:*"
      ],
      "Resource": [
        "arn:aws:glue:us-west-2:account-A-id:*"
      ]
    }
  ]
}' > /temp/policy.json

$ aws glue put-resource-policy --profile admin1 \
    --region us-west-2 --policy-in-json file:///temp/policy.json
```

在此资源策略传播后，Alice 可以访问账户 A 中的所有 AWS Glue 资源，如下所示。

```
# Run as user Alice
$ aws glue create-database --profile alice --region us-west-2 --database-input '{
    "Name": "new_database",
    "Description": "A new database created by Alice",
    "LocationUri": "s3://amzn-s3-demo-bucket"
}'

$ aws glue get-table --profile alice --region us-west-2 --database-name "default" --table-name "tbl1"}
```

为了响应 Alice 的 `get-table` 调用，AWS Glue 服务将返回以下内容。

```
{
  "Table": {
    "Name": "tbl1",
    "PartitionKeys": [],
    "StorageDescriptor": {
        ......
    },
    ......
  }
}
```

# 授予 AWS Glue 的 AWS 托管式策略
<a name="security-iam-awsmanpol"></a>

AWS 托管式策略是由 AWS 创建和管理的独立策略。AWS 托管式策略旨在为许多常见使用案例提供权限，以便您可以开始为用户、组和角色分配权限。

请记住，AWS 托管式策略可能不会为您的特定使用案例授予最低权限，因为它们可供所有 AWS 客户使用。我们建议通过定义特定于使用案例的[客户管理型策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)来进一步减少权限。

您无法更改 AWS 托管式策略中定义的权限。如果 AWS 更新在 AWS 托管式策略中定义的权限，则更新会影响该策略所附加到的所有主体身份（用户、组和角色）。当新的 AWS 服务 启动或新的 API 操作可用于现有服务时，AWS 最有可能更新 AWS 托管式策略。

有关更多信息，请参阅《IAM 用户指南》**中的 [AWS 托管式策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

## 适用于 AWS Glue 的 AWS 托管（预定义）策略
<a name="access-policy-examples-aws-managed"></a>

AWS 通过提供由 AWS 创建和管理的独立 IAM policy 来满足许多常用案例的要求。这些 AWS 托管策略可针对常用案例授予必要的权限，使您免去调查所需权限的工作。有关更多信息，请参阅《IAM 用户指南》中的 [AWS 托管式策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)**。

下面的 AWS 托管策略可附加到您账户中的身份，这些托管策略特定于 AWS Glue 并且按使用案例场景进行分组：
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess)：当策略所附加的身份使用 AWS 管理控制台 资源时，授予对 AWS Glue 资源的完全访问权限。如果遵循此策略中指定的资源的命名约定，则用户具有完全控制台功能。此策略通常附加到 AWS Glue 控制台的用户。
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – 授予对各种 AWS Glue 进程代表您运行所需的资源的访问权限。这些资源包括 AWS Glue、Amazon S3、IAM、CloudWatch Logs 和 Amazon EC2。如果您遵循此策略中指定的资源的命名约定，则 AWS Glue 进程具有所需的权限。此策略通常附加到在定义爬网程序、作业和开发终端节点时指定的角色。
+ [AwsGlueSessionUserRestrictedServiceRole](https://console.aws.amazon.com/iam/home#policies/details/arn:aws:iam::aws:policy%2Fservice-role%2FAwsGlueSessionUserRestrictedServiceRole) – 提供对除会话之外的所有 AWS Glue 资源的完全访问权限。允许用户仅创建和使用与用户关联的交互式会话。此策略包括由 AWS Glue 管理其他 AWS 服务中的 AWS Glue 资源所需的其他权限。此策略还允许向其他 AWS 服务中的 AWS Glue 资源添加标签。
**注意**  
若要完全实现安全益处，请勿将此策略授予分配到 `AWSGlueServiceRole`、`AWSGlueConsoleFullAccess` 或 `AWSGlueConsoleSageMakerNotebookFullAccess` 策略的用户。
+ [AwsGlueSessionUserRestrictedPolicy](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AwsGlueSessionUserRestrictedPolicy)：仅当提供的标签键“拥有者”和值与受让人的 AWS Glue 用户 ID 匹配时，才提供使用 `CreateSession` API 操作创建 AWS 交互式会话的访问权限。此身份策略已附上调用 `CreateSession` API 操作的 IAM用户。此策略还允许受让人与使用和其 AWS 用户 ID 匹配的“拥有者”标签和值创建的 AWS Glue 交互式会话资源进行交互。此策略拒绝在创建会话后从 AWS Glue 会话资源中更改或删除“拥有者”标签的权限。
**注意**  
若要完全实现安全益处，请勿将此策略授予分配到 `AWSGlueServiceRole`、`AWSGlueConsoleFullAccess` 或 `AWSGlueConsoleSageMakerNotebookFullAccess` 策略的用户。
+ [AwsGlueSessionUserRestrictedNotebookServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AwsGlueSessionUserRestrictedNotebookServiceRole)：提供足够的 AWS Glue Studio 笔记本会话访问权限，以便与特定的 AWS Glue 交互式会话资源进行交互。这些是使用与创建笔记本的主体（IAM 用户或角色）的 AWS 用户 ID 匹配的“拥有者”标签值创建的资源。有关这些标签的更多信息，请参阅 *IAM 用户指南*中的[主体键值](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#policy-vars-infotouse)图表。

  此服务角色策略将附上使用笔记本中的魔术命令指定的角色，或作为角色传递给 `CreateSession` API 操作。此策略还允许主体仅当标签键“拥有者”和值与主体的 AWS 用户 ID 匹配时，才从 AWS Glue Studio 笔记本界面创建 AWS Glue 交互式会话。此策略拒绝在创建会话后从 AWS Glue 会话资源中更改或删除“拥有者”标签的权限。此策略还包括写入和读取 Amazon S3 存储桶、写入 CloudWatch 日志和为 AWS Glue 使用的 Amazon EC2 资源创建和删除标签的权限。
**注意**  
若要完全实现安全益处，请勿将此策略授予分配到 `AWSGlueServiceRole`、`AWSGlueConsoleFullAccess` 或 `AWSGlueConsoleSageMakerNotebookFullAccess` 策略的角色。
+ [AwsGlueSessionUserRestrictedNotebookPolicy](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AwsGlueSessionUserRestrictedNotebookPolicy)：仅当存在标签键“拥有者”和值与创建笔记本的主体（IAM 用户或角色）的 AWS 用户 ID 匹配时，才提供从 AWS Glue Studio 笔记本界面创建 AWS Glue 交互式会话的访问权限。有关这些标签的更多信息，请参阅 *IAM 用户指南*中的[主体键值](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#policy-vars-infotouse)图表。

  此策略已附上从 AWS Glue Studio 笔记本界面创建会话的主体（IAM 用户或角色）。此策略还允许对 AWS Glue Studio 笔记本的充分访问权限，以便与特定的 AWS Glue 交互式会话资源进行交互。这些是使用与主体的 AWS 用户 ID 匹配的“拥有者”标签值创建的资源。此策略拒绝在创建会话后从 AWS Glue 会话资源中更改或删除“拥有者”标签的权限。
+ [AWSGlueServiceNotebookRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceNotebookRole)：授予对 AWS Glue Studio 笔记本中开启的 AWS Glue 会话的访问权限。此策略允许列出和获取所有会话的会话信息，但仅允许用户创建和使用标记为其 AWS 用户 ID 的会话。此策略会拒绝从标记为其 AWS ID 的 AWS Glue 会话资源中更改或删除“拥有者”标签的权限。

  将此策略分配给使用 AWS Glue Studio 中的笔记本界面创建任务的 AWS 用户。
+ [AWSGlueConsoleSageMakerNotebookFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleSageMakerNotebookFullAccess)：在策略所附加的身份使用 AWS 管理控制台时，授予对 AWS Glue 和 SageMaker AI 资源的完全访问权限。如果遵循此策略中指定的资源的命名约定，则用户具有完全控制台功能。此策略通常附加到管理 SageMaker AI 笔记本的 AWS Glue 控制台的用户。
+ [AWSGlueSchemaRegistryFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueSchemaRegistryFullAccess)：在策略所附加的身份使用 AWS 管理控制台 或 AWS CLI 时，授予对 AWS Glue 架构注册表资源的完全访问权限。如果遵循此策略中指定的资源的命名约定，则用户具有完全控制台功能。此策略通常附加到管理 AWS Glue 架构注册表的 AWS Glue 控制台或 AWS CLI 的用户。
+ [AWSGlueSchemaRegistryReadonlyAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueSchemaRegistryReadonlyAccess)：在策略附加到的身份使用 AWS 管理控制台 或 AWS CLI 时，授予对 AWS Glue 架构注册表资源的只读访问权限。如果遵循此策略中指定的资源的命名约定，则用户具有完全控制台功能。此策略通常附加到使用 AWS Glue 架构注册表的 AWS Glue 控制台或 AWS CLI 的用户。

**注意**  
您可以通过登录到 IAM 控制台并在该控制台中搜索特定策略来查看这些权限策略。

此外，您还可以创建您自己的自定义 IAM 策略，以授予 AWS Glue 操作和资源的相关权限。您可以将这些自定义策略附加到需要这些权限的 IAM 用户或组。

要使用自定义 IAM 角色创建具有 VPC 配置的连接，它必须具有以下 VPC 访问操作：
+ secretsmanager:GetSecretValue
+ secretsmanager:PutSecretValue
+ secretsmanager:DescribeSecret
+ ec2:CreateNetworkInterface
+ ec2:DeleteNetworkInterface
+ ec2:DescribeNetworkInterfaces
+ ec2:DescribeSubnets

## AWS Glue 对 AWS 托管策略的更新
<a name="security-iam-awsmanpol-updates"></a>



查看有关 AWS Glue 的 AWS 托管策略更新的详细信息（从该服务开始跟踪这些更改开始）。有关此页面更改的自动提示，请订阅 AWS Glue 文档历史记录页面上的 RSS 源。




| 更改 | 描述 | 日期 | 
| --- | --- | --- | 
| AwsGlueSessionUserRestrictedNotebookPolicy – 对现有策略的次要更新。 | 添加允许对拥有者标签键执行 glue:TagResource 操作。对于具备拥有者标签键的会话，需要支持创建时加上标签功能。 | 2024 年 8 月 30 日 | 
| AwsGlueSessionUserRestrictedNotebookServiceRole – 对现有策略的次要更新。 | 添加允许对拥有者标签键执行 glue:TagResource 操作。对于具备拥有者标签键的会话，需要支持创建时加上标签功能。 | 2024 年 8 月 30 日 | 
| AwsGlueSessionUserRestrictedPolicy – 对现有策略的次要更新。 | 添加允许对拥有者标签键执行 glue:TagResource 操作。对于具备拥有者标签键的会话，需要支持创建时加上标签功能。 | 2024 年 8 月 5 日 | 
| AwsGlueSessionUserRestrictedServiceRole – 对现有策略的次要更新。 | 添加允许对拥有者标签键执行 glue:TagResource 操作。对于具备拥有者标签键的会话，需要支持创建时加上标签功能。 | 2024 年 8 月 5 日 | 
| AwsGlueSessionUserRestrictedPolicy – 对现有策略的次要更新。 | 将 glue:StartCompletion 和 glue:GetCompletion 添加到策略。对于 AWS Glue 中的 Amazon Q 集成为必需。 | 2024 年 4 月 30 日 | 
| AwsGlueSessionUserRestrictedNotebookServiceRole – 对现有策略的次要更新。 | 将 glue:StartCompletion 和 glue:GetCompletion 添加到策略。对于 AWS Glue 中的 Amazon Q 集成为必需。 | 2024 年 4 月 30 日 | 
| AwsGlueSessionUserRestrictedServiceRole – 对现有策略的次要更新。 | 将 glue:StartCompletion 和 glue:GetCompletion 添加到策略。对于 AWS Glue 中的 Amazon Q 集成为必需。 | 2024 年 4 月 30 日 | 
| AWSGlueServiceNotebookRole – 对现有策略的微小更新。 | 将 glue:StartCompletion 和 glue:GetCompletion 添加到策略。对于 AWS Glue 中的 Amazon Q 集成为必需。 | 2024 年 1 月 30 日 | 
| AwsGlueSessionUserRestrictedNotebookPolicy – 对现有策略的次要更新。 | 将 glue:StartCompletion 和 glue:GetCompletion 添加到策略。对于 AWS Glue 中的 Amazon Q 集成为必需。 | 2023 年 11 月 29 日 | 
| AWSGlueServiceNotebookRole – 对现有策略的微小更新。 | 为策略添加 codewhisperer:GenerateRecommendations。AWS Glue 生成 CodeWhisperer 推荐所用新功能所必需的。 | 2023 年 10 月 9 日 | 
|  AWSGlueServiceRole – 对现有策略的微小更新。  |  收紧 CloudWatch 权限的范围，以更好地反映 AWS Glue 日志记录。 | 2023 年 8 月 4 日 | 
|  AWSGlueConsoleFullAccess：对现有策略的微小更新。  |  向策略添加 databrew 配方列表和描述权限。需要为 AWS Glue 可以访问配方的新功能提供完全的管理权限。 | 2023 年 5 月 9 日 | 
|  AWSGlueConsoleFullAccess：对现有策略的微小更新。  |  为策略添加 cloudformation:ListStacks。CloudFormation 授权要求变更后保留现有功能。 | 2023 年 3 月 28 日 | 
|  为交互式会话功能添加了新的托管策略 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/security-iam-awsmanpol.html)  |  这些策略旨在为 AWS Glue Studio 中的交互式会话和笔记本提供额外的安全性。这些策略会限制对 `CreateSession` API 操作的访问，使得只有拥有者有权访问。  | 2021 年 11 月 30 日 | 
|  AWSGlueConsoleSageMakerNotebookFullAccess：对现有策略的更新  |  为以下操作删除了冗余资源 ARN（`arn:aws:s3:::aws-glue-*/*`）：为 AWS Glue 用于存储脚本和临时文件的 Amazon S3 存储桶授予读取/写入权限。 通过将 `"StringEquals"` 更改为 `"ForAnyValue:StringLike"` 修复了语法问题，并且在行乱序的每个位置将 ` "Effect": "Allow"` 行移到 `"Action":` 行之前。  | 2021 年 7 月 15 日 | 
|  AWSGlueConsoleFullAccess：对现有策略的更新  | 为以下操作删除了冗余资源 ARN（arn:aws:s3:::aws-glue-\$1/\$1）：为 AWS Glue 用于存储脚本和临时文件的 Amazon S3 存储桶授予读取/写入权限。 | 2021 年 7 月 15 日 | 
|  AWS Glue 已开启跟踪更改  | AWS Glue 为其 AWS 托管策略开启了跟踪更改。 | 2021 年 6 月 10 日 | 

# 为作业执行授予动态范围限定策略
<a name="dynamically-scoped-policies"></a>

AWS Glue 提供了一项强大的新功能：用于作业执行的动态会话策略。此功能可以为每个作业运行指定自定义的精细权限，而无需创建多个 IAM 角色。

使用 `StartJobRun` API 启动 Glue 作业时，您可以包含内联会话策略。此策略会临时修改作业的执行角色在该特定作业运行期间的权限。这类似于在其他 AWS 服务中通过 `AssumeRole` API 使用临时凭证。
+ **增强安全性**：您可以将作业权限限制为每次运行所需的最低权限。
+ **简化管理**：无需为不同的场景创建和维护大量 IAM 角色。
+ **灵活性**：您可以根据运行时参数或租户特定需求动态调整权限。
+ **可扩展性**：此方法非常适合需要在租户之间隔离资源的多租户环境。

**授予动态范围限定策略的使用示例：**

以下示例演示如何仅授予作业对特定 Amazon S3 存储桶路径的*读**写*访问权限，其中路径由作业运行 ID 动态确定。此示例说明如何为每个作业运行实现精细的执行特定权限。

**通过 CLI**

```
aws glue start-job-run \
    --job-name "your-job-name" \
    --execution-role-session-policy '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject"
                ],
                "Resource": [
                    "arn:aws:s3:::specific-bucket/${JobRunId}/*"
                ]
            }
        ]
    }'
```

# 指定 AWS Glue 资源 ARN
<a name="glue-specifying-resource-arns"></a>

在 AWS Glue 中，您可以使用 AWS Identity and Access Management（IAM）policy 控制对资源的访问。在策略中，您可以使用 Amazon 资源名称（ARN）标识策略应用到的资源。并非 AWS Glue 中的所有资源都支持 ARN。

**Topics**
+ [

## 数据目录 ARN
](#data-catalog-resource-arns)
+ [

## AWS Glue 中非目录对象的 ARN
](#non-catalog-resource-arns)
+ [

## AWS Glue 非目录单数 API 操作的访问控制
](#non-catalog-singular-apis)
+ [

## 检索多个项目的 AWS Glue 非目录 API 操作的访问控制
](#non-catalog-plural-apis)
+ [

## AWS Glue 非目录 BatchGet API 操作的访问控制
](#non-catalog-batch-get-apis)

## 数据目录 ARN
<a name="data-catalog-resource-arns"></a>

数据目录资源具有层次结构，其中以 `catalog` 作为根。

```
arn:aws:glue:region:account-id:catalog
```

每个 AWS 账户在 AWS 区域中有单个数据目录，以 12 位的账户 ID 作为目录 ID。资源具有与其关联的唯一 ARN，如下表所示。


| **资源类型**  |  **ARN 格式**  | 
| --- | --- | 
| 目录 |  `arn:aws:glue:region:account-id:catalog` 例如：`arn:aws:glue:us-east-1:123456789012:catalog`  | 
| 数据库 |  `arn:aws:glue:region:account-id:database/database name` 例如：`arn:aws:glue:us-east-1:123456789012:database/db1`  | 
| 表 |  `arn:aws:glue:region:account-id:table/database name/table name` 例如：`arn:aws:glue:us-east-1:123456789012:table/db1/tbl1`  | 
| 联合 S3 表目录（所有表存储桶） |   `arn:aws:glue:region:account-id:catalog/s3tablescatalog`  例如：`arn:aws:glue:us-east-1:123456789012:catalog/s3tablescatalog`  | 
| 联合 S3 表存储桶目录（子目录） |   `arn:aws:glue:region:account-id:catalog/s3tablescatalog/bucket name`  例如：`arn:aws:glue:us-east-1:123456789012:catalog/s3tablescatalog/amzn-s3-demo-bucket1`  | 
| 联合 S3 表数据库 |   `arn:aws:glue:region:account-id:database/s3tablescatalog/child catalog name/database name`  例如：`arn:aws:glue:us-east-1:123456789012:database/s3tablescatalog/amzn-s3-demo-bucket1/nsdb1`  | 
| 联合 S3 表 |   `arn:aws:glue:region:account-id:table/s3tablescatalog/child catalog name/database name/table name`  例如：`arn:aws:glue:us-east-1:123456789012:table/s3tablescatalog/amzn-s3-demo-bucket1/nsdb1/s3tbl1`  | 
| 联合 S3 表目录（在 Lake Formation 中注册的单个表存储桶） | `arn:aws:glue:region:account-id:catalog`/*目录名称*  例如：`arn:aws:glue:us-east-1:123456789012:catalog/amzn-s3-demo-bucket1`  | 
| 联合 S3 表数据库  | `arn:aws:glue:region:account-id:catalog`/*目录名称*/*数据库名称* 例如：`arn:aws:glue:us-east-1:123456789012:database/amzn-s3-demo-bucket1/nsdb1`  | 
| 联合 S3 表 | `arn:aws:glue:region:account-id:catalog`/*目录名称*/*数据库名称*/*表名*  例如：`arn:aws:glue:us-east-1:123456789012:table/amzn-s3-demo-bucket1/nsdb1/s3tbl1`  | 
| 联合或托管目录（多目录中的顶级目录） |   `arn:aws:glue:region:account-id:catalog/top-level catalog name`  例如：`arn:aws:glue:us-east-1:123456789012:catalog/nscatalog` 托管目录的 ARN 格式遵循相同的结构。  | 
| 联合多级目录（多级目录中的子目录） |   `arn:aws:glue:region:account-id:catalog/top-level catalog name/child catalog name`  例如：`arn:aws:glue:us-east-1:123456789012:catalog/nscatalog/dbcatalog`  | 
| 联合数据库 |   `arn:aws:glue:region:account-id:database/name space catalog name/child catalog name/database name`  例如：`arn:aws:glue:us-east-1:123456789012:database/nscatalog/dbcatalog/schemadb`  | 
| 联合表 |   `arn:aws:glue:region:account-id:table/name space catalog name/child catalog name/database name/table name`  例如：`arn:aws:glue:us-east-1:123456789012:table/nscatalog/dbcatalog/schemadb/rstbl1`  | 
| 目录链接容器 | `arn:aws:glue:region:account-id:catalog`/*链接容器名称* 例如：`arn:aws:glue:glue:us-east-1:123456789012:catalog`/linkcontainer-examle   | 
| 数据库 | `arn:aws:glue:region:account-id:catalog`/*链接容器名称*/*数据库名称* 例如：`arn:aws:glue:glue:us-east-1:123456789012:database`/linkcontainer-example/link-db  | 
| 用户定义的函数 |  `arn:aws:glue:region:account-id:userDefinedFunction/database name/user-defined function name` 例如：`arn:aws:glue:us-east-1:123456789012:userDefinedFunction/db1/func1`  | 
| Connection |  `arn:aws:glue:region:account-id:connection/connection name` 例如：`arn:aws:glue:us-east-1:123456789012:connection/connection1`  | 
| 交互式会话 |  `arn:aws:glue:region:account-id:session/interactive session id` 例如：`arn:aws:glue:us-east-1:123456789012:session/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111`  | 

要启用精细访问控制，您可以在 IAM policy 和资源策略中使用这些 ARN 来授予或拒绝对特定资源的访问权限。允许在策略中使用通配符。例如，以下 ARN 与数据库 `default` 中的所有表匹配。

```
arn:aws:glue:us-east-1:123456789012:table/default/*
```

**重要**  
对数据目录资源执行所有操作都需要具有对该资源及其所有原级的权限。例如，要为一个表创建分区，需要具有该表的权限以及该表所在数据库和目录的权限。以下示例显示对数据目录中的数据库 `PrivateDatabase` 中的表 `PrivateTable` 创建分区所需的权限。  

```
{
   "Sid": "GrantCreatePartitions",
   "Effect": "Allow",
   "Action": [
       "glue:BatchCreatePartitions"
   ],
   "Resource": [
       "arn:aws:glue:us-east-1:123456789012:table/PrivateDatabase/PrivateTable",
       "arn:aws:glue:us-east-1:123456789012:database/PrivateDatabase",
       "arn:aws:glue:us-east-1:123456789012:catalog"
   ]
}
```
除了对资源及其所有原级的权限外，所有删除操作还需要具有该资源的所有子级的权限。例如，要删除一个数据库，您需要具有该数据库中的所有表和用户定义函数的权限，以及该数据库及其所在目录的权限。以下示例显示删除数据目录中的数据库 `PrivateDatabase` 所需的权限。  

```
{
   "Sid": "GrantDeleteDatabase",
   "Effect": "Allow",
   "Action": [
       "glue:DeleteDatabase"
   ],
   "Resource": [
       "arn:aws:glue:us-east-1:123456789012:table/PrivateDatabase/*",
       "arn:aws:glue:us-east-1:123456789012:userDefinedFunction/PrivateDatabase/*",
       "arn:aws:glue:us-east-1:123456789012:database/PrivateDatabase",
       "arn:aws:glue:us-east-1:123456789012:catalog"
   ]
}
```
概括来说，对数据目录资源的操作遵循以下权限规则：  
针对目录的操作只需要具有目录的权限。
针对数据库的操作需要具有数据库和目录的权限。
针对数据库的删除操作需要具有数据库和目录的权限，以及数据库中所有表和用户定义函数的权限。
针对表、分区或表版本的操作需要具有表、数据库和目录的权限。
针对用户定义的函数的操作需要具有用户定义的函数、数据库和目录的权限。
针对连接的操作需要具有连接和目录的权限。

## AWS Glue 中非目录对象的 ARN
<a name="non-catalog-resource-arns"></a>

有些 AWS Glue 资源允许资源级权限使用 ARN 来控制访问。您可以在 IAM policy 中使用这些 ARN 来启用精细访问控制。下表列出了可以包含资源 ARN 的资源。


| **资源类型**  |  **ARN 格式**  | 
| --- | --- | 
| 爬网程序 |  `arn:aws:glue:region:account-id:crawler/crawler-name` 例如：`arn:aws:glue:us-east-1:123456789012:crawler/mycrawler`  | 
| 任务 |  `arn:aws:glue:region:account-id:job/job-name` 例如：`arn:aws:glue:us-east-1:123456789012:job/testjob`  | 
| 触发器 |  `arn:aws:glue:region:account-id:trigger/trigger-name` 例如：`arn:aws:glue:us-east-1:123456789012:trigger/sampletrigger`  | 
| 开发终端节点 |  `arn:aws:glue:region:account-id:devEndpoint/development-endpoint-name` 例如：`arn:aws:glue:us-east-1:123456789012:devEndpoint/temporarydevendpoint`  | 
| 机器学习转换 |  `arn:aws:glue:region:account-id:mlTransform/transform-id` 例如：`arn:aws:glue:us-east-1:123456789012:mlTransform/tfm-1234567890`  | 

## AWS Glue 非目录单数 API 操作的访问控制
<a name="non-catalog-singular-apis"></a>

AWS Glue 非目录*单数* API 操作对单个项目（开发终端节点）执行。示例包括 `GetDevEndpoint`、`CreateUpdateDevEndpoint` 和 `UpdateDevEndpoint`。对于这些操作，策略必须将 API 名称放在 `"action"` 块中，将资源 ARN 放在 `"resource"` 块中。

假设您要允许用户调用 `GetDevEndpoint` 操作。以下策略将所需的最低权限授予名为 `myDevEndpoint-1` 的终端节点。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "MinimumPermissions",
      "Effect": "Allow",
      "Action": "glue:GetDevEndpoint",
      "Resource": "arn:aws:glue:us-east-1:111122223333:devEndpoint/myDevEndpoint-1"
    }
  ]
}
```

------

以下策略允许 `UpdateDevEndpoint` 访问用通配符 (\$1) 与 `myDevEndpoint-` 匹配的资源。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "PermissionWithWildcard",
      "Effect": "Allow",
      "Action": "glue:UpdateDevEndpoint",
      "Resource": "arn:aws:glue:us-east-1:111122223333:devEndpoint/myDevEndpoint-*"
    }
  ]
}
```

------

您可以合并两个策略，如以下示例所示。您可能会看到名称以 `A` 开头的任何开发终端节点的 `EntityNotFoundException`。不过，当您尝试访问其他开发终端节点时，将返回一个访问被拒绝错误。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CombinedPermissions",
      "Effect": "Allow",
      "Action": [
        "glue:UpdateDevEndpoint",
        "glue:GetDevEndpoint"
      ],
      "Resource": "arn:aws:glue:us-east-1:111122223333:devEndpoint/A*"
    }
  ]
}
```

------

## 检索多个项目的 AWS Glue 非目录 API 操作的访问控制
<a name="non-catalog-plural-apis"></a>

有些 AWS Glue API 操作检索多个项目（如多个开发终端节点）；例如，`GetDevEndpoints`。对于此操作，您可以仅指定通配符 (\$1) 资源，而不是特定的 ARN。

例如，要在策略中包含 `GetDevEndpoints`，资源的范围必须限定为通配符 (\$1)。单数操作（`GetDevEndpoint`、`CreateDevEndpoint` 和 `DeleteDevendpoint`）的范围也确定为示例中的所有 (\$1) 资源。

```
{
            "Sid": "PluralAPIIncluded",
            "Effect": "Allow",
            "Action": [
                "glue:GetDevEndpoints",
                "glue:GetDevEndpoint",
                "glue:CreateDevEndpoint",
                "glue:UpdateDevEndpoint"
            ],
            "Resource": [
                "*"
            ]
}
```

## AWS Glue 非目录 BatchGet API 操作的访问控制
<a name="non-catalog-batch-get-apis"></a>

有些 AWS Glue API 操作检索多个项目（如多个开发终端节点）；例如，`BatchGetDevEndpoints`。对于此操作，您可以指定一个 ARN 来限制可访问的资源的范围。

例如，要允许访问特定的开发终端节点，请将 `BatchGetDevEndpoints` 及其资源 ARN 包含在策略中。

```
{
            "Sid": "BatchGetAPIIncluded",
            "Effect": "Allow",
            "Action": [
                "glue:BatchGetDevEndpoints"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:123456789012:devEndpoint/de1" 
            ]
}
```

利用此策略，您可以成功访问名为 `de1` 的开发终端节点。但是，如果您尝试访问名为 `de2` 的开发终端节点，则会返回错误。

```
An error occurred (AccessDeniedException) when calling the BatchGetDevEndpoints operation: No access to any requested resource.
```

**重要**  
有关设置 IAM policy 的替代方法（例如，使用 `List` 和 `BatchGet` API 操作），请参阅 [适用于 AWS Glue 的基于身份的策略示例](security_iam_id-based-policy-examples.md)。

# 授予跨账户访问权限
<a name="cross-account-access"></a>

授予跨账户的数据目录资源访问权限，支持您提取、转换和加载（ETL）任务，以便从不同账户查询和联接数据。

**Topics**
+ [

## 用于在 AWS Glue 中授予跨账户访问权限的方法
](#cross-account-how-works)
+ [

## 添加或更新数据目录资源策略
](#cross-account-adding-resource-policy)
+ [

## 执行跨账户 API 调用
](#cross-account-calling)
+ [

## 执行跨账户 ETL 调用
](#cross-account-calling-etl)
+ [

## 跨账户 CloudTrail 日志记录
](#cross-account-ct-logs)
+ [

## 跨账户资源所有权和账单
](#cross-account-ownership-and-billing)
+ [

## 跨账户访问限制
](#cross-account-limitations)

## 用于在 AWS Glue 中授予跨账户访问权限的方法
<a name="cross-account-how-works"></a>

您可以使用 AWS Glue 方法或 AWS Lake Formation 跨账户授权，为外部 AWS 账户授予数据访问权限。AWS Glue 方法使用 AWS Identity and Access Management（IAM）policy，实现精细访问控制。Lake Formation 使用更简单的 `GRANT/REVOKE` 权限模型，类似于关系数据库系统中的 `GRANT/REVOKE` 命令。

本部分介绍如何使用 AWS Glue 方法。有关使用 Lake Formation 跨账户授权的信息，请参阅《AWS Lake Formation 开发人员指南》**中的[授予 Lake Formation 权限](https://docs.aws.amazon.com/lake-formation/latest/dg/lake-formation-permissions.html)。

有两种 AWS Glue 方法可用于授予跨账户资源访问权限：
+ 使用数据目录资源策略
+ 使用 IAM 角色

**使用资源策略授予跨账户访问权限**  
以下是使用数据目录资源策略授予跨账户访问权限的一般步骤：

1. 账户 A 中的管理员（或其他授权身份）将资源策略附加到账户 A 中的数据目录。此策略将向账户 B 授予对账户 A 的目录中的资源执行操作的具体跨账户权限。

1. 账户 B 中的管理员将一个 IAM policy 附加到账户 B 中的 IAM 身份，用于委托从账户 A 收到的权限。

   现在，账户 B 中的身份有权访问账户 A 中的指定资源。

   用户需要*同时*具有资源拥有者（账户 A）*及*其父账户（账户 B）授予的权限，才能访问资源。

**使用 IAM 角色授予跨账户访问权限**  
以下是使用 IAM 角色授予跨账户访问权限的一般步骤：

1. 账户中拥有资源（账户 A）的管理员（或其他授权身份）可创建一个 IAM 角色。

1. 账户 A 中的管理员会向该角色中附加一个策略，以授予用于访问所涉及资源的跨账户访问权限。

1. 账户 A 中的管理员将向该角色中附加一个信任策略，用于将其他账户（账户 B）中的 IAM 身份标识为可以担任该角色的委托人。

   如果您需要向 AWS 服务授予担任该角色的权限，则信任策略中的委托人也可以是 AWS 服务委托人。

1. 现在，账户 B 中的管理员向账户 B 中的一个或多个 IAM 身份委托权限，使其可以担任该角色。这样，账户 B 中的身份便可访问账户 A 中的资源。

有关使用 IAM 委派权限的更多信息，请参阅 *IAM 用户指南*中的[访问权限管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html)。有关用户、组、角色和权限的更多信息，请参阅 *IAM 用户指南*中的[身份（用户、组和角色）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)。

有关这两种方法的对比，请参阅 *IAM 用户指南*中的 [IAM 角色与基于资源的策略有何不同](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_compare-resource-policies.html)。AWS Glue 支持这两个选项，但存在限制，即资源策略只能授予对 Data Catalog 资源的访问权限。

例如，要向账户 B 中的 `Dev` 角色授予对账户 A 中的数据库 `db1` 的访问权限，请将以下资源策略附加到账户 A 中的目录。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:GetDatabase"
      ],
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:role/Dev"
        ]
      },
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1"
      ]
    }
  ]
}
```

------

此外，账户 B 还必须将以下 IAM policy 附加至 `Dev` 角色，然后才能实际访问账户 A 中的 `db1`。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:GetDatabase"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1"
      ]
    }
  ]
}
```

------

## 添加或更新数据目录资源策略
<a name="cross-account-adding-resource-policy"></a>

您可以使用控制台、API 或 AWS Command Line Interface（AWS CLI）添加或更新 AWS Glue 数据目录资源策略。

**重要**  
如果您已经使用 AWS Lake Formation 从您的账户授予跨账户权限，则添加或更新数据目录资源策略需要额外步骤。有关更多信息，请参阅 *AWS Lake Formation 开发人员指南*中的 [同时使用 AWS Glue 和 Lake Formation 管理跨账户权限](https://docs.aws.amazon.com/lake-formation/latest/dg/hybrid-cross-account.html)。  
要确定是否存在 Lake Formation 跨账户授权，请使用 `glue:GetResourcePolicies` API 操作或 AWS CLI。如果 `glue:GetResourcePolicies` 返回现有 Data Catalog 策略以外的任何策略，则存在 Lake Formation 授权。有关更多信息，请参阅 *AWS Lake Formation 开发人员指南*中的[使用 GetResourcePolicies API 操作查看所有跨账户授权](https://docs.aws.amazon.com/lake-formation/latest/dg/cross-account-getresourcepolicies.html)。

**添加或更新数据目录资源策略（控制台）**

1. 通过 [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 打开 AWS Glue 控制台。

   作为具有 `glue:PutResourcePolicy` 权限的 AWS Identity and Access Management（IAM）管理用户登录。

1. 在导航窗格中，选择 **Settings (设置)**。

1. 在 **Data catalog settings (数据目录设置)** 页面上的 **Permissions (权限)** 下面，将资源策略粘贴到文本区域。然后选择**保存**。

   如果控制台显示提示，指明策略中的权限不属于使用 Lake Formation 授予的权限，请选择 **Proceed (继续)**。

**添加或更新数据目录资源策略（AWS CLI）**
+ 提交 `aws glue put-resource-policy` 命令。如果 Lake Formation 授权已存在，请确保包含值为 `'TRUE'` 的 `--enable-hybrid` 选项。

  有关使用此命令的示例，请参阅 [AWS Glue 基于资源的策略示例](security_iam_resource-based-policy-examples.md)。

## 执行跨账户 API 调用
<a name="cross-account-calling"></a>

所有 AWS Glue Data Catalog 操作都有一个 `CatalogId` 字段。如果已授予所需的权限来启用跨账户访问，则发起人可以跨账户进行数据目录 API 调用。调用方通过传递 `CatalogId` 中的目标 AWS 账户 ID，以访问目标账户中的资源。

如果没有提供 `CatalogId` 值，AWS Glue 将默认使用调用方自己的账户 ID，但该调用不是跨账户调用。

## 执行跨账户 ETL 调用
<a name="cross-account-calling-etl"></a>

有些 AWS Glue PySpark 和 Scala API 具有目录 ID 字段。如果已授予启用跨账户访问所需的全部权限，ETL 任务可通过在目录 ID 字段中传递目标 AWS 账户 ID 来对 API 操作进行跨账户的 PySpark 和 Scala 调用，以访问目标账户中的数据目录资源。

如果没有提供目录 ID 值，AWS Glue 将默认使用调用方自己的账户 ID，但该调用不是跨账户调用。

对于支持 `catalog_id` 的 PySpark API，请参阅 [GlueContext 类](aws-glue-api-crawler-pyspark-extensions-glue-context.md)。对于支持 `catalogId` 的 Scala API，请参阅 [AWS Glue Scala GlueContext API](glue-etl-scala-apis-glue-gluecontext.md)。

以下示例显示被授权者运行 ETL 任务所需的权限。在此示例中，*grantee-account-id* 是运行作业的客户端的 `catalog-id`，*grantor-account-id* 是资源的拥有者。此示例用于授予对授予者账户中所有目录资源的权限。为限制所授予资源的范围，您可以提供目录、数据库、表和连接的特定 ARN。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:GetConnection",
        "glue:GetDatabase",
        "glue:GetTable",
        "glue:GetPartition"
      ],
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:root"
        ]
      },
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:*"
      ]
    }
  ]
}
```

------

**注意**  
如果授予者账户中的某个表指向同在该账户中的一个 Amazon S3 位置，则授予者账户中用于运行 ETL 任务的 IAM 角色必须有权列出和获取授予者账户中的对象。

如果账户 A 中的客户端已经获得创建和运行 ETL 作业的权限，则设置用于跨账户访问的 ETL 作业的基本步骤如下：

1. 允许跨账户数据访问（如果已设置 Amazon S3 跨账户访问权限，则可跳过此步骤）。

   1. 更新账户 B 中的 Amazon S3 存储桶策略，以允许来自账户 A 的跨账户访问

   1. 更新账户 A 中的 IAM policy，以允许访问账户 B 中的存储桶。

1. 允许跨账户数据目录访问。

   1. 创建或更新账户 B 中附加到数据目录的资源策略，以允许来自账户 A 的访问。

   1. 更新账户 A 中的 IAM policy，以允许访问账户 B 中的数据目录。

## 跨账户 CloudTrail 日志记录
<a name="cross-account-ct-logs"></a>

当 AWS Glue 提取、转换和加载（ETL）任务访问通过 AWS Lake Formation 跨账户授权分享的数据目录表的底层数据时，存在额外 AWS CloudTrail 日志记录行为。

为了本次讨论，共享表的 AWS 账户是拥有者账户，与该表的共享目标账户是收件人账户。当收件人账户中的 ETL 任务访问拥有者账户中表的数据时，添加到收件人账户日志中的数据访问 CloudTrail 事件将复制到拥有者账户的 CloudTrail 日志。这样，拥有者账户可以跟踪不同收件人账户的数据访问情况。默认情况下，CloudTrail 事件不包括人类可读的委托人标识符（委托人 ARN）。收件人账户中的管理员可以选择在日志中包含委托人 ARN。

有关更多信息，请参阅 *AWS Lake Formation 开发人员指南*中的[跨账户 CloudTrail 日志记录](https://docs.aws.amazon.com/lake-formation/latest/dg/cross-account-logging.html)。

**另请参阅**  
[AWS Glue 中的日志记录和监控](logging-and-monitoring.md)

## 跨账户资源所有权和账单
<a name="cross-account-ownership-and-billing"></a>

当一个 AWS 账户（账户 A）中的用户在其他账户（账户 B）中创建新资源（如数据库）时，该资源的所有者将为账户 B，即创建资源所在的账户。账户 B 中的管理员将自动获得访问这一新资源的完整权限，包括读取、写入和向第三个账户授予访问权限。账户 A 中的用户只有获得账户 B 授予的相应权限后，才能访问他们刚刚创建的资源。

与新资源直接关联的存储成本和其他成本将计入账户 B，即资源所有者。创建资源的用户的请求成本将计入请求者的账户，即账户 A。

 有关 AWS Glue 计费和定价的更多信息，请参阅 [AWS 定价原理](https://d0.awsstatic.com/whitepapers/aws_pricing_overview.pdf)。

## 跨账户访问限制
<a name="cross-account-limitations"></a>

AWS Glue 跨账户访问具有以下限制：
+ 如果您在区域支持 AWS Glue 之前已使用 Amazon Athena 或 Amazon Redshift Spectrum 创建数据库和表，并且资源拥有者账户尚未将 Amazon Athena 数据目录迁移至 AWS Glue，则不允许跨账户访问 AWS Glue。可以使用[GetCatalogImportStatus (get\$1catalog\$1import\$1status)](aws-glue-api-catalog-migration.md#aws-glue-api-catalog-migration-GetCatalogImportStatus)查找当前的迁移状态。有关如何将 Athena 目录迁移到 AWS Glue 的更多信息，请参阅 *Amazon Athena 用户指南*中的[按步骤升级到 AWS Glue Data Catalog](https://docs.aws.amazon.com/athena/latest/ug/glue-upgrade.html)。
+ *仅*数据目录资源（包括数据库、表、用户定义的函数和连接）支持跨账户访问。
+ 从 Athena 跨账户访问数据目录需要将目录注册为 Athena `DataCatalog` 资源。有关说明，请参阅 *Amazon Athena 用户指南*中的[从其他账户注册 AWS Glue Data Catalog](https://docs.aws.amazon.com/athena/latest/ug/data-sources-glue-cross-account.html)。

# 对 AWS Glue 身份和访问进行故障排除
<a name="security_iam_troubleshoot"></a>

使用以下信息可帮助您诊断和修复在使用 AWS Glue 和 IAM 时可能遇到的常见问题。

**Topics**
+ [

## 我无权在 AWS Glue 中执行操作
](#security_iam_troubleshoot-no-permissions)
+ [

## 我无权执行 iam:PassRole
](#security_iam_troubleshoot-passrole)
+ [

## 我希望允许我的 AWS 账户 以外的人访问我的 AWS Glue 资源
](#security_iam_troubleshoot-cross-account-access)

## 我无权在 AWS Glue 中执行操作
<a name="security_iam_troubleshoot-no-permissions"></a>

如果您收到错误提示，指明您无权执行某个操作，则必须更新策略以允许执行该操作。

当 `mateojackson` IAM 用户尝试使用控制台查看有关虚构 `my-example-widget` 资源的详细信息，但不拥有虚构 `glue:GetWidget` 权限时，会发生以下示例错误。

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: glue:GetWidget on resource: my-example-widget
```

在此情况下，必须更新 `mateojackson` 用户的策略，以允许使用 `glue:GetWidget` 操作访问 `my-example-widget` 资源。

如果您需要帮助，请联系 AWS 管理员。您的管理员是提供登录凭证的人。

## 我无权执行 iam:PassRole
<a name="security_iam_troubleshoot-passrole"></a>

如果您收到错误，表明您无权执行 `iam:PassRole` 操作，则必须更新策略以允许您将角色传递给 AWS Glue。

有些 AWS 服务 允许将现有角色传递到该服务，而不是创建新服务角色或服务关联角色。为此，您必须具有将角色传递到服务的权限。

当名为 `marymajor` 的 IAM 用户尝试使用控制台在 AWS Glue 中执行操作时，会发生以下示例错误。但是，服务必须具有服务角色所授予的权限才可执行此操作。Mary 不具有将角色传递到服务的权限。

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

在这种情况下，必须更新 Mary 的策略以允许她执行 `iam:PassRole` 操作。

如果您需要帮助，请联系 AWS 管理员。您的管理员是提供登录凭证的人。

## 我希望允许我的 AWS 账户 以外的人访问我的 AWS Glue 资源
<a name="security_iam_troubleshoot-cross-account-access"></a>

您可以创建一个角色，以便其他账户中的用户或您组织外的人员可以使用该角色来访问您的资源。您可以指定谁值得信赖，可以代入角色。对于支持基于资源的策略或访问控制列表（ACL）的服务，您可以使用这些策略向人员授予对您的资源的访问权。

要了解更多信息，请参阅以下内容：
+ 要了解 AWS Glue 是否支持这些功能，请参阅 [AWS Glue 如何与 IAM 协同工作](security_iam_service-with-iam.md)。
+ 要了解如何为您拥有的 AWS 账户中的资源提供访问权限，请参阅《IAM 用户指南》**中的[为您拥有的另一个 AWS 账户中的 IAM 用户提供访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)。
+ 要了解如何为第三方 AWS 账户 提供您的资源的访问权限，请参阅《IAM 用户指南》**中的[为第三方拥有的 AWS 账户 提供访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)。
+ 要了解如何通过身份联合验证提供访问权限，请参阅《IAM 用户指南》**中的[为经过外部身份验证的用户（身份联合验证）提供访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html)。
+ 要了解使用角色和基于资源的策略进行跨账户访问之间的差别，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。