

# 使用 Amazon Cognito for DynamoDB 配置 AWS 凭证
<a name="Cognito.Credentials"></a>

建议使用 Amazon Cognito 获得 Web 和移动应用程序的 AWS 凭证。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` 文件。将身份池 ID ({{us-west-2:12345678-1ab2-123a-1234-a12345ab12}}) 替换为上一步获得的 `IdentityPoolId`。

------
#### [ 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`)，授予 `Cognito_DynamoPoolUnauth` 角色对 DynamoDB 的完整访问权限。

   ```
   aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess \
   --role-name Cognito_DynamoPoolUnauth
   ```
**注意**  
 或者可以授予对 DynamoDB 的精细访问权限。有关更多信息，请参阅[使用 IAM policy 条件进行精细访问控制](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)。