將 Amazon S3 存取授權與 AWS Glue 搭配使用 - AWS Glue

將 Amazon S3 存取授權與 AWS Glue 搭配使用

使用 Glue 5.0 版,Amazon S3 存取授權提供可擴展的存取控制解決方案,您可以使用其來增強從 AWS Glue 對 Amazon S3 資料的存取權限。如果您的 S3 資料有複雜或大型的許可組態,您可以使用 S3 Access Grants 來擴展使用者和角色的 S3 資料許可。

使用 S3 Access Grants 可增強對 Amazon S3 資料的存取權限,超越由執行期角色或連接至有權存取 AWS Glue 作業之身分的 IAM 角色所授予的許可。如需詳細資訊,請參閱《Amazon S3 使用者指南》中的使用 S3 Access Grants 管理存取

AWS Glue 與 S3 Access Grants 一起運作的方式

AWS Glue 5.0 及更高版本提供與 S3 Access Grants 的原生整合。您可以在 AWS Glue 上啟用 S3 Access Grants,並執行 Spark 作業。當 Spark 作業提出 S3 資料請求時,Amazon S3 會提供僅限於特定儲存貯體、字首或物件的臨時憑證。

以下是 AWS Glue 如何存取受 S3 Access Grants 管理其存取權之資料的高階概觀。

圖表顯示 AWS Glue 如何存取受 S3 Access Grants 管理其存取權之資料的高階概觀。
  1. 使用者會提交使用存放在 Amazon S3 中之資料的 AWS Glue Spark 作業。

  2. AWS Glue 請求 S3 Access Grants 為有權存取儲存貯體、字首或物件的使用者提供臨時憑證。

  3. AWS Glue 會以 AWS Security Token Service (STS) 字符形式為使用者傳回臨時憑證。權杖的範圍設定為存取 S3 儲存貯體、字首或物件。

  4. AWS Glue 會使用 STS 字符,從 S3 擷取資料。

  5. AWS Glue 會從 S3 接收資料,並將結果傳回給使用者。

S3 Access Grants 與 AWS Glue 搭配的考量事項

將 S3 Access Grants 與 AWS Glue 搭配使用時,請注意以下行為和限制。

功能支援

  • AWS Glue 5.0 版和更新版本支援 S3 Access Grants。

  • 當您將 S3 Access Grants 與 AWS Glue 搭配使用時,Spark 是唯一支援的任務類型。

  • 當您將 S3 Access Grants 與 AWS Glue 搭配使用時,支援的開放式資料表格式僅有 Delta Lake 和 Hudi。

  • 以下功能不支援與 S3 Access Grants 搭配使用:

    • Apache Iceberg 資料表

    • 對 Amazon S3 的 AWS CLI 請求 (使用 IAM 角色)

    • 透過開放原始碼 S3A 通訊協定進行 S3 存取

行為考量事項

  • AWS Glue 會提供憑證快取,以確保使用者無需在 Spark 作業中針對相同憑證提出重複請求。因此,AWS Glue 在請求憑證時一律會請求預設層級權限。如需詳細資訊,請參閱《Amazon S3 使用者指南》中的請求存取 S3 資料

使用 AWS Glue 設定 S3 Access Grants

先決條件

呼叫者或管理員已建立 S3 Access Grants 執行個體。

設定 AWS Glue 政策和任務組態

若要使用 AWS Glue 設定 S3 Access Grants,您必須設定信任政策和 IAM 政策,並透過任務參數傳遞組態。

  1. 針對用於授權的角色 (執行工作階段或任務的 AWS Glue 角色),設定下列最低信任政策和 IAM 政策。

    信任政策:

    { "Sid": "Stmt1234567891011", "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity", "sts:SetContext" ], "Effect": "Allow", "Principal": { "Service": "access-grants.s3.amazonaws.com" }, "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012", "aws:SourceArn": "arn:aws:s3:<region>:123456789012:access-grants/default" } } }

    IAM 政策:

    { "Sid": "S3Grants", "Effect": "Allow", "Action": [ "s3:GetDataAccess", "s3:GetAccessGrantsInstanceForPrefix" ], "Resource": "arn:aws:s3:<region>:123456789012:access-grants/default" }, { "Sid": "BucketLevelReadPermissions", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "123456789012" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": [ "arn:aws:s3:<region>:123456789012:access-grants/default" ] } } }, { "Sid": "ObjectLevelReadPermissions", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion", "s3:GetObjectAcl", "s3:GetObjectVersionAcl", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:s3:::*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "123456789012" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": [ "arn:aws:s3:<region>:123456789012:access-grants/default" ] } } }
  2. 在您的 AWS Glue 任務中,透過 AWS Glue 任務參數或 SparkConf 傳遞下列 Spark 組態。

    --conf spark.hadoop.fs.s3.s3AccessGrants.enabled=true \ --conf spark.hadoop.fs.s3.s3AccessGrants.fallbackToIAM=false