

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

# 使用 Amazon Cognito for DynamoDB 設定 AWS 登入資料
<a name="Cognito.Credentials"></a>

為您的 Web 和行動應用程式取得 AWS 登入資料的建議方法是使用 Amazon Cognito。Amazon Cognito 可協助您避免對檔案上的 AWS 登入資料進行硬式編碼。它使用 AWS Identity and Access Management (IAM) 角色為您的應用程式已驗證和未驗證的使用者產生臨時登入資料。

 例如，若要設定您的 JavaScript 檔案以使用 Amazon Cognito 未驗證角色來存取 Amazon DynamoDB Web 服務，請遵循以下方法：

**設定憑證來與 Amazon Cognito 互動**

1.  建立允許未驗證身分的 Amazon Cognito 身分池。

   ```
   aws cognito-identity create-identity-pool \
       --identity-pool-name DynamoPool \
       --allow-unauthenticated-identities \
       --output json
   {
       "IdentityPoolId": "us-west-2:12345678-1ab2-123a-1234-a12345ab12",
       "AllowUnauthenticatedIdentities": true,
       "IdentityPoolName": "DynamoPool"
   }
   ```

1.  將下列政策複製到名為 `myCognitoPolicy.json` 的檔案。使用在上一個步驟取得的 `IdentityPoolId`，來取代身分池 ID (*us-west-2:12345678-1ab2-123a-1234-a12345ab12*)。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Federated": "cognito-identity.amazonaws.com"
         },
         "Action": "sts:AssumeRoleWithWebIdentity",
         "Condition": {
           "StringEquals": {
             "cognito-identity.amazonaws.com:aud": "us-west-2:12345678-1ab2-123a-1234-a12345ab12"
           },
           "ForAnyValue:StringLike": {
             "cognito-identity.amazonaws.com:amr": "unauthenticated"
           }
         }
       }
     ]
   }
   ```

------

1.  建立採用上述政策的 IAM 角色。如此一來，Amazon Cognito 會成為可擔任 `Cognito_DynamoPoolUnauth` 角色的信任實體。

   ```
   aws iam create-role --role-name Cognito_DynamoPoolUnauth \
   --assume-role-policy-document file://PathToFile/myCognitoPolicy.json --output json
   ```

1.  連接受管政策 (`AmazonDynamoDBFullAccess`)，將 DynamoDB 的完整存取權授予 `Cognito_DynamoPoolUnauth` 角色。

   ```
   aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess \
   --role-name Cognito_DynamoPoolUnauth
   ```
**注意**  
 或者，您也可以將精細定義存取權授予 DynamoDB。如需詳細資訊，請參閱[使用 IAM 政策條件精細定義存取控制](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/specifying-conditions.html)。

1.  取得並複製 IAM 角色 Amazon Resource Name (ARN)。

   ```
   aws iam get-role --role-name Cognito_DynamoPoolUnauth --output json 
   ```

1.  將 `Cognito_DynamoPoolUnauth` 角色新增至 `DynamoPool` 身分池。指定的格式是 `KeyName=string`，其中 `KeyName` 是 `unauthenticated`，而字串是在上一步中取得的角色 ARN。

   ```
   aws cognito-identity set-identity-pool-roles \
   --identity-pool-id "us-west-2:12345678-1ab2-123a-1234-a12345ab12" \
   --roles unauthenticated=arn:aws:iam::123456789012:role/Cognito_DynamoPoolUnauth --output json
   ```

1.  在您的檔案中指定 Amazon Cognito 憑證。並依照上一步的程式碼修改 `IdentityPoolId` 與 `RoleArn`。

   ```
   AWS.config.credentials = new AWS.CognitoIdentityCredentials({
   IdentityPoolId: "us-west-2:12345678-1ab2-123a-1234-a12345ab12",
   RoleArn: "arn:aws:iam::123456789012:role/Cognito_DynamoPoolUnauth"
   });
   ```

 您現在已可使用 Amazon Cognito 憑證，對 DynamoDB Web 服務執行您的 JavaScript 程式。如需詳細資訊，請參閱《適用於 JavaScript 的 AWS SDK 入門指南》中的[在 Web 瀏覽器設定登入資料](https://docs.aws.amazon.com/sdk-for-javascript/latest/developer-guide/setting-credentials-browser.html)。