背景
先日、AWS Glueジョブのスクリプトをコンソール上で誤って編集してしまい、処理が異常終了するというトラブルを経験しました。
スクリプトはGit+CI/CD経由でのみ更新する運用としていましたが、作業者の誤操作により、コンソール上のスクリプトが直接上書きされてしまったことが原因です。
この事故を防ぐために、制限(S3へのPutObject制御)を追加し、マネジメントコンソールからスクリプトを編集できないようにしました。
本記事では、その具体的な方法を紹介します。
結論
Glueジョブのスクリプト編集を防ぐには、以下の2つのアプローチが有効です。
- IAMポリシー:ユーザー/ロール単位で制御
- S3バケットポリシー:バケット単位で制御
でS3バケットへのPutObject操作を制限するのが有効です。
Glueジョブのスクリプトはサービス画面上で編集しているように見えますが、実際にはS3上のスクリプトファイルが更新されています。
そのため、S3への書き込みを抑止すれば、コンソールからの直接編集を防止できる仕組みです。
対策
後述のポリシー設定が有効に働くか確認するため、検証用のサンプルGlueジョブを作成します。

スクリプトにコメントを1行追加し、保存すると、問題なく変更が反映されます。
(現時点では制限なしの状態)

対策①:IAMポリシーで制御する
最もシンプルな方法は、マネジメントコンソールでGlueを操作するユーザー(またはそのロール)に付与しているIAMポリシーで、特定S3パスへの s3:PutObject を明示的に拒否する方法です。
以下のポリシーを、Glueジョブを閲覧するIAMユーザーやロールにアタッチします。
対象のバケット名はGlueジョブの「Job details」タブ→「Advanced properties」から確認できます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyPutObjectToGlueScriptsBucket",
"Effect": "Deny",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::aws-glue-assets-123456789012-ap-northeast-1/*"
}
]
}
このポリシーを適用した状態で、マネジメントコンソールからスクリプトを編集して保存すると、画像のようなエラーが出て変更が拒否されます。

対策②:S3バケットポリシーで制御する
IAM系のリソース操作が組織的に管理されている場合、IAMポリシーの作成や適用が制限されることもあります。
そのようなケースでは、S3バケットポリシーでアクセス制御を行うことが可能です。
以下のポリシーを、Glueジョブのスクリプトを格納しているS3バケットに設定します。
対象のバケット名は、Glueジョブの 「Job details」タブ →「Advanced properties」 から確認が可能です。
このポリシーでは、特定の文字列を含むロールに対して s3:PutObject を制限するポリシーとしています。
これにより、ユーザーが使用するロールには制限をかけつつ、CI/CD用のロールには影響を与えないように制御できます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyPutObjectIfRoleNameMatches",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::aws-glue-assets-123456789012-ap-northeast-1/*",
"Condition": {
"ArnLike": {
"aws:PrincipalArn": "arn:aws:iam::123456789012:role/*test-glue-job-user-role*"
}
}
}
]
}
このポリシーを適用した状態で、マネジメントコンソールからスクリプトを編集して保存すると、画像のようなエラーが出て変更が拒否されます。

補足:CLI経由での更新について
今回の設定により、Glueのマネジメントコンソール上では 「Save」ボタンを押しても更新が実行されなくなります。
スクリプトを含む「Job details」画面の内容を編集しても、S3への書き込みが拒否されるため保存できません。

一方で、CLI経由であればスクリプト以外のプロパティ値(例:DefaultArguments や WorkerType など)の更新は可能です。
たとえば、次のように update-job コマンドを実行すれば、コンソール画面上にもその変更内容が反映されます。
以下の例では、Job parametersに新しいデフォルト値 --FOO=bar を追加しています。
aws glue update-job \
--job-name test-glue-job \
--job-update "$(
aws glue get-job --job-name test-glue-job \
| jq -c '{
Command: .Job.Command,
Role: .Job.Role,
DefaultArguments: (.Job.DefaultArguments + {"--FOO":"bar"})
}'
)"
更新後にマネジメントコンソールの「Job details → Advanced properties → Job parameters」を確認すると、CLIで設定した内容が反映されていることがわかります。

もし、プロパティ値の変更も制限したい場合は、IAMポリシーで glue:UpdateJob アクションを拒否する必要があります。
まとめ
Glueジョブのスクリプトは実際にはS3上のファイルを更新しているため、PutObjectを制限することでコンソールからの誤編集を防止できます。
IAMポリシーやバケットポリシーを活用すれば、手動更新を抑止しつつ安全なCI/CD運用を実現可能です。
最後まで読んでいただき、ありがとうございました。
