Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
為什麼我的 AWS Glue 作業傳回「403 Access Denied」(403 存取遭拒) 錯誤?
當我的 AWS Glue 作業嘗試讀或/寫入 Amazon Simple Storage Service (Amazon S3) 儲存貯體時,作業會傳回「403 Access Denied」(403 存取遭拒) 錯誤。
簡短描述
以下範例是您可能收到「存取遭拒」錯誤的常見原因:
- AWS Identity and Access Management (IAM) 角色沒有存取儲存貯體所需的權限。
- Amazon S3 儲存貯體政策不允許 IAM 角色所需的權限。
- S3 儲存貯體擁有者與物件擁有者不同。
- Amazon Virtual Private Cloud (Amazon VPC) 端點政策不包含存取 S3 儲存貯體所需的權限。
- 此物件由 AWS Key Management Service (AWS KMS) 加密。AWS KMS 政策未授予 IAM 角色使用金鑰所需的最低權限。
- S3 儲存貯體已啟用請求者付費選項。
- AWS Organizations 服務控制政策限制對 S3 儲存貯體的存取。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
更新 IAM 角色權限以存取 S3 儲存貯體
執行 AWS Glue 作業的 IAM 角色需要存取 S3 儲存貯體。若要向 IAM 角色授予所需的權限,請將 IAM 政策附加到 IAM 角色。最佳做法是將 AWSGlueServiceRole 受管政策附加到 IAM 角色,以確認已提供基本的 AWS Glue 作業權限。此外,建立並附加客戶管理政策,以獲得在寫入時放置 S3 物件的權限。
若要更新 IAM 角色存取儲存貯體的權限,請完成下列步驟:
- 開啟 IAM console (IAM 主控台)。
- 開啟與 AWS Glue 作業關聯並需要存取儲存貯體的 IAM 角色。
- 在 IAM 使用者/角色的 Permissions (權限) 索引標籤中,展開每個政策以查看其 JSON 政策文件。
- 在 JSON 政策文件中,尋找具有儲存貯體名稱的政策。然後,確認這些政策允許在儲存貯體上執行正確的 S3 動作。如果 IAM 角色未授予對儲存貯體所需的存取權限,請新增政策以授予正確的權限。例如,下列 IAM 政策會授予 IAM 角色將物件 (s3:PutObject) 放入 S3 儲存貯體 DOC-EXAMPLE-BUCKET 的存取權限:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleStmt", "Action": "s3:PutObject", "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] } ] }
**注意:**將政策中的 DOC-EXAMPLE-BUCKET 替換為您 S3 儲存貯體的名稱。
更新儲存貯體政策以向 IAM 角色授予所需的權限
查看以下組態的儲存貯體政策:
- 任何明確拒絕 IAM 角色存取儲存貯體的陳述式
- 任何可能限制 IAM 角色存取的缺失權限和條件
若要檢視和修改儲存貯體政策以授予 IAM 角色所需的存取權,請完成下列步驟:
- 開啟 Amazon S3 console (Amazon S3 主控台)。
- 在導覽窗格中,選擇 Buckets (儲存貯體)。
- 選取 S3 儲存貯體。
- 在 Permissions (權限) 頁面的 Bucket policy (儲存貯體政策) 下,檢查儲存貯體政策中是否有任何拒絕角色存取儲存貯體的陳述式。
- 修改儲存貯體政策以編輯或刪除任何拒絕 IAM 角色存取儲存貯體的陳述式。
如需儲存貯體政策範例,請參閱 Amazon S3 儲存貯體政策範例。
更新物件的擁有者
預設情況下,上傳物件的 AWS 帳戶擁有 S3 物件。即使不同的帳戶擁有該儲存貯體,此設定仍然成立。如果其他帳戶可以將物件上傳到您的儲存貯體,請檢查哪個帳戶擁有您的 IAM 身分無法存取的物件。若要檢查哪個帳戶擁有該物件,請執行 GetObjectAcl 命令。
如果其他帳戶的 IAM 身分將物件上傳到您的 S3 儲存貯體,請設定 S3 物件擁有權。然後,新增一個儲存貯體政策,其要求使用 bucket-owner-full-control 存取控制清單 (ACL) 上傳物件。當您新增儲存貯體政策時,當使用 bucket-owner-full-control ACL 上傳物件時,該政策會自動將物件的擁有者變更為儲存貯體擁有者。如需詳細資訊,請參閱當其他 AWS 帳戶將物件上傳到我的 Amazon S3 儲存貯體時,我如何要求他們授予我對這些物件的完全控制權?
更新 Amazon VPC 端點政策
當以下兩個條件都成立時,更新 VPC 端點政策以包含存取 S3 儲存貯體和物件所需的權限:
- 您的 AWS Glue 作業會將物件讀取或寫入 Amazon S3。
- 此連線使用 VPC 端點路由到 Amazon S3。
例如,下列 VPC 端點政策僅允許存取儲存貯體 DOC-EXAMPLE-BUCKET。如果您的儲存貯體未在政策中列為允許的資源,則使用者或角色無法使用 VPC 端點存取您的儲存貯體:
{ "Statement": [ { "Sid": "Access-to-specific-bucket-only", "Principal": "*", "Action": [ "s3:PutObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }
**注意:**將政策中的 DOC-EXAMPLE-BUCKET 替換為您 S3 儲存貯體的名稱。
如果使用者或角色使用 ACL 上傳物件,則必須更新 VPC 端點政策以授予對 PutObjectAcl 動作的存取權。例如:
{ "Statement": [ { "Sid": "Access-to-specific-bucket-only", "Principal": "*", "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }
更新 AWS KMS 金鑰政策以允許存取 IAM 角色
如果您的擷取、轉換和載入 (ETL) 作業讀取或寫入加密資料到 Amazon S3,那麼您的作業必須具有以下組態:
- IAM 角色的政策包含 AWS KMS 動作所需的權限。
- AWS KMS 金鑰的政策包含 IAM 角色所需的權限。
若要允許必要的 AWS KMS 動作,請在 IAM 角色的政策中包含下列權限:
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } }
**注意:**將政策中的 Amazon Resource Name (ARN) 替換為您選擇的 ARN。
如需詳細資訊,請參閱在 AWS Glue 中設定加密。
檢閱 KMS 金鑰政策,以確認政策是否允許存取 AWS Glue 作業的角色。如需金鑰政策的詳細資訊,請參閱 AWS KMS 中的金鑰政策。
查看 S3 儲存貯體中的「請求者付費」選項
如果 S3 儲存貯體已啟用請求者付費選項,則來自 AWS Glue 作業的所有儲存貯體請求都必須包含請求者付費標頭。預設情況下,AWS Glue 向 Amazon S3 發出的請求不包含請求者付費標頭。如果沒有此標頭,則對請求者付費儲存貯體的 API 呼叫將失敗,並出現「存取遭拒」例外狀況。若要將請求者付費標頭新增至 ETL 指令碼,請使用 **hadoopConfiguration () .set () ** 將 fs.s3.useRequesterPaysHeader 新增至 GlueContext 變數或 Apache Spark 工作階段變數中。如需詳細資訊,請參閱如何從 AWS Glue、Amazon EMR 或 Athena 存取 Amazon S3 請求者付費儲存貯體?
檢視您的 AWS Organizations 服務控制政策
如果您使用 AWS Organizations,請檢查服務控制政策,以確保政策允許存取 Amazon S3。例如,以下政策明確拒絕存取 Amazon S3,並會導致「存取遭拒」錯誤:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:*", "Resource": "*" } ] }
如需詳細資訊,請參閱使用 AWS Organizations 為組織啟用所有功能。
