為什麼我的 IAM 使用者即使在 Lake Formation 中許可受到限制之後,仍然可以存取 Data Catalog 資源?

2 分的閱讀內容
0

我限制了 AWS Lake Formation 中使用者的資料表許可 (例如,含有 ExcludedColumnNames 的 SELECT)。但是,使用者仍然可以使用 Amazon Athena 查詢資料表。

簡短描述

依預設,Lake Formation 會向 IAMAllowedPrincipals 群組授與超級許可。此許可適用於所有現有的 AWS Glue Data Catalog 資源。如果啟用僅使用 IAM 存取控制,則 Lake Formation 也會授與對新資源的超級許可。這意味著 AWS Identity and Access Management (IAM) 政策控制對 Data Catalog 資源和 Amazon Simple Storage Service (Amazon S3) 位置的存取。如需詳細資訊,請參閱關於升級至 Lake Formation 許可模型

若要限制存取,請變更預設設定,以確保您使用 Lake Formation 許可模型來處理新的和現有的 Data Catalog 資源。

解決方法

若要更新資料湖中所有新資料庫和資料表的安全設定,請參閱變更 Data Catalog 設定

若要僅更新特定新資源的安全設定,請建立資源,然後僅更新對該資源的許可。如需詳細資訊,請參閱保護現有 Data Catalog 資源

預設安全設定中的變更僅適用於更新安全設定之後建立的資源。

若要變更現有資料庫的安全設定,請執行下列操作來明確移除每個資料庫上 IAMAllowedPrincipals 中的許可:

  1. 開啟 AWS Lake Formation 主控台
  2. 在導覽窗格的 Data Catalog下,選擇資料庫
  3. 選取您要更新的資料庫旁邊的圓圈。
  4. 選擇動作,然後選擇編輯
  5. 新建立的資料表的預設許可下,清除僅對此資料庫中的新資料表使用 IAM 存取控制
  6. 選擇儲存
  7. 資料庫頁面上,確保已選取資料庫。選擇動作,然後選擇撤銷
  8. 撤銷許可對話方塊的 IAM 使用者和角色清單中,向下捲動至群組標題,然後選擇 IAMAllowedPrincipals
  9. 資料庫許可下,確保已選取超級,然後選擇撤銷

若要變更現有資料表的安全設定,請執行下列操作來明確移除每個資料表上 IAMAllowedPrincipals 中的許可:

  1. 開啟 AWS Lake Formation 主控台
  2. 在瀏覽窗格中,選擇資料表
  3. 資料表頁面上,選取您要更新的資料表旁邊的圓圈。
  4. 選擇動作,然後選擇撤銷
  5. 撤銷許可對話方塊的 IAM 使用者和角色清單中,向下捲動至群組標題,然後選擇 IAMAllowedPrincipals
  6. 資料表許可下,確保已選取超級,然後選擇撤銷

**注意:**請確保資料庫或資料表的 Amazon S3 路徑已在 Lake Formation 中註冊

在變更現有資源的安全設定之後,向 IAM 使用者或角色授與資料表許可。您可以使用 Lake Formation 主控台或 AWS Command Line Interface (AWS CLI) 執行此操作。

**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請確保您使用的是最新的 AWS CLI 版本

以下是針對特定資料欄授與 SELECT 許可的 CLI 命令的範例:

對特定資料欄僅允許 SELECT:

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "SELECT"  --resource '{ "TableWithColumns": {"DatabaseName":"retail", "Name":"inventory", "ColumnNames": ["prodcode","location","period","withdrawals"]}}'

排除資料欄 (對除了在 ExcludedColumnNames 下指定的資料欄以外的所有資料欄都允許 SELECT):

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "SELECT"  --resource '{ "TableWithColumns": {"DatabaseName":"retail", "Name":"inventory", "ColumnWildcard": {"ExcludedColumnNames": ["location"]}}}'

若要執行 Lake Formation 操作,主體必須具有 Lake Formation 和 IAM 許可。除此之外,若要在 Athena 中查詢資料表,使用者還必須具有執行 Athena 查詢的許可。例如,若要在 Lake Formation 管理許可時從 Athena 查詢資料表,使用者必須具有下列 IAM 許可:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "minimumAWSGlueLakeFormationAthenapermissiontorunselectqueryontable",
            "Effect": "Allow",
            "Action": [
                "lakeformation:GetDataAccess",
                "glue:SearchTables",
                "glue:GetTables",
                "glue:GetPartitions",
                "glue:GetDatabases",
                "glue:GetTable",
                "glue:GetDatabase",
                "athena:GetNamespace",
                "athena:ListWorkGroups",
                "athena:GetCatalogs",
                "athena:GetNamespaces",
                "athena:GetExecutionEngine",
                "athena:GetExecutionEngines",
                "athena:GetTables",
                "athena:GetTable"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AthenaPermissionToRunQueryInAWorkergroup",
            "Effect": "Allow",
            "Action": [
                "athena:StartQueryExecution",
                "athena:GetQueryResults",
                "athena:DeleteNamedQuery",
                "athena:GetNamedQuery",
                "athena:ListQueryExecutions",
                "athena:StopQueryExecution",
                "athena:GetQueryResultsStream",
                "athena:ListNamedQueries",
                "athena:CreateNamedQuery",
                "athena:GetQueryExecution",
                "athena:BatchGetNamedQuery",
                "athena:BatchGetQueryExecution"
            ],
            "Resource": [
                "arn:aws:athena:*:*:workgroup/*"
            ]
        },
        {
            "Sid": "allowS3PermissionToSaveAthenaQueryResults",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucketMultipartUploads",
                "s3:AbortMultipartUpload",
                "s3:CreateBucket",
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListMultipartUploadParts"
            ],
            "Resource": [
                "arn:aws:s3:::aws-athena-query-results-*"
            ]
        }
    ]
}

相關資訊

變更資料湖的預設安全設定

AWS 官方
AWS 官方已更新 3 年前