

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

# 範例 2：授予跨帳戶儲存貯體許可的儲存貯體擁有者
<a name="example-walkthroughs-managing-access-example2"></a>

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

**Topics**
+ [準備演練](#cross-acct-access-step0)
+ [步驟 1：執行帳戶 A 任務](#access-policies-walkthrough-cross-account-permissions-acctA-tasks)
+ [步驟 2：執行帳戶 B 任務](#access-policies-walkthrough-cross-account-permissions-acctB-tasks)
+ [步驟 3：(選用) 嘗試明確拒絕](#access-policies-walkthrough-example2-explicit-deny)
+ [步驟 4：清理](#access-policies-walkthrough-example2-cleanup-step)

 AWS 帳戶例如，帳戶 A 可以授予另一個 AWS 帳戶帳戶 B 存取其資源的許可，例如儲存貯體和物件。帳戶 B 接著可以將這些許可委派給其帳戶中的使用者。在此案例範例中，儲存貯體擁有者會將跨帳戶許可授予另一個帳戶，以執行特定儲存貯體操作。

**注意**  
帳戶 A 也可以直接將使用儲存貯體政策的許可授予帳戶 B 中的使用者。不過，使用者仍然需要所屬父帳戶 (帳戶 B) 的許可，即使帳戶 B 沒有帳戶 A 的許可也是一樣。只要使用者同時擁有資源擁有者與父帳戶的許可，使用者就可以存取資源。

以下是逐步解說步驟的摘要：

![\[AWS 帳戶 授予另一個 AWS 帳戶 許可來存取其資源。\]](http://docs.aws.amazon.com/zh_tw/AmazonS3/latest/userguide/images/access-policy-ex2.png)


1. 帳戶 A 管理員使用者會將授予跨帳戶許可的儲存貯體政策連接至帳戶 B，以執行特定儲存貯體操作。

   請注意，帳戶 B 中的管理員使用者將自動繼承許可。

1. 帳戶 B 管理員使用者會將使用者政策連接至委派接收自帳戶 A 之許可的使用者。

1. 帳戶 B 中的使用者接著會存取帳戶 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 (CLI) 和 AWS Tools for Windows PowerShell，因此您不需要撰寫任何程式碼。

## 準備演練
<a name="cross-acct-access-step0"></a>

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

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

   1. 使用帳戶 A 憑證來登入 [IAM 主控台](https://console.aws.amazon.com/iam/home?#home)，建立管理員使用者：

      1. 建立使用者 **AccountAadmin**，並記下安全憑證。如需說明，請參閱《IAM 使用者指南》**中的[在 AWS 帳戶中建立 IAM 使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html)。

      1. 連接給予完整存取權的使用者政策，以授予 **AccountAadmin** 管理員權限。如需說明，請參閱*《IAM 使用者指南》*中的[使用政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html)。

   1. 當您位於 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 Command Line Interface (AWS CLI) 或 AWS Tools for Windows PowerShell。確定依照下列方式儲存管理員使用者憑證：
   + 如果使用 AWS CLI，請在組態檔案中建立兩個設定檔 `AccountBadmin``AccountAadmin`和 。
   + 如果使用 AWS Tools for Windows PowerShell，請確定您將工作階段的登入資料儲存為 `AccountAadmin`和 `AccountBadmin`。

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

1. 儲存管理員使用者憑證 (也稱為描述檔)。您可以使用描述檔名稱，而不是為所輸入的每個命令指定憑證。如需詳細資訊，請參閱[為逐步解說設定工具](policy-eval-walkthrough-download-awscli.md)。

   1. 為每個管理員使用者在 AWS CLI 登入資料檔案中新增設定檔，`AccountAadmin`並在`AccountBadmin`兩個帳戶中新增 。

      ```
      [AccountAadmin]
      aws_access_key_id = access-key-ID
      aws_secret_access_key = secret-access-key
      region = us-east-1
      
      [AccountBadmin]
      aws_access_key_id = access-key-ID
      aws_secret_access_key = secret-access-key
      region = us-east-1
      ```

   1. 如果您使用 AWS Tools for Windows PowerShell，請執行下列命令。

      ```
      set-awscredentials –AccessKey AcctA-access-key-ID –SecretKey AcctA-secret-access-key –storeas AccountAadmin
      set-awscredentials –AccessKey AcctB-access-key-ID –SecretKey AcctB-secret-access-key –storeas AccountBadmin
      ```

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

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

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

### 步驟 1.2：建立儲存貯體
<a name="access-policies-walkthrough-example2a-create-bucket"></a>

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

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

1. 將範例物件上傳至儲存貯體。

   如需取得說明，請前往 [步驟 2：將物件上傳至您的儲存貯體](GetStartedWithS3.md#uploading-an-object-bucket)。

### 步驟 1.3：連接儲存貯體政策以將跨帳戶許可授予帳戶 B
<a name="access-policies-walkthrough-example2a"></a>

儲存貯體政策會將 `s3:GetLifecycleConfiguration` 與 `s3:ListBucket` 許可授予帳戶 B。假設您仍然使用 **AccountAadmin** 使用者憑證來登入主控台。

1. 將下列儲存貯體政策連接至 `amzn-s3-demo-bucket`。政策會將 `s3:GetLifecycleConfiguration` 與 `s3:ListBucket` 動作的許可授予帳戶 B。

   如需說明，請參閱[使用 Amazon S3 主控台新增儲存貯體政策](add-bucket-policy.md)。

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

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
         {
            "Sid": "Example permissions",
            "Effect": "Allow",
            "Principal": {
               "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": [
               "s3:GetLifecycleConfiguration",
               "s3:ListBucket"
            ],
            "Resource": [
               "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
         }
      ]
   }
   ```

------

1. 驗證帳戶 B (與其管理員使用者) 可以執行操作。
   + 使用 驗證 AWS CLI

     ```
     aws s3 ls s3://amzn-s3-demo-bucket --profile AccountBadmin
     aws s3api get-bucket-lifecycle-configuration --bucket amzn-s3-demo-bucket --profile AccountBadmin
     ```
   + 使用 驗證 AWS Tools for Windows PowerShell

     ```
     get-s3object -BucketName amzn-s3-demo-bucket -StoredCredentials AccountBadmin 
     get-s3bucketlifecycleconfiguration -BucketName amzn-s3-demo-bucket -StoredCredentials AccountBadmin
     ```

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

現在，帳戶 B 管理員會建立使用者 Dave，並委派接收自帳戶 A 的許可。

### 步驟 2.1：登入 AWS 管理主控台
<a name="access-policies-walkthrough-cross-account-permissions-acctB-tasks-sign-in"></a>

使用帳戶 B 的 IAM 使用者登入 URL，首先以 **AccountBadmin** 使用者 AWS 管理主控台 身分登入 。

### 步驟 2.2：在帳戶 B 中建立使用者 Dave
<a name="access-policies-walkthrough-example2b-create-user"></a>

在 [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)。

### 步驟 2.3：將許可委派給使用者 Dave
<a name="access-policies-walkthrough-example2-delegate-perm-userdave"></a>

使用下列政策，建立使用者 Dave 的內嵌政策。您需要提供儲存貯體名稱來更新政策。

假設您使用 **AccountBadmin** 使用者憑證來登入主控台。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "Example",
         "Effect": "Allow",
         "Action": [
            "s3:ListBucket"
         ],
         "Resource": [
            "arn:aws:s3:::amzn-s3-demo-bucket"
         ]
      }
   ]
}
```

------

如需說明，請參閱《IAM 使用者指南》**中的[管理 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html)。

### 步驟 2.4：測試許可
<a name="access-policies-walkthrough-example2b-user-dave-access"></a>

現在，帳戶 B 中的 Dave 可以列出帳戶 A 所擁有 `amzn-s3-demo-bucket` 的內容。您可以使用下列任一個程序來驗證許可。

**使用 測試許可 AWS CLI**

1. 將`UserDave`設定檔新增至 AWS CLI 組態檔案。如需組態檔的詳細資訊，請參閱「[為逐步解說設定工具](policy-eval-walkthrough-download-awscli.md)」。

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

1. 在命令提示字元中輸入下列 AWS CLI 命令，以確認 Dave 現在可從帳戶 A `amzn-s3-demo-bucket`擁有的 取得物件清單。請注意，命令會指定`UserDave`設定檔。

   ```
   aws s3 ls s3://amzn-s3-demo-bucket --profile UserDave
   ```

   Dave 不會有任何其他許可。因此，如果他嘗試任何其他操作 (例如下列 `get-bucket-lifecycle` 組態)，則 Amazon S3 會傳回許可遭拒。

   ```
   aws s3api get-bucket-lifecycle-configuration --bucket amzn-s3-demo-bucket --profile UserDave
   ```

**使用 測試許可 AWS Tools for Windows PowerShell**

1. 以 `AccountBDave` 身分儲存 Dave 的憑證。

   ```
   set-awscredentials -AccessKey AccessKeyID -SecretKey SecretAccessKey -storeas AccountBDave
   ```

1. 嘗試列出儲存貯體命令。

   ```
   get-s3object -BucketName amzn-s3-demo-bucket -StoredCredentials AccountBDave
   ```

   Dave 不會有任何其他許可。因此，如果他嘗試任何其他操作 (例如下列 `get-s3bucketlifecycleconfiguration`)，則 Amazon S3 會傳回許可遭拒。

   ```
   get-s3bucketlifecycleconfiguration -BucketName amzn-s3-demo-bucket -StoredCredentials AccountBDave
   ```

## 步驟 3：(選用) 嘗試明確拒絕
<a name="access-policies-walkthrough-example2-explicit-deny"></a>

您可以使用存取控制清單 (ACL)、儲存貯體政策或使用者政策來授予許可。但如果有儲存貯體政策或使用者政策所設定的明確拒絕，則明確拒絕會優先於任何其他許可。針對測試，更新儲存貯體政策，並明確拒絕帳戶 B 的 `s3:ListBucket` 許可。此政策也會授予 `s3:ListBucket` 許可。不過，會優先使用明確拒絕，而且帳戶 B 或帳戶 B 中的使用者將無法列出 `amzn-s3-demo-bucket` 中的物件。

1. 使用帳戶 A 中使用者 `AccountAadmin` 的憑證，將儲存貯體政策取代如下。

1. 現在，如果您嘗試使用 `AccountBadmin` 憑證來取得儲存貯體清單，存取會遭拒。
   + 使用 AWS CLI執行下列命令：

     ```
     aws s3 ls s3://amzn-s3-demo-bucket --profile AccountBadmin
     ```
   + 使用 AWS Tools for Windows PowerShell執行下列命令：

     ```
     get-s3object -BucketName amzn-s3-demo-bucket -StoredCredentials AccountBDave
     ```

## 步驟 4：清理
<a name="access-policies-walkthrough-example2-cleanup-step"></a>

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

   1. 使用帳戶 A 登入資料登入 AWS 管理主控台 ([AWS 管理主控台](https://console.aws.amazon.com/))，然後執行下列動作：
     + 在 Amazon S3 主控台中，移除連接至 `amzn-s3-demo-bucket` 的儲存貯體政策。在儲存貯體 **Properties** (屬性) 中，刪除 **Permissions** (許可) 區段中的政策。
     + 如果儲存貯體是為此練習而建立，請在 Amazon S3 主控台中刪除物件，然後刪除儲存貯體。
     + 在 [IAM 主控台](https://console.aws.amazon.com/iam/)中，移除 `AccountAadmin` 使用者。

1. 使用帳戶 B 憑證登入 [IAM 主控台](https://console.aws.amazon.com/iam/)。刪除使用者 `AccountBadmin`。如需逐步說明，請參閱《IAM 使用者指南》**中的[刪除 IAM 使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html#id_users_deleting)。