跳至內容

其他 AWS 帳戶的 IAM 使用者嘗試存取我的 Amazon S3 儲存區時出現「存取遭拒」錯誤,如何對此問題進行疑難排解?

3 分的閱讀內容
0

我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體政策授予另一個 AWS 帳戶完整存取權。但是,當其他帳戶的 AWS Identity and Access Management (IAM) 使用者嘗試存取我的儲存貯體時,他們會收到「存取遭拒」錯誤。

簡短描述

如果您的儲存貯體政策已授予其他帳戶存取權,則跨帳戶使用者可能會因以下原因收到存取遭拒錯誤:

  • 使用者的 IAM 政策未授予對儲存貯體的存取權。
  • 您已使用 AWS Key Management Service (KMS) 加密物件,而使用者無權存取 AWS KMS key。
  • 儲存貯體政策或 IAM 政策中的 Deny 陳述式封鎖使用者的存取。
  • Amazon Virtual Private Cloud (Amazon VPC) 端點政策封鎖對儲存貯體的存取。
  • AWS Organizations 服務控制政策 (SCP) 封鎖對儲存貯體的存取。
  • 物件不屬於擁有該儲存貯體的帳戶。
  • 您已為 Amazon S3 儲存貯體啟用了請求者付款
  • 您已傳遞封鎖存取儲存貯體的工作階段政策

解決方法

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

使用者的 IAM 政策未授予對儲存貯體的存取權

對於跨帳户存取權,請確定您在使用者帳戶中的 IAM 政策和您帳戶的儲存貯體政策中,授予儲存貯體存取權。

若要將儲存貯體權限新增至使用者帳戶中的 IAM 政策,請完成下列步驟:

  1. 開啟 IAM console (IAM 主控台)。
  2. 在導覽窗格中,選取無法存取儲存貯體的 IAM 使用者或角色。
  3. Permissions policies (權限政策) 中展開各個政策,以檢視其 JSON 政策文件。
  4. 在包含儲存貯體名稱的 JSON 政策文件中,請確認政策是否允許對儲存貯體執行正確的 S3 動作。
  5. 如果 IAM 使用者或角色未授予對儲存貯體的存取權,請新增授予正確權限的政策
    以下 IAM 政策範例授予使用者從 DOC-EXAMPLE-BUCKET 下載 GetObject 請求中物件的權限:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "ExampleStmt",
                "Action": "s3:GetObject",
                "Effect": "Allow",
                "Resource": [
                    "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
                ]
            }
        ]
    }

**注意:**如果您使用執行個體設定檔承擔角色,請確定您的政策具有正確的權限。

您使用 AWS KMS 加密物件

如果 IAM 政策 和儲存貯體政策都授予跨帳戶存取權,請檢查儲存貯體是否使用 AWS KMS 預設加密。或者,檢查物件屬性是否有使用 AWS KMS 加密。如果您使用 KMS key 加密了物件,則使用者也必須具有使用金鑰的權限。

若要授與 IAM 使用者下載並上傳至儲存貯體並使用 AWS KMS key 的權限,請完成下列步驟:

  1. 編輯 KMS key 政策以新增下列陳述式:

    {
        "Sid": "ExampleStmt",
        "Action": [
            "kms:Decrypt",
            "kms:GenerateDataKey"
        ],
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::111122223333:user/Jane"
        },
        "Resource": "*"
    }

    **注意:**將範例 ARN 替換為您主體的 ARN。

  2. 如果 AWS KMS key 屬於 IAM 使用者的帳戶,則不需要更新金鑰政策。如果 AWS KMS key 屬於您的帳戶,則必須更新 IAM 使用者的權限才能新增下列 IAM 政策聲明:

    {
        "Sid": "KMSAccess",
        "Action": [
            "kms:Decrypt",
            "kms:GenerateDataKey"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
    }

    **注意:**將範例 KMS key 的 ARN 替換為您 KMS key 的 ARN。

如需詳細資訊,請參閱為什麼跨帳戶使用者在嘗試存取我使用 AWS KMS 客戶自管金鑰加密的 S3 物件時,會收到拒絕存取錯誤?

政策中的 Deny 陳述式會封鎖使用者的存取

檢查儲存貯體政策和使用者的 IAM 政策,找出是否有明確拒絕使用者存取儲存貯體的陳述式。

若要檢查儲存貯體政策,請完成以下步驟:

  1. 開啟 Amazon S3 console (Amazon S3 主控台)。
  2. 在儲存貯體清單中,選取您想檢查政策的儲存貯體。
  3. 選擇 Permissions (權限) 索引標籤。
  4. Bucket policy (儲存貯體政策) 中,檢查具有 "Effect": "Deny" 的陳述式。
  5. 修改儲存貯體政策,以移除任何拒絕使用者存取儲存貯體的 "Effect": "Deny" 陳述式。

若要檢查使用者的 IAM 政策,請完成下列步驟:

  1. 開啟 IAM console (IAM 主控台)。
  2. 在導覽窗格中,選取無法存取儲存貯體的 IAM 使用者或角色。
  3. Permissions policies (權限政策) 中,展開每個政策以檢視 JSON 政策文件。
  4. 在與 S3 儲存貯體相關的 JSON 政策文件中,檢查包含 "Effect": "Deny" 的陳述式。
  5. 修改使用者的 IAM 權限策略,以移除拒絕使用者存取儲存貯體的 "Effect": "Deny" 陳述式。

VPC 端點政策會封鎖對儲存貯體的存取

如果使用者透過 VPC 端點存取具有 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體的儲存貯體,請檢查 VPC 端點政策。確認 VPC 端點政策是否包含存取 S3 儲存貯體的正確權限。

以下 VPC 端點政策範例允許存取 DOC-EXAMPLE-BUCKET

{
    "Id": "Policy1234567890123",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1234567890123",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
                "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
            ],
            "Principal": "*"
        }
    ]
}

**警告:**元素 "Principal": "*" 會授予每個人使用 VPC 端點存取儲存貯體的權限。請務必根據您的使用案例,限制 Principal (主體) 值的範圍。

組織 SCP 封鎖對儲存貯體的存取

如果使用者的帳戶使用「組織」,請檢查 SCP 中是否有 Deny 陳述式封鎖對該儲存貯體的存取。

下列範例政策明確拒絕對 Amazon S3 的存取:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}

物件不屬於擁有該儲存貯體的 AWS 帳戶

預設情況下,上傳物件的帳戶擁有該物件,即使該儲存貯體是由另一個帳戶擁有。儲存貯體的權限不會自動套用至其他帳戶擁有的物件。

若要解決 S3 物件擁有權的存取遭拒錯誤,請使用下列最佳做法:

您已開啟「請求者付款」

如果您已為儲存貯體啟用請求者付費,則其他帳戶的使用者必須指定 x-amz-request-payer 參數。

使用者必須執行下列動作:

  • 對於 DELETEGETHEADPOSTPUT 請求,請在標頭中包含 x-amz-request-payer : requester
  • 對於已簽署網址,請在請求中包含 x-amz-request-payer=requester
  • 對於 AWS CLI 命令,請包含 --request-payer 參數:
    aws s3 cp exampleobject.jpg s3://DOC-EXAMPLE-BUCKET/exampleobject.jpg --request-payer requester
    

工作階段政策封鎖了對儲存貯體的存取

請確認您傳遞的工作階段政策不會封鎖對 S3 儲存貯體的存取。

相關資訊

如何對來自 Amazon S3 的「403 存取遭拒」錯誤進行疑難排解?

有權向我的 Amazon S3 儲存貯體新增物件的使用者收到了「存取遭拒」錯誤。為何會如此?

AWS 官方已更新 9 個月前