

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 範例 3：授予對其未擁有之物件的許可的儲存貯體擁有者
<a name="example-walkthroughs-managing-access-example3"></a>

**重要**  
將權限授予 IAM 角色比授予個別使用者更好。若要了解如何操作，請參閱 [了解跨帳戶許可和使用 IAM 角色](example-walkthroughs-managing-access-example4.md#access-policies-walkthrough-example4-overview)。

**Topics**
+ [步驟 0：準備演練](#access-policies-walkthrough-cross-account-acl-step0)
+ [步驟 1：執行帳戶 A 任務](#access-policies-walkthrough-cross-account-acl-acctA-tasks)
+ [步驟 2：執行帳戶 B 任務](#access-policies-walkthrough-cross-account-acl-acctB-tasks)
+ [步驟 3：測試許可](#access-policies-walkthrough-cross-account-acl-verify)
+ [步驟 4：清理](#access-policies-walkthrough-cross-account-acl-cleanup)

此範例的情況是儲存貯體擁有者想要授予物件存取許可，但儲存貯體擁有者未擁有儲存貯體中的所有物件。在此範例中，儲存貯體擁有者嘗試使用它自己的帳戶將許可授予使用者。

儲存貯 AWS 帳戶 體擁有者可以讓其他 上傳物件。預設情況下，儲存貯體擁有者不會擁有由另一個 AWS 帳戶寫入儲存貯體的物件。物件由將其寫入 S3 儲存貯體的帳戶擁有。如果儲存貯體擁有者未擁有儲存貯體中的物件，則物件擁有者必須先使用物件存取控制清單 (ACL) 將許可授予儲存貯體擁有者。然後，儲存貯體擁有者可以授予其未擁有的物件許可。如需詳細資訊，請參閱[Amazon S3 儲存貯體和物件擁有權](access-policy-language-overview.md#about-resource-owner)。

如果儲存貯體擁有者為儲存貯體套用儲存貯體擁有者強制執行的 S3 物件所有權設定，則儲存貯體擁有者會擁有儲存貯體中的所有物件，包括由另一個 AWS 帳戶寫入的物件。此方法可解決物件不屬於儲存貯體擁有者的問題。然後，您可以將許可委派給您自己帳戶中的使用者或其他 AWS 帳戶。

**注意**  
S3 物件擁有權是一項 Amazon S3 儲存貯體層級設定，您可以用來同時控制上傳至儲存貯體之物件的擁有權，以及停用或啟用 ACL。根據預設，物件擁有權設定為「儲存貯體擁有者強制執行」設定，而且所有 ACL 都會停用。停用 ACL 時，儲存貯體擁有者會擁有儲存貯體中的所有物件，並使用存取管理政策專門管理對這些物件的存取。  
 Amazon S3 中的大多數新式使用案例不再需要使用 ACL。建議您將 ACL 保持停用狀態，除非是在必須個別控制每個物件存取的情況。停用 ACL 後，您可以使用政策來控制對儲存貯體中所有物件的存取，無論是誰將物件上傳到您的儲存貯體。如需詳細資訊，請參閱[控制物件的擁有權並停用儲存貯體的 ACL](about-object-ownership.md)。

在此範例中，假設儲存貯體擁有者尚未套用儲存貯體擁有者強制執行的「物件擁有權」設定。儲存貯體擁有者向其自己帳戶中的使用者委派許可。以下是逐步解說步驟的摘要：

![\[儲存貯體擁有者授予其未擁有之物件的許可。\]](http://docs.aws.amazon.com/zh_tw/AmazonS3/latest/userguide/images/access-policy-ex3.png)


1. 帳戶 A 管理員使用者使用兩個陳述式來連接儲存貯體政策。
   + 允許帳戶 B 上傳物件的跨帳戶許可。
   + 允許其自己帳戶中的使用者存取儲存貯體中的物件。

1. 帳戶 B 管理員使用者將物件上傳至帳戶 A 所擁有的儲存貯體。

1. 帳戶 B 管理員會更新物件 ACL，以新增將物件完全控制許可給予儲存貯體擁有者的授予。

1. 帳戶 A 中的使用者會存取儲存貯體中的物件來進行驗證，而不管其擁有者為何。

在此範例中，您需要兩個帳戶。下表顯示如何參照這些帳戶與這些帳戶中的管理員使用者。在此演練中，您不會根據建議的 IAM 指導方針使用帳戶根使用者憑證。如需詳細資訊，請參閱[關於使用管理員使用者來建立資源並授予許可](example-walkthroughs-managing-access.md#about-using-root-credentials)。相反地，您可以在每個帳戶中建立管理員，並使用這些憑證來建立資源以及向其授予許可。


| AWS 帳戶 ID | 帳戶稱為 | 帳戶中的管理員  | 
| --- | --- | --- | 
|  *1111-1111-1111*  |  帳戶 A  |  AccountAadmin  | 
|  *2222-2222-2222*  |  帳戶 B  |  AccountBadmin  | 

所有建立使用者與授予許可的任務都是在 AWS 管理主控台完成。為了驗證許可，演練使用命令列工具 AWS Command Line Interface (AWS CLI) 和 AWS Tools for Windows PowerShell，因此您不需要撰寫任何程式碼。

## 步驟 0：準備演練
<a name="access-policies-walkthrough-cross-account-acl-step0"></a>

1. 請確定您有兩個 AWS 帳戶 ，而且每個帳戶都有一個管理員，如上一節的表格所示。

   1. 如有需要 AWS 帳戶，請註冊 。

   1. 使用帳戶 A 憑證登入 [IAM 主控台](https://console.aws.amazon.com/iam/)，然後執行下列步驟以建立管理員使用者：
      + 建立使用者 **AccountAadmin**，並記下使用者的安全憑證。如需有關新增使用者的詳細資訊，請參閱《*IAM 使用者指南》*中的[在您的 AWS 帳戶中建立 IAM 使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html)。
      + 連接給予完整存取權的使用者政策，以授予 **AccountAadmin** 管理員許可。如需說明，請參閱《IAM 使用者指南》**中的[管理 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html)。
      + 在 [IAM 主控台](https://console.aws.amazon.com/iam/)**儀表板**中，記下 **IAM 使用者登入 URL**。登入 AWS 管理主控台時，此帳戶中的使用者必須使用此 URL。如需詳細資訊，請參閱*《IAM 使用者指南》*中的[使用者如何登入您的帳戶](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_how-users-sign-in.html)。

   1. 使用帳戶 B 憑證重複前一個步驟，並建立管理員使用者 **AccountBadmin**。

1. 設定 AWS CLI 或 Tools for Windows PowerShell。請確定您如下所示儲存系統管理員憑證：
   + 如果使用 AWS CLI，請在組態檔案中建立兩個設定檔 `AccountBadmin``AccountAadmin`和 。
   + 如果使用 Tools for Windows PowerShell，請確定您將工作階段的憑證作為 `AccountAadmin` 和 `AccountBadmin` 來存放。

   如需說明，請參閱[為逐步解說設定工具](policy-eval-walkthrough-download-awscli.md)。

## 步驟 1：執行帳戶 A 任務
<a name="access-policies-walkthrough-cross-account-acl-acctA-tasks"></a>

針對帳號 A 執行以下步驟：

### 步驟 1.1：登入主控台
<a name="access-policies-walkthrough-cross-account-permissions-acctA-tasks-sign-in-example3"></a>

使用帳戶 A 的 IAM 使用者登入 URL，以**AccountAadmin**使用者 AWS 管理主控台 身分登入 。此使用者將建立儲存貯體並連接其政策。

### 步驟 1.2：建立儲存貯體和使用者，並新增授予使用者許可的儲存貯體政策
<a name="access-policies-walkthrough-cross-account-acl-create-bucket"></a>

1. 在 Amazon S3 主控台中建立儲存貯體。本練習假設儲存貯體是在美國東部 （維吉尼亞北部） 建立 AWS 區域，且名稱為 。 `amzn-s3-demo-bucket1`

   如需說明，請參閱[建立一般用途儲存貯體](create-bucket-overview.md)。

1. 在 [IAM 主控台](https://console.aws.amazon.com/iam/)中，建立使用者 **Dave**。

   如需逐步說明，請參閱《IAM 使用者指南》**中的[建立 IAM 使用者 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console)。

1. 記下使用者 Dave 的憑證。

1. 在 Amazon S3 主控台中，將下列儲存貯體政策連接至 `amzn-s3-demo-bucket1` 儲存貯體。如需說明，請參閱[使用 Amazon S3 主控台新增儲存貯體政策](add-bucket-policy.md)。遵循新增儲存貯體政策的步驟。如需如何尋找帳戶 IDs的資訊，請參閱[尋找您的 AWS 帳戶 ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html#FindingYourAccountIdentifiers)。

   政策會將 `s3:PutObject` 與 `s3:ListBucket` 許可授予帳戶 B。該政策也會將 `s3:GetObject` 許可授予使用者 `Dave`。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Statement1",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:root"
               },
               "Action": [
                   "s3:PutObject",
                   "s3:ListBucket"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket1/*",
                   "arn:aws:s3:::amzn-s3-demo-bucket1"
               ]
           },
           {
               "Sid": "Statement3",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:user/Dave"
               },
               "Action": [
                   "s3:GetObject"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket1/*"
               ]
           }
       ]
   }
   ```

------

## 步驟 2：執行帳戶 B 任務
<a name="access-policies-walkthrough-cross-account-acl-acctB-tasks"></a>

現在，帳戶 B 具有對帳戶 A 之儲存貯體執行操作的許可，帳戶 B 管理員會執行下列操作：
+ 將物件上傳至帳戶 A 的儲存貯體 
+ 在物件 ACL 中新增授權，以允許帳戶 A (儲存貯體擁有者) 具有完整控制權。

**使用 AWS CLI**

1. 使用 `put-object` AWS CLI 命令上傳物件。命令中的 -`--body` 參數會識別要上傳的來源檔案。例如，若檔案位於 Windows 電腦的 `C:` 磁碟機，請指定 `c:\HappyFace.jpg`。`--key` 參數提供物件的金鑰名稱。

   ```
   aws s3api put-object --bucket amzn-s3-demo-bucket1 --key HappyFace.jpg --body HappyFace.jpg --profile AccountBadmin
   ```

1. 新增物件 ACL 的授予許可，以允許儲存貯體擁有者可完全控制物件。如需如何尋找正式使用者 ID 的資訊，請參閱《AWS 帳戶管理參考指南》**中的[尋找 AWS 帳戶的正式使用者 ID](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html#FindCanonicalId)。

   ```
   aws s3api put-object-acl --bucket amzn-s3-demo-bucket1 --key HappyFace.jpg --grant-full-control id="AccountA-CanonicalUserID" --profile AccountBadmin
   ```

**使用 Tools for Windows PowerShell**

1. 使用 `Write-S3Object` 命令上傳物件。

   ```
   Write-S3Object -BucketName amzn-s3-demo-bucket1 -key HappyFace.jpg -file HappyFace.jpg -StoredCredentials AccountBadmin
   ```

1. 新增物件 ACL 的授予許可，以允許儲存貯體擁有者可完全控制物件。

   ```
   Set-S3ACL -BucketName amzn-s3-demo-bucket1 -Key HappyFace.jpg -CannedACLName "bucket-owner-full-control" -StoredCreden
   ```

## 步驟 3：測試許可
<a name="access-policies-walkthrough-cross-account-acl-verify"></a>

現在，驗證帳戶 A 中的使用者 Dave 可以存取帳戶 B 所擁有的物件。

**使用 AWS CLI**

1. 將使用者 Dave AWS CLI 登入資料新增至組態檔案，並建立新的設定檔 `UserDaveAccountA`。如需詳細資訊，請參閱[為逐步解說設定工具](policy-eval-walkthrough-download-awscli.md)。

   ```
   [profile UserDaveAccountA]
   aws_access_key_id = access-key
   aws_secret_access_key = secret-access-key
   region = us-east-1
   ```

1. 執行 `get-object` CLI 命令來下載 `HappyFace.jpg`，並將其儲存在本機。您可以新增 `--profile` 參數，來提供使用者 Dave 憑證。

   ```
   aws s3api get-object --bucket amzn-s3-demo-bucket1 --key HappyFace.jpg Outputfile.jpg --profile UserDaveAccountA
   ```

**使用 Tools for Windows PowerShell**

1. 將使用者 Dave AWS 登入資料以 的形式`UserDaveAccountA`儲存至持久性存放區。

   ```
   Set-AWSCredentials -AccessKey UserDave-AccessKey -SecretKey UserDave-SecretAccessKey -storeas UserDaveAccountA
   ```

1. 執行 `Read-S3Object` 命令來下載 `HappyFace.jpg` 物件，並將其儲存在本機。您可以新增 `-StoredCredentials` 參數，來提供使用者 Dave 憑證。

   ```
   Read-S3Object -BucketName amzn-s3-demo-bucket1 -Key HappyFace.jpg -file HappyFace.jpg  -StoredCredentials UserDaveAccountA
   ```

## 步驟 4：清理
<a name="access-policies-walkthrough-cross-account-acl-cleanup"></a>

1. 完成測試之後，您可以執行下列步驟進行清除：

   1. 使用帳戶 A 憑證登入 [AWS 管理主控台](https://console.aws.amazon.com/)，並執行下列操作：
     + 在 Amazon S3 主控台中，移除連接至 *amzn-s3-demo-bucket1* 的儲存貯體政策。在儲存貯體 **Properties** (屬性) 中，刪除 **Permissions** (許可) 區段中的政策。
     + 如果儲存貯體是為此練習而建立，請在 Amazon S3 主控台中刪除物件，然後刪除儲存貯體。
     + 在 [IAM 主控台](https://console.aws.amazon.com/iam/)中，移除 **AccountAadmin** 使用者。如需逐步說明，請參閱《IAM 使用者指南》**中的[刪除 IAM 使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html#id_users_deleting)。

1. 使用帳戶 B 憑證登入 [AWS 管理主控台](https://console.aws.amazon.com/)。在 [IAM 主控台](https://console.aws.amazon.com/iam/)中，刪除使用者 **AccountBadmin**。