

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 成功导入 S3 存储桶作为 AWS CloudFormation 堆栈
<a name="successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack"></a>

*Ram Kandaswamy，Amazon Web Services*

## Summary
<a name="successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack-summary"></a>

如果您使用亚马逊网络服务 (AWS) 资源，例如亚马逊简单存储服务 (Amazon S3) Simple Service 存储桶，并且想要使用基础设施即代码 (IaC) 方法，则可以将资源导入 AW CloudFormation S 并将其作为堆栈进行管理。

此模式提供了成功将 S3 存储桶导入 AWS CloudFormation 堆栈的步骤。通过使用此模式的方法，您可以避免在单个操作中导入 S3 存储桶时可能出现的错误。

## 先决条件和限制
<a name="successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack-prereqs"></a>

**先决条件**
+ 一个活跃的 AWS 账户。
+ 现有的 S3 存储桶与 S3 存储桶策略。有关这方面的更多信息，请参阅 AWS 知识中心中的 “[我应该使用哪个 S3 存储桶策略来遵守 AWS Config 规则 s3-bucket-ssl-requests-only](https://aws.amazon.com/premiumsupport/knowledge-center/s3-bucket-policy-for-config-rule/)”。
+ 现有 AWS Key Management Service (AWS KMS) 密钥及其别名。有关这方面的更多信息，请参阅 AWS KMS 文档中的[使用别名](https://docs.aws.amazon.com/kms/latest/developerguide/programming-aliases.html)。
+ `CloudFormation-template-S3-bucket`AWS CloudFormation 模板示例（附后），已下载到您的本地计算机。

## 架构
<a name="successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack-architecture"></a>

![\[使用 CloudFormation 模板创建 CloudFormation 堆栈以导入 S3 存储桶的工作流程。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/aea7f6fe-8e67-46c4-8b90-1ab06b879111/images/ee143374-a0a4-42d9-b7ca-16593a597a84.png)


 

下图显示了如下工作流：

1. 用户创建一个 JSON 或 YAML 格式的 AWS CloudFormation 模板。

1. 该模板创建一个 AWS CloudFormation 堆栈来导入 S3 存储桶。

1. AWS CloudFormation 堆栈管理您在模板中指定的 S3 存储桶。

**技术堆栈**
+ AWS CloudFormation
+ AWS Identity and Access Management (IAM)
+ AWS KMS
+ Amazon S3

 

**工具**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) — AWS CloudFormation 可帮助您以可预测的方式重复创建和配置 AWS 基础设施部署。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) – IAM 是一项 Web 服务，用于安全地控制对 AWS 资源的访问。
+ [AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) – AWS Key Management Service (AWS KMS) 是一项扩展到云的加密和密钥管理服务。
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) – Amazon Simple Storage Service (Amazon S3) 是一项面向互联网的存储服务。

## 操作说明
<a name="successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack-epics"></a>

### 将使用 AWS KMS key基于加密的 S3 存储桶作为 AWS CloudFormation 堆栈导入
<a name="import-an-s3-bucket-with-kms-key-long--based-encryption-as-an-aws-cloudformation-stack"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建一个模板，以便导入 S3 存储桶和 KMS 密钥。 | 在本地计算机上，使用如下示例模板创建一个模板，以便导入 S3 存储桶和 KMS 密钥：<pre>AWSTemplateFormatVersion: 2010-09-09<br /><br />Parameters:<br /><br />  bucketName:<br /><br />    Type: String<br /><br />Resources:<br /><br />  S3Bucket:<br /><br />    Type: 'AWS::S3::Bucket'<br /><br />    DeletionPolicy: Retain<br /><br />    Properties:<br /><br />      BucketName: !Ref bucketName<br /><br />      BucketEncryption:<br /><br />        ServerSideEncryptionConfiguration:<br /><br />          - ServerSideEncryptionByDefault:<br /><br />              SSEAlgorithm: 'aws:kms'<br /><br />              KMSMasterKeyID: !GetAtt <br /><br />                - KMSS3Encryption<br /><br />                - Arn<br /><br />  KMSS3Encryption:<br /><br />    Type: 'AWS::KMS::Key'<br /><br />    DeletionPolicy: Retain<br /><br />    Properties:<br /><br />      Enabled: true<br /><br />      KeyPolicy: !Sub |-<br /><br />        {<br /><br />            "Id": "key-consolepolicy-3",<br /><br />            "Version": "2012-10-17",		 	 	 <br /><br />            "Statement": [<br /><br />                {<br /><br />                    "Sid": "Enable IAM User Permissions",<br /><br />                    "Effect": "Allow",<br /><br />                    "Principal": {<br /><br />                        "AWS": ["arn:aws:iam::${AWS::AccountId}:root"]<br /><br />                    },<br /><br />                    "Action": "kms:*",<br /><br />                    "Resource": "*"<br /><br />                }<br /><br />                }<br /><br />            ]<br /><br />        }<br /><br />      EnableKeyRotation: true</pre> | AWS DevOps | 
| 创建堆栈。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack.html) | AWS DevOps | 
| 创建 KMS 密钥别名。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack.html)<pre>KMSS3EncryptionAlias:<br /><br />    Type: 'AWS::KMS::Alias'<br /><br />    DeletionPolicy: Retain<br /><br />    Properties: <br /><br />    AliasName: alias/S3BucketKey<br /><br />    TargetKeyId: !Ref KMSS3Encryption</pre>有关这方面的更多信息，请参阅 [AWS CloudFormation 文档中的 AWS CloudFormation 堆栈更新](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks.html)。  | AWS DevOps | 
| 更新堆栈以包含 S3 存储桶策略。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack.html)<pre>S3BucketPolicy:<br /><br />  Type: 'AWS::S3::BucketPolicy'<br /><br />  Properties:<br /><br />    Bucket: !Ref S3Bucket<br /><br />    PolicyDocument: !Sub |-<br /><br />      {<br /><br />                  "Version": "2008-10-17",		 	 	 <br /><br />                  "Id": "restricthttp",<br /><br />                  "Statement": [<br /><br />                      {<br /><br />                          "Sid": "denyhttp",<br /><br />                          "Effect": "Deny",<br /><br />                          "Principal": {<br /><br />                              "AWS": "*"<br /><br />                          },<br /><br />                          "Action": "s3:*",<br /><br />                          "Resource": ["arn:aws:s3:::${S3Bucket}","arn:aws:s3:::${S3Bucket}/*"],<br /><br />                          "Condition": {<br /><br />                              "Bool": {<br /><br />                                  "aws:SecureTransport": "false"<br /><br />                              }<br /><br />                          }<br /><br />                      }<br /><br />                  ]<br /><br />              }</pre>此 S3 存储桶策略具有一个拒绝语句，用于限制不安全的 API 调用。  | AWS DevOps | 
| 更新密钥策略。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack.html)有关详情，请参阅 AWS KMS 文档中的 [AWS KMS中的密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。 | AWS 管理员 | 
| 添加资源级标签。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack.html)<pre>Tags:<br /><br />  - Key: createdBy<br /><br />    Value: Cloudformation</pre> | AWS DevOps | 

## 相关资源
<a name="successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack-resources"></a>
+ [将现有资源引入 AWS CloudFormation 管理](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resource-import.html)
+ [AWS re: Invent 2017：深入了解 AWS CloudFormation](https://www.youtube.com/watch?v=01hy48R9Kr8)（视频）

## 附件
<a name="attachments-aea7f6fe-8e67-46c4-8b90-1ab06b879111"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/aea7f6fe-8e67-46c4-8b90-1ab06b879111/attachments/attachment.zip)