AWS Glue での Amazon S3 Access Grants の使用
Glue バージョン 5.0 では、Amazon S3 Access Grants が提供するスケーラブルなアクセスコントロールソリューションにより、AWS Glue から Amazon S3 データへのアクセスが拡張されています。S3 データのアクセス許可設定が複雑または大規模である場合は、S3 Access Grants を使用して、ユーザーとロールの S3 データのアクセス許可をスケールできます。
S3 Access Grants を使用すると、AWS Glue ジョブにアクセスできる ID に関連付けられたランタイムロールまたは IAM ロールによって付与されるアクセス許可を超えたレベルまで、Amazon S3 データへのアクセスを拡張することができます。詳細については、「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 は特定のバケット、プレフィックス、またはオブジェクトを対象とする一時的な認証情報を提供します。
以下に、S3 Access Grants でアクセス管理されたデータに AWS Glue がアクセスする方法の概要を示します。
ユーザーが、Amazon S3 に保存されているデータを使用する AWS Glue Spark ジョブを送信します。
AWS Glue は、バケット、プレフィックス、またはオブジェクトへのアクセスを許可するユーザーの一時的な認証情報を S3 Access Grants に渡すようにリクエストします。
AWS Glue は一時的な認証情報を、そのユーザーの AWS セキュリティトークンサービス (STS) のトークン形式で返します。トークンのスコープは、S3 バケット、プレフィックス、またはオブジェクトへのアクセスを対象としています。
AWS Glue は STS トークンを使用して S3 からデータを取得します。
AWS Glue は S3 からデータを受け取り、結果をユーザーに返します。
AWS Glue での S3 Access Grants の使用に関する考慮事項
AWS Glue で S3 Access Grants を使用するときは、以下の動作と制限に注意してください。
機能のサポート
S3 Access Grants は、AWS Glue バージョン 5.0 以降でサポートされています。
AWS Glue で S3 Access Grants を使用する際にサポートされるジョブタイプは Spark のみです。
AWS Glue で S3 Access Grants を使用する際にサポートされるオープンテーブル形式は、Delta Lake と Hudi だけです。
以下の機能は、S3 Access Grants との使用においてはサポートされません。
Apache Iceberg テーブル
IAM ロールを使用する Amazon S3 に対する AWS CLI のリクエスト
オープンソースの 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 ポリシーを設定し、ジョブパラメータを介して設定を渡す必要があります。
付与に使用されるロール (セッションまたはジョブを実行する 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" ] } } }AWS Glue ジョブで、AWS Glue ジョブパラメータまたは
SparkConf
を使用して次の Spark 設定を渡します。--conf spark.hadoop.fs.s3.s3AccessGrants.enabled=true \ --conf spark.hadoop.fs.s3.s3AccessGrants.fallbackToIAM=false