

# 数据访问控制
<a name="data-access-controls"></a>

GDPR 第 25 条规定，控制者“应实施适当的技术和组织措施以确保在默认情形下，仅处理为实现特定目的而必需的个人数据。”以下 AWS 访问控制机制仅允许得到授权的管理员、用户和应用程序访问 AWS 资源和客户数据，从而能够帮助客户符合此要求。

# AWS Identity and Access Management
<a name="aws-identity-and-access-management"></a>

在您创建 AWS 账户时，会为您的 AWS 账户自动创建一个*根*用户。此用户账户对您 AWS 账户中的所有 AWS 服务和资源具有完全访问权限。您应当仅将此账户用于初次创建额外角色和用户账户，以及需要它的管理活动，而不应用于日常任务。AWS 建议您从开始就应用最小特权原则：为不同的任务定义不同用户账户和角色，并且指定完成每项任务所需的最小权限集。这种方法是一种机制，用于调整 GDPR 中引入的一个关键概念：通过设计保护数据。[AWS Identity and Access Management](https://aws.amazon.com/iam/)（IAM）是一项 Web 服务，可用于安全地控制对您的 AWS 资源的访问。

用户和角色使用特定权限定义 IAM 身份。授权用户可以代入一个 IAM 角色来执行特定任务。代入角色时将创建临时凭证。例如，您可以使用 IAM 角色安全地为在 [Amazon Elastic Compute Cloud](https://aws.amazon.com/ec2)（Amazon EC2）中运行的应用程序提供访问其他 AWS 资源所需的临时凭证，如 Amazon S3 存储桶，[Amazon Relational Database Service](https://aws.amazon.com/rds/)（Amazon RDS）或 [Amazon DynamoDB](https://aws.amazon.com/dynamodb) 数据库。同样，[执行角色](https://docs.aws.amazon.com/lambda/latest/dg/lambda-permissions.html)为 [AWS Lambda](https://aws.amazon.com/lambda/) 函数提供访问其他 AWS 服务和资源所需的权限，如执行日志流式传输或从 [Amazon Simple Queue Service](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)（Amazon SQS）队列读取消息的 [Amazon CloudWatch Logs](https://aws.amazon.com/sqs/)。创建角色时，您需要向角色添加策略来定义授权。

为了帮助客户监控资源策略，并识别他们可能不想要的具有公有或跨账户访问权限的资源，可以启用 [IAM 访问分析器](https://aws.amazon.com/iam)来生成全面的发现结果，帮助识别可以从 AWS 账户外部访问的资源。IAM 访问分析器使用数学逻辑和推论对资源策略进行评估，进而确定策略允许的可能访问路径。IAM 访问分析器会持续监控新的或更新策略，分析使用针对 IAM 角色的策略授予的权限--同时也会分析针对 Amazon S3 存储桶、[AWS Key Management Service](https://aws.amazon.com/kms/)（AWS KMS）密钥、Amazon SQS 队列和 Lambda 函数等服务资源的策略。

如果存在已配置为允许 Internet 上的任何人或其他 AWS 账户（包括组织外部的 AWS 账户）访问的存储桶，[S3 访问分析器](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/access-analyzer.html)会向您发出提醒。在 Amazon S3 访问分析器中查看存在风险的存储桶时，只需单击一下即可阻止对存储桶的所有公有访问。AWS 建议您阻止所有对存储桶的访问，除非您需要公有访问才能支持特定使用案例。在阻止所有公有访问之前，请确保您的应用程序在没有公有访问权限的情况下可以继续正常工作。有关更多信息，请参阅[使用 Amazon S3 阻止公有访问](https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html)。

IAM 还提供上次访问的信息，帮助您识别未使用的权限，以便您可以将其从关联的主体中删除。使用上次访问的信息，可以细化您的策略，仅允许访问需要的服务和操作。这有助于更好地遵循和应用[最低权限的最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)。 您可以查看 IAM 中或整个 [AWS Organizations](https://aws.amazon.com/organizations/) 环境中存在的实体或策略的上次访问的信息。

# 通过 AWS STS 创建临时访问令牌
<a name="temporary-access-tokens-through-aws-sts"></a>

 您可以使用 [AWS Security Token Service](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)（AWS STS）创建授予对您的 AWS 资源的访问权限的临时安全凭证，并将这些凭证提供给可信用户。临时安全凭证的工作方式几乎与您为 IAM 用户提供的长期访问密钥凭证相同，但有以下区别： 
+  临时安全凭证供短期使用。您可以配置它们的有效时间长度，最短 15 分钟，最长 12 小时。临时凭证到期之后，AWS 将无法识别，也不允许通过它们发出的 API 请求进行任何类型的访问。
+  临时安全凭证不随用户账户存储在一起。相反，它们是动态生成的，并在请求时提供给用户。临时安全凭证到期时（或之前），用户可以请求新的凭证，如果该用户有此权限。 

 由于存在这些差异，使用临时凭证具有以下优势： 
+  您无需在应用程序中分发或嵌入长期 AWS 安全凭证。 
+  临时凭证是角色和身份联合的基础。通过为用户定义一个临时的 AWS 身份，您可以为他们提供对 AWS 资源的访问。 
+  临时安全凭证的可自定义生命周期是有限的。因此，在不需要这些凭证时，您不必轮换或显式撤消它们。临时安全凭证到期后，不能重复使用。您可以指定凭证的最长有效时间。

# 多重身份验证
<a name="multi-factor-authentication"></a>

为了提高安全性，您可以向 AWS 账户和 IAM 用户添加双重身份验证。借助多重身份验证（MFA），当您登录 [AWS 管理控制台](https://aws.amazon.com/console/)时，系统会提示您输入用户名和密码（第一重），以及来自您的 AWS MFA 设备的身份验证响应（第二重）。您可以为您的 AWS 账户、在您账户中创建的各个 IAM 用户启用 MFA。您还可以使用 MFA 来控制对 AWS 服务 API 的访问。

 例如，您可以定义一个策略，允许完全访问 Amazon EC2 中的所有 AWS API 操作，但明确拒绝访问特定 API 操作，如 `StopInstances` 和 `TerminateInstances` – 如果该用户未经过 MFA 身份验证。 

```
        {
         “Version”: “2012-10-17”,
         “Statement”: [
             {
                “Sid”: “AllowAllActionsForEC2”,
                “Effect”: “Allow”,
                “Action”: “ec2:*”,
                “Resource”: “*”
             },
            {
                “Sid”: “DenyStopAndTerminateWhenMFAIsNotPResent”,
                “Effect”: “Deny”,
                “Action”: [
                    “ec2:StopInstances”,
                    “ec2:TerminateInstances”
               ],
               “Resource”: “*”,
               “Conditions”: {
                   “BoolIfExists”: {“aws:MultiFactorAuthPresent”:false}
                }
            }
       }
}
```

要为您的 Amazon S3 存储桶添加额外的安全层，您可以配置 [MFA 删除](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMFADelete.html)，此功能会对更改存储桶的版本控制状态和永久删除对象版本执行额外的身份验证。“MFA 删除”可在您的安全凭证遭到破坏时提供额外的安全性。

要使用“MFA 删除”，您可以使用硬件或虚拟 MFA 设备来生成身份验证代码。有关支持的硬件或虚拟 MFA 设备的列表，请参阅[多重身份验证页面](https://aws.amazon.com/iam/features/mfa/)。

# 访问 AWS 资源
<a name="access-to-aws-objects-resources"></a>

为了实现精细访问您的 AWS 资源，您可以向不同人员授予不同级别的权限来访问不同资源。例如，您可以只允许某些用户完全访问 Amazon EC2、Amazon S3、DynamoDB、[Amazon Redshift](https://aws.amazon.com/redshift/) 和其他 AWS 服务。

对于其他用户，您可以允许仅针对某些 Amazon S3 存储桶的只读访问权限，或是仅管理某些 Amazon EC2 实例的权限，或是仅访问您的账单信息。

 以下策略是一种方法的示例，您可以通过它允许对特定 Amazon S3 存储桶执行所有操作，并明确拒绝访问 Amazon S3 之外的每个 AWS 服务。 

```
      {
         “Version”: “2012-10-17”,
         “Statement”: [
             {
                “Effect”: “Allow”,
                “Action”: “s3:*”,
                “Resource”: [
                     “arn:aws:s3:::bucket-name”,
                     “arn:aws:s3:::bucket-name/*”
                 ],
              },
              {
                “Effect”: “Deny”,
                “NotAction”: “s3:*”,
                “NotResource”: [
                     “arn:aws:s3:::bucket-name”,
                     “arn:aws:s3:::bucket-name/*”
                 ] 
               }
            ]
}
```

 您可以将策略附加到用户账户或角色。有关 IAM 策略的其他示例，请参阅[基于 IAM 身份的策略示例](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_examples.html)。 

# 定义区域性服务访问的边界
<a name="defining-boundaries-for-regional-services-access"></a>

作为客户，您对自己的内容拥有所有权，而且您可以选择使用哪项 AWS 服务处理、存储和托管您的内容。未经您的同意，AWS 不会出于任何目的而访问或使用您的内容。基于责任共担模型，您可以选择存储您的内容的 AWS 区域，这样您就可以根据自己对地理位置的具体要求，在自己选择的地点部署 AWS 服务。例如，如果您想要确保您的内容仅位于欧洲，可以选择仅在其中一个欧洲 AWS 区域部署 AWS 服务。

IAM 策略提供一种简单的机制来限制对位于特定区域的服务的访问。您可以将全局条件（`[aws:RequestedRegion](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requestedregion)`）添加到您的 IAM 主体所附的 IAM 策略中，来对所有 AWS 服务强制执行此条件。例如，[以下策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_aws_deny-requested-region.html)使用具有 `Deny` 效果的 `NotAction` 元素，如果请求的区域不是欧洲的区域，它会明确拒绝访问语句中未列出的所有操作。CloudFront、IAM、[Amazon Route 53](https://aws.amazon.com/route53/) 和 [AWS Support](https://aws.amazon.com/premiumsupport/) 服务中的操作应不会被拒绝，因为这些服务属于热门的 AWS 全球服务。

```
      {
         “Version”: “2012-10-17”,
         “Statement”: [
             {
                “Sid”: “DenyAllOutsideRequestedRegions”,
                “Effect”: “Deny”,
                “NotAction”: [
                     “cloudfront:*”,
                     “iam:*”,
                     ”route53:*”,
                     “support:*”
                 ],
                 “Resource”: “*”,
                 “Condition”: {
                    “StringNotLike”: {
                        “aws:RequestedRegion”: [
                              “eu-*”
                        ]
                     } 
                  }
            }    
          ]           
}
```

此示例 IAM 策略还可以在 AWS Organizations 中作为服务控制策略（SCP）实施，它定义应用于组织内特定 AWS 账户或组织部门（OU）的权限边界。这让您可以在复杂的多账户环境中控制用户对区域性服务的访问权限。

新启动的区域具有地理限制功能。[2019 年 3 月 20 日之后推出的区域](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)默认处于禁用状态。您必须先启用这些地区，然后才能使用它们。如果默认禁用 AWS 地区，则您可以使用 AWS 管理控制台启用和禁用该地区。启用和禁用 AWS 地区可让您控制 AWS 账户中的用户是否可以访问该地区的资源。有关更多信息，请参阅[管理 AWS 区域](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)。

# 控制对 Web 应用程序和移动应用程序的访问
<a name="control-access-to-web-applications-and-mobile-apps"></a>

AWS 提供了用于在客户应用程序中管理数据访问控制的服务。如果您需要在 Web 应用程序和移动应用程序中添加用户登录和访问控制功能，则可以使用 [Amazon Cognito](https://aws.amazon.com/cognito/)。[Amazon Cognito 用户池](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html)提供了一个可扩展到数亿用户的安全用户目录。为了保护用户的身份，您可以向用户池添加多重身份验证 (MFA)。您还可以使用自适应身份验证，该机制使用基于风险的模型来预测您何时可能需要其他身份验证因素。

使用 [Amazon Cognito 身份池（联合身份）](https://docs.aws.amazon.com/cognito/latest/developerguide/identity-pools.html)，您可以查看您的资源访问者以及访问来源（移动应用程序或 Web 应用程序）。您可以使用此信息来创建 IAM 角色和策略，以基于访问源的类型（移动应用程序或 Web 应用程序）和身份提供商允许或拒绝访问资源。