

# 调试细粒度访问控制 (FGAC) 作业和会话
<a name="debugging-fgac-jobs-sessions"></a>

**注意**  
借助此功能，您可以访问系统配置文件工作线程的日志，其中可能包含未经筛选的敏感信息。以下权限应仅用于访问非生产数据。对于访问生产数据的作业和会话，强烈建议您仅向管理员或具有更高数据访问权限的用户添加这些权限。

Amazon Glue 使用两个 Spark 资源配置文件运行启用了 Lake Formation 的作业或会话。用户配置文件运行您提供的代码，而系统配置文件强制执行 Lake Formation 策略。您可以随时访问作为用户配置文件运行的任务的日志。有关更多信息，请参阅 [日志记录](security-lf-troubleshooting.md#security-lf-troubleshooting-logging)。

要对系统配置文件中出现的故障进行故障排除，请使用 `GetSystemLogsForJobRun` 和 `GetSystemLogsForSession` API 操作。每个操作都会返回一个 `SystemLogsUrl` 值，该值是一个预签名的 Amazon S3 URL，它为您提供*系统日志*，即系统配置文件驱动程序为该作业运行或会话生成的日志。

预签名 URL 的有效期为 1 小时。您可以在作业运行或会话仍处于活动状态时调用这些操作。

## 先决条件
<a name="debugging-fgac-prerequisites"></a>

系统日志仅适用于满足以下所有要求的作业运行和会话：
+ 通过将 `--enable-lakeformation-fine-grained-access` 参数设置为 `true`，您可以启用细粒度访问控制。有关更多信息，请参阅 [将 Amazon Glue 与 Amazon Lake Formation 结合使用以进行精细访问控制](security-lf-enable.md)。
+ 作业或会话使用 Amazon Glue 版本 5.0 或更高版本。
+ 作业或会话是 Spark ETL 或 Spark 流式传输作业或会话。不支持 Ray 作业和 Python Shell 作业。

如果作业运行或会话未启用细粒度访问控制，则该操作将返回 `InvalidInputException`。

## 所需的权限
<a name="debugging-fgac-permissions"></a>

调试启用了 Lake Formation 的作业运行或会话的主体必须具有以下权限。账户中的所有数据库和表都需要 `glue:GetDatabases` 和 `glue:SearchTables` 权限。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AccessSystemLogs",
            "Effect": "Allow",
            "Action": [
                "glue:GetJob",
                "glue:GetJobRun",
                "glue:GetSession",
                "glue:GetSystemLogsForJobRun",
                "glue:GetSystemLogsForSession",
                "glue:GetDatabases",
                "glue:SearchTables"
            ],
            "Resource": [
                "arn:aws:glue:{{region}}:{{account-id}}:catalog",
                "arn:aws:glue:{{region}}:{{account-id}}:database/*",
                "arn:aws:glue:{{region}}:{{account-id}}:table/*/*",
                "arn:aws:glue:{{region}}:{{account-id}}:job/*",
                "arn:aws:glue:{{region}}:{{account-id}}:session/*"
            ]
        }
    ]
}
```

如果缺少这些权限中的任何一个，则该操作将返回一个 `AccessDeniedException`，并列出该缺少的操作。

## 检索系统日志
<a name="debugging-fgac-retrieving"></a>

要获取作业运行的系统日志，请使用作业名称和作业运行 ID 调用 `GetSystemLogsForJobRun`。

```
aws glue get-system-logs-for-job-run \
    --job-name {{my-fgac-job}} \
    --run-id {{jr_EXAMPLE1234567890}} \
    --region {{region}}
```

要获取会话的系统日志，请使用会话 ID 调用 `GetSystemLogsForSession`。

```
aws glue get-system-logs-for-session \
    --id {{my-fgac-session}} \
    --region {{region}}
```

这两个操作都会返回预签名 Amazon S3 URL。

```
{
    "SystemLogsUrl": "{{presigned-url}}"
}
```

打开 URL 获取日志。

## 使用客户托管密钥加密系统日志
<a name="debugging-fgac-encryption"></a>

要使用客户托管 Amazon KMS 密钥加密系统日志，请在创建作业或会话时将 `--system-logs-kms-key-arn` 参数设置为密钥的 ARN。

作业或会话运行时角色必须具有基于身份的策略，该策略可在密钥上授予 `kms:Encrypt`、`kms:Decrypt`、`kms:GenerateDataKey`、`kms:ReEncryptFrom`、`kms:ReEncryptTo` 和 `kms:DescribeKey`。仅凭授予这些权限的密钥策略是不够的。如果没有基于身份的策略，作业运行或会话将无法启动。

调用 `GetSystemLogsForJobRun` 或 `GetSystemLogsForSession` 的主体还必须具有密钥的 `kms:Decrypt`、`kms:DescribeKey` 和 `kms:GenerateDataKey`。否则，操作失败，系统会报告 Amazon KMS 权限缺失。

## 注意事项
<a name="debugging-fgac-considerations"></a>
+ 对于在与作业或会话相同的账户内访问 Lake Formation 中的数据库或表的作业和会话，可以查看系统日志。如果使用 Lake Formation 权限管理的数据目录具有跨账户数据库和表，或者具有资源链接，则它们不可见。
+ 作业运行或会话结束后，系统日志可能需要几分钟才能可用。如果日志为空，请再次调用该操作。
+ 预签名 URL 将在操作返回它后一小时过期。再次调用该操作以获取新 URL。