IAM策略是一个可以声明一个或多个权限的文档。AWS提供很多自带的IAM策略,允许用户快速应用。客户自己也可以按照自己的需求生成新的IAM策略,IAM策略生成后,用户可以将它们应用到IAM用户,IAM用户组或者是IAM角色中,可以向同一个IAM用户应用多个IAM策略,在生成IAM策略时,应注意的是特别的拒绝会覆盖特别声明的允许。
IAM策略写法:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Allow",
"Action":[ "s3:ListBucket", "s3:GetBucketLocation" ],
"Resource":"arn:aws:s3:::EXAMPLE-BUCKET-NAME”
}
]
}
首先有版本,版本号就是年月日,然后声明中包括三个部分,效果,动作和资源。效果有两种,Allow或是Deny,即允许或拒绝,动作就是针对哪些资源可以进行的某种操作,资源就是操作的对象。上面的IAM策略例文中有一个版本号,两个声明。第一个声明中,规定了针对所有的S3存储桶(arn:aws:s3:::*中最后的*代表所有的存储桶,也可以指明某个存储桶),允许用户对桶列出所有我的存储桶。第二个声明中,规定了针对S3中的某个(EXAMPLE-BUCKET-NAME)存储桶,允许用户对该桶列出桶内的数据对象,以及存储桶的所在位置。
从上面的例子中可以看到,一个IAM策略中可以有多个声明,而每个声明可以针对不同的AWS服务,比如一个是S3,另一个可以是EC2。而在IAM用户应用的IAM策略中,如果有两个策略,或者是一个策略中的两个声明,针对同一个资源执行了两个相反的动作,即一个声明允许针对某资源执行某操作,而另一个声明拒绝针对某资源执行某种操作,这时候拒绝的声明会覆盖掉允许的声明。
IAM角色和IAM用户很相似,都可以决定哪些人可以在AWS中进行哪些操作,在生成IAM角色的时候和IAM用户也很相似,将某些IAM策略赋予给IAM角色即可。当启动一个EC2实例,然后通过EC2实例来访问S3存储桶的时候,有两种方法:第一,可以在EC2实例上进行IAM用户认证,假定有一个IAM用户拥有对S3存储桶的访问权限,在EC2上输入IAM用户的密钥之后,AWS系统会认为现在这个EC2是以IAM用户的身份来访问S3存储桶的。但是AWS非常不推荐这种做法,因为将IAM用户的密钥信息输入到EC2实例上是非常不安全的做法,其次IAM用户的私有密钥需要周期性的更新,而更新方法只能是手动。第二,可以为这个EC2实例绑定一个IAM角色,假定这个IAM角色拥有对S3存储桶的访问权限,在启动EC2实例的时候,或者是启动EC2实例之后,都可以对其绑定角色。IAM角色生成之后,用户是看不见密钥的相关信息的,但是在AWS系统中它是拥有相关信息的,并且当利用IAM角色的时候,AWS系统默认是会自动更新IAM角色的密钥来保证系统的安全性。
实例配置文件。实例配置文件是IAM角色的容器,当通过AWS的管理控制台生成IAM角色的时候,AWS系统会自动为这个角色生成一个同样名称的实例配置文件,当为EC2实例绑定IAM角色的时候,其实显示的IAM角色列表是IAM角色的实例配置文件的列表。而当利用CLI等AWS开发包生成IAM角色的时候,必须另外生成该IAM角色的实例配置文件。