Glueジョブのアクセス制御について
Glueジョブは定義時にIAMロールを指定するのでジョブ実行時はIAMロールのポリシーに従ってアクセス制御が行われます。
IAMではAWS管理のAWSGlueServiceRoleというポリシーがあります。このポリシーはGlueジョブ実行に必要となる一連のアクションを許可しているため、基本的にはこのポリシーをGlueジョブで使用するIAMロールにアタッチすることが多いかと思います。
ただし、Glueジョブでよく行われる処理であるS3バケットのデータを読み込み、加工を行ってS3バケットに書き込みを行うというケースを考えた場合にAWSGlueServiceRoleポリシーだけでは不十分で、入出力データがあるS3バケットに対する権限が別途必要になってきます。
図示すると以下のような構成の時にGlueジョブのIAMロールに追加するポリシーを整理してみました。
S3バケットにアクセスするときのポリシー
GlueジョブはApache Sparkが内部的には動作しており、S3へのアクセスはS3Aが使用されます。
Apache HadoopのドキュメントにS3AでRead/Writeするときに必要なアクションが記載されているので、これらのアクションを許可すれば良いことがわかります。
以下にGlueジョブのIAMロールに追加するポリシー例を記載します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:Get*",
"s3:Delete*",
"s3:Put*",
"s3:AbortMultipartUpload"
],
"Resource": [
"arn:aws:s3:::input-000011112222-bucket",
"arn:aws:s3:::input-000011112222-bucket/*",
"arn:aws:s3:::output-000011112222-bucket",
"arn:aws:s3:::output-000011112222-bucket/*",
"arn:aws:s3:::aws-glue-assets-000011112222-us-west-2",
"arn:aws:s3:::aws-glue-assets-000011112222-us-west-2/*"
]
},
{
"Effect": "Allow",
"Action": [
"lakeformation:GetDataAccess"
],
"Resource": "*"
}
]
}
ポリシー内容の補足をすると
- Apache Hadoopのドキュメントに記載のread/writeアクションをそのまま記載
- S3がKMS暗号化を行なっている場合はKMSのアクションも別途必要になってくると思います
- Resourceに関しては入出力対象のバケットとGlueのアセットを管理するバケットを記載
- Lake Formationを使用している環境に合わせてLake Formationのアクションを記載
お使いの環境に合わせて上記ポリシーを変更して利用いただけると良いかと思います。