<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>服务器安全维护工作室 &#187; 系统安全代维</title>
	<atom:link href="https://www.fuwuqiok.com/topics/safe/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.fuwuqiok.com</link>
	<description></description>
	<lastBuildDate>Sun, 01 Mar 2020 07:28:40 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.26</generator>
	<item>
		<title>网站无法访问 网站中毒 业务异常 服务器故障排查 应用故障排查 数据库无法连接</title>
		<link>https://www.fuwuqiok.com/%e7%bd%91%e7%ab%99%e6%97%a0%e6%b3%95%e8%ae%bf%e9%97%ae-%e7%bd%91%e7%ab%99%e4%b8%ad%e6%af%92-%e4%b8%9a%e5%8a%a1%e5%bc%82%e5%b8%b8-%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%95%85%e9%9a%9c%e6%8e%92%e6%9f%a5/</link>
		<comments>https://www.fuwuqiok.com/%e7%bd%91%e7%ab%99%e6%97%a0%e6%b3%95%e8%ae%bf%e9%97%ae-%e7%bd%91%e7%ab%99%e4%b8%ad%e6%af%92-%e4%b8%9a%e5%8a%a1%e5%bc%82%e5%b8%b8-%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%95%85%e9%9a%9c%e6%8e%92%e6%9f%a5/#comments</comments>
		<pubDate>Mon, 17 Feb 2020 13:39:35 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[服务器代维]]></category>
		<category><![CDATA[服务器代维护]]></category>
		<category><![CDATA[系统安全代维]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[vps服务器代维]]></category>
		<category><![CDATA[上海服务器代维护]]></category>
		<category><![CDATA[云主机代维]]></category>
		<category><![CDATA[云服务器专业安全代维]]></category>
		<category><![CDATA[北京linux代维护]]></category>
		<category><![CDATA[外贸服务器代维]]></category>
		<category><![CDATA[广东linux代维护]]></category>
		<category><![CDATA[广东服务器代维护]]></category>
		<category><![CDATA[成都服务器代维护]]></category>
		<category><![CDATA[服务器代维护外包]]></category>
		<category><![CDATA[服务器代运维]]></category>
		<category><![CDATA[网站代维护]]></category>
		<category><![CDATA[网站无法访问 网站中毒 业务异常 服务器故障排查 应用故障排查 数据库无法连接]]></category>
		<category><![CDATA[网站服务器代维]]></category>
		<category><![CDATA[网站木马清理]]></category>
		<category><![CDATA[运维外包服务]]></category>
		<category><![CDATA[阿里云主机代维护]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=4033</guid>
		<description><![CDATA[<p>网站无法访问 网站中毒 业务异常 服务器故障排查 应用故障排查 数据库无法连接 网站启动失败，网站无法访问，网 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e7%bd%91%e7%ab%99%e6%97%a0%e6%b3%95%e8%ae%bf%e9%97%ae-%e7%bd%91%e7%ab%99%e4%b8%ad%e6%af%92-%e4%b8%9a%e5%8a%a1%e5%bc%82%e5%b8%b8-%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%95%85%e9%9a%9c%e6%8e%92%e6%9f%a5/">网站无法访问 网站中毒 业务异常 服务器故障排查 应用故障排查 数据库无法连接</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<h1 class="view-title"><span data-spm-anchor-id="5176.730006-52734001-52740002-cmfw00036111.content.i0.7a067867HBx5Fm">网站无法访问 网站中毒 业务异常 服务器故障排查 应用故障排查 数据库无法连接</span></h1>
<p class="product-head-desccription" data-spm-anchor-id="5176.730006-52734001-52740002-cmfw00036111.content.i1.7a067867HBx5Fm">网站启动失败，网站无法访问，网站无法打开，服务器重启服务启动异常，数据库启动失败，MySQL无法连接，数据库无法连接，故障排除，故障排查，网站问题排查，网站中毒，数据库启动不了等。</p>
<p class="product-head-desccription" data-spm-anchor-id="5176.730006-52734001-52740002-cmfw00036111.content.i1.7a067867HBx5Fm">
<div class="d-item rich-text">
<h2 data-spm-anchor-id="5176.730006-52734001-52740002-cmfw00036111.content.i2.7a067867HBx5Fm">产品亮点</h2>
<div>专业技术团队，快速定位问题，快速解决问题，为服务器安全稳定提供最有力的保障。</div>
</div>
<div class="d-item rich-text">
<h2>产品说明</h2>
<div>
<p>&nbsp;</p>
<p>网站无法正常运行</p>
<p>1.网站无法访问；</p>
<p>2.服务器重启后服务无法启动；</p>
<p>3.网站404、500、502、503等错误；</p>
<p>4.PHP/JAVA/ASP.NET程序，IIS、tomcat、Apache、Nginx、Jboss、Resin、Weblogic等HTTP运行环境，其他软件故障（不包含程序代码类）；</p>
<p>5.网站超时，PHP超时，无法访问；</p>
<p>6.系统类故障排查 CPU/IO/内存/硬盘/带宽资源占用异常的问题排查与定位；</p>
<p>7.系统问题排查与定位，包括多次异常自动重启，多次死机等；</p>
<p>8.系统蓝屏的问题排查与定位，系统漏洞修复；</p>
<p>9.系统盘占满检测与清理（Windows/Linux）；</p>
<p>数据库问题</p>
<p>1.数据库类故障排查；</p>
<p>2.MSSQL、MySQL、Oracle数据库不能启动；</p>
<p>3.数据库无法连接；</p>
<p>4.数据库启动后异常等问题排查与定位；</p>
<p>5.数据库问题造成的网站访问缓慢的排查、定位与优化。</p>
<p>系统类</p>
<p>1.云服务器ECS等异常错误、故障排查；</p>
<p>2.操作系统环境部署，定时任务计划；</p>
<p>3.Linux服务器环境部署；</p>
<p>4.阿里云服务器维护；</p>
<p>5.Linux LAMP，LNMP环境，网站环境调试部署，Tomcat环境部署；</p>
<p>6.Apache ajp proxy，nginx负载均衡配置；</p>
<p>7.系统监控（CPU、内存、网卡、磁盘等）。</p>
<p>其他问题：</p>
<p>RDS数据库MySQL、Oracle、MSSQL、Redis、MongoDB等故障排除，连接异常，启动异常，进程异常等（不包含程序代码类）；</p>
<p data-spm-anchor-id="5176.730006-52734001-52740002-cmfw00036111.content.i3.7a067867HBx5Fm">Oracle dataguard，Oracle Cluster，MySQL cluster，MySQL Proxy，MySQL主从同步，读写分离，POSTGRESQL，SQL Server等数据库，数据库备份恢复；</p>
<p>数据库环境部署，SQLServer数据库 维护，故障转移等；</p>
<p>其他云产品 OSS、CDN等（不包含程序、代码、接口类）。</p>
</div>
<div class="box-icon">
<div class="element">
<div class="d-item">
<h2 data-spm-anchor-id="5176.730006-52734001-52740002-cmfw00036111.content.i4.7a067867HBx5Fm">产品价格</h2>
<table class="param-table price-table module-table" width="100%">
<thead>
<tr>
<td>版本名称</td>
<td>计费项</td>
<td>新购</td>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="1">基础环境</td>
<td>版本基础价格</td>
<td>600元</td>
</tr>
<tr>
<td rowspan="1">数据库异常</td>
<td>版本基础价格</td>
<td>900元</td>
</tr>
<tr>
<td rowspan="1">程序问题</td>
<td>版本基础价格</td>
<td>3000元</td>
</tr>
<tr>
<td rowspan="1">高级优化</td>
<td>版本基础价格</td>
<td>6000元</td>
</tr>
<tr>
<td rowspan="1">数据库优化</td>
<td>版本基础价格</td>
<td>6000元</td>
</tr>
<tr>
<td rowspan="1">网页篡改</td>
<td>版本基础价格</td>
<td>3000元</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="box-icon">
<div class="element">
<div class="box-icon">
<div class="element">
<div class="d-item">
<h2 data-spm-anchor-id="5176.730006-52734001-57004003-cmfw018677.content.i6.2afd5854IXjVh2">产品价格</h2>
<table class="param-table price-table module-table" width="100%">
<thead>
<tr>
<td>版本名称</td>
<td>计费项</td>
<td>新购</td>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="1">系统漏洞</td>
<td>版本基础价格</td>
<td>400元</td>
</tr>
<tr>
<td rowspan="1">病毒木马</td>
<td>版本基础价格</td>
<td>800元</td>
</tr>
<tr>
<td rowspan="1">漏洞扫描</td>
<td>版本基础价格</td>
<td>2000元</td>
</tr>
<tr>
<td rowspan="1">网站黑链</td>
<td>版本基础价格</td>
<td>3000元</td>
</tr>
<tr>
<td rowspan="1" data-spm-anchor-id="5176.730006-52734001-57004003-cmfw018677.content.i7.2afd5854IXjVh2">程序中毒</td>
<td data-spm-anchor-id="5176.730006-52734001-57004003-cmfw018677.content.i10.2afd5854IXjVh2">版本基础价格</td>
<td>5000元</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="box-icon">
<div class="element">
<div class="r-comment-list">
<h2></h2>
</div>
</div>
</div>
</div>
</div>
</div>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e7%bd%91%e7%ab%99%e6%97%a0%e6%b3%95%e8%ae%bf%e9%97%ae-%e7%bd%91%e7%ab%99%e4%b8%ad%e6%af%92-%e4%b8%9a%e5%8a%a1%e5%bc%82%e5%b8%b8-%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%95%85%e9%9a%9c%e6%8e%92%e6%9f%a5/">网站无法访问 网站中毒 业务异常 服务器故障排查 应用故障排查 数据库无法连接</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e7%bd%91%e7%ab%99%e6%97%a0%e6%b3%95%e8%ae%bf%e9%97%ae-%e7%bd%91%e7%ab%99%e4%b8%ad%e6%af%92-%e4%b8%9a%e5%8a%a1%e5%bc%82%e5%b8%b8-%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%95%85%e9%9a%9c%e6%8e%92%e6%9f%a5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>网站挂马 网站无法访问 服务器故障排查 应用故障排查 数据库故障排查</title>
		<link>https://www.fuwuqiok.com/%e7%bd%91%e7%ab%99%e6%8c%82%e9%a9%ac-%e7%bd%91%e7%ab%99%e6%97%a0%e6%b3%95%e8%ae%bf%e9%97%ae-%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%95%85%e9%9a%9c%e6%8e%92%e6%9f%a5-%e5%ba%94%e7%94%a8%e6%95%85%e9%9a%9c/</link>
		<comments>https://www.fuwuqiok.com/%e7%bd%91%e7%ab%99%e6%8c%82%e9%a9%ac-%e7%bd%91%e7%ab%99%e6%97%a0%e6%b3%95%e8%ae%bf%e9%97%ae-%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%95%85%e9%9a%9c%e6%8e%92%e6%9f%a5-%e5%ba%94%e7%94%a8%e6%95%85%e9%9a%9c/#comments</comments>
		<pubDate>Thu, 13 Feb 2020 03:16:34 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[服务器代维]]></category>
		<category><![CDATA[系统安全代维]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[网站挂马 网站无法访问 服务器故障排查 应用故障排查 数据库故障排查]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=4021</guid>
		<description><![CDATA[<p>网站挂马 网站无法访问 服务器故障排查 应用故障排查 数据库故障排查 &#160; 产品亮点 专业技术团队，快 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e7%bd%91%e7%ab%99%e6%8c%82%e9%a9%ac-%e7%bd%91%e7%ab%99%e6%97%a0%e6%b3%95%e8%ae%bf%e9%97%ae-%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%95%85%e9%9a%9c%e6%8e%92%e6%9f%a5-%e5%ba%94%e7%94%a8%e6%95%85%e9%9a%9c/">网站挂马 网站无法访问 服务器故障排查 应用故障排查 数据库故障排查</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>网站挂马 网站无法访问 服务器故障排查 应用故障排查 数据库故障排查</p>
<p>&nbsp;</p>
<div class="box-icon">
<div class="element">
<div class="r-product-detail">
<div class="d-item rich-text">
<h2 data-spm-anchor-id="5176.730006-52734001-57004003-cmfw00037298.content.i1.532f590ceYCT4d">产品亮点</h2>
<div>专业技术团队，快速定位问题，快速解决问题，为服务器安全稳定提供最有力的保障。网站挂马 网站无法访问 服务器故障排查 应用故障排查 数据库故障排查</div>
</div>
<div class="d-item rich-text">
<h2>产品说明</h2>
<div>
<p>网站无法正常运行</p>
<p>1.网站无法访问；</p>
<p>2.服务器重启后服务无法启动；</p>
<p>3.网站404、500、502、503等错误；</p>
<p>4.PHP/JAVA/ASP.NET程序，IIS、tomcat、Apache、Nginx、Jboss、Resin、Weblogic等HTTP运行环境，其他软件故障（不包含程序代码类）；</p>
<p>5.网站超时，PHP超时，无法访问；</p>
<p>6.系统类故障排查 CPU/IO/内存/硬盘/带宽资源占用异常的问题排查与定位；</p>
<p>7.系统问题排查与定位，包括多次异常自动重启，多次死机等；</p>
<p>8.系统蓝屏的问题排查与定位，系统漏洞修复；</p>
<p>9.系统盘占满检测与清理（Windows/Linux）；</p>
<p>数据库问题</p>
<p>1.数据库类故障排查；</p>
<p>2.MSSQL、MySQL、Oracle数据库不能启动；</p>
<p>3.数据库无法连接；</p>
<p>4.数据库启动后异常等问题排查与定位；</p>
<p>5.数据库问题造成的网站访问缓慢的排查、定位与优化。</p>
<p>系统类</p>
<p>1.云服务器ECS等异常错误、故障排查；</p>
<p>2.操作系统环境部署，定时任务计划；</p>
<p>3.Linux服务器环境部署；</p>
<p>4.阿里云服务器维护；</p>
<p>5.Linux LAMP，LNMP环境，网站环境调试部署，Tomcat环境部署；</p>
<p>6.Apache ajp proxy，nginx负载均衡配置；</p>
<p>7.系统监控（CPU、内存、网卡、磁盘等）。</p>
<p>其他问题：</p>
<p>RDS数据库MySQL、Oracle、MSSQL、Redis、MongoDB等故障排除，连接异常，启动异常，进程异常等（不包含程序代码类）；</p>
<p>Oracle dataguard，Oracle Cluster，MySQL cluster，MySQL Proxy，MySQL主从同步，读写分离，POSTGRESQL，SQL Server等数据库，数据库备份恢复；</p>
<p>数据库环境部署，SQLServer数据库 维护，故障转移等；</p>
<p>其他云产品 OSS、CDN等（不包含程序、代码、接口类）。</p>
<p>8、修复网站漏洞清除黑客植入的后门木马文件、修复程序漏洞、排除程序错误，保障网站正常运行。</p>
<p data-spm-anchor-id="5176.730006-52734001-52740002-cmfw014612.content.i4.43af6d9ddYXPDn">该服务针对以下问题：</p>
<p>1.服务器成为肉鸡频繁向外发包；</p>
<p>2.服务器成为比特币挖矿机；</p>
<p>3.服务器中病毒CPU资源暴增；</p>
<p><span data-spm-anchor-id="5176.730006-52734001-52740002-cmfw014612.content.i5.43af6d9ddYXPDn">4.Discuz、Phpwind被植入木马，搜索引擎出现恶意跳转链接等；</span></p>
<p>5.服务器被CC攻击，暴力破解，专业技术工程师在线解决问题。</p>
</div>
</div>
<div class="d-item broderno">
<h2>产品参数</h2>
<table class="param-table" width="100%">
<tbody>
<tr>
<td class="title borderleft" width="20%">交付方式</td>
<td class="borderright pl20" width="80%">服务类</td>
</tr>
<tr>
<td class="title borderleft" width="20%">质保时间</td>
<td class="borderright pl20" width="80%">7天</td>
</tr>
<tr>
<td class="title borderleft" width="20%">交付时间</td>
<td class="borderright pl20" width="80%">2天</td>
</tr>
</tbody>
</table>
</div>
<div class="d-item rich-text">
<h2>售后支持范围</h2>
<div>售后服务时间：工作日9:00—12:00,13:30-18:00。 业务范围：服务器环境配置，故障排查（不含程序自身问题），数据库配置更改，数据库权限、账户，数据迁移，程序迁移，数据库故障排查等； 费用范围：详情参照本公司服务类商品定价，或咨询在线技术支持。</div>
</div>
</div>
</div>
</div>
<div class="box-icon"></div>
<div class="box-icon">
<div class="element">
<div class="d-item">
<h2>产品价格<i>(此处价格仅供参考，实际价格以选配后的价格为准)</i></h2>
<table class="param-table price-table module-table" width="100%">
<thead>
<tr>
<td>版本名称</td>
<td>计费项</td>
<td>新购</td>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="1">ECS基础环境排查</td>
<td>版本基础价格</td>
<td>500元</td>
</tr>
<tr>
<td rowspan="1">环境高级优化</td>
<td>版本基础价格</td>
<td>5000元</td>
</tr>
<tr>
<td rowspan="1">数据库异常排查</td>
<td>版本基础价格</td>
<td>5000元</td>
</tr>
<tr>
<td rowspan="1">数据库参数优化</td>
<td>版本基础价格</td>
<td>5000元</td>
</tr>
<tr>
<td rowspan="1">程序木马问题清理</td>
<td>版本基础价格</td>
<td>1000元</td>
</tr>
<tr>
<td rowspan="1">网站502问题及网页防挂马</td>
<td>版本基础价格</td>
<td>2000元</td>
</tr>
<tr>
<td rowspan="1">服务器代维包年</td>
<td>版本基础价格</td>
<td>12000元</td>
</tr>
<tr>
<td rowspan="1" data-spm-anchor-id="5176.730006-52734001-57004003-cmfw00037298.content.i2.532f590ceYCT4d">网站防劫持配置</td>
<td>版本基础价格</td>
<td>2000元</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="box-icon">
<div class="element">
<div class="r-comment-list">
<div class="box-icon">
<div class="element">
<div class="d-item">
<h2 data-spm-anchor-id="5176.730006-52734001-52740002-cmfw014612.content.i6.43af6d9ddYXPDn">产品价格<i>(此处价格仅供参考，实际价格以选配后的价格为准)</i></h2>
<table class="param-table price-table module-table" width="100%">
<thead>
<tr>
<td>版本名称</td>
<td>计费项</td>
<td>新购</td>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="1">漏洞修复（系统）</td>
<td>版本基础价格</td>
<td>1000元</td>
</tr>
<tr>
<td rowspan="1">漏洞修复（环境及中间件）</td>
<td>版本基础价格</td>
<td>4000元</td>
</tr>
<tr>
<td rowspan="1">清理木马</td>
<td data-spm-anchor-id="5176.730006-52734001-52740002-cmfw014612.content.i7.43af6d9ddYXPDn">版本基础价格</td>
<td>4000元</td>
</tr>
<tr>
<td rowspan="1">修复程序</td>
<td>版本基础价格</td>
<td>20000元</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="box-icon"></div>
</div>
</div>
</div>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e7%bd%91%e7%ab%99%e6%8c%82%e9%a9%ac-%e7%bd%91%e7%ab%99%e6%97%a0%e6%b3%95%e8%ae%bf%e9%97%ae-%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%95%85%e9%9a%9c%e6%8e%92%e6%9f%a5-%e5%ba%94%e7%94%a8%e6%95%85%e9%9a%9c/">网站挂马 网站无法访问 服务器故障排查 应用故障排查 数据库故障排查</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e7%bd%91%e7%ab%99%e6%8c%82%e9%a9%ac-%e7%bd%91%e7%ab%99%e6%97%a0%e6%b3%95%e8%ae%bf%e9%97%ae-%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%95%85%e9%9a%9c%e6%8e%92%e6%9f%a5-%e5%ba%94%e7%94%a8%e6%95%85%e9%9a%9c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>数据迁移服务（上云或云云迁移）</title>
		<link>https://www.fuwuqiok.com/%e6%95%b0%e6%8d%ae%e8%bf%81%e7%a7%bb%e6%9c%8d%e5%8a%a1%ef%bc%88%e4%b8%8a%e4%ba%91%e6%88%96%e4%ba%91%e4%ba%91%e8%bf%81%e7%a7%bb%ef%bc%89/</link>
		<comments>https://www.fuwuqiok.com/%e6%95%b0%e6%8d%ae%e8%bf%81%e7%a7%bb%e6%9c%8d%e5%8a%a1%ef%bc%88%e4%b8%8a%e4%ba%91%e6%88%96%e4%ba%91%e4%ba%91%e8%bf%81%e7%a7%bb%ef%bc%89/#comments</comments>
		<pubDate>Tue, 05 Mar 2019 13:09:22 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[aliyun服务器代维]]></category>
		<category><![CDATA[ECS云服务器运维代维服务]]></category>
		<category><![CDATA[服务器代维]]></category>
		<category><![CDATA[服务器代维护]]></category>
		<category><![CDATA[服务器维护]]></category>
		<category><![CDATA[服务器迁移]]></category>
		<category><![CDATA[服务器运维]]></category>
		<category><![CDATA[系统安全代维]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[网站防挂马]]></category>
		<category><![CDATA[数据迁移服务（上云或云云迁移）]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=3919</guid>
		<description><![CDATA[<p>注意事项 1) 数据迁移服务仅支持同系统、同版本迁移操作，不支持跨系统与跨版本迁移。 2) 迁移涉及的网站和应 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e6%95%b0%e6%8d%ae%e8%bf%81%e7%a7%bb%e6%9c%8d%e5%8a%a1%ef%bc%88%e4%b8%8a%e4%ba%91%e6%88%96%e4%ba%91%e4%ba%91%e8%bf%81%e7%a7%bb%ef%bc%89/">数据迁移服务（上云或云云迁移）</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<div class="box-icon">
<div class="element">
<div class="r-product-detail">
<div class="d-item rich-text">
<h2><span data-spm-anchor-id="5176.730006-52734001-52738004-cmfw013550.content.i2.a59015c285YvdH">注意事项</span></h2>
<p>1) 数据迁移服务仅支持同系统、同版本迁移操作，不支持跨系统与跨版本迁移。</p>
<p>2) 迁移涉及的网站和应用程序需要提供详细安装说明、精确的版本信息。</p>
<p>3) 在服务过程中提供的云账号、密码等，建议用户在服务结束后及时进行信息变更。</p>
<p>4) 服务操作过程中需要用户全程及时配合，否则可能导致交付周期的延迟。</p>
<p>&nbsp;</p>
<h2>服务标准及收费</h2>
<table class="ke-zeroborder" border="0" width="814" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td bgcolor="#F5F5F5" width="10"></td>
<td bgcolor="#F5F5F5" width="112" height="33"><strong>服务项</strong></td>
<td bgcolor="#F5F5F5" width="614"><strong>服务说明</strong></td>
<td bgcolor="#F5F5F5" width="78"><strong>价格</strong></td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr>
<td></td>
<td>数据库迁移</td>
<td>
<ul>
<li>服务内容：云端安装新数据库/迁移数据库/新数据库备份策略设置</li>
<li>数据大小≤5G</li>
</ul>
</td>
<td>1000元/次</td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr>
<td></td>
<td>网站整体迁移</td>
<td>
<ul>
<li>服务内容：云端运行环境搭建/数据库迁移/网站文件迁移/运行测试/整体备份策略设置</li>
<li>数据大小≤10G</li>
</ul>
</td>
<td>2000元/次</td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr>
<td></td>
<td>应用软件迁移</td>
<td>
<ul>
<li>服务内容：云端运行环境搭建/数据库迁移/应用程序迁移/运行测试/整体备份策略设置</li>
<li>数据大小≤10G</li>
</ul>
</td>
<td>1000元/次</td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr>
<td></td>
<td>文件迁移</td>
<td>
<ul>
<li>服务内容：文件打包/文件上传/文件恢复/服务器备份策略设置</li>
<li>数据大小≤10G</li>
</ul>
</td>
<td>500元/次</td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr>
<td></td>
<td>增量选项</td>
<td>
<ul>
<li>数据库每增加5G，价格增加100元</li>
<li>程序文件每增加10G，价格增加100元</li>
</ul>
</td>
<td>100元/次</td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr>
<td></td>
<td>海外ECS选项</td>
<td>
<ul>
<li>数据迁移到含香港之类的海外ECS服务器，在基础费用上额外增加100-300元。</li>
</ul>
</td>
<td>1000元/次</td>
</tr>
</tbody>
</table>
</div>
<div class="d-item broderno"></div>
<div class="d-item rich-text"></div>
</div>
</div>
</div>
<div class="box-icon">
<div class="element">
<div class="d-item">
<h2>产品价格</h2>
<table class="param-table price-table module-table" width="100%">
<thead>
<tr>
<td>版本名称</td>
<td>计费项</td>
<td>新购</td>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="1">海外ECS迁移选项（含香港）</td>
<td>版本基础价格</td>
<td>1000元</td>
</tr>
<tr>
<td rowspan="1">增量选项</td>
<td>版本基础价格</td>
<td>100元</td>
</tr>
<tr>
<td rowspan="1">文件迁移</td>
<td>版本基础价格</td>
<td>500元</td>
</tr>
<tr>
<td rowspan="1">应用软件迁移</td>
<td>版本基础价格</td>
<td>1000元</td>
</tr>
<tr>
<td rowspan="1">网站整体迁移</td>
<td>版本基础价格</td>
<td>2000元</td>
</tr>
<tr>
<td rowspan="1" data-spm-anchor-id="5176.730006-52734001-52738004-cmfw013550.content.i3.a59015c285YvdH">数据库迁移</td>
<td>版本基础价格</td>
<td>1000元</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="box-icon">
<div class="element">
<div class="r-comment-list">
<h2></h2>
</div>
</div>
</div>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e6%95%b0%e6%8d%ae%e8%bf%81%e7%a7%bb%e6%9c%8d%e5%8a%a1%ef%bc%88%e4%b8%8a%e4%ba%91%e6%88%96%e4%ba%91%e4%ba%91%e8%bf%81%e7%a7%bb%ef%bc%89/">数据迁移服务（上云或云云迁移）</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e6%95%b0%e6%8d%ae%e8%bf%81%e7%a7%bb%e6%9c%8d%e5%8a%a1%ef%bc%88%e4%b8%8a%e4%ba%91%e6%88%96%e4%ba%91%e4%ba%91%e8%bf%81%e7%a7%bb%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用AWS 媒体服务构建全球直播解决方案</title>
		<link>https://www.fuwuqiok.com/%e4%bd%bf%e7%94%a8aws-%e5%aa%92%e4%bd%93%e6%9c%8d%e5%8a%a1%e6%9e%84%e5%bb%ba%e5%85%a8%e7%90%83%e7%9b%b4%e6%92%ad%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/</link>
		<comments>https://www.fuwuqiok.com/%e4%bd%bf%e7%94%a8aws-%e5%aa%92%e4%bd%93%e6%9c%8d%e5%8a%a1%e6%9e%84%e5%bb%ba%e5%85%a8%e7%90%83%e7%9b%b4%e6%92%ad%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/#comments</comments>
		<pubDate>Wed, 21 Nov 2018 06:39:47 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[aliyun服务器代维]]></category>
		<category><![CDATA[Amazon AWS]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[linux代维]]></category>
		<category><![CDATA[服务器代维护]]></category>
		<category><![CDATA[服务器安全代维]]></category>
		<category><![CDATA[服务器维护]]></category>
		<category><![CDATA[服务器迁移]]></category>
		<category><![CDATA[服务器运维]]></category>
		<category><![CDATA[系统安全代维]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[网站防挂马]]></category>
		<category><![CDATA[使用AWS 媒体服务构建全球直播解决方案]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=3885</guid>
		<description><![CDATA[<p>作为全球云服务的领导者，AWS始终在创新的路上飞驰，仅2017年一年AWS就发布了1300多项新的服务、功能或 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e4%bd%bf%e7%94%a8aws-%e5%aa%92%e4%bd%93%e6%9c%8d%e5%8a%a1%e6%9e%84%e5%bb%ba%e5%85%a8%e7%90%83%e7%9b%b4%e6%92%ad%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/">使用AWS 媒体服务构建全球直播解决方案</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>作为全球云服务的领导者，AWS始终在创新的路上飞驰，仅2017年一年AWS就发布了1300多项新的服务、功能或者特性，这其中就包括在2017年reInvent上发布的5个全新的媒体服务，MediaConvert, MediaLive, MeidaPackage, MediaStore和MediaTailor，这些完全托管的服务，使得用户可以在云中轻松构建具有广播品质的可靠视频工作流。用户在构建互联网视频，OTT视频业务的时候直接在AWS控制台上即可启动直播，转码，存储，广告插入等广播级的业务流程，可以按照使用量即用即付，随时启停，而无需前期投入购买昂贵的设备资产，无需进行基础架构运维的成本投入，。AWS平台具有全球部署能力，可以分分钟将业务扩展到全球各个区域。</p>
<p>下面我们将借助AWS Elemental MediaLive ， MediaPackage，CloudFront服务构建一套完整的直播OTT转码打包分发服务，通过这个实验您可以直观的体会到AWS的媒体服务是多么便捷，而您所需要的仅仅是一个AWS Global账号和一天可以上网的电脑。</p>
<p>&nbsp;</p>
<h3>1.  准备直播源</h3>
<p>MediaLive支持RTP，RTMP(Push), RTMP(Pull),HLS四种输入源，如果您已经有RTMP直播源可以直接用在本实验中。</p>
<p>本次实验以HLS为例，使用存储在S3上的一个预先转码完成的文件做为输入源，对于MediaLive来说，这个输入源就是一个直播源。</p>
<p>例如https://s3-us-west-2.amazonaws.com/mytestbucket-og-media-3/keynote-hls/testvideo.m3u8</p>
<p>确认此目录已经开启公开访问（关于S3的更多信息请参阅https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/Welcome.html）</p>
<h3>2.  创建MediaPackage Channel</h3>
<p>a.  登陆AWS Global 控制台，在Services中选择MediaPackage，</p>
<p>b.  在Channel页面，选择 Create Channel</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/1-1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/1-1.png" alt="1-1" width="924" height="501" /></a></p>
<p>c.  输入ID，即自行命名这个Channel，例如ch1。可选填Description栏</p>
<p>d.  Input type选择Apple HLS</p>
<p>e.  点击Create channel</p>
<p>f.  点击新创建的Channel，在Channel Overview页面选择Add/edit endpoint</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/2.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/2.png" alt="2" width="1116" height="440" /></a></p>
<p>g.  在endpoints页面点击Add，填写 ID，例如ch1-ep1，点击Save</p>
<p>h.  重复上述步骤创建第二个Channel和对应的endpoint</p>
<p>i.  记下channel的Input URL，username和password</p>
<h3>3.  创建MediaLive Channel</h3>
<p>a.  在控制台Services 中选择MediaLive</p>
<p>b.  选择Channels页面，点击Create Channel</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/3.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/3.png" alt="3" width="1579" height="823" /></a></p>
<p>c.  在Channel Name中填入自行创建的通道名</p>
<p>d.  在IAM Role 选择Create role from template。选中Remember ARN</p>
<p>（关于IAM Role更多信息请参见https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_roles.html）</p>
<h3>创建MediaLive Input</h3>
<p>e.  在Channel input部分点击Create input</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/4.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/4.png" alt="4" width="1223" height="896" /></a></p>
<p>f.  在Input name 创建一个名字</p>
<p>g.  Input type选择HLS</p>
<p>h.  将第一步准备的HLS源的地址填入Input source A和Input source B的URL中。注意，出于高可用性的考虑，MediaLive Input要求2个互为主备的输入源，本试验使用两个不同的存储桶的HLS URL做为输入源，在实际生产环境中也要两个不同的输入源地址来提供高可靠性。</p>
<p>i.  点击Create</p>
<h3>创建HLS Output Group</h3>
<p>j.  在channel template部分，选择HTTP live streaming模版，将会自动添加不同分辨率和码率的10个输出。也可以不使用模版，通过手动添加自定义output</p>
<p>k.  点击Output groups下的模版名TN2224，点击Credentials(optional)，选中Create AWS Elemental MediaLive parameter 将第2步创建的两个channel的URL，Username，password依次填入HLS Group destination A和HLS Group destination B。见下图</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/5.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/5.png" alt="5" width="1440" height="810" /></a></p>
<blockquote><p>l.  点击 Create channel</p></blockquote>
<h3>4.  启动channel并查看</h3>
<p>a.  Channel创建完成后是idle状态，选中之后点击Start</p>
<p>b.  使用第2步创建的endpoint，使用VLC player来播放这个直播流，，例如：</p>
<p>https://103xxxxxxxxe303.mediapackage.us-west-2.amazonaws.com/out/v1/c78bcxxxxxxxxxxxxxxxxxxxxxx45/index.m3u8</p>
<p>c.  如果不能看到直播视频流，请查看并确认MediaLive Channel 和MediaPackage Channel 的network in&amp;out都有流量</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/6.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/6.png" alt="6" width="792" height="856" /></a> <a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/7.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/7.png" alt="7" width="780" height="830" /></a></p>
<blockquote>
<h4>MediaLive Channel网络状态</h4>
</blockquote>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/8-1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/8-1.png" alt="8-1" width="1014" height="976" /></a> <a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/8-2.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/8-2.png" alt="8-2" width="996" height="940" /></a></p>
<blockquote>
<h4>MediaPackage Channel网络状态</h4>
</blockquote>
<h3>5.  使用CloudFront创建CDN发布</h3>
<p>a.  登陆AWS Global 控制台，在Services中选择CloudFront，选择Distributions，点击Create Distribution</p>
<p>b.  使用Web方式，点击Get Start</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/9.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/9.png" alt="9" width="1207" height="335" /></a></p>
<p>c.  在Origin Domain Name中填入第2步创建的MediaPackage end point域名，例如：https://103xxxxxxxxe303.mediapackage.us-west-2.amazonaws.com</p>
<p>在Origin Path 中填入MediaPackage end point中的路径，例如： /out/v1/c78bcxxxxxxxxxxxxxxxxxxxxxx45</p>
<p>Origin Protocol Policy 选择HTTPS only</p>
<p>其他选项可以不修改，（更多CloudFront相关信息，请参阅https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cf_dg.pdf）</p>
<p>点击Create Distribution</p>
<p>d.  等待创建完成后，status由In progress变为Deployed，即可使用CLoudFront分配的域名，加上index.m3u8即可例如d2xxxxxxxxxxx4n4m.cloudfront.net/index.m3u8</p>
<p>使用VLC player打开这个地址即可播放，这样就完成了播放流的CDN发布，CloudFront会选择距你延时最小的边缘站点进行加速。</p>
<p>&nbsp;</p>
<p>现在，您的直播业务就已经完成了构建，并具有全球分发和加速能力。AWS媒体服务具备内置可靠性和弹性。该服务可透明地管理多个可用区中的资源，并自动监控其运行状况，以便在不中断实时频道的情况下检测并解决任何潜在问题。借助 AWS 媒体服务，您可以获得比通常用于广播工作负载的基础设施更高的可靠性</p>
<p>MediaLive输入支持SD, HD, UHD，支持H.264 (AVC), HEVC (H.265), MPEG-2视频编码格式，支持AAC, Dolby Digital, Dolby Digital Plus, MPEG Audio, PCM音频格式，支持AFD，支持帧率控制，支持GOP结构设置，支持多种编码profile，支持多种字幕标准，支持时码插入，支持数字版权管理等等。</p>
<p>除了MediaLive+MediaPackage，您还可以使用MediaConvert做视频文件转码，使用MediaStore做内容存储，使用MediaTailor做广告插播。AWS媒体服务与包括 Amazon CloudFront、AWS CloudFormation、Amazon CloudWatch 在内的补充性 AWS 服务，以及适用于安全、管理和生产的第三方应用程序相集成，提供一整套工具来处理和交付实时的按需视频内容。最重要的是，AWS 媒体服务使您专注于内容，而非管理复杂的基础设施，让您能为观众提供卓越的体验。</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e4%bd%bf%e7%94%a8aws-%e5%aa%92%e4%bd%93%e6%9c%8d%e5%8a%a1%e6%9e%84%e5%bb%ba%e5%85%a8%e7%90%83%e7%9b%b4%e6%92%ad%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/">使用AWS 媒体服务构建全球直播解决方案</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e4%bd%bf%e7%94%a8aws-%e5%aa%92%e4%bd%93%e6%9c%8d%e5%8a%a1%e6%9e%84%e5%bb%ba%e5%85%a8%e7%90%83%e7%9b%b4%e6%92%ad%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>建立 VPC 并基于参数动态创建子网的 CloudFormation 模板</title>
		<link>https://www.fuwuqiok.com/%e5%bb%ba%e7%ab%8b-vpc-%e5%b9%b6%e5%9f%ba%e4%ba%8e%e5%8f%82%e6%95%b0%e5%8a%a8%e6%80%81%e5%88%9b%e5%bb%ba%e5%ad%90%e7%bd%91%e7%9a%84-cloudformation-%e6%a8%a1%e6%9d%bf/</link>
		<comments>https://www.fuwuqiok.com/%e5%bb%ba%e7%ab%8b-vpc-%e5%b9%b6%e5%9f%ba%e4%ba%8e%e5%8f%82%e6%95%b0%e5%8a%a8%e6%80%81%e5%88%9b%e5%bb%ba%e5%ad%90%e7%bd%91%e7%9a%84-cloudformation-%e6%a8%a1%e6%9d%bf/#comments</comments>
		<pubDate>Wed, 21 Nov 2018 06:36:45 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[aliyun服务器代维]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[linux服务器代维]]></category>
		<category><![CDATA[linux服务器代维护]]></category>
		<category><![CDATA[linux服务器维护]]></category>
		<category><![CDATA[linux系统代维]]></category>
		<category><![CDATA[服务器代维合同]]></category>
		<category><![CDATA[服务器代维护]]></category>
		<category><![CDATA[服务器安全代维]]></category>
		<category><![CDATA[服务器安全设置]]></category>
		<category><![CDATA[服务器迁移]]></category>
		<category><![CDATA[服务器运维]]></category>
		<category><![CDATA[系统安全代维]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[网站防挂马]]></category>
		<category><![CDATA[建立 VPC 并基于参数动态创建子网的 CloudFormation 模板]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=3869</guid>
		<description><![CDATA[<p>创建 Subnet 在大型企业云迁移项目组，经常会遇到企业将线下数据中心的子网迁移到 AWS 云上。线下的子网 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e5%bb%ba%e7%ab%8b-vpc-%e5%b9%b6%e5%9f%ba%e4%ba%8e%e5%8f%82%e6%95%b0%e5%8a%a8%e6%80%81%e5%88%9b%e5%bb%ba%e5%ad%90%e7%bd%91%e7%9a%84-cloudformation-%e6%a8%a1%e6%9d%bf/">建立 VPC 并基于参数动态创建子网的 CloudFormation 模板</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<h2>创建 Subnet</h2>
<p>在大型企业云迁移项目组，经常会遇到企业将线下数据中心的子网迁移到 AWS 云上。线下的子网划分一般会根据子网的使用功能不同进行划分，例如防火墙子网、负载均衡器子网、配合部署高可用架构的心跳线子网、应用系统子网等。不同企业的子网划分规则、子网的掩码大小和路由规则均不相同，并且在迁移后的系统上线后，企业还会经常划分新的网段以部署新的应用系统，这就需要有一个通用的模板来协助网络管理人员简化工作流程，提高工作效率。在我所经历过的一个项目中，生产 VPC 的子网划分有47个之多，且子网掩码有/24, /25, /26. 27/, /28等不同，在添加新的子网时，需要仔细计算新的子网 CIDR 以及为新建子网配置路由表。</p>
<h2>动态创建子网的方案概述</h2>
<p>因为 CloudFormation 不支持程序逻辑，只支持静态资源的创建，所以在本方案中采用 AWS Lambda 来基于输入参数动态创建不同类型的子网。我们定义了3种不同类型的子网：公共子网 (Public Subnet)， 外部子网 (External Subnet)，内部子网 (Internal Subnet) Subnet。<br />
公共子网的路由表有如下路由信息：</p>
<table border="1">
<tbody>
<tr>
<td><strong>Destination</strong></td>
<td><strong>Target</strong></td>
</tr>
<tr>
<td>0.0.0.0/0</td>
<td>igw-xxxxx (Internet Gateway)</td>
</tr>
</tbody>
</table>
<p>部署在公共子网中的服务器可以直接与 Internet 进行通信（缺省分配 Internet IP 地址，并且有指向 Internet Gateway 的缺省路由）。<br />
外部子网的路由表有如下路由信息：</p>
<table border="1">
<tbody>
<tr>
<td width="293"><strong>Destination</strong></td>
<td width="192"><strong>Target</strong></td>
</tr>
<tr>
<td width="293">0.0.0.0/0</td>
<td width="192">nat-xxxxx (NAT gateway)</td>
</tr>
<tr>
<td width="293">pl-xxxxxx (com.amazonaws.cn-north-1.s3)</td>
<td width="192">vpce-xxxxxxx</td>
</tr>
<tr>
<td width="293">pl-xxxx (com.amazonaws.cn-north-1.dynamodb)</td>
<td width="192">vpce-xxxx</td>
</tr>
</tbody>
</table>
<p>部署在外部子网的服务器可以通过 NAT Gateway 与 Internet 进行通信，并且可以不通过互联网访问 S3 和 dynamodb。<br />
内部子网的路由表有如下路由信息：</p>
<table border="1">
<tbody>
<tr>
<td width="293"><strong>Destination</strong></td>
<td width="192"><strong>Target</strong></td>
</tr>
<tr>
<td width="293">pl-xxxxxx (com.amazonaws.cn-north-1.s3)</td>
<td width="192">vpce-xxxxxxx</td>
</tr>
<tr>
<td width="293">pl-xxxx (com.amazonaws.cn-north-1.dynamodb)</td>
<td width="192">vpce-xxxx</td>
</tr>
</tbody>
</table>
<p>部署在内部子网的服务器不能访问 Internet，但是能直接访问 S3 和 dynamodb。<br />
本方案使用2个 CloudFomation 模板， 第一个模板(CreateBaseVpc.json)创建共享资源，例如 VPC、Internet Gateway、公共子网 (Public Subnet) 路由表、在各个可用区内创建公共子网、NAT Gateway、 VPC Endpoint (S3 endpoint和DynamoDB endpoint)和创建外部子网路由表。在这个模板中还创建了3个 Lambda 功能函数：</p>
<ul>
<ul>
<li>
<h4>SharedInfra – 对应 python 程序 create_shared_infra.zip</h4>
</li>
</ul>
</ul>
<p>功能：根据输入的参数，在程序运行的AWS Region的每个AZ内创建公共子网，将在 CreateBaseVpc.json 模板中建立的公共子网路由表关联到每个公共子网。 在每个公共子网内创建 NAT Gateway 和VPC endpoint，创建内部子网路由表，创建外部子网路由表。删除已经创建完成的资源，包括：子网、路由表、vpc endpoint、NAT Gateway、Elastic IP。</p>
<ul>
<ul>
<li>
<h4>CreateExternalRoute – 对应 python 程序 create_external_route.zip</h4>
</li>
</ul>
</ul>
<p>功能：创建外部子网路由表中的路由。因为 NAT Gateway 的创建速度比较慢，创建路由时一定要等待 NAT Gateway 的状态变成 available 后才可以成功。如果将此功能与 SharedInfra 放在一起，在执行的时候容易发生 Lambda 运行超时错误。删除已经创建的路由信息。</p>
<ul>
<ul>
<li>
<h4>SubnetAutomation – 对应 python 程序 subnet_creation.zip</h4>
</li>
</ul>
</ul>
<p>功能：根据输入的参数，计算网路的子网掩码，创建公共子网、外部子网和内部子网，并将在公共子网路由表、内部子网路由表和外部子网路由表关联到相应的子网上。删除已经创建完成子网。在 CreateBaseVpc.json 模板运行时，通过创建用户定义资源 ExternalRouteCreation和SharedInfraCreation 分别触发 Lambda 功能 CreateExternalRoute 和 SharedInfra，从而完成共享资源的创建。并提供了 SubnetAutomation 的功能函数 ARN，供运行第二个模板时调用。</p>
<p>第二个模板 (SubnetAuto.json) 创建动态资源，例如根据输入参数的不同计算子网掩码、创建子网并分配路由表。</p>
<p>本方案中创建子网时的输入参数并不需要 CIDR，只需要指定子网要提供的可用 IP 地址的个数即可，程序在计算可用 IP 地址时已经排除了 AWS 子网子网中保留的5个 IP 地址。例如：如果要创建有50个 IP 的子网，则子网掩码是/26，共计有64-5=59个可用IP地址；如果要创建有16个 IP 的子网，则子网掩码是/27，共计有32-5=27个可用 IP 地址。</p>
<p>创建子网的参数输入规则如下：</p>
<ol>
<li>每个子网包含4个部分，之间使用“:”分隔 – 功能: IP 地址数量:可用区:子网类型</li>
<li>可用区根据Region的不同可选项为：1a,1b,1c,1d,1e等</li>
<li>子网类型的可选项为：p（公共子网），e（外部子网）或者 i（内部子网）</li>
<li>不同子网之间使用“,”分隔。</li>
</ol>
<h2>安装和运行</h2>
<ol>
<ol>
<li>在浏览器中输入：<a href="https://github.com/shaneliuyx/autosubnet_creation">https://github.com/shaneliuyx/autosubnet_creation</a>， 下载2个 json 文件和3个 zip 文件。将3个 zip 文件上传到一个 S3 存储桶中。</li>
<li>打开 AWS 控制台，并选择 CloudFormation，选择存储在本地的 json 文件 json，运行 CloudFormation 模板。</li>
<li>假设输入缺省的 PublicSubnetCapacity 和 VpcCidr 如下：</li>
</ol>
</ol>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template1.png" alt="vpc-cloudformation-template1" width="878" height="399" /></a></p>
<ol>
<ol>
<li>选择 Next，直至 AWS 资源开始创建</li>
<li>最终运行结果如下：</li>
</ol>
</ol>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template2.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template2.png" alt="vpc-cloudformation-template2" width="878" height="387" /></a></p>
<p>创建的 Subnet 如下：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template3.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template3.png" alt="vpc-cloudformation-template3" width="878" height="69" /></a></p>
<p>公共子网路由表：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template4.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template4.png" alt="vpc-cloudformation-template4" width="560" height="133" /></a></p>
<ol>
<ol>
<li>打开 AWS 控制台，并选择 CloudFormation，选择存储在本地的 json 文件 json，运行 CloudFormation 模板。</li>
<li>输入 SubnetParameters：web1:50:1a:p,web1:50:1b:p,app1:50:1a:e,app1:50:1b:e,db1:50:1a:i,db1:50:1b:i</li>
</ol>
</ol>
<p>这将创建6个子网，其中 Web、APP 和 DB 各2个子网，分布在2个 AZ 中:</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template5.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template5.png" alt="vpc-cloudformation-template5" width="878" height="346" /></a></p>
<ol>
<ol>
<li>运行结果如下:</li>
</ol>
</ol>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template6.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template6.png" alt="vpc-cloudformation-template6" width="878" height="204" /></a></p>
<p>创建的子网：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template7.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template7.png" alt="vpc-cloudformation-template7" width="878" height="69" /></a><br />
<a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template8.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template8.png" alt="vpc-cloudformation-template8" width="878" height="72" /></a><br />
<a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template9.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template9.png" alt="vpc-cloudformation-template9" width="878" height="70" /></a></p>
<p>内部子网路由表：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template10.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template10.png" alt="vpc-cloudformation-template10" width="650" height="270" /></a></p>
<p>外部子网路由表：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template11.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template11.png" alt="vpc-cloudformation-template11" width="650" height="305" /></a></p>
<p>假设现在还要创建一个包含16个有效 IP 的公共子网用于部署网络设备，可以再运行一次SubnetAuto.json，输出参数：net1:16:1a:p,net1:16:1b:p<br />
则可以创建出如下子网：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template12.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template12.png" alt="vpc-cloudformation-template12" width="878" height="68" /></a></p>
<h2>与其他 CloudFormation 模板配合使用，进行 Landing Zone 部署</h2>
<p>Landing Zone 中文名称翻译成着陆区，是指 AWS 的基本环境，用户在其上部署安全和运维流程。Landing Zone 的内容包含：账户结构、账户安全基线、网络结构和AWS用户访问管理。下面简单的介绍一下 AWS Landing Zone 的最佳实践。</p>
<ul>
<ul>
<li>
<h4>账户结构</h4>
</li>
</ul>
</ul>
<p>AWS 建议账户的划分与企业的组织架构和运维部门的组织架构一致。例如按照如下结构划分账户：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template13.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template13.png" alt="vpc-cloudformation-template13" width="400" height="451" /></a></p>
<ul>
<ul>
<li>
<h4>账户安全基线</h4>
</li>
</ul>
</ul>
<p>AWS 建议在所有账户内打开 CloudTrail 和 AWS Config 功能。所有日志信息要复制到安全账户内的 S3 存储桶中。建立跨账户访问的 Auditor 角色。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template14.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/vpc-cloudformation-template14.png" alt="vpc-cloudformation-template14" width="400" height="433" /></a></p>
<ul>
<ul>
<li>
<h4>网络结构</h4>
</li>
</ul>
</ul>
<p>AWS 建议删除缺省 VPC，建立客户自己定义的 VPC。建立共享 VPC（包含目录服务、邮件服务器等），应用 VPC 与共享 VP C建立 Peer 关系。通过 VPN 或者 Direct Connect 与线下的数据中心建立网络连接，或者采用 Transit VPC（参考 <a href="https://amazonaws-china.com/answers/networking/aws-global-transit-network/">https://aws.amazon.com/answers/networking/aws-global-transit-network/</a> ，<a href="https://amazonaws-china.com/blogs/aws/aws-solution-transit-vpc/">https://aws.amazon.com/blogs/aws/aws-solution-transit-vpc/</a> ）建立集中的网络控制机制。网络输入输出的安全控制（建立堡垒机，建立 Security Group、网络 ACL 或者第三方的防火墙工具）</p>
<ul>
<ul>
<li>
<h4>AWS 用户访问管理</h4>
</li>
</ul>
</ul>
<p>包括建议基于 SAML 的单点登录，建立跨账户角色访问机制等。</p>
<p>上述介绍的建立 VPC 和子网的方法可以看成建立 Landing Zone 的基础，在此之上，我们还可以使用 CloudFormation 建立堡垒机，打开 CloudTrail 和 AWS config，建立不同账户间的日志（log）复制机制，建立 Config Rule 进行合规性检查等等。 AWS 已经开发出多个 QuickStart CloudFormation 脚本协助用户完成上述工作，但是这些脚本在中国区（BJS）运行时需要做一些修改。下表列出了一些可用的资源，其中中国区部署模板是我针对中国区的特点修改过的，可以在BJS正常运行。</p>
<table border="1">
<tbody>
<tr>
<td></td>
<td></td>
<td><strong>原始代码</strong> <strong>参考</strong></td>
<td><strong>AWS </strong><strong>中国区部署模板</strong></td>
</tr>
<tr>
<td rowspan="5"><strong>账户安全基线</strong></td>
<td>配置 AWS config 和 CloudTrail</td>
<td rowspan="3"><a href="https://github.com/aws-quickstart/quickstart-compliance-pci">https://github.com/aws-quickstart/quickstart-compliance-pci</a></td>
<td><a href="https://s3.cn-north-1.amazonaws.com.cn/shane/quickstart-security/logging.template">https://s3.cn-north-1.amazonaws.com.cn/shane/quickstart-security/logging.template</a></td>
</tr>
<tr>
<td>配置 IAM 角色</td>
<td><a href="https://s3.cn-north-1.amazonaws.com.cn/shane/quickstart-security/iam.template">https://s3.cn-north-1.amazonaws.com.cn/shane/quickstart-security/iam.template</a></td>
</tr>
<tr>
<td>配置 Config rules</td>
<td><a href="https://s3.cn-north-1.amazonaws.com.cn/shane/quickstart-security/config-rules.template">https://s3.cn-north-1.amazonaws.com.cn/shane/quickstart-security/config-rules.template</a></td>
</tr>
<tr>
<td>将 CloudWatch Log 转储到S3存储桶</td>
<td><a href="https://github.com/alertlogic/cloudwatch-logs-s3-export#setup">https://github.com/alertlogic/cloudwatch-logs-s3-export#setup</a></td>
<td><a href="https://s3.cn-north-1.amazonaws.com.cn/shane/cwl-s3-export-new.template">https://s3.cn-north-1.amazonaws.com.cn/shane/cwl-s3-export-new.template</a></p>
<p>使用说明：<a href="https://s3.cn-north-1.amazonaws.com.cn/shane/User+Guide+-+Copy+VPC+Flow+Logs+to+S3+CloudFormation+Templates.docx">https://s3.cn-north-1.amazonaws.com.cn/shane/User+Guide+-+Copy+VPC+Flow+Logs+to+S3+CloudFormation+Templates.docx</a></td>
</tr>
<tr>
<td>将一个账户下的 S3 存储桶复制到另一个账户的 S3</td>
<td></td>
<td><a href="https://s3.cn-north-1.amazonaws.com.cn/shane/s3-to-s3/1source.json">https://s3.cn-north-1.amazonaws.com.cn/shane/s3-to-s3/1source.json</a><a href="https://s3.cn-north-1.amazonaws.com.cn/shane/s3-to-s3/2target.json">https://s3.cn-north-1.amazonaws.com.cn/shane/s3-to-s3/2target.json</a><a href="https://s3.cn-north-1.amazonaws.com.cn/shane/s3-to-s3/3source.json">https://s3.cn-north-1.amazonaws.com.cn/shane/s3-to-s3/3source.json</a></p>
<p>使用说明：<a href="https://s3.cn-north-1.amazonaws.com.cn/shane/s3-to-s3/User+Guide+-+S3+to+S3+Replication+CloudFormation+Templates.docx">https://s3.cn-north-1.amazonaws.com.cn/shane/s3-to-s3/User+Guide+-+S3+to+S3+Replication+CloudFormation+Templates.docx</a></td>
</tr>
<tr>
<td rowspan="2"><strong>网络结构</strong></td>
<td>配置 Linux Bastion</td>
<td><a href="https://github.com/aws-quickstart/quickstart-linux-bastion">https://github.com/aws-quickstart/quickstart-linux-bastion</a></td>
<td><a href="https://s3.cn-north-1.amazonaws.com.cn/shane/linux-bastion.template">https://s3.cn-north-1.amazonaws.com.cn/shane/linux-bastion.template</a>不支持 CentOS</td>
</tr>
<tr>
<td>建立 VPC 和分配 Subnet</td>
<td><a href="https://github.com/aws-quickstart/quickstart-aws-vpc">https://github.com/aws-quickstart/quickstart-aws-vpc</a></td>
<td><a href="https://github.com/shaneliuyx/autosubnet_creation">https://github.com/shaneliuyx/autosubnet_creation</a></td>
</tr>
</tbody>
</table>
<h3></h3>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e5%bb%ba%e7%ab%8b-vpc-%e5%b9%b6%e5%9f%ba%e4%ba%8e%e5%8f%82%e6%95%b0%e5%8a%a8%e6%80%81%e5%88%9b%e5%bb%ba%e5%ad%90%e7%bd%91%e7%9a%84-cloudformation-%e6%a8%a1%e6%9d%bf/">建立 VPC 并基于参数动态创建子网的 CloudFormation 模板</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e5%bb%ba%e7%ab%8b-vpc-%e5%b9%b6%e5%9f%ba%e4%ba%8e%e5%8f%82%e6%95%b0%e5%8a%a8%e6%80%81%e5%88%9b%e5%bb%ba%e5%ad%90%e7%bd%91%e7%9a%84-cloudformation-%e6%a8%a1%e6%9d%bf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用 AWS Lambda 支持的宏扩展 AWS CloudFormation</title>
		<link>https://www.fuwuqiok.com/%e4%bd%bf%e7%94%a8-aws-lambda-%e6%94%af%e6%8c%81%e7%9a%84%e5%ae%8f%e6%89%a9%e5%b1%95-aws-cloudformation/</link>
		<comments>https://www.fuwuqiok.com/%e4%bd%bf%e7%94%a8-aws-lambda-%e6%94%af%e6%8c%81%e7%9a%84%e5%ae%8f%e6%89%a9%e5%b1%95-aws-cloudformation/#comments</comments>
		<pubDate>Wed, 21 Nov 2018 06:34:24 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[aliyun服务器代维]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[linux代维]]></category>
		<category><![CDATA[linux服务器维护]]></category>
		<category><![CDATA[linux系统代维]]></category>
		<category><![CDATA[服务器安全代维]]></category>
		<category><![CDATA[服务器安全设置]]></category>
		<category><![CDATA[系统安全代维]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[使用 AWS Lambda 支持的宏扩展 AWS CloudFormation]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=3865</guid>
		<description><![CDATA[<p>今天，我非常高兴为大家介绍 AWS CloudFormation 的一个强大新功能，它叫做 Macros。Cl [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e4%bd%bf%e7%94%a8-aws-lambda-%e6%94%af%e6%8c%81%e7%9a%84%e5%ae%8f%e6%89%a9%e5%b1%95-aws-cloudformation/">使用 AWS Lambda 支持的宏扩展 AWS CloudFormation</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>今天，我非常高兴为大家介绍 <a title="" href="https://amazonaws-china.com/cloudformation/">AWS CloudFormation</a> 的一个强大新功能，它叫做 <strong>Macros</strong>。CloudFormation Macros 允许开发人员调用 <a title="" href="https://amazonaws-china.com/lambda/">AWS Lambda</a> 支持的转换函数，从而扩展 CloudFormation 模板的原生句法。它采用与支持流行的<a title="无服务器应用程序模型 — SAM" href="https://github.com/awslabs/serverless-application-model">无服务器应用程序模型</a>功能所用的相同技术，但转换函数 (transform) 在您自己的账户中运行，使用您自己的 lambda 函数，并且是完全可自定义的。如果您还不熟悉 AWS，请记住 CloudFormation 是一个对基础设施即代码（YAML 或 JSON）的建模和定义绝对关键的工具。它也是所有 AWS 产品的核心组件之一，我们的许多服务都依赖它而存在。</p>
<p>宏的使用有两个主要步骤。首先，我们需要定义宏。当然，为此我们需要使用 CloudFormation 模板。然后，为了在我们的模板中使用宏，我们需要将它添加为整个模板的转换函数，或者直接调用它。在本博文中，宏和转换函数这两个术语基本可以互换。已经准备好了解其工作原理了？</p>
<h3>创建 CloudFormation 宏</h3>
<p>宏的创建有两个要素：一是定义，二是实现。如要创建宏的定义，我们需要一个类型为 <code>AWS::CloudFormation::Macro</code> 的 CloudFormation 资源，该资源定义了需要使用的 Lamda 函数以及应当调用的宏。</p>
<pre class=" language-yaml" data-language="YAML"><code class=" language-yaml">Type<span class="token punctuation">:</span> <span class="token string">"AWS::CloudFormation::Macro"</span>
<span class="token key atrule">Properties</span><span class="token punctuation">:</span>
  <span class="token key atrule">Description</span><span class="token punctuation">:</span> String
  <span class="token key atrule">FunctionName</span><span class="token punctuation">:</span> String
  <span class="token key atrule">LogGroupName</span><span class="token punctuation">:</span> String
  <span class="token key atrule">LogRoleARN</span><span class="token punctuation">:</span> String
  <span class="token key atrule">Name</span><span class="token punctuation">:</span> String</code></pre>
<p>宏的 <code>Name</code> 必须在整个区域是唯一的，并且通过 <code>FunctionName</code> 引用的 Lambda 函数必须与要创建的宏位于同一区域。您执行宏模板时，将会使该宏对其他模板也同样可用。宏的实现由 Lambda 函数完成。宏可以位于自己的模板中，也可与其他宏组合，但无法在注册宏的模板中使用该宏。Lambda 函数会收到与以下类似的 JSON 负载：</p>
<pre class=" language-json" data-language="Json"><code class=" language-json"><span class="token punctuation">{</span>
    <span class="token property">"region"</span><span class="token operator">:</span> <span class="token string">"us-east-1"</span><span class="token punctuation">,</span>
    <span class="token property">"accountId"</span><span class="token operator">:</span> <span class="token string">"$ACCOUNT_ID"</span><span class="token punctuation">,</span>
    <span class="token property">"fragment"</span><span class="token operator">:</span> <span class="token punctuation">{</span> ... <span class="token punctuation">}</span><span class="token punctuation">,</span>
    <span class="token property">"transformId"</span><span class="token operator">:</span> <span class="token string">"$TRANSFORM_ID"</span><span class="token punctuation">,</span>
    <span class="token property">"params"</span><span class="token operator">:</span> <span class="token punctuation">{</span> ... <span class="token punctuation">}</span><span class="token punctuation">,</span>
    <span class="token property">"requestId"</span><span class="token operator">:</span> <span class="token string">"$REQUEST_ID"</span><span class="token punctuation">,</span>
    <span class="token property">"templateParameterValues"</span><span class="token operator">:</span> <span class="token punctuation">{</span> ... <span class="token punctuation">}</span>
<span class="token punctuation">}</span></code></pre>
<p>负载的 <code>fragment</code> 部分包含了整个模板或者模板的相关区段 — 具体取决于如何从调用宏的模板中调用转换函数。区段始终在 JSON 中，即使模板在 YAML 中亦是如此。</p>
<p>Lambda 函数预计将会返回一个简单的 JSON 应答：</p>
<pre class=" language-json" data-language="Json"><code class=" language-json"><span class="token punctuation">{</span>
    <span class="token property">"requestId"</span><span class="token operator">:</span> <span class="token string">"$REQUEST_ID"</span><span class="token punctuation">,</span>
    <span class="token property">"status"</span><span class="token operator">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span>
    <span class="token property">"fragment"</span><span class="token operator">:</span> <span class="token punctuation">{</span> ... <span class="token punctuation">}</span>
<span class="token punctuation">}</span></code></pre>
<p><code>requestId</code> 需要输入负载中收到的相同，如果 <code>status</code> 包含除 success（不区分大小写）以外的任何值，则变更集的创建将会失败。然后，<code>fragment</code> 必须包含转换后模板的有效 CloudFormation JSON。即使您的函数未执行任何操作，仍然需要返回它的区段以包含到最终模板中。</p>
<h3>使用 CloudFormation 宏</h3>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/cfn_macro_use-1024x557.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/cfn_macro_use-1024x557.png" alt="cfn_macro_use-1024x557" width="1024" height="557" /></a><br />
如要使用宏，我们只需使用要求的参数调用<a><code>Fn::Transform</code></a>。如果您希望利用宏来对整个模板进行句法分析，则我们可以按照与 SAM: <code>Transform: [Echo]</code> 相同的方式，将其列入模板中的转换函数列表中。在我们执行模板时，通过调用每个宏的制定函数并返回最终模板，转换函数将会被收集到变更集中。</p>
<p>假设我们有一个名为 EchoFunction 的 虚拟 Lambda 函数，它只是记录通过它的数据并返回未加任何修改的区段。我们将宏定义为一种正常的 CloudFormation 资源，与以下类似：</p>
<pre class=" language-yaml" data-language="YAML"><code class=" language-yaml">EchoMacro<span class="token punctuation">:</span>
  <span class="token key atrule">Type</span><span class="token punctuation">:</span> <span class="token string">"AWS::CloudFormation::Macro"</span>
  <span class="token key atrule">Properties</span><span class="token punctuation">:</span>
    <span class="token key atrule">FunctionName</span><span class="token punctuation">:</span> arn<span class="token punctuation">:</span>aws<span class="token punctuation">:</span>lambda<span class="token punctuation">:</span>us<span class="token punctuation">-</span>east<span class="token punctuation">-</span>1<span class="token punctuation">:</span>1234567<span class="token punctuation">:</span>function<span class="token punctuation">:</span>EchoFunction
	<span class="token key atrule">Name</span><span class="token punctuation">:</span> EchoMacro</code></pre>
<p>Lambda 函数的代码可能简单如下：</p>
<pre class=" language-python" data-language="Python"><code class=" language-python"><span class="token keyword">def</span> <span class="token function">lambda_handler</span><span class="token punctuation">(</span>event<span class="token punctuation">,</span> context<span class="token punctuation">)</span><span class="token punctuation">:</span>
    <span class="token keyword">print</span><span class="token punctuation">(</span>event<span class="token punctuation">)</span>
    <span class="token keyword">return</span> <span class="token punctuation">{</span>
        <span class="token string">"requestId"</span><span class="token punctuation">:</span> event<span class="token punctuation">[</span><span class="token string">'requestId'</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
        <span class="token string">"status"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span>
        <span class="token string">"fragment"</span><span class="token punctuation">:</span> event<span class="token punctuation">[</span><span class="token string">"fragment"</span><span class="token punctuation">]</span>
    <span class="token punctuation">}</span></code></pre>
<p>然后在部署此函数并执行宏模板后，我们可以在任何其他模板的顶层的转换函数中调用宏，与以下类似：</p>
<pre class=" language-yaml" data-language="YAML"><code class=" language-yaml">AWSTemplateFormatVersion<span class="token punctuation">:</span> <span class="token datetime number">2010-09-09</span> 
 <span class="token key atrule">Transform</span><span class="token punctuation">:</span> <span class="token punctuation">[</span>EchoMacro<span class="token punctuation">,</span> AWS<span class="token punctuation">:</span><span class="token punctuation">:</span>Serverless<span class="token punctuation">-</span><span class="token datetime number">2016-10-31</span><span class="token punctuation">]</span>
 <span class="token key atrule">Resources</span><span class="token punctuation">:</span>
    <span class="token key atrule">FancyTable</span><span class="token punctuation">:</span>
      <span class="token key atrule">Type</span><span class="token punctuation">:</span> AWS<span class="token punctuation">:</span><span class="token punctuation">:</span>Serverless<span class="token punctuation">:</span><span class="token punctuation">:</span>SimpleTable</code></pre>
<p>CloudFormation 会首先调用我们定义的 Echo 宏，然后调用 AWS::Serverless 转换函数，从而创建模板的变更集。它将按照列表中的顺序执行转换函数中列举的宏。</p>
<p>此外，我们还可以使用内部函数 <code>Fn::Transform</code> 调用宏，该函数允许我们输入额外的参数。例如：</p>
<pre class=" language-yaml" data-language="YAML"><code class=" language-yaml">AWSTemplateFormatVersion<span class="token punctuation">:</span> <span class="token datetime number">2010-09-09</span>
<span class="token key atrule">Resources</span><span class="token punctuation">:</span>
  <span class="token key atrule">MyS3Bucket</span><span class="token punctuation">:</span>
    <span class="token key atrule">Type</span><span class="token punctuation">:</span> <span class="token string">'AWS::S3::Bucket'</span>
    <span class="token key atrule">Fn::Transform</span><span class="token punctuation">:</span>
      <span class="token key atrule">Name</span><span class="token punctuation">:</span> EchoMacro
      <span class="token key atrule">Parameters</span><span class="token punctuation">:</span>
        <span class="token key atrule">Key</span><span class="token punctuation">:</span> Value</code></pre>
<p>内联转换函数将拥有其所有同级节点和下级节点的访问权限。转换函数的处理顺序为由深到浅，这意味着最顶层的转换函数将会最后执行。我知道大多数人都会说：不对，你不能在宏中包含宏 — 但想法不错。</p>
<p>在您执行 CloudFormation 模板时，它将会直接要求您创建一个变更集，并且您可以在部署前预览输出结果。<br />
<a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/cfn-1024x696.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/cfn-1024x696.png" alt="cfn-1024x696" width="1024" height="696" /></a></p>
<h3>示例宏</h3>
<p>我们正在推出多个<a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html">参考</a>宏，以帮助开发人员上手，同时我预计许多人也将发布更多的宏。以下四个宏是在此功能发布前，一个小的内部骇客马拉松的优胜作品：</p>
<table>
<tbody>
<tr>
<th>名称</th>
<th>描述</th>
<th>作者</th>
</tr>
<tr>
<td><a href="https://github.com/awslabs/aws-cloudformation-templates/tree/master/aws/services/CloudFormation/MacrosExamples/PyPlate/">PyPlate</a></td>
<td>允许您在模板中插入内敛 Python 函数</td>
<td>Jay McConnel — 合作伙伴解决方案架构师</td>
</tr>
<tr>
<td><a href="https://github.com/awslabs/aws-cloudformation-templates/tree/master/aws/services/CloudFormation/MacrosExamples/ShortHand/">ShortHand</a></td>
<td>定义通用 cloudformation 资源的简略句法</td>
<td><a href="https://www.linkedin.com/in/stilvoid">Steve Engledow — 解决方案构建师</a></td>
</tr>
<tr>
<td><a href="https://github.com/awslabs/aws-cloudformation-templates/tree/master/aws/services/CloudFormation/MacrosExamples/StackMetrics/">StackMetrics</a></td>
<td>为堆栈添加 Cloudwatch 指标</td>
<td>Steve Engledow 和 <a href="https://linkedin.com/in/jgregson">Jason Gregson — 全球解决方案架构师</a></td>
</tr>
<tr>
<td><a href="https://github.com/awslabs/aws-cloudformation-templates/tree/master/aws/services/CloudFormation/MacrosExamples/StringFunctions/">String Functions</a></td>
<td>为您的模板添加常用的串函数</td>
<td>Jay McConnel — 合作伙伴解决方案架构师</td>
</tr>
</tbody>
</table>
<p>以下是我认为有人可能会感兴趣实现的一些理念：</p>
<ul>
<li>自动注册 R53 域 + <a title="" href="https://amazonaws-china.com/certificate-manager/">AWS Certificate Manager (ACM)</a> 凭证预置</li>
<li>自动分配带自定义域的 S3 静态网站或 <a title="" href="https://amazonaws-china.com/cloudfront/">Amazon CloudFront</a></li>
<li>扩展 CloudFormation 映射以读取 DynamoDB 表</li>
<li>自动为 <a title="" href="https://amazonaws-china.com/vpc/">Amazon Virtual Private Cloud</a> 设置 IPv6</li>
<li>自动订阅 Webhook 以与 Slack、Twitter、Messenger 集成</li>
</ul>
<p>如果您有任何奇妙的想法，我非常期待您写出来！</p>
<h3>现已推出</h3>
<p>CloudFormation Macros 从今天开始已在所有支持 AWS Lambda 的 AWS 区域推出。使用 Macros 不会发生额外的 CloudFormation 费用，这意味着您只需承担正常的 AWS Lambda 函数费用。更多信息请参阅<a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html">文档</a>。</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e4%bd%bf%e7%94%a8-aws-lambda-%e6%94%af%e6%8c%81%e7%9a%84%e5%ae%8f%e6%89%a9%e5%b1%95-aws-cloudformation/">使用 AWS Lambda 支持的宏扩展 AWS CloudFormation</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e4%bd%bf%e7%94%a8-aws-lambda-%e6%94%af%e6%8c%81%e7%9a%84%e5%ae%8f%e6%89%a9%e5%b1%95-aws-cloudformation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>将亚马逊 AWS S3 存储桶的访问权限到一个特定 IAM 角色</title>
		<link>https://www.fuwuqiok.com/%e5%b0%86%e4%ba%9a%e9%a9%ac%e9%80%8a-aws-s3-%e5%ad%98%e5%82%a8%e6%a1%b6%e7%9a%84%e8%ae%bf%e9%97%ae%e6%9d%83%e9%99%90%e5%88%b0%e4%b8%80%e4%b8%aa%e7%89%b9%e5%ae%9a-iam-%e8%a7%92%e8%89%b2/</link>
		<comments>https://www.fuwuqiok.com/%e5%b0%86%e4%ba%9a%e9%a9%ac%e9%80%8a-aws-s3-%e5%ad%98%e5%82%a8%e6%a1%b6%e7%9a%84%e8%ae%bf%e9%97%ae%e6%9d%83%e9%99%90%e5%88%b0%e4%b8%80%e4%b8%aa%e7%89%b9%e5%ae%9a-iam-%e8%a7%92%e8%89%b2/#comments</comments>
		<pubDate>Wed, 21 Nov 2018 06:29:48 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[linux代维]]></category>
		<category><![CDATA[linux服务器代维]]></category>
		<category><![CDATA[linux服务器代维护]]></category>
		<category><![CDATA[linux服务器维护]]></category>
		<category><![CDATA[服务器代维]]></category>
		<category><![CDATA[服务器代维护]]></category>
		<category><![CDATA[服务器安全代维]]></category>
		<category><![CDATA[服务器安全设置]]></category>
		<category><![CDATA[服务器维护]]></category>
		<category><![CDATA[服务器运维]]></category>
		<category><![CDATA[系统安全代维]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[网站防挂马]]></category>
		<category><![CDATA[将亚马逊 AWS S3 存储桶的访问权限到一个特定 IAM 角色]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=3843</guid>
		<description><![CDATA[<p>AWS 的一名云支持工程师，客户经常问我如何将 Amazon S3 存储桶访问权限限制到特定的 AWS Ide [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e5%b0%86%e4%ba%9a%e9%a9%ac%e9%80%8a-aws-s3-%e5%ad%98%e5%82%a8%e6%a1%b6%e7%9a%84%e8%ae%bf%e9%97%ae%e6%9d%83%e9%99%90%e5%88%b0%e4%b8%80%e4%b8%aa%e7%89%b9%e5%ae%9a-iam-%e8%a7%92%e8%89%b2/">将亚马逊 AWS S3 存储桶的访问权限到一个特定 IAM 角色</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>AWS 的一名云支持工程师，客户经常问我如何将 <a href="https://amazonaws-china.com/cn/s3">Amazon S3</a> 存储桶访问权限限制到特定的 AWS Identity and Access Management (IAM) 角色。通常，他们会尝试以对待 IAM 用户的相同方式执行此操作：使用存储桶策略显式 Deny 不想授予访问权限的所有 Principals（用户和角色）。这种方法的缺点是需要维护存储桶策略。如果将一个新的 IAM 用户添加到账户，并且其 Action 为 “s3:*”，则该用户将获得访问该存储桶的权限。您可以反转逻辑并在存储桶策略的 Deny 语句中利用 NotPrincipal 元素，而不必指定要阻止其访问的用户列表。此元素会为其值中未列出的任何用户创建一个显式的 Deny。</p>
<section class="blog-post-content">但事实证明，这种反转逻辑的方法在处理 IAM 角色时存在问题，因为这种角色的 Principal 值包含两个 Amazon 资源名称 (ARN)，即 role ARN 和 assumed-role ARN。 role ARN 是 IAM 角色本身的标识符， assumed-role ARN 则用于标识日志中的角色会话。在使用 NotPrincipal 元素时，您必须同时包含两个 ARN，此方法才能正常工作，其中第二个 ARN 应包含一个变量名称。通常，您应指定一个通配符，用于表示变量字符串，但不允许在 Principal 或 NotPrincipal 元素中指定此通配符。在本博文中，我会向您展示如何使用 Conditions（而非NotPrincipal 元素），将 S3 存储桶的访问权限限制到一个账户内的特定 IAM 角色或用户。即便相同账户中的另一个用户拥有 Admin 策略或带有 s3:* 的策略，只要未被显式列出，也同样会被拒绝。例如，您可以使用此方法配置存储桶，以供 Auto Scaling 组内的实例访问。您还可以使用此方法，限制对具有高级别安全需求的存储桶的访问。<span id="more-1035"></span></p>
<h3>解决方案概述</h3>
<p>本文所述的解决方案使用存储桶策略来管理对 S3 存储桶的访问 – 即使实体可以访问完整的 S3 API。下图展示了此解决方案如何应用于同一账户内的存储桶。</p>
<p><img class="alignnone" title="展示此解决方案如何应用于同一账户内的存储桶的图解" src="https://dmhnzl5mp9mj6.cloudfront.net/security_awsblog/images/CC_Diagram1_0717.png" alt="展示此解决方案如何应用于同一账户内的存储桶的图解" width="466" height="442" /></p>
<ol>
<li>IAM 用户的策略和角色的用户策略授予对 “s3:*” 的访问权限。</li>
<li>S3 存储桶策略将访问权限限制为仅限该角色。</li>
<li>IAM 用户和角色都可以访问该账户中的存储桶。该角色可以访问这两个存储桶，但用户只能访问没有附加存储桶策略的存储桶。即使角色和用户都拥有完整的 “s3:*” 权限，存储桶策略仍会拒绝任何不具有该角色的人员访问该存储桶。</li>
</ol>
<p>跨账户方法的主要不同之处在于，每个存储桶必须附加存储桶策略。下图展示了这种方法如何应用于跨账户部署场景。</p>
<p><img class="alignnone" title="展示此解决方案如何应用于跨账户部署场景的图解" src="https://dmhnzl5mp9mj6.cloudfront.net/security_awsblog/images/CC_Diagram2_0717_a.png" alt="展示此解决方案如何应用于跨账户部署场景的图解" width="608" height="457" /></p>
<ol>
<li>IAM 角色的用户策略和存储桶账户中的 IAM 用户策略均授予对“s3:*”的访问权限</li>
<li>如果任何人的 user:id 与角色的相应值不同，并且策略定义了允许角色对存储桶执行哪些操作，则存储桶策略会拒绝其访问。</li>
<li>存储桶策略允许从其他账户访问角色。</li>
<li>IAM 用户和角色可以在存储桶策略中没有 Deny 的情况下访问存储桶。角色可以同时访问这两个存储桶，因为 Deny 仅适用于其 user:id 不等于角色的相应值的主体。</li>
</ol>
<h3>了解 NotPrincipal 元素及其用法</h3>
<p>您可以使用 IAM 或 S3 存储桶策略的 NotPrincipal 元素，仅限特定用户组访问资源。此元素允许您阻止未在其值数组中定义的所有用户，即使他们自己的 IAM 用户策略中具有 Allow 也是如此。因此，如果您有一个用户应该可以访问除 S3 中的某个存储桶以外的所有存储桶，则可以在该存储桶本身上进行此定义，而无需编辑用户的 IAM 策略堆栈。</p>
<p>但对于 IAM 角色来说，这要更为复杂，因为角色是由 Principal 中的两个 ARN 定义的：role ARN 和 assumed-role ARN。role ARN (arn:aws:iam::<strong>ACCOUNTNUMBER</strong>:role/<strong>ROLE-NAME</strong>) 是静态的，独立于角色会话发起者。（在本文中，切记将 <strong>placeholder information</strong> 替换为您自己的账户信息。）assumed-roleARN (arn:aws:sts::<strong>ACCOUNTNUMBER</strong>:assumed-role/<strong>ROLE-NAME</strong>/<strong>ROLE-SESSION-NAME</strong>) 将因为角色会话名称定义的内容而异。对于具有一个角色的用户发出的 API 调用，您可以通过查看 AWS CloudTrail 条目中的以下 Identity 元素来了解此信息。</p>
<div>
<pre>{
  "type": "AssumedRole",
  "principalId": "<strong>AROAJI4AVVEXAMPLE:ROLE-SESSION-NAME</strong>",
  "arn": "arn:aws:sts::<strong>ACCOUNTNUMBER:assumed-role/ROLE-NAME/ROLE-SESSION-NAME</strong>",
  "accountId": "<strong>ACCOUNTNUMBER</strong>",
  "accessKeyId": "<strong>ASIAEXAMPLEKEY</strong>",
  "sessionContext": {
    "attributes": {
      "mfaAuthenticated": "false",
      "creationDate": "XXXX-XX-XXTXX:XX:XXZ"
    },
    "sessionIssuer": {
      "type": "Role",
      "principalId": "<strong>AROAJI4AVV3EXAMPLEID</strong>",
      "arn": "arn:aws:iam::<strong>ACCOUNTNUMBER:role/ROLE-NAME</strong>",
      "accountId": "<strong>ACCOUNTNUBMER</strong>",
      "userName": "<strong>ROLE-SESSION-NAME</strong>"
    }
  }
}</pre>
</div>
<p>在此 Identity 元素中，您可以看到 role ARN 和 assumed-role ARN。根据承担角色的用户不同，ROLE-SESSION-NAME 也可能会有所变化。principalId 值也包含此信息，但采用可以在存储桶策略的 Principal 元素以外使用的方式设置格式。在编写存储桶策略时，我会使用这些信息。</p>
<h3>向特定角色授予同账户存储桶访问权限</h3>
<p>在从同一账户访问存储桶时，在大多数情况下不必使用存储桶策略。这是因为存储桶策略定义了已由用户的直接 IAM 策略授予的访问权限。S3 存储桶策略通常用于跨账户访问，但您也可以使用它们，通过显式 Deny 来限制访问，这将应用于所有主体，无论是与存储桶位于相同账户中还是不同账户中的主体。</p>
<p>每个 IAM 实体（用户、组或角色）都有一个已定义的 <a href="http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#policy-vars-infotouse" target="_blank" rel="noopener noreferrer">aws:userid</a> 变量。您需要在存储桶策略中使用此变量，才能在条件元素内以例外的形式指定角色或用户。assumed-role 的 aws:userId 值定义为 UNIQUE-ROLE-ID:ROLE-SESSION-NAME（例如 AROAEXAMPLEID:userdefinedsessionname）。</p>
<p>要获得 IAM 角色的 AROAEXAMPLEID，请执行以下操作：</p>
<ol>
<li>务必安装 <a href="https://amazonaws-china.com/cli/" target="_blank" rel="noopener noreferrer">AWS CLI</a>，并打开一个命令提示符或 shell。</li>
<li>运行以下命令：aws iam get-role -–role-name <strong>ROLE-NAME</strong>。</li>
<li>在输出中，查找以 AROA 开头的 RoleId 字符串。您将在存储桶策略中使用它来将存储桶访问权限的范围仅限于此角色。</li>
</ol>
<p>在前述 CloudTrail 代码示例中，此 ID 为 principalId 元素。此元素的值十分重要，因为 AWS 策略变量也可以在 IAM 策略中作为字符串进行检查。您不必在 NotPrincipal 元素中指定 role 和 assumed-role ARN，而是可以将 StringNotLike 条件中的 aws:userId 值与通配符字符串一起使用。在 aws:userId 值内，您还需要添加账户的 Root 用户，以便在删除定义的角色时，不会致使存储桶完全无法访问。Root 账户的 userId 是账户编号。</p>
<p>使用您刚刚通过 AWS CLI 检索的 AROAEXAMPLEID，即可创建条件逻辑，让存储桶策略将存储桶访问权限的范围仅限于访问存储桶时使用此角色的用户。使用条件逻辑而非 NotPrincipal元素可支持使用通配符字符串，从而允许接受任何角色会话名称。</p>
<p>现在您已获得要允许其访问的角色 ID，接下来需要阻止与存储桶处于相同账户内的其他用户的访问。阻止未使用 IAM 角色或 Root 账户凭证的用户访问存储桶及其对象的策略如下所示。</p>
<div>
<pre>{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::<strong>MyExampleBucket</strong>",
        "arn:aws:s3:::<strong>MyExampleBucket</strong>/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "<strong>AROAEXAMPLEID:*</strong>",
            "<strong>111111111111</strong>"
          ]
        }
      }
    }
  ]
}</pre>
</div>
<p>您也可以对 IAM 用户使用相同的策略。IAM 用户拥有一个以 AIDA 开头的唯一 ID，您可以将此 ID 用于此用途。要查找此唯一 ID，请执行以下操作：</p>
<ol>
<li>安装 AWS CLI 后，打开命令提示符或 shell。</li>
<li>运行命令：aws iam get-user -–user-name <strong>USER-NAME</strong></li>
<li>在输出中，查找以 AIDAEXAMPLEID 开头的 userId 字符串。</li>
</ol>
<p>找到 userId 字符串之后，您可以将其置于“aws:userId”条件数组中，如以下示例所示。</p>
<div>
<pre>{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::<strong>MyExampleBucket</strong>",
        "arn:aws:s3:::<strong>MyExampleBucket</strong>/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "<strong>AROAEXAMPLEID:*</strong>",
            "<strong>AIDAEXAMPLEID</strong>",
            "<strong>111111111111</strong>"
          ]
        }
      }
    }
  ]
}</pre>
</div>
<h3>向特定 IAM 角色授予跨账户存储桶访问权限</h3>
<p>在上一节中，我向您展示了如何将 S3 存储桶访问权限限于同一个账户内的特定 IAM 角色或用户。现在，我将向您展示如何将访问权限限制到另一账户中的特定用户和角色。向 IAM 用户或角色授予跨账户存储桶访问权限时，您必须定义允许 IAM 用户或角色通过该访问权限执行哪些操作。<a href="http://blogs.aws.amazon.com/security/post/Tx3VRSWZ6B3SHAV/Writing-IAM-Policies-How-to-Grant-Access-to-an-Amazon-S3-Bucket" target="_blank" rel="noopener noreferrer">在先前的 AWS 安全性博客中</a>，Jim Scharf 撰文介绍了允许 IAM 实体通过 CLI/API 和控制台访问存储桶所需的权限。利用之前这篇博文中提供的信息，CLI/API 级访问存储桶策略应如下所示。</p>
<div>
<pre>{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<strong>111111111111</strong>:role/<strong>ROLENAME</strong>"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::<strong>MyExampleBucket</strong>"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<strong>111111111111</strong>:role/<strong>ROLENAME</strong>"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::<strong>MyExampleBucket</strong>/*"
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::<strong>MyExampleBucket</strong>",
                "arn:aws:s3:::<strong>MyExampleBucket</strong>/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:userId": [
                        "<strong>AROAEXAMPLEID</strong>:*",
                        "<strong>111111111111</strong>"
                    ]
                }
            }
        }
    ]
}</pre>
</div>
<p>以下策略显示了控制台级访问所需的服务操作，例如与控制台的 IAM 切换角色功能配合使用的操作。</p>
<div>
<pre>{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<strong>111111111111</strong>:role/<strong>ROLENAME</strong>"
            },
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<strong>111111111111</strong>:role/<strong>ROLENAME</strong>"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::<strong>MyExampleBucket</strong>"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<strong>111111111111</strong>:role/<strong>ROLENAME</strong>"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::<strong>MyExampleBucket</strong>/*"
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::<strong>MyExampleBucket</strong>",
                "arn:aws:s3:::<strong>MyExampleBucket</strong>/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:userId": [
                        "<strong>AROAEXAMPLEID</strong>:*",
                        "<strong>111111111111</strong>"
                    ]
                }
            }
        }
    ]
}</pre>
</div>
<p>要向其他账户中的 IAM 用户授予 API/CLI 访问权限，您需要将 IAM 用户的 AIDAEXAMPLEID 添加到“aws:userId”条件，就像我们上一节所做的那样。除了“aws:userId”条件之外，您还需要将 IAM 用户的完整 ARN 添加到这些策略的 Principal 元素。请注意，您不能向 IAM 用户授予跨账户控制台访问权限，因为该用户需要具备目标账户中的角色，但您可以通过 API/CLI 授予对存储桶的访问权限。具体如下所示。</p>
<div>
<pre>{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": [
                {
                    "AWS": [
                        "arn:aws:iam::<strong>222222222222</strong>:role/<strong>ROLENAME</strong>",
                        "arn:aws:iam::<strong>222222222222</strong>:user/<strong>USERNAME</strong>"
                    ]
                }
            ],
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::<strong>MyExampleBucket</strong>"
        },
        {
            "Effect": "Allow",
            "Principal": [
                {
                    "AWS": [
                        "arn:aws:iam::<strong>222222222222</strong>:role/<strong>ROLENAME</strong>",
                        "arn:aws:iam::<strong>222222222222</strong>:user/<strong>USERNAME</strong>"
                    ]
                }
            ],
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::<strong>MyExampleBucket</strong>/*"
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::<strong>MyExampleBucket</strong>",
                "arn:aws:s3:::<strong>MyExampleBucket</strong>/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:userId": [
                        "<strong>AROAEXAMPLEID</strong>:*",
                        "<strong>AIDAEXAMPLEID</strong>",
                        "<strong>111111111111</strong>"
                    ]
                }
            }
        }
    ]
}</pre>
</div>
<p>除了在存储桶策略中包含角色权限之外，您还需要在 IAM 用户或角色的用户策略中定义这些权限。这些权限可以添加到<a href="http://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#create-managed-policy-console" target="_blank" rel="noopener noreferrer">客户托管的策略</a>并<a href="http://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#attach-managed-policy-console" target="_blank" rel="noopener noreferrer">附加</a>到 IAM 控制台中的角色或用户，详见以下策略文档。</p>
<div>
<pre>{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::<strong>MyExampleBucket</strong>"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::<strong>MyExampleBucket</strong>/*"
    }
  ]
}</pre>
</div>
<p>按照本文中的指导，即使用户拥有 Admin 策略或带有 s3:* 的策略，也可以将 S3 存储桶访问权限限于本地账户内和不同账户中的特定 IAM 角色或用户。这种逻辑有多种应用，各种使用案例的要求可能会有所不同。例如，您可以使用此方法设置存储桶，以供 Auto Scaling 组内的实例访问。如同在包含个人记录和账户信息的存储桶中一样，您还可以使用此方法限制对具有高级别安全需求的存储桶的访问。务必牢记，最好始终仅将权限授予执行必要任务所需的资源。</p>
</section>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e5%b0%86%e4%ba%9a%e9%a9%ac%e9%80%8a-aws-s3-%e5%ad%98%e5%82%a8%e6%a1%b6%e7%9a%84%e8%ae%bf%e9%97%ae%e6%9d%83%e9%99%90%e5%88%b0%e4%b8%80%e4%b8%aa%e7%89%b9%e5%ae%9a-iam-%e8%a7%92%e8%89%b2/">将亚马逊 AWS S3 存储桶的访问权限到一个特定 IAM 角色</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e5%b0%86%e4%ba%9a%e9%a9%ac%e9%80%8a-aws-s3-%e5%ad%98%e5%82%a8%e6%a1%b6%e7%9a%84%e8%ae%bf%e9%97%ae%e6%9d%83%e9%99%90%e5%88%b0%e4%b8%80%e4%b8%aa%e7%89%b9%e5%ae%9a-iam-%e8%a7%92%e8%89%b2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>全站加速，Amazon CloudFront 配置</title>
		<link>https://www.fuwuqiok.com/%e5%85%a8%e7%ab%99%e5%8a%a0%e9%80%9f%ef%bc%8camazon-cloudfront-%e9%85%8d%e7%bd%ae/</link>
		<comments>https://www.fuwuqiok.com/%e5%85%a8%e7%ab%99%e5%8a%a0%e9%80%9f%ef%bc%8camazon-cloudfront-%e9%85%8d%e7%bd%ae/#comments</comments>
		<pubDate>Fri, 17 Aug 2018 02:54:32 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[linux代维]]></category>
		<category><![CDATA[linux服务器代维]]></category>
		<category><![CDATA[linux服务器代维护]]></category>
		<category><![CDATA[服务器代维护]]></category>
		<category><![CDATA[服务器安全代维]]></category>
		<category><![CDATA[服务器安全设置]]></category>
		<category><![CDATA[服务器维护]]></category>
		<category><![CDATA[服务器迁移]]></category>
		<category><![CDATA[系统安全代维]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[网站防挂马]]></category>
		<category><![CDATA[全站加速，Amazon CloudFront 配置]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=3762</guid>
		<description><![CDATA[<p>本文适合希望使用 CloudFront 对网站、视频进行加速的初始用户及有一定使用经验的用户，涵盖如何配置及优 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e5%85%a8%e7%ab%99%e5%8a%a0%e9%80%9f%ef%bc%8camazon-cloudfront-%e9%85%8d%e7%bd%ae/">全站加速，Amazon CloudFront 配置</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>本文适合希望使用 CloudFront 对网站、视频进行加速的初始用户及有一定使用经验的用户，涵盖如何配置及优化，内容难度200~300。</p>
<h3><strong>背景</strong></h3>
<p>随着移动互联网的发展，越来越多的图片分享、短视频、在线直播等应用越来越火，如何安全、经济高效、低延迟的将内容分发到终端用户受到开发者越来越多的关注。内容分发网络（CDN）是为解决互联网访问拥塞的问题而生，通过使用大量更靠近终端用户的边缘节点向终端用户提供服务以加速内容的分发，因此在应用系统前端部署 CDN 成为内容加速分发的不二选择。</p>
<h3><strong>一、什么是 Amazon CloudFront</strong></h3>
<p>Amazon CloudFront 是一种全球内容分发网络服务，可以安全地以低延迟和高传输速度向浏览者分发数据、视频、应用程序和 API。CloudFront 与 AWS  与多种 AWS 产品集成，如用于 DDoS 缓解的 AWS Shield、应用程序防火墙 AWS WAF、 Amazon S3、 Elastic Load Balancing、 Amazon EC2 以及 Amazon Route 53，以及可在 AWS 全球基础设施运行用户代码的 Lambda@Edge。</p>
<p>截止目前（2018年7月），Amazon CloudFront 在26个国家/地区的59个城市中设有131个接入点（121个边缘站点和11个区域性边缘缓存站点）。</p>
<p>举例说明，当客户端发起对 www.customer.com 的访问时，首先需要 DNS系统解析出该域名对应的主机 IP，通过本地 ISP DNS 递归查询到 customer.com 的 DNS 域名服务器并了解到该域名是指向了 xxx.cloudfront.net，进一步解析 xxx.cloudfront.net，CloudFront 的 DNS 域名服务器会根据请求来源的 IP 等信息，返回适合当前该客户端访问的边缘节点的主机 IP 如1.1.1.1，最终该客户端向1.1.1.1发出请求。如果该边缘节点已经缓存了该客户端请求的内容（图片、视频等静态文件），则直接返回给客户端，如果未缓存，则首先回源取回该内容，并存储在边缘节点，以便下次客户端对该内容请求时可以直接返回该内容。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf1.png" alt="cloudf1" width="975" height="443" /></a></p>
<p>更好的 CDN 性能表现带来更多的访问流量，以及更好的用户体验，下面我们将介绍如何配置以及优化建议。</p>
<h3><strong>二、如何配置 CloudFront Distribution</strong></h3>
<p>下面介绍下如何为自己的应用配置 CloudFront，实现网站访问加速。</p>
<p>在开始之前，首先简单介绍下 CloudFront的常见术语。</p>
<p>Distribution：分配是 CloudFront 的基本单元，每个分配有独一的 ID 以及CloudFront 为其分配的域名（类似 abcdefg13456789.cloudfront.net）。目前有 Web 和 RTMP 两种方式的分配， Web 分配主要用于分发静态、动态内容，基于 HTTP/s 协议的媒体文件分发，基于 HLS 协议的互联网直播等。 RTMP 分配主要用于基于 RTMP 协议的视频点播场景，源站必须为 S3 存储桶。本文以 Web 分配为例。</p>
<p>Origin： 源站，顾名思义，是加速的站点，可以是 S3 存储桶，可以是 ELB/EC2，可以是 Elemental MediaStore/MediaPackage，或者是用户自定义的站点（如第三方 IDC 中的 HTTP Web 服务器）。一个分配中可以有多个源站。</p>
<p>Behaviors：行为， CloudFront 通过路径匹配的方式决定执行哪一个缓存行为，一个分配中可以有多个 Behaviors，并且每个 Behaviors 对应一个源站。在 Behaviors 中可以设置缓存 TTL 时间，允许的 HTTP 行为（GET，PUT，POST 等），与 Lambda 关联等等。</p>
<p>本节将涉及如下内容：</p>
<ol>
<li>创建一个分配；</li>
<li>该分配有两个源站，其中一个是创建时添加，一个是后添加。一个源站为ELB，一个源站为 S3 存储桶；</li>
<li>两个 Behaviors，一个是默认 Behaviors 并对应回源 ELB，一个是新加Behaviors 并对应源站 S3 存储桶；</li>
<li>ELB，S3 创建过程不做介绍；</li>
</ol>
<p>&nbsp;</p>
<p>1、进入 CloudFront console，并选择新建 Distribution，选择 Web Distribution。</p>
<p>&nbsp;</p>
<p>2、源站设置</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf3.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf3.png" alt="cloudf3" width="999" height="650" /></a></p>
<p>部分解释如下：</p>
<table border="1">
<tbody>
<tr>
<td colspan="2"><strong>Origin Settings</strong></td>
</tr>
<tr>
<td>Origin Domain Name</td>
<td>源站地址，仅支持域名方式。下拉列表中可以看到帐号里已经创建过的 ELB，S3，Elemental Media Service。</p>
<p>如果是自定义站点，需先给该站点配置域名，不能填写 IP。</td>
</tr>
<tr>
<td>Origin Path</td>
<td>（可选）如果源站内容有多层目录，而又希望回源的时候路径上不体现这些目录，可以在此设置要隐藏的目录层级。</td>
</tr>
<tr>
<td>Origin Protocol Policy</td>
<td>CloudFront 回源协议，可以是 HTTP 或 HTTPS，或者与client 发出请求时一样的协议。注意这儿是 CloudFront 回源站时用的协议，而不是 client 到达 CloudFront PoP 点的协议。</p>
<p>如果选用了 HTTPS，一定要注意源站配置对应回源域名（Origin Domain Name）的 SSL 证书。</td>
</tr>
<tr>
<td>Origin Response Timeout</td>
<td>回源超时时间。</td>
</tr>
<tr>
<td>Origin Custom Headers</td>
<td>（可选）自定义回源 Header，即回源的时候添加的 Header，可以是一些自定义的 Header，通常用于由源站对该 Header 进行检测，如果有该 Header 则提供服务，没有则返回错误码，可用于内容访问的安全加强。</td>
</tr>
</tbody>
</table>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf5.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf5.png" alt="cloudf5" width="789" height="924" /></a></p>
<table border="1" width="959">
<tbody>
<tr>
<td colspan="2"><strong>Default Cache Behavior Settings</strong></td>
</tr>
<tr>
<td>Path Pattern</td>
<td>此时是默认的 Default</td>
</tr>
<tr>
<td>Viewer Protocol Policy</td>
<td>Client 到达 CloudFront 时用的协议，支持 HTTP 和 HTTPS，并且提供重定向 HTTP 到 HTTPS。</td>
</tr>
<tr>
<td>Allowed HTTP Methods</td>
<td>允许的 HTTP 动作，不同的 Behavior 可以配置不同的选项。</td>
</tr>
<tr>
<td>Cache Based on Selected Request Headers</td>
<td>是否按 Header 进行缓存。有 None，Whitelist，All 三个选项。如果只是需要按部分 Header 进行缓存，则选 Whitelist 并把对应的 Header 添加。All 是不做缓存，全部转发回源，此时 TTL 必须设置为0.</p>
<p>通常情况下，CloudFront 会将 client 发来的部分 Header 移除，因此需要按 Header 进行内容区分缓存或者源站需要由 Header 内容进行分别处理的，一定要在此白名单该 Header。</p>
<p>默认情况下，源站收到 CloudFront 发来的请求中的 Host 字段值为 Origin 中设置的源站域名，如果用户的源站需要拿到客户端发来的 Host 字段的值（即用户 CNAME 到该分配的域名），在此处就需要将 Host 添加到白名单，此时源站将收到该字段为客户端发出请求时用的值。</td>
</tr>
<tr>
<td>Object Caching</td>
<td>缓存时效。可以遵循源站的设置（Cache-Control Header），或者在此处 Customize。Min, Max, Default TTL 之间的关系及效果详见：</p>
<p><a href="https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/Expiration.html">https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/Expiration.html</a></td>
</tr>
<tr>
<td>Forward Cookies</td>
<td>是否将 Cookie 转发回源，同样 CloudFront 会基于此值缓存不同的内容。</td>
</tr>
<tr>
<td>Query String Forwarding and Caching</td>
<td>是否将查询字符串转发回源，同样 CloudFront 会基于此值缓存不同的内容。</td>
</tr>
<tr>
<td>Restrict Viewer Access</p>
<p>(Use Signed URLs or</p>
<p>Signed Cookies)</td>
<td>是否使用签名的 URL 或签名的 Cookie</td>
</tr>
<tr>
<td>Compress Objects Automatically</td>
<td>是否启用自动压缩。如果请求中 Accept-Encoding 支持 gzip，则 CloudFront 可以自动压缩，以减小流量传输。</td>
</tr>
<tr>
<td>Lambda Function Associations</td>
<td>是否关联 Lambda@Edge，我们在另一篇 blog 中将介绍Lambda@Edge 的使用，本篇不做说明。</td>
</tr>
</tbody>
</table>
<p>由上可见，是否缓存、缓存多久跟是否转发 Header、Cookie、Query string也有关联，如何提高缓存的命中率以提高访问性能，可见<a href="https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/ConfiguringCaching.html">https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/ConfiguringCaching.html</a> 。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf7.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf7.png" alt="cloudf7" width="918" height="927" /></a></p>
<table border="1">
<tbody>
<tr>
<td colspan="2"><strong>Distribution Settings</strong></td>
</tr>
<tr>
<td>Price Class</td>
<td>有三类，北美与欧洲、北美欧洲加亚太非、全球加速，不同类别应用到的 PoP 点不同，对应价格也不一样。</td>
</tr>
<tr>
<td>AWS WAF Web ACL</td>
<td>如果配置了 WAF，可以在此关联，当然 CloudFront Distribution 创建完成后也可以在WAF Console关联。</td>
</tr>
<tr>
<td>Alternate Domain Names（CNAMEs）</td>
<td>（必须项，若使用自己域名） CloudFront Distribution 创建完成后，CloudFront 会提供一个以 cloudfront.net 结尾的域名，如果用户需要使用自己的域名的话，需要在此处填写待使用的域名。</td>
</tr>
<tr>
<td>SSL Certificate</td>
<td>支持用户使用自己域名的证书，需要与上一栏域名匹配。可以使用 Amazon ACM 申请证书，需要注意的是，此时需要在 us-east-1 区域下的 ACM 申请才能应用到 CloudFront。</p>
<p>支持 dedicate IP 和 SNI 两种模式。</td>
</tr>
<tr>
<td>Logging</td>
<td>访问日志，建议开启。</td>
</tr>
<tr>
<td>Bucket for Logs/ Log Prefix</td>
<td>日志开启时，日志将存放的位置。开启日志有助于 client 访问行为分析，debug 等等。</td>
</tr>
</tbody>
</table>
<p>点击创建后，来到 Distribution 的列表页面，可以看到 Status 的状态是“In Process”，大概10分钟左右该状态是“Deployed”时，则表示该分配创建完成，可以使用，并且可见 CloudFront 为其分配的域名。</p>
<p>3、添加源站</p>
<p>点击分配的 ID，可见当前分配的相关设置。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf9.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf9.png" alt="cloudf9" width="734" height="205" /></a></p>
<p>点击 Origin，可见当前的 Origin 配置，点击 Create Origin，可以添加源站。</p>
<p>此时我们添加一个 S3 桶为源站。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf11.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf11.png" alt="cloudf11" width="756" height="318" /></a></p>
<p>注意选择 S3 桶为源站时，会出现是否“Restrict Bucket Access”的选项，我们知道 S3 通过 ACL 和 Bucket Policy 控制存储桶的对象是否被公开访问，因此该 S3 存储桶需要允许 CloudFront 能够从 S3 存储桶拉取对象，这儿有两种方式，一个是该桶设置为公开访问桶，任何人可以直接从该桶下载；方式二是使用 OAI（Origin Access Identity），即该分配获取一个 OAI，并且在 S3 bucket policy 中的 principle 部分填写该 OAI，这样该 S3 存储桶将仅向该分配开放了相应的权限，而其他人无法直接从该存储桶下载资源。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf13.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf13.png" alt="cloudf13" width="521" height="177" /></a></p>
<p>建议选择“Yes, Update Bucket Policy”以避免 Bucket Policy 配置错误<sup>[2]</sup>。</p>
<p>4、添加 Behavior</p>
<p>同样进入分配后，在 Behavior 栏选择 Create Behavior。我们假定访问 jpg图片的请求，回源到前面创建的 S3 存储桶。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf15.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf15.png" alt="cloudf15" width="574" height="439" /></a></p>
<p>Path Pattern 中支持通配符，在此处配置路径模式，即当一个请求到达CloudFront POP 点，CloudFront 检查该请求的 URL 路径，并与 Behavior 中设置的进行匹配，按先匹配到的 Behavior 的配置执行对应的行为。</p>
<p>Origin 栏可以选择该分配中已添加的源站。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf17.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf17.png" alt="cloudf17" width="883" height="292" /></a></p>
<p>当拥有多个 Behavior 时，若路径模式中有重合，可以通过 Move Up/Down调整匹配的顺序，一旦匹配到将按该 Behavior 执行，不再去匹配其他 Behavior。优先级 Precedence 数字越小越优先匹配。</p>
<h3><strong>三、缓存优化</strong></h3>
<p>本节将介绍常见的 TTL 设置建议、动态加速，设置样例以及错误处理。</p>
<p>1、TTL 设置建议</p>
<p>CloudFront 在计算 Cache key 时会将请求的 URL 以及当前分配对应的Behavior 的配置（如是否转发 Header、Cookie、查询字符串）考虑在内，计算出唯一值。因此即使两次请求都是相同的 URL，如果两次请求的个别 Header 不一样，且该 Header 配置为了转发（Cached based on Selected Headers），则计算出的 Cache key 也不同，返回给客户端的内容自然也不同。因此配置转发的查询字符串、Cookie 及 Header 越少，Cache key 也将越少，缓存命中率就越高，带来了性能也越好。</p>
<p>对于用户内容在 PoP 点的缓存 TTL，可以使用源站设置的 Cache Control: max-age 的值，或者在 Behavior 中使用 Customized 设置 Minimum TTL，Maximum TTL、Default TTL（<a href="https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/Expiration.html">https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/Expiration.html</a> ）。</p>
<table border="1">
<tbody>
<tr>
<td><strong>分类</strong></td>
<td><strong>静态内容，长期</strong></td>
<td><strong>静态内容，短期</strong></td>
<td><strong>动态内容</strong></td>
</tr>
<tr>
<td>举例</td>
<td>*.css, *.js, *.jpg, *.png</p>
<p>软件下载，媒体文件，媒体分片文件（HLS *.ts，*.m3u8）。</td>
<td>登录页，index.jsp，新闻，天气信息，HLS 直播 m3u8 文件。</td>
<td>变化的内容，不可缓存的内容。</td>
</tr>
<tr>
<td>建议</td>
<td>不变的内容可以设置较大的 TTL 值，使用版本号更新内容。</td>
<td>定期更新的内容设置低 TTL 值。TTL 到期后，CloudFront 回源校验源站内容是否发生变化。</td>
<td>经常变化的内容；按请求不同内容不同；</p>
<p>设置很低甚至0 TTL。</td>
</tr>
</tbody>
</table>
<p>对于动态内容，动态加速场景，可以在源站设置：</p>
<p>Cache-Control: no-cache; max-age=0; No-store; private</p>
<p>或 Cache-Control: public; max-age=0;</p>
<p>若使用 CloudFront Behavior 中 Customize TTL，可以直接在‘Cache based on Selected Header’处选‘All’，然后 Minimum TTL，Maximum TTL，Default TTL 均设置为0.</p>
<p>对于 Cache-Control Header 设置样例：</p>
<table border="1" width="959">
<tbody>
<tr>
<td width="120">静态资源</td>
<td width="120">登录页</td>
<td width="120">媒体分片</td>
<td width="120">动态内容</td>
<td width="120">HLS 直播</td>
</tr>
<tr>
<td width="120">*.css, *.js, 软件下载，更新包等</td>
<td width="120">Index.html</td>
<td width="120">/*.ts</td>
<td width="120"></td>
<td width="120">/*.m3u8</td>
</tr>
<tr>
<td width="120">Cache-Control:<br />
public;<br />
max-age=31536000</td>
<td width="120">Cache-Control:<br />
no-cache=Set-Cookie;<br />
max-age=30</td>
<td width="120">Cache-Control:<br />
public;<br />
max-age=31536000</td>
<td width="120">Cache-Control:<br />
no-cache;<br />
max-age=0;No-store;private</td>
<td width="120">Cache-Control:<br />
public;<br />
max-age=2</td>
</tr>
</tbody>
</table>
<p>2、错误处理</p>
<p>当源站不可用时，可以在 CloudFront 配置针对400，403，404，405，414，500，501，502，503，504等错误码的自定义响应页并修改返回给客户端的响应码。CloudFront 将周期性验证源站的可用性，并可在源站恢复前将当前缓存中的内容作为响应返回给客户端。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf19.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf19.png" alt="cloudf19" width="1027" height="321" /></a></p>
<p>设置方式可见<a href="https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/GeneratingCustomErrorResponses.html">https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/GeneratingCustomErrorResponses.html</a></p>
<h3><strong>四、内容更新</strong></h3>
<p>当源站静态内容更新时，如何让客户端在 TTL 失效时间前即可拿到最新版本的内容是每一位开发者关心的问题，在 CloudFront 有两种方式。</p>
<p>1、版本号控制</p>
<p>当已发布的内容更新时，可在文件名或者路径中使用版本号进行区分，比如从 v1 到 v2，或者时间戳等可以区别同一对象两种版本的其他方法，同时应用测对资源链接指向新版本号的资源。</p>
<p>2、使用 Invalidation 使缓存中的文件失效</p>
<p>CloudFront 提供一个名为‘Invalidation’的功能，可以使文件在 TTL 失效时间到达前将文件从 PoP 点删除，使用该功能可以快速的在文件名不变的前提下将文件更新。</p>
<p>Invalidation 支持指定单个文件或者以*通配符结尾的路径。限制及费用见<a href="https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html">https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html</a></p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf21.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf21.png" alt="cloudf21" width="812" height="455" /></a></p>
<h3><strong>五、监控与日志</strong></h3>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf23.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf23.png" alt="cloudf23" width="556" height="279" /></a></p>
<p>CloudFront 提供多种报告供用户了解自己分配的使用率等情况，您可以使用 CloudWatch API 获取分配的相应监控指标，需要注意的是，使用 CloudWatch API 时 region 应设置为 us-east-1。</p>
<p>CloudFront 报告提供按天或按小时的请求数、数据传输、HTTP Status Code、Top50 访问的对象，使用率以及按设备、浏览器、操作系统、客户端位置等指标的报告，同时可以配置 CloudWatch 警报，对关键指标数据进行监控（请求数、已下载字节、已上传字节、总错误率、4xx错误率、5xx错误率），一旦超过正常阈值，运维人员可第一时间得到告警。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf25.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf25.png" alt="cloudf25" width="556" height="159" /></a></p>
<p>尽管 CloudFront 提供了多维度的报告，但可能仍不能满足用户的多维度分析的需求。因此推荐这类用户对 CloudFront 日志进行分析，当用户开启 CloudFront 分配日志后，日志将会上传到指定的 S3 存储桶，通过分析日志可以了解有关该分配的更多的客户端请求行为，有助于做运营分析或者 debug。关于日志字段解释见<a href="https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html">https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html</a> 用户可以使用 Amazon EMR 或者无服务器交互式查询服务Amazon Athena轻松的使用标准 SQL 直接在 S3 中分析数据，并与 Amazon QuickSight  集成，轻松实现数据可视化。</p>
<p>使用 Amazon Athena 查询  Amazon CloudFront  日志方式见<a href="https://docs.aws.amazon.com/zh_cn/athena/latest/ug/cloudfront-logs.html">https://docs.aws.amazon.com/zh_cn/athena/latest/ug/cloudfront-logs.html</a></p>
<p>使用 Amazon EMR 分析 CloudFront 日志可见参考资料8。</p>
<h3><strong>六、合规与安全</strong></h3>
<p>CloudFront 目前已经获得 PCI DSS 合规，GDPR（<a href="https://amazonaws-china.com/compliance/gdpr-center/service-capabilities/">https://amazonaws-china.com/compliance/gdpr-center/service-capabilities/</a> ）、HIPPA、SOC 以及 ISO 9001, 27001, 27017, 27018 等合规认证。</p>
<p>同时开启 CloudTrail，用户帐号下所有的 CloudFront API 调用记录将均被CloudTrail 记录，便于用户后期审计。</p>
<p>下面我们将从4个方面进行介绍 CloudFront 如何保证您的内容安全。</p>
<p>1、回源保护</p>
<p>我们可以将源站设置为仅允许 CloudFront 访问，而拒绝客户端的直接回源。</p>
<p>当源站为 ELB/EC2 时：</p>
<p>（1）ELB/EC2 的安全组仅对 CloudFront 节点 IP 开放对应的端口（80/443），CloudFront 节点服务器的 IP 地址范围见：</p>
<p><a href="https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/LocationsOfEdgeServers.html">https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/LocationsOfEdgeServers.html</a></p>
<p>（2）在 CloudFront Origin 设置时，添加自定义 Header 字段及值，源站对请求中的字段检查，若不含有该 Header 字段及值，则返回错误码。</p>
<p>（3）回源 HTTPS</p>
<p>回源支持 TLSv1.1、TLSv1.2 安全协议以及 RSA，ECDSA 两类密码算法。</p>
<p>&nbsp;</p>
<p>当源站为 S3 存储桶时：</p>
<p>在 S3 存储桶策略中应用 OAI，仅允许带该 OAI 的 CloudFront 分配从存储桶中获取内容。</p>
<p><a href="https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html">https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html</a></p>
<p>2、传输安全</p>
<p>CloudFront 支持客户端到 PoP 点使用 HTTPS 请求，CloudFront 为每个分配生成的域名支持 HTTPS 请求，并支持用户上传自己从可信 CA 购买的证书。用户可以在 Amazon ACM 服务免费申请自己域名的证书，需要注意的是，需要在 us-east-1 区的 ACM 服务申请，才能应用到 CloudFront 的分配。</p>
<p>对于用户域名证书，CloudFront 支持专属 IP 和 SNI 两种方式。</p>
<p>3、内容保护</p>
<p>（1）签名 URL、签名 Cookie</p>
<p>针对有些内容限制访问的情景，如仅允许付费用户或者授权用户访问的内容，我们可以通过签名 URL 或签名 Cookie 的方式提供内容的私有化访问。文档中已有非常详细的说明，在此不再展开，具体方式见：<a href="https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html">https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html</a> 另外也可见参考资料[3]。</p>
<p>（2）Field-Level Encryption 字段级加密</p>
<p>2017年12月份，CloudFront 推出了该功能，使用该功能，可以进一步增强敏感数据 (如信用卡号码或个人身份信息) 的安全性。在将  POST  请求转发到您的源站之前，CloudFront 的字段级加密使用特定于字段的加密密钥 (由用户提供) 对  HTTPS  表单中的敏感数据进行进一步加密。这可确保敏感数据只能被应用程序堆栈中的某些组件或服务解密和查看。</p>
<p>配置方式见：<a href="https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/field-level-encryption.html">https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/field-level-encryption.html</a></p>
<p>（3）Geo 限制</p>
<p>CloudFront 提供了基于地理位置访问限制的功能，用户可以通过设置白名单或者黑名单的方式，允许或禁止某个国家或地区对自己分配的访问。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf251.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf251.png" alt="cloudf251" width="556" height="159" /></a><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf29.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/cloudf29.png" alt="cloudf29" width="521" height="237" /></a></p>
<p>4、与 AWS WAF、Shield 集成</p>
<p>AWS WAF 是一款 Web 应用程序防火墙，帮助保护您的 Web 应用程序免受常见 Web 漏洞的攻击[5]。AWS Shield 是一种托管式分布式拒绝服务 (DDoS)防护服务，可以保护在 AWS 上运行的防护应用程序 [7]。</p>
<p>用户可以在创建 CloudFront 分配时关联已创建的 WAF，或者在 WAF Console 创建完 WAF 规则后与 CloudFront 分配关联。</p>
<p><strong>七、可编程 CDN</strong></p>
<p>AWS在2017年7月正式推出了 Lambda@Edge，借助  Lambda@Edge，用户可以轻松在 AWS 的全球基础设施上运行代码，从而以最低的延迟响应最终用户。代码可以由  Amazon CloudFront  事件触发，例如源服务器和浏览者之间的内容请求或响应。您只需将 Node.js代码上传到 AWS Lambda，Lambda 就能在靠近最终用户的 AWS 站点实现高可用性，提供复制、路由和扩展代码所需的一切。</p>
<p>我们将在下一篇中对 Lambda@Edge进行讲解与使用案例分享，感兴趣的读者可以查看官方文档进一步的了解：<a href="https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html">https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html</a></p>
<p>&nbsp;</p>
<p><strong>参考资料</strong></p>
[1]开发人员指南：<a href="https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/Introduction.html">https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/Introduction.html</a></p>
[2] Amazon CloudFront 常见错误配置及解决方法: <a href="https://amazonaws-china.com/cn/blogs/china/cloudfront-errors-solutions/">https://amazonaws-china.com/cn/blogs/china/cloudfront-errors-solutions/</a></p>
[3] 使用 Amazon CloudFront 签名 URL+S3 实现私有内容发布<a href="https://amazonaws-china.com/cn/blogs/china/amazon-cloudfront-signature-url-s3/">https://amazonaws-china.com/cn/blogs/china/amazon-cloudfront-signature-url-s3/</a></p>
[5] AWS WAF <a href="https://amazonaws-china.com/cn/waf/?nc2=h_m1">https://amazonaws-china.com/cn/waf/?nc2=h_m1</a></p>
[6] AWS Certificate Manager <a href="https://amazonaws-china.com/cn/certificate-manager/?nc2=h_m1">https://amazonaws-china.com/cn/certificate-manager/?nc2=h_m1</a></p>
[7] AWS Shield <a href="https://amazonaws-china.com/cn/shield/?nc2=h_m1">https://amazonaws-china.com/cn/shield/?nc2=h_m1</a></p>
[8] 手把手教你使用 Amazon EMR 进行交互式数据查询<a href="https://amazonaws-china.com/cn/blogs/china/amazon-emr/">https://amazonaws-china.com/cn/blogs/china/amazon-emr/</a></p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e5%85%a8%e7%ab%99%e5%8a%a0%e9%80%9f%ef%bc%8camazon-cloudfront-%e9%85%8d%e7%bd%ae/">全站加速，Amazon CloudFront 配置</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e5%85%a8%e7%ab%99%e5%8a%a0%e9%80%9f%ef%bc%8camazon-cloudfront-%e9%85%8d%e7%bd%ae/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AWS Organizations —— 管理众多代付账号</title>
		<link>https://www.fuwuqiok.com/aws-organizations-%e7%ae%a1%e7%90%86%e4%bc%97%e5%a4%9a%e4%bb%a3%e4%bb%98%e8%b4%a6%e5%8f%b7/</link>
		<comments>https://www.fuwuqiok.com/aws-organizations-%e7%ae%a1%e7%90%86%e4%bc%97%e5%a4%9a%e4%bb%a3%e4%bb%98%e8%b4%a6%e5%8f%b7/#comments</comments>
		<pubDate>Fri, 17 Aug 2018 02:45:59 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Amazon AWS]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[linux服务器代维]]></category>
		<category><![CDATA[服务器代维]]></category>
		<category><![CDATA[服务器代维护]]></category>
		<category><![CDATA[系统安全代维]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[网站防挂马]]></category>
		<category><![CDATA[AWS Organizations —— 管理众多代付账号]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=3711</guid>
		<description><![CDATA[<p>Organizations简述 AWS Organizations 可为多个 AWS 账户提供基于策略的管理。 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/aws-organizations-%e7%ae%a1%e7%90%86%e4%bc%97%e5%a4%9a%e4%bb%a3%e4%bb%98%e8%b4%a6%e5%8f%b7/">AWS Organizations —— 管理众多代付账号</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<h3>Organizations简述</h3>
<p>AWS Organizations 可为多个 AWS 账户提供基于策略的管理。借助 AWS Organizations，您可以创建账户组，然后将策略应用于这些组。Organizations 支持您针对多个账户集中管理策略，无需使用自定义脚本和手动操作流程。</p>
<p>使用 AWS Organizations，您可以创建服务控制策略 (SCP)，从而集中控制多个 AWS 账户对 AWS 服务的使用。Organizations 支持您通过 包括API，SDK和Console界面创建新账户。Organizations 还有助于简化多个账户的计费模式，即您可以通过整合账单(Consolidated Billing)为您组织中的所有账户设置一种付费方式。所有 AWS 客户都可以使用 AWS Organizations，且无需额外付费。要注意的是任意的AWS账户只能存在一个Organization中.</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/1.png" alt="1" width="1298" height="760" /></a></p>
<h3>AWS Organizations关键性概念</h3>
<p>在正式接触AWS Organizations之前我们必须要先弄清楚其中的关键性名词和概念</p>
<h4>Organization – 组织</h4>
<p>•     组织是指一系列AWS账户，您可以将其整理为一个层次结构并进行集中式管理</p>
<h4>AWS account – 账户</h4>
<p>•     AWS账户是您AWS资源的容器，例如： Amazon S3 存储桶、 Amazon EC2 实例等</p>
<p>•     通过AWS Identity and Access Management (IAM) 规则  (users, roles) 管理AWS资源</p>
<p>•     AWS Organizations中最小的管理单元</p>
<h4>Master account – 主账户</h4>
<p>•     在组织中为所有账户付款的账户</p>
<p>•     管理您的组织的Hub（中心）节点</p>
<h4>Organizational unit (OU) – 组织单元</h4>
<p>•     组织单元是组织内的一组AWS账户</p>
<p>•     把AWS账户添加到逻辑组中，账号管理更方便</p>
<p>•     AWS账户和组织单元OU可以是另外一个组织单元OU的成员</p>
<p>•     一个AWS账户可以是多个组织单元OU的成员</p>
<h4>Administrative root – 管理根</h4>
<p>•     管理根是整理AWS账户的起始点，也是整个组织层次架构中的最顶层的容器。</p>
<h4>Organization control policy (OCP) – 组织控制策略</h4>
<p>•     含有一个或多个语句的配置，这些语句用于定义您要应用于某组AWS账户的控制策略</p>
<p>•     不同应用场景使用不同的组织控制策略</p>
<p>下图可以帮助您更直观的理解这些概念之间的关系：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/2.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/2.png" alt="2" width="806" height="654" /></a></p>
<p>下面我会更详细的介绍以上提出的这些概念：</p>
<h4>Account加入Organization的方式</h4>
<h4>1. 从Organization中创建新账户</h4>
<ul>
<li>新的AWS账户只能通过主账户来创建</li>
<li>在创建账户的过程中，您可以配置下面的信息</li>
</ul>
<blockquote><p>Ø  电子邮件地址 (必须)</p>
<p>Ø  账户名称 (必须)</p>
<p>Ø  IAM 角色名称 (可选 – 默认的名称是 OrganizationAccountAccessRole)</p>
<p>§  为主账户通过AssumeRole方式访问当前账户开启信任权限</p>
<p>§ 权限设置为完全控制</p>
<p>Ø  IAM 访问账单 (可选) 。注意! IAM 用户仍然需要相关的IAM权限才可以访问账单</p></blockquote>
<ul>
<li>新AWS账户</li>
</ul>
<blockquote><p>Ø  自动成为您组织的一部分</p>
<p>Ø  可以从组织中删除，但是可以通过策略让其没有执行Leave Organization的权限</p></blockquote>
<h4>2. 让已有账户加入Organization</h4>
<ul>
<li>邀请只能通过主账户发起</li>
<li>v 被邀请的AWS账户可以选择接受或者拒绝邀请</li>
</ul>
<blockquote><p>Ø  默认的行为是拒绝</p>
<p>Ø  可以通过IAM权限来控制</p></blockquote>
<ul>
<li>当邀请被接受</li>
</ul>
<blockquote><p>Ø  这个AWS账户就成为组织的一个成员</p>
<p>Ø  可应用的OCP规则会被自动引用到这个账户</p></blockquote>
<ul>
<li>被邀请的AWS账户可以被从组织中移除，但是可以通过策略让其没有执行Leave Organization的权限</li>
</ul>
<h3>AWS Account的逻辑组(OU)</h3>
<p>•     把AWS账户添加到逻辑组中，账号管理更方便</p>
<p>•     AWS账户和组织单元OU可以是另外一个组织单元OU的成员</p>
<p>•     一个AWS账户可以是多个组织单元OU的成员</p>
<p>如下图所示：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/3-1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/3-1.png" alt="3-1" width="870" height="381" /></a></p>
<p>&nbsp;</p>
<p>OCP(Organization Control Policy)</p>
<ul>
<li>描述要应用的控制策略</li>
<li>不同的使用场景有不同的应用控制策略 OCP</li>
<li>应用控制策略OCP可以被附加到</li>
</ul>
<blockquote><p>Ø  组织(Organization)</p>
<p>Ø  组织单元(OU)</p>
<p>Ø  AWS账户(Account)</p></blockquote>
<ul>
<li>OCP拥有继承属性(AWS账户, 组织单元OU, 组织)</li>
</ul>
<blockquote><p>Ø  Policy是继承关系的，也就是说OU会继承organization的policy，而AWS Account会继承OU的policy</p>
<p>Ø  Account的policy会跟随其移动，如果这个Account从一个OU移动到另一个OU，那么属于这个Account的Policy也会移动。但是它不会再接收之前OU的Policy，而是会接收新OU的Policy</p></blockquote>
<p>&nbsp;</p>
<h4>OCP support in V1：Service Control Policies(SCPs)</h4>
<ul>
<li>允许您对AWS服务 API进行访问控制</li>
</ul>
<blockquote><p>Ø  定义一个允许访问的API列表 – 白名单</p>
<p>Ø  定义一个禁止访问的API列表 – 黑名单</p></blockquote>
<ul>
<li>服务控制策略无法被本地管理员覆盖</li>
<li>对于IAM用户和角色，最终生效的权限是服务控制策略和相关的IAM权限的交集</li>
<li>必要但不充分，本地用户拥有某行为权限，必须要同时拥有SCP权限和IAM权限</li>
<li>IAM 规则模拟器对SCP有感知</li>
<li>SCP的控制权限大于本地administrator的权限</li>
</ul>
<p>下图是使用白名单和使用黑名单写SCP的案例:</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/4-1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/4-1.png" alt="4-1" width="756" height="426" /></a></p>
<p>SCP使用的是IAM policy的语法，和IAM Policy一样，但是有以下两点不同</p>
<p>•     Resource必须是”*”</p>
<p>•     没有condition</p>
<p><strong>一定注意，允许最终用户行为的话，必须要SCP和IAM Permission同时拥有。下图所示，如果在SCP允许S3和EC2，但是在IAM Permission允许EC2和SQS。那么最终用户只能拥有EC2的权限</strong></p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/5-1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/5-1.png" alt="5-1" width="479" height="347" /></a></p>
<h4>简单化的账单管理</h4>
<p>•     单个付款账户为所有账户付款</p>
<p>•     组织内所有的AWS账户的资源被核算到统一的账单中并应用相关的阶梯价</p>
<p>•     所有已存在的整合账单家族将会被迁移到组织的账单模式中</p>
<h4>Organization不同的管理级别</h4>
<p>您可以在创建新组织的时候选择不同的管理级别</p>
<h4>账单模式(Billing mode)</h4>
<p>•     和当前的整合账单模式向下兼容 (CB)</p>
<p>•     从整合账单家族中创建的的组织自动被设置为账单模式</p>
<h4>完全控制模式(Full-control mode)</h4>
<p>•     账单模式中的所有功能</p>
<p>•     开启所有类型的OCP管理功能</p>
<p>•     从账单模式转换成完全控制模式需要得到组织中所有AWS账户同意</p>
<p>&nbsp;</p>
<h3>动手利用AWS Organizations来管理您的组织</h3>
<p>下面我就给大家演示一下，使用AWS Organizations服务如何能做到快速，方便，准确的来管理您的多个账户</p>
<h4>进入AWS Organizations服务</h4>
<p>进入AWS Organizations服务的方式，可以通过在service上搜索的方式进入，或者通过在Account菜单下点击My Organization进入。在Service的下拉菜单中没有这项服务。</p>
<p>服务栏搜索：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/6-1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/6-1.png" alt="6-1" width="2156" height="330" /></a></p>
<p>账号栏下拉：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/7.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/7.png" alt="7" width="483" height="266" /></a></p>
<h4>创建新的Organization</h4>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/8.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/8.png" alt="8" width="1666" height="606" /></a></p>
<p>在AWS Organizations服务界面上选择创建组织，选择希望创建的组织的种类，这里我演示时选择Full Control模式，如果希望仅进行账单整合(Consolidated Billing)，那么选择右边的“Enable Only Consolidated Billing”。无论是哪种模式，账单都会是整合的。区别只在于Master Account能不能对加入的账号进行控制</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/9-1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/9-1.png" alt="9-1" width="1114" height="864" /></a></p>
<p>注意：现在Consolidated Billing功能已经迁移到AWS Organization下了，如果点击主账号下的My Account-&gt; Consolidated Billing，可以看到该提示，并且点击View Linked accounts也是直接就会跳转到AWS Organization界面</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/10-1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/10-1.png" alt="10-1" width="1006" height="496" /></a></p>
<p>创建完毕之后，会出现组织架构管理界面，前面带星号的账号就是Master Account</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/11-1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/11-1.png" alt="11-1" width="1762" height="570" /></a></p>
<h4>添加新Account到Organization下</h4>
<p>在创建完Organization之后，添加账号到Organization下有两种方式</p>
<p>•     直接添加账户</p>
<p>•     邀请其他账户加入</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/12.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/12.png" alt="12" width="845" height="149" /></a></p>
<h4>1. 直接添加账户(Account)</h4>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/13.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/13.png" alt="13" width="740" height="203" /></a></p>
<p>填写你希望添加的账号的全名和邮箱，并分配一个IAM Role，这个IAM Role是用来给予这个新Account一个full administrative control的权限</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/14-1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/14-1.png" alt="14-1" width="933" height="298" /></a></p>
<p>大约等待几秒钟，Account即可创建。对比如果是要自己在AWS网页创建账号，速度上提升了非常多。不过创建时没有设置密码，需要用户登录时在控制台点击忘记密码来重置。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/15-1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/15-1.png" alt="15-1" width="906" height="144" /></a></p>
<p>在Global根账号控制台登录新创建的账号，因为不知道密码，所以需要点击忘记密码来重置。随后会在注册邮箱收到重置密码的链接，点击重置密码之后，重新登录即可</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/16.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/16.png" alt="16" width="760" height="512" /></a></p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/17-1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/17-1.png" alt="17-1" width="746" height="360" /></a></p>
<p>登录账户之后，可以看到这个新账号已经可以工作，并且Consolidated Billing功能是默认开启的。并指示该账户已经在一个Organization下了。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/18.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/18.png" alt="18" width="2506" height="660" /></a></p>
<h4>2. 邀请其他账户(Account)加入</h4>
<p>点击Invite account来邀请其他账号加入，添加账号号码或者邮箱，并点击邀请即可</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/19-1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/19-1.png" alt="19-1" width="786" height="332" /></a></p>
<p>在界面右侧，点击Invitations可以看到已经邀请的账号的信息</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/20.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/20.png" alt="20" width="1293" height="279" /></a></p>
<p>此时在被邀请的账号的注册邮箱中会收到来自Master Account的邀请邮件，如果希望接受这个邀请加入Organization。那么可以选择点击邮件中的链接或者直接进入自己账号下的Organization界面接受也可以。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/21.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/21.png" alt="21" width="434" height="157" /></a> <a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/22.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/22.png" alt="22" width="646" height="334" /></a></p>
<p>在Invitation界面中可以看见Organization的ID，邀请人的Account以及申请控制的类型，最后还有申请加入时的留言(Notes)</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/23.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/23.png" alt="23" width="686" height="385" /></a></p>
<p>最后回到主账号下，可以看见包括Master Account，主动创建的Account以及受邀请加入的Account的信息</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/24.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/24.png" alt="24" width="867" height="299" /></a></p>
<h3>从Organization删除Account</h3>
<p>有两种方式可以从Organization下面删除加入的Account：</p>
<p>1. Master Account主动从Organization删除Account，点击单个或多个Account，点击删除即可</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/25.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/25.png" alt="25" width="953" height="361" /></a></p>
<p>2. 加入Organization的Account脱离Organization，在该Account下选择My Organization，可以看见其加入的Organization信息以及选择离开该Organization</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/26.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/26.png" alt="26" width="951" height="326" /></a></p>
<h3>利用OU(Organization Unit)来管理多个Account</h3>
<p>开始时Organization下是没有任何OU的，需要用户自己手动去添加。每一级OU又可以添加自己下一级的OU，从而形成一个树状结构</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/27.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/27.png" alt="27" width="612" height="338" /></a></p>
<p>你可以创建一个多级OU组织，包括一个根OU，两个一级OU和两个二级OU</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/28.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/28.png" alt="28" width="927" height="287" /></a></p>
<p>所有的Account默认都在根OU下，你可以选择一个或者多个Account，并把他们移动到任意OU下。目前只能移动Account到OU，不能从OU主动加Account</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/29.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/29.png" alt="29" width="723" height="547" /></a></p>
<p>针对不同的OU可以开启不同的Policy来控OU下面的Account，不过要开启这个feature，必须首先在Root OU下启动这个功能</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/33.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/33.png" alt="33" width="856" height="474" /></a></p>
<h3>利用Policy(Service Control Policy)来管理Account的行为</h3>
<p>在使用Policy开管理Account时，始终记住两个原则：</p>
<h4>1. Policy是继承关系，并且可以随Account移动</h4>
<p>•     Policy是继承关系的，也就是说OU会继承organization的policy，而AWS Account会继承OU的policy</p>
<p>•     Account的Policy会跟随其移动，如果这个Account从一个OU移动到另一个OU，那么属于这个Account的Policy也会移动。但是它不会再接收之前OU的Policy，而是会接收新OU的Policy</p>
<h4>2. 最终Account下的User的行为是SCP和IAM Permission共同决定的</h4>
<p>一定注意，允许最终用户行为的话，必须要SCP和IAM Permission同时拥有。下图所示，如果在SCP允许S3和EC2，但是在IAM Permission允许EC2和SQS。那么最终用户只能拥有EC2的权限</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/31.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/31.png" alt="31" width="479" height="347" /></a></p>
<p>Service Control Policy在Policies下面可以进行设置，默认情况就有一个什么权限都有的FullAWSAccess Policy并且是attach到Root OU的。这也就意味着默认情况下，只有有Account加入这个Organization，那么这个Account就拥有操作所有AWS服务的权限。如果希望修改SCP，那么可以点击右侧的Policy editor进行修改</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/32.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/32.png" alt="32" width="1232" height="320" /></a></p>
<p>SCP的格式和IAM Policy格式一致，但有下面两点不同。在修改完或创建完Policy之后，可以attach给任何OU或Account</p>
<p>•     Resource必须是”*”</p>
<p>•     没有condition</p>
<p>&nbsp;</p>
<p>点击Policies界面下左上角的Create Policy可以从头创建一个SCP，你既可以选择使用Policy generator帮助你生成一个新的SCP，也可以从你已经创建的一个SCP中进行复制。在创建时，你可以选择白名单模式或者黑名单模式</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/34.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/34.png" alt="34" width="892" height="562" /></a></p>
<p>这里我选择白名单模式，创建一个名为“SCP_Allow_access_VPC_subnet”的SCP，仅允许Account创建和查看VPC和Subnet，其余动作都禁止</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/35.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/35.png" alt="35" width="768" height="375" /></a></p>
<p>将创建的SCP分配给OU，进而这个SCP会传递给下面添加的Account</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/36.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/36.png" alt="36" width="1308" height="406" /></a></p>
<p>在SCP配置界面下，将原来的FullAWSAccess策略解除，添加新创建的“SCP_Allow_access_VPC_subnet”策略。这个时候问题就来了，因为这个Account会继承所在OU的SCP，而所在OU又会继承上层OU的SCP。所以其实目前来说，这个Phoenix Yao的Account是会拥有两个SCP，包括拥有所有权限的“FullAWSAccess”和限制权限的“SCP_Allow_access_VPC_subnet”</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/37.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/37.png" alt="37" width="355" height="513" /></a></p>
<p>在这种情况下会怎么样呢？其实和IAM Policy一样，SCP只会允许最小权限，所以当你用Phoenix Yao账号打开VPC界面时，会发现你无法查看除了VPC和Subnet的任何信息。另外，注意一下，这个Policy生效有时候需要一些时间，不是马上能看到结果。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/38.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/38.png" alt="38" width="1253" height="358" /></a></p>
<p>我们再来看下IAM policy和SCP一起作用的结果。使用Phoenix Yao这个root账号创建一个User，并赋予其除了查看Subnet其余动作都可以做的IAM Policy。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/39.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/39.png" alt="39" width="417" height="279" /></a></p>
<p>将这个Policy绑定到新创建的IAM User的IAM Permission中</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/40.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/40.png" alt="40" width="698" height="341" /></a></p>
<p>将SCP恢复成“FullAWSAccess”以单独测试IAM Permission是否生效，发现已经生效。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/41.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/41.png" alt="41" width="954" height="437" /></a></p>
<p>最后将SCP和IAM Permission一起使用。得到的结果应该是取最小权限，即只能查看VPC的情况</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/08/42.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/08/42.png" alt="42" width="974" height="471" /></a></p>
<p>&nbsp;</p>
<h3>使用AWS Organizations时的最佳实践</h3>
<p>下面介绍一些在使用AWS Organizations服务时的最佳实践：</p>
<p>1.      使用CloudTrail服务监控Master Account的行为活动</p>
<p>2.      不要通过Master Account来管理资源</p>
<p>3.      在管理你的组织时要采用”最小权限分配”的原则</p>
<p>4.      使用OU来对账号进行权限的分配管理</p>
<p>5.      仅给Organizations的根账号(root)分配仅需要的权限</p>
<p>6.      在测试权限时先使用单个AWS Account来测试</p>
<p>7.      避免在一个组织中同时使用”白名单”策略和”黑名单”策略</p>
<p>8.      每创建一个新的AWS Account都需要有足够合理的原因</p>
<h4>给予Organization最小权限</h4>
<p>•     对所有AWS组织行为设置相对应的IAM权限</p>
<p>•     您也可以把AWS组织相关的元素（组织，组织单元，AWS账户）作为IAM规则的资源进行管理</p>
<p>•     您可以把管理您组织的权限通过IAM role功能委托给一个在其他AWS账号中的IAM用户</p>
<p>•     所有的组织管理行为可以通过AWS CloudTrail服务记录</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/aws-organizations-%e7%ae%a1%e7%90%86%e4%bc%97%e5%a4%9a%e4%bb%a3%e4%bb%98%e8%b4%a6%e5%8f%b7/">AWS Organizations —— 管理众多代付账号</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/aws-organizations-%e7%ae%a1%e7%90%86%e4%bc%97%e5%a4%9a%e4%bb%a3%e4%bb%98%e8%b4%a6%e5%8f%b7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AWS Organizations —— 管理众多账号</title>
		<link>https://www.fuwuqiok.com/aws-organizations-%e7%ae%a1%e7%90%86%e4%bc%97%e5%a4%9a%e8%b4%a6%e5%8f%b7/</link>
		<comments>https://www.fuwuqiok.com/aws-organizations-%e7%ae%a1%e7%90%86%e4%bc%97%e5%a4%9a%e8%b4%a6%e5%8f%b7/#comments</comments>
		<pubDate>Fri, 23 Mar 2018 01:50:28 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[服务器代维]]></category>
		<category><![CDATA[服务器代维护]]></category>
		<category><![CDATA[服务器安全代维]]></category>
		<category><![CDATA[服务器安全设置]]></category>
		<category><![CDATA[服务器维护]]></category>
		<category><![CDATA[服务器运维]]></category>
		<category><![CDATA[系统安全代维]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[网站防挂马]]></category>
		<category><![CDATA[AWS Organizations —— 管理众多账号]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=3465</guid>
		<description><![CDATA[<p>AWS Organizations简述 AWS Organizations 可为多个 AWS 账户提供基于策略 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/aws-organizations-%e7%ae%a1%e7%90%86%e4%bc%97%e5%a4%9a%e8%b4%a6%e5%8f%b7/">AWS Organizations —— 管理众多账号</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<h3>AWS Organizations简述</h3>
<p>AWS Organizations 可为多个 AWS 账户提供基于策略的管理。借助 AWS Organizations，您可以创建账户组，然后将策略应用于这些组。Organizations 支持您针对多个账户集中管理策略，无需使用自定义脚本和手动操作流程。</p>
<p>使用 AWS Organizations，您可以创建服务控制策略 (SCP)，从而集中控制多个 AWS 账户对 AWS 服务的使用。Organizations 支持您通过 包括API，SDK和Console界面创建新账户。Organizations 还有助于简化多个账户的计费模式，即您可以通过整合账单(Consolidated Billing)为您组织中的所有账户设置一种付费方式。所有 AWS 客户都可以使用 AWS Organizations，且无需额外付费。要注意的是任意的AWS账户只能存在一个Organization中。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-1.png" alt="0122-1" width="1298" height="760" /></a></p>
<h3>AWS Organizations关键性概念</h3>
<p>在正式接触AWS Organizations之前我们必须要先弄清楚其中的关键性名词和概念</p>
<p><strong>Organization – 组织</strong></p>
<ul>
<li>组织是指一系列AWS账户，您可以将其整理为一个层次结构并进行集中式管理</li>
</ul>
<p><strong>AWS account – 账户</strong></p>
<ul>
<li>AWS账户是您AWS资源的容器，例如： Amazon S3 存储桶、 Amazon EC2 实例等</li>
<li>通过AWS Identity and Access Management (IAM) 规则  (users, roles) 管理AWS资源</li>
<li>AWS Organizations中最小的管理单元</li>
</ul>
<p><strong>Master account – 主账户</strong></p>
<ul>
<li>在组织中为所有账户付款的账户</li>
<li>管理您的组织的Hub（中心）节点</li>
</ul>
<p><strong>Organizational unit (OU) – 组织单元</strong></p>
<ul>
<li>组织单元是组织内的一组AWS账户</li>
<li>把AWS账户添加到逻辑组中，账号管理更方便</li>
<li>AWS账户和组织单元OU可以是另外一个组织单元OU的成员</li>
<li>一个AWS账户可以是多个组织单元OU的成员</li>
</ul>
<p><strong>Administrative root – 管理根</strong></p>
<ul>
<li>管理根是整理AWS账户的起始点，也是整个组织层次架构中的最顶层的容器。</li>
</ul>
<p><strong>Organization control policy (OCP) – 组织控制策略</strong></p>
<ul>
<li>含有一个或多个语句的配置，这些语句用于定义您要应用于某组AWS账户的控制策略</li>
<li>不同应用场景使用不同的组织控制策略</li>
</ul>
<p>下图可以帮助您更直观的理解这些概念之间的关系：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-2.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-2.png" alt="0122-2" width="806" height="654" /></a></p>
<p>下面我会更详细的介绍以上提出的这些概念：</p>
<h3>Account加入Organization的方式</h3>
<p>1.从Organization中创建新账户</p>
<p>1.1 新的AWS账户只能通过主账户来创建</p>
<p>1.2 在创建账户的过程中，您可以配置下面的信息：</p>
<p>电子邮件地址 (必须)</p>
<p>账户名称 (必须)</p>
<p>IAM 角色名称 (可选 – 默认的名称是 OrganizationAccountAccessRole)</p>
<ul>
<li>为主账户通过AssumeRole方式访问当前账户开启信任权限</li>
<li>权限设置为完全控制</li>
<li>IAM 访问账单 (可选) 。注意! IAM 用户仍然需要相关的IAM权限才可以访问账单</li>
</ul>
<p>1.3 新AWS账户</p>
<p>自动成为您组织的一部分</p>
<p>可以从组织中删除，但是可以通过策略让其没有执行Leave Organization的权限</p>
<p>2. 让已有账户加入Organization</p>
<p>2.1 邀请只能通过主账户发起</p>
<p>2.2 被邀请的AWS账户可以选择接受或者拒绝邀请</p>
<p>默认的行为是拒绝</p>
<p>可以通过IAM权限来控制</p>
<p>2.3 当邀请被接受</p>
<p>这个AWS账户就成为组织的一个成员</p>
<p>可应用的OCP规则会被自动引用到这个账户</p>
<p>2.4 被邀请的AWS账户可以被从组织中移除，但是可以通过策略让其没有执行Leave Organization的权限</p>
<h3>AWS Account的逻辑组(OU)</h3>
<ul>
<li>把AWS账户添加到逻辑组中，账号管理更方便</li>
<li>AWS账户和组织单元OU可以是另外一个组织单元OU的成员</li>
<li>一个AWS账户可以是多个组织单元OU的成员</li>
</ul>
<p>如下图所示：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-3.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-3.png" alt="0122-3" width="870" height="381" /></a></p>
<h3>OCP(Organization Control Policy)</h3>
<p>1. 描述要应用的控制策略</p>
<p>2. 不同的使用场景有不同的应用控制策略 OCP</p>
<p>3. 应用控制策略OCP可以被附加到</p>
<ul>
<li>组织(Organization)</li>
<li>组织单元(OU)</li>
<li>AWS账户(Account)</li>
</ul>
<p>4. OCP拥有继承属性(AWS账户, 组织单元OU, 组织)</p>
<ul>
<li>Policy是继承关系的，也就是说OU会继承organization的policy，而AWS Account会继承OU的policy</li>
<li>Account的policy会跟随其移动，如果这个Account从一个OU移动到另一个OU，那么属于这个Account的Policy也会移动。但是它不会再接收之前OU的Policy，而是会接收新OU的Policy</li>
</ul>
<h3>OCP support in V1：Service Control Policies(SCPs)</h3>
<p>1. 允许您对AWS服务 API进行访问控制</p>
<ul>
<li>定义一个允许访问的API列表 – 白名单</li>
<li>定义一个禁止访问的API列表 – 黑名单</li>
</ul>
<p>2. 服务控制策略无法被本地管理员覆盖</p>
<p>3. 对于IAM用户和角色，最终生效的权限是服务控制策略和相关的IAM权限的交集</p>
<p>4. 必要但不充分，本地用户拥有某行为权限，必须要同时拥有SCP权限和IAM权限</p>
<p>5. IAM 规则模拟器对SCP有感知</p>
<p>6. SCP的控制权限大于本地administrator的权限</p>
<p>下图是使用白名单和使用黑名单写SCP的案例:</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-4.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-4.png" alt="0122-4" width="756" height="426" /></a></p>
<p>SCP使用的是IAM policy的语法，和IAM Policy一样，但是有以下两点不同</p>
<ul>
<li>Resource必须是”*”</li>
<li>没有condition</li>
</ul>
<p>一定注意，允许最终用户行为的话，必须要SCP和IAM Permission同时拥有。下图所示，如果在SCP允许S3和EC2，但是在IAM Permission允许EC2和SQS。那么最终用户只能拥有EC2的权限。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-5.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-5.png" alt="0122-5" width="479" height="347" /></a></p>
<h3>简单化的账单管理</h3>
<ul>
<li>单个付款账户为所有账户付款</li>
<li>组织内所有的AWS账户的资源被核算到统一的账单中并应用相关的阶梯价</li>
<li>所有已存在的整合账单家族将会被迁移到组织的账单模式中</li>
</ul>
<h3>Organization不同的管理级别</h3>
<p>您可以在创建新组织的时候选择不同的管理级别</p>
<p>1. 账单模式(Billing mode)</p>
<ul>
<li>和当前的整合账单模式向下兼容 (CB)</li>
<li>从整合账单家族中创建的的组织自动被设置为账单模式</li>
</ul>
<p>2. 完全控制模式(Full-control mode)</p>
<ul>
<li>账单模式中的所有功能</li>
<li>开启所有类型的OCP管理功能</li>
<li>从账单模式转换成完全控制模式需要得到组织中所有AWS账户同意</li>
</ul>
<h3>动手利用AWS Organizations来管理您的组织</h3>
<p>下面我就给大家演示一下，使用AWS Organizations服务如何能做到快速，方便，准确的来管理您的多个账户</p>
<p>1. 进入AWS Organizations服务</p>
<p>进入AWS Organizations服务的方式，可以通过在service上搜索的方式进入，或者通过在Account菜单下点击My Organization进入。在Service的下拉菜单中没有这项服务。</p>
<p>服务栏搜索：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-6.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-6.png" alt="0122-6" width="2156" height="330" /></a></p>
<p>账号栏下拉：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-7.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-7.png" alt="0122-7" width="483" height="266" /></a></p>
<p>2. 创建新的Organization</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-8.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-8.png" alt="0122-8" width="1666" height="606" /></a></p>
<p>在AWS Organizations服务界面上选择创建组织，选择希望创建的组织的种类，这里我演示时选择Full Control模式，如果希望仅进行账单整合(Consolidated Billing)，那么选择右边的“Enable Only Consolidated Billing”。无论是哪种模式，账单都会是整合的。区别只在于Master Account能不能对加入的账号进行控制</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-9.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-9.png" alt="0122-9" width="1114" height="864" /></a></p>
<p>注意：现在Consolidated Billing功能已经迁移到AWS Organization下了，如果点击主账号下的My Account-&gt; Consolidated Billing，可以看到该提示，并且点击View Linked accounts也是直接就会跳转到AWS Organization界面</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-10.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-10.png" alt="0122-10" width="1006" height="496" /></a></p>
<p>创建完毕之后，会出现组织架构管理界面，前面带星号的账号就是Master Account</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-11.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-11.png" alt="0122-11" width="1762" height="570" /></a></p>
<p>3. 添加新Account到Organization下</p>
<p>在创建完Organization之后，添加账号到Organization下有两种方式</p>
<ul>
<li>直接添加账户</li>
<li>邀请其他账户加入</li>
</ul>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-12.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-12.png" alt="0122-12" width="845" height="149" /></a></p>
<p>3.1 直接添加账户(Account)</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-13.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-13.png" alt="0122-13" width="740" height="203" /></a></p>
<p>填写你希望添加的账号的全名和邮箱，并分配一个IAM Role，这个IAM Role是用来给予这个新Account一个full administrative control的权限。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-14.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-14.png" alt="0122-14" width="933" height="298" /></a></p>
<p>大约等待几秒钟，Account即可创建。对比如果是要自己在AWS网页创建账号，速度上提升了非常多。不过创建时没有设置密码，需要用户登录时在控制台点击忘记密码来重置。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-15.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-15.png" alt="0122-15" width="906" height="144" /></a></p>
<p>在Global根账号控制台登录新创建的账号，因为不知道密码，所以需要点击忘记密码来重置。随后会在注册邮箱收到重置密码的链接，点击重置密码之后，重新登录即可。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-16.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-16.png" alt="0122-16" width="760" height="512" /></a></p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-17.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-17.png" alt="0122-17" width="746" height="360" /></a></p>
<p>登录账户之后，可以看到这个新账号已经可以工作，并且Consolidated Billing功能是默认开启的。并指示该账户已经在一个Organization下了。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-18.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-18.png" alt="0122-18" width="2506" height="660" /></a></p>
<p>3. 2 邀请其他账户(Account)加入</p>
<p>点击Invite account来邀请其他账号加入，添加账号号码或者邮箱，并点击邀请即可</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-19.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-19.png" alt="0122-19" width="786" height="332" /></a></p>
<p>在界面右侧，点击Invitations可以看到已经邀请的账号的信息</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-20.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-20.png" alt="0122-20" width="1293" height="279" /></a></p>
<p>此时在被邀请的账号的注册邮箱中会收到来自Master Account的邀请邮件，如果希望接受这个邀请加入Organization。那么可以选择点击邮件中的链接或者直接进入自己账号下的Organization界面接受也可以。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-21.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-21.png" alt="0122-21" width="434" height="157" /></a></p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-22.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-22.png" alt="0122-22" width="646" height="334" /></a></p>
<p>在Invitation界面中可以看见Organization的ID，邀请人的Account以及申请控制的类型，最后还有申请加入时的留言(Notes)</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-23.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-23.png" alt="0122-23" width="686" height="385" /></a></p>
<p>最后回到主账号下，可以看见包括Master Account，主动创建的Account以及受邀请加入的Account的信息</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-24.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-24.png" alt="0122-24" width="867" height="299" /></a></p>
<h3>从Organization删除Account</h3>
<p>有两种方式可以从Organization下面删除加入的Account：</p>
<p>1. Master Account主动从Organization删除Account，点击单个或多个Account，点击删除即可</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-25.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-25.png" alt="0122-25" width="953" height="361" /></a></p>
<p>2. 加入Organization的Account脱离Organization，在该Account下选择My Organization，可以看见其加入的Organization信息以及选择离开该Organization</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-26.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-26.png" alt="0122-26" width="951" height="326" /></a></p>
<h3>利用OU(Organization Unit)来管理多个Account</h3>
<p>开始时Organization下是没有任何OU的，需要用户自己手动去添加。每一级OU又可以添加自己下一级的OU，从而形成一个树状结构</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-27.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-27.png" alt="0122-27" width="612" height="338" /></a></p>
<p>你可以创建一个多级OU组织，包括一个根OU，两个一级OU和两个二级OU</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-28.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-28.png" alt="0122-28" width="927" height="287" /></a></p>
<p>所有的Account默认都在根OU下，你可以选择一个或者多个Account，并把他们移动到任意OU下。目前只能移动Account到OU，不能从OU主动加Account</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-29.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-29.png" alt="0122-29" width="723" height="547" /></a></p>
<p>针对不同的OU可以开启不同的Policy来控OU下面的Account，不过要开启这个feature，必须首先在Root OU下启动这个功能</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-30.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-30.png" alt="0122-30" width="1037" height="427" /></a></p>
<h3>利用Policy(Service Control Policy)来管理Account的行为</h3>
<p>在使用Policy开管理Account时，始终记住两个原则：</p>
<p>1. Policy是继承关系，并且可以随Account移动</p>
<ul>
<li>Policy是继承关系的，也就是说OU会继承organization的policy，而AWS Account会继承OU的policy</li>
<li>Account的Policy会跟随其移动，如果这个Account从一个OU移动到另一个OU，那么属于这个Account的Policy也会移动。但是它不会再接收之前OU的Policy，而是会接收新OU的Policy</li>
</ul>
<p>2. 最终Account下的User的行为是SCP和IAM Permission共同决定的</p>
<p>一定注意，允许最终用户行为的话，必须要SCP和IAM Permission同时拥有。下图所示，如果在SCP允许S3和EC2，但是在IAM Permission允许EC2和SQS。那么最终用户只能拥有EC2的权限</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-31.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-31.png" alt="0122-31" width="479" height="347" /></a></p>
<p>Service Control Policy在Policies下面可以进行设置，默认情况就有一个什么权限都有的FullAWSAccess Policy并且是attach到Root OU的。这也就意味着默认情况下，只有有Account加入这个Organization，那么这个Account就拥有操作所有AWS服务的权限。如果希望修改SCP，那么可以点击右侧的Policy editor进行修改</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-32.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-32.png" alt="0122-32" width="1232" height="320" /></a></p>
<p>SCP的格式和IAM Policy格式一致，但有下面两点不同。在修改完或创建完Policy之后，可以attach给任何OU或Account</p>
<ul>
<li>Resource必须是”*”</li>
<li>没有condition</li>
</ul>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-33.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-33.png" alt="0122-33" width="856" height="474" /></a></p>
<p>点击Policies界面下左上角的Create Policy可以从头创建一个SCP，你既可以选择使用Policy generator帮助你生成一个新的SCP，也可以从你已经创建的一个SCP中进行复制。在创建时，你可以选择白名单模式或者黑名单模式</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-34.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-34.png" alt="0122-34" width="892" height="562" /></a></p>
<p>这里我选择白名单模式，创建一个名为“SCP_Allow_access_VPC_subnet”的SCP，仅允许Account创建和查看VPC和Subnet，其余动作都禁止</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-35.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-35.png" alt="0122-35" width="768" height="375" /></a></p>
<p>将创建的SCP分配给OU，进而这个SCP会传递给下面添加的Account</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-36.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-36.png" alt="0122-36" width="1308" height="406" /></a></p>
<p>在SCP配置界面下，将原来的FullAWSAccess策略解除，添加新创建的“SCP_Allow_access_VPC_subnet”策略。这个时候问题就来了，因为这个Account会继承所在OU的SCP，而所在OU又会继承上层OU的SCP。所以其实目前来说，这个Phoenix Yao的Account是会拥有两个SCP，包括拥有所有权限的“FullAWSAccess”和限制权限的“SCP_Allow_access_VPC_subnet”</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-37.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-37.png" alt="0122-37" width="355" height="513" /></a></p>
<p>在这种情况下会怎么样呢？其实和IAM Policy一样，SCP只会允许最小权限，所以当你用Phoenix Yao账号打开VPC界面时，会发现你无法查看除了VPC和Subnet的任何信息。另外，注意一下，这个Policy生效有时候需要一些时间，不是马上能看到结果。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-38.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-38.png" alt="0122-38" width="1253" height="358" /></a></p>
<p>我们再来看下IAM policy和SCP一起作用的结果。使用Phoenix Yao这个root账号创建一个User，并赋予其除了查看Subnet其余动作都可以做的IAM Policy。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-39.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-39.png" alt="0122-39" width="417" height="279" /></a></p>
<p>将这个Policy绑定到新创建的IAM User的IAM Permission中</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-40.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-40.png" alt="0122-40" width="698" height="341" /></a></p>
<p>将SCP恢复成“FullAWSAccess”以单独测试IAM Permission是否生效，发现已经生效。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-41.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-41.png" alt="0122-41" width="954" height="437" /></a></p>
<p>最后将SCP和IAM Permission一起使用。得到的结果应该是取最小权限，即只能查看VPC的情况</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-42.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/03/0122-42.png" alt="0122-42" width="974" height="471" /></a></p>
<p>使用AWS Organizations时的最佳实践</p>
<p>下面介绍一些在使用AWS Organizations服务时的最佳实践：</p>
<p>1. 使用CloudTrail服务监控Master Account的行为活动</p>
<p>2. 不要通过Master Account来管理资源</p>
<p>3. 在管理你的组织时要采用”最小权限分配”的原则</p>
<p>4. 使用OU来对账号进行权限的分配管理</p>
<p>5. 仅给Organizations的根账号(root)分配仅需要的权限</p>
<p>6. 在测试权限时先使用单个AWS Account来测试</p>
<p>7. 避免在一个组织中同时使用”白名单”策略和”黑名单”策略</p>
<p>8. 每创建一个新的AWS Account都需要有足够合理的原因</p>
<h3>给予Organization最小权限</h3>
<ul>
<li>对所有AWS组织行为设置相对应的IAM权限</li>
<li>您也可以把AWS组织相关的元素（组织，组织单元，AWS账户）作为IAM规则的资源进行管理</li>
<li>您可以把管理您组织的权限通过IAM role功能委托给一个在其他AWS账号中的IAM用户</li>
<li>所有的组织管理行为可以通过AWS CloudTrail服务记录</li>
</ul>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/aws-organizations-%e7%ae%a1%e7%90%86%e4%bc%97%e5%a4%9a%e8%b4%a6%e5%8f%b7/">AWS Organizations —— 管理众多账号</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/aws-organizations-%e7%ae%a1%e7%90%86%e4%bc%97%e5%a4%9a%e8%b4%a6%e5%8f%b7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
