即使我已設定所需的許可,我的 AWS Glue 任務也會因缺少 AWS Identity and Access Management (IAM) 許可錯誤而失敗。
解決方案
在 AWS Glue 中,您的動作可能會因為缺少許可錯誤而失敗,原因如下:
- 您使用的 IAM 使用者或角色沒有所需的許可。
- IAM 使用者是 AWS Organizations 中組織的一部分,該組織具有限制特定動作的服務控制政策 (SCP)
- 使用的子網路具有虛擬私有雲端 (VPC) 端點,且含有允許或拒絕某些動作的政策。
使用的 IAM 使用者或角色沒有所需的許可
請參閱這個缺少許可錯誤的範例:
"Failed to create job gluestudio-service.us-east-1.amazonaws.com] with exception "errorMessage":"User: arn:aws:sts::<AccountID>:assumed-role/<ConsoleAssumedRole>/<user> is not authorized to perform: iam:PassRole on resource: arn:aws:iam::<AccountID>:role/<GlueRoleName>"
您可以將此錯誤分解為三個因素:
- 呼叫動作的使用者/IAM 角色 - arn:aws:iam::111111111111111:role/service-role/AWSGlue-xxxxxx
- 動作 - iam:PassRole
- 正在執行動作的資源 - arn:aws:iam::xxxxxxxxxxxxxxxx:role/AWSGlue
檢查正在使用的使用者或 IAM 角色是否對資源執行所需的動作。
1. 開啟 IAM 主控台。
2. 搜尋您正在使用的使用者或 IAM 角色,然後檢查連接的政策。在上一個範例中,角色是 arn:aws:iam::xxxxxxxxx:user/yyyyyyyyyyy。
3. 新增與下列內容類似的內嵌政策,以允許對資源執行所需的動作:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "FirstStatement",
"Effect": "Allow",
"Action": ["Action"],
"Resource": "<ARN of resource>"
}
]
}
注意:將此範例中資源的動作和 ARN 替換為您先前從錯誤訊息中識別的特定動作和資源。
使用上一個範例,您的政策看起來與此內容相似:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PassRolePermissions",
"Effect": "Allow",
"Action": [
"iam:PassRole"
],
"Resource": [
"arn:aws:iam::<AccountID>:role/<GlueRoleName>"
],
"Condition": {
"StringLike": {
"iam:PassedToService": [
"glue.amazonaws.com"
]
}
}
}
]
}
組織的 SCP 正在阻止對資源執行動作
您可能會收到類似於以下內容的錯誤:
"createJob: AccessDeniedException: User: arn:aws:sts::111111111111111:assumed-role/xxxxxxxxxx is not authorized to perform: glue:CreateJob on resource: arn:aws:glue:region:22222222222222:job/glue-job with an explicit deny in a service control policy"
由於您的 IAM 使用者屬於設有 SCP 的組織的一部分,因此會擲回此錯誤。SCP 阻止您執行特定動作。若要檢查與 SCP 相關聯的許可,請依照下列步驟執行:
1. 開啟 IAM 主控台。
2. 選擇 Organization Activity (組織活動),然後選擇 Attached SCP (連接的 SCP) 標籤。
3. 檢閱連接到 IAM 使用者的 SCP。請確定您擁有對您正在使用的資源完成預期動作所需的許可。
使用的子網路具有 VPC 端點,且含有允許或拒絕某些動作的政策
您可能會收到類似於以下內容的錯誤:
"User: arn:aws:sts::1111111111:assumed-role/xxxxxxxxx/yyyyyyyyyyy is not authorized to perform: glue:CreateJob because no VPC endpoint policy allows the glue:CreateJob action (Service: Glue, Status Code: 400, Request ID:111111111111111)"
若要解決這個問題,請依照下列步驟執行:
1. 開啟 Amazon Virtual Private Cloud (Amazon VPC) 主控台。
2. 選擇 Endpoints (端點),然後選擇連接到您用來完成動作之子網路的 VPC 端點。
3. 在 Actions (動作) 下,選擇 Manage Policy (管理政策)。
4. 透過對所需資源執行預期動作,更新 VPC 端點政策。
在此範例中,您會更新新增動作 glue:CreateJob 所需的 VPC 端點政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Principal": "*",
"Effect": "Allow",
"Action": [
"glue:CreateJob"
],
"Resource": "*"
}
]
}
相關資訊
為 AWS Glue 建立 IAM 角色