# 中国区使用IAM编写策略需要注意的地方

> Amazon Resource Names (ARNs) uniquely identify AWS resources. We require an ARN when you need to specify a resource unambiguously across all of AWS, such as in IAM policies, Amazon Relational Database Service (Amazon RDS) tags, and API calls.<br>

简单来说, arn 就是AWS中资源的uri. 任何AWS资源都可以用 arn 标识, 因此对于资源的访问控制配置文件也要使用 `arn` 来写.

比如: 我们想开放某个s3 bucket的读写权限, 可以如下这种写法:

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": ["arn:aws:s3:::your-bucket", "arn:aws:s3:::your-bucket/*"]
    }
 ]
}
```

在中国区不能这么使用，**AWS 中国区非常特殊, 上述文件中的 `aws` 要修改成 `aws-cn`** !!!!\
这样写在中国区就可以用:

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": ["arn:aws-cn:s3:::your-bucket", "arn:aws-cn:s3:::your-bucket/*"]
    }
 ]
}
```

* 不要小看这一点小区别, 由于AWS 其他region 都是用 `aws` 就可以, 因此很多开源项目中, 将 `arn:aws: XXXX` hard code 在代码里, 导致这些项目用到中国区会失败!

此外，上面的配置文件中的 `"Version": "2012-10-17",` 这个日期是必须写成这个的, **不能修改其他任何值** , 千万别用这个值来作为自己的版本控制。

**建议程序访问AWS 资源时, 使用IAM role的方式, 不要使用配置文件中写入AccessKey/Secret 的方式, 非常不安全.**

<br>
