跳至內容

如何授予另一個 AWS 帳戶中的使用者權限,使其能將物件上傳到我的 Amazon S3 儲存貯體?

2 分的閱讀內容
0

我想授予另一個 AWS 帳戶中的 AWS Identity and Access Management (IAM) 使用者,存取我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體的權限。此外,我想授予跨帳戶存取權,讓使用者可以將物件上傳到我的 Amazon S3 儲存貯體。

解決方法

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

若要授予另一個帳戶中的使用者將物件上傳至您 S3 儲存貯體的存取權,請更新使用者或其帳戶的 IAM 政策。最佳實務是透過帳戶控制存取權,並搭配儲存貯體擁有者強制執行物件擁有權

如果您的儲存貯體使用存取控制清單 (ACL),而不是儲存貯體擁有者強制執行擁有權,則請考慮使用 Amazon S3 組態 BucketOwnerEnforced,該組態會關閉 ACL。使用以下 get-bucket-ownership-controls 命令檢查您的儲存貯體是否使用 ACL:

aws s3api get-bucket-ownership-controls --bucket DOC-EXAMPLE-BUCKET

**注意:**將 DOC-EXAMPLE-BUCKET 替換為您的儲存貯體名稱。

如果輸出顯示 BucketOwnerPreferred 或 ObjectWriter,而不是 BucketOwnerEnforced,則您的儲存貯體會使用 ACL。跨帳戶上傳的物件由上傳者擁有,而非儲存貯體擁有者。

儲存貯體擁有者強制執行物件擁有權

若要在帳戶層級授予儲存貯體的存取權,請使用儲存貯體擁有者強制執行物件擁有權。使用以下步驟,授予帳戶 A 中的 IAM 使用者將物件上傳至帳戶 B 中 S3 儲存貯體的存取權:

  1. 在帳戶 A 中,為需要存取帳戶 B 儲存貯體的使用者建立 IAM 政策:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:PutObject",  
            "s3:ListBucket",  
            "s3:GetBucketLocation"
          ],
          "Resource": [
            "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
            "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
          ]
        }
      ]
    }

    **注意:**將 DOC-EXAMPLE-BUCKET 替換為您的儲存貯體名稱。

  2. 從帳戶 A 取得 IAM 使用者的 Amazon Resource Name (ARN)

  3. 從帳戶 B 建立儲存貯體政策,授予跨帳戶使用者上傳物件的權限:

    {
      "Version": "2012-10-17",
      "Statement": [
          {  
              "Sid": "CrossAccountUploadAccess",  
              "Effect": "Allow",  
              "Principal": {  
                  "AWS": "arn:aws:iam::111122223333:user/UploadData"  
              },  
              "Action": [  
                  "s3:PutObject"  
              ],  
              "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"  
          },  
          {  
              "Sid": "CrossAccountListAccess",  
              "Effect": "Allow",  
              "Principal": {  
                  "AWS": "arn:aws:iam::111122223333:user/UploadData"  
              },  
              "Action": [  
                  "s3:ListBucket",  
                  "s3:GetBucketLocation"  
              ],  
              "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"  
          }  
        ]
    }

    **注意:**對於 Principal 的值,請務必輸入帳戶 A 中 IAM 使用者的 ARN。將 DOC-EXAMPLE-BUCKET 替換為您的儲存貯體名稱。

ACL 強制執行物件擁有權

若要授予使用 ACL 強制執行物件擁有權的儲存貯體存取權,請在儲存貯體政策和 IAM 使用者政策中授予 PutObjectAcl 權限。

  1. 從帳戶 A,將政策連接至 IAM 使用者。該政策必須允許使用者在帳戶 B 中的儲存貯體上執行 PutObjectPutObjectAcl 動作:

    {    
      "Version": "2012-10-17",  
      "Statement": [  
        {  
          "Effect": "Allow",  
          "Action": [  
            "s3:PutObject",  
            "s3:PutObjectAcl",  
            "s3:ListBucket",  
            "s3:GetBucketLocation"  
          ],  
          "Resource": [  
            "arn:aws:s3:::DOC-EXAMPLE-BUCKET",  
            "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"  
          ]  
        }  
      ]  
    }

    **注意:**您必須具有 s3:PutObjectAcl 權限,才能指定上傳的 ACL。否則,當您使用 ACL 上傳物件時,會收到 Access Denied 錯誤,例如 bucket-owner-full control ACL。

  2. 從帳戶 B 附加一個儲存貯體政策,授予帳戶 A 中的 IAM 使用者執行 s3:PutObject 與 s3:PutObjectAcl 動作的權限:

    {  
      "Version": "2012-10-17",  
      "Statement": [  
          {  
              "Sid": "DelegateS3ObjectAccess",  
              "Effect": "Allow",  
              "Principal": {  
                  "AWS": "arn:aws:iam::999999999999:user/UploadData"  
              },    
              "Action": [  
                  "s3:PutObject",  
                  "s3:PutObjectAcl"  
               ],  
              "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"  
          },  
          {  
              "Sid": "DelegateS3BucketAccess",  
              "Effect": "Allow",  
              "Principal": {  
                  "AWS": "arn:aws:iam::111122223333:user/UploadData"  
              },  
                "Action": [  
                    "s3:ListBucket",  
                    "s3:GetBucketLocation"  
                ],  
                "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"  
            }  
        ]  
    }

相關資訊

範例 2: 儲存貯體擁有者授予跨帳戶儲存貯體權限

AWS 官方已更新 6 個月前