

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 資料表最佳化先決條件
<a name="optimization-prerequisites"></a>

資料表最佳化工具會假設您在為資料表啟用最佳化選項 （壓縮、快照保留和孤立檔案刪除） 時所指定的 AWS Identity and Access Management (IAM) 角色許可。可以為所有最佳化工具建立一個角色，或為每個最佳化工具建立單獨角色。

**注意**  
孤立檔案刪除最佳化工具不需要 `glue:updateTable` 或 `s3:putObject` 許可。快照過期和壓縮最佳化工具需要相同的許可集。

IAM 角色必須具有讀取資料和更新 Data Catalog 中繼資料的權限。您可以建立 IAM 角色，並連接下列內嵌政策：
+ 新增下列內嵌政策，為未註冊資料的位置授予 Amazon S3 讀取/寫入許可 AWS Lake Formation。此政策也包含更新 Data Catalog 中資料表的許可，以及允許 AWS Glue 在日誌中新增 Amazon CloudWatch 日誌和發佈指標的許可。針對 Amazon S3 中未向 Lake Formation 註冊的來源資料，存取權將由 Amazon S3 和 AWS Glue 動作的 IAM 權限政策決定。

  在下列內嵌政策中，請將 `bucket-name` 取代為 Amazon S3 儲存貯體名稱，將 `aws-account-id` 和 `region` 取代為有效的 AWS 帳號和 Data Catalog 的區域，將 `database_name` 取代為資料庫的名稱，以及將 `table_name` 取代為資料表的名稱。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "s3:PutObject",
                  "s3:GetObject",
                  "s3:DeleteObject"
              ],
              "Resource": [
                  "arn:aws:s3:::{{amzn-s3-demo-bucket}}/*"
              ]
          },
          {
              "Effect": "Allow",
              "Action": [
                  "s3:ListBucket"
              ],
              "Resource": [
                  "arn:aws:s3:::{{amzn-s3-demo-bucket}}"
              ]
          },
          {
              "Effect": "Allow",
              "Action": [
                  "glue:UpdateTable",
                  "glue:GetTable"
              ],
              "Resource": [
                  "arn:aws:glue:{{us-east-1}}:{{111122223333}}:table/{{<database-name>}}/{{<table-name>}}",
                  "arn:aws:glue:{{us-east-1}}:{{111122223333}}:database/{{<database-name>}}",
                  "arn:aws:glue:{{us-east-1}}:{{111122223333}}:catalog"
              ]
          },
          {
              "Effect": "Allow",
              "Action": [
                  "logs:CreateLogGroup",
                  "logs:CreateLogStream",
                  "logs:PutLogEvents"
              ],
              "Resource": [
                  "arn:aws:logs:{{us-east-1}}:{{111122223333}}:log-group:/aws-glue/iceberg-compaction/logs:*",
                  "arn:aws:logs:{{us-east-1}}:{{111122223333}}:log-group:/aws-glue/iceberg-retention/logs:*",
                  "arn:aws:logs:{{us-east-1}}:{{111122223333}}:log-group:/aws-glue/iceberg-orphan-file-deletion/logs:*"
              ]
          }
      ]
  }
  ```

------
+ 使用下列政策針對向 Lake Formation 註冊的資料啟用壓縮功能。

  如果最佳化角色沒有在資料表上授權的 `IAM_ALLOWED_PRINCIPALS` 群組許可，則該角色需要資料表的 Lake Formation `ALTER`、`DESCRIBE`、`INSERT` 和 `DELETE` 許可。

  如需有關向 Lake Formation 註冊 Amazon S3 儲存貯體的詳細資訊，請參閱[將 Amazon S3 位置新增至您的資料湖](https://docs.aws.amazon.com/lake-formation/latest/dg/register-data-lake.html)。

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "lakeformation:GetDataAccess"
        ],
        "Resource": "*"
      },
      {
        "Effect": "Allow",
        "Action": [
          "glue:UpdateTable",
          "glue:GetTable"
        ],
        "Resource": [
          "arn:aws:glue:{{us-east-1}}:{{111122223333}}:table/{{databaseName}}/{{tableName}}",
          "arn:aws:glue:{{us-east-1}}:{{111122223333}}:database/{{databaseName}}",
          "arn:aws:glue:{{us-east-1}}:{{111122223333}}:catalog"
        ]
      },
      {
        "Effect": "Allow",
        "Action": [
          "logs:CreateLogGroup",
          "logs:CreateLogStream",
          "logs:PutLogEvents"
        ],
        "Resource": [
          "arn:aws:logs:{{us-east-1}}:{{111122223333}}:log-group:/aws-glue/iceberg-compaction/logs:*",
          "arn:aws:logs:{{us-east-1}}:{{111122223333}}:log-group:/aws-glue/iceberg-retention/logs:*",
          "arn:aws:logs:{{us-east-1}}:{{111122223333}}:log-group:/aws-glue/iceberg-orphan-file-deletion/logs:*"
        ]
      }
    ]
  }
  ```

------
+ (選用) 若要使用[伺服器端加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)進行加密之 Amazon S3 儲存貯體中的資料來最佳化 Iceberg 資料表，則壓縮角色需要解密 Amazon S3 物件的權限，並產生新的資料金鑰以將物件寫入加密的儲存貯體。將下列政策新增至所需的 AWS KMS 金鑰。我們僅支援儲存貯體層級加密。

  ```
  {
      "Effect": "Allow",
      "Principal": {
          "AWS": "arn:aws:iam::{{<aws-account-id>}}:role/{{<optimizer-role-name>}}"
      },
      "Action": [
          "kms:Decrypt",
          "kms:GenerateDataKey"
      ],
      "Resource": "*"
  }
  ```
+  (選用) 針對向 Lake Formation 註冊的資料位置，用於註冊該位置的角色需要解密 Amazon S3 物件並產生新的資料金鑰以將物件寫入加密儲存貯體的權限。如需詳細資訊，請參閱[註冊加密的 Amazon S3 位置](https://docs.aws.amazon.com/lake-formation/latest/dg/register-encrypted.html)。
+ （選用） 如果 AWS KMS 金鑰存放在不同的 AWS 帳戶中，您需要包含壓縮角色的下列許可。

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

****  

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

------
+  您用來執行壓縮程序的角色必須具有該角色的 `iam:PassRole` 權限。

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

****  

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

------
+ 將下列信任政策新增至 AWS Glue 服務的角色，以擔任 IAM 角色來執行壓縮程序。

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Sid": "",
        "Effect": "Allow",
        "Principal": {
          "Service": "glue.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
      }
    ]
  }
  ```

------
+ <a name="catalog-optimizer-requirement"></a> （選用） 若要更新 Data Catalog 設定以啟用目錄層級資料表最佳化，所使用的 IAM 角色必須具有根目錄的 `glue:UpdateCatalog` 許可或 AWS Lake Formation `ALTER CATALOG` 許可。您可以使用 `GetCatalog` API 驗證目錄屬性。