AWS IAM 策略的重点解析。
IAM 策略的重点解析
一、策略中的各键及其解释
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "FirstStatement",
"Effect": "Allow",
"Action": ["iam:ChangePassword"],
"Resource": "*"
},
{
"Sid": "SecondStatement",
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
},
{
"Sid": "ThirdStatement",
"Effect": "Allow",
"Action": [
"s3:List*",
"s3:Get*"
],
"Resource": [
"arn:aws:s3:::amzn-s3-demo-bucket-confidential-data",
"arn:aws:s3:::amzn-s3-demo-bucket-confidential-data/*"
],
"Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}}
}
]
}
Version- 指定要使用的策略语言版本。建议您使用最新的 2012-10-17 版本。Statement- 将该主要策略元素作为以下元素的容器。可以在一个策略中包含多个语句。Sid(可选) - 包括可选的语句 ID 以区分不同的语句。Effect- 使用 Allow 或 Deny 指示策略是允许还是拒绝访问。Principal(仅在某些情况下需要) - 如果创建基于资源的策略,您必须指示要允许或拒绝访问的账户、用户、角色或联合身份用户。如果要创建 IAM 权限策略以附加到用户或角色,则不能包含该元素。主体暗示为该用户或角色。Action- 包括策略允许或拒绝的操作列表。Resource(仅在某些情况下需要)- 如果创建 IAM 权限策略,您必须指定操作适用的资源列表。如果创建基于资源的策略,则该元素是可选的。如果不包含该元素,则该操作适用的资源是策略附加到的资源。Condition(可选) - 指定策略在哪些情况下授予权限。
上述的例子是基于身份的策略,因此没有指定 Principal。
Sid(语句 ID)为 FirstStatement 的第一个语句让具有附加策略的用户更改自己的密码。该语句中的 Resource 元素是“*”(这表示“所有资源”)。但实际上,ChangePassword API 操作(或等效的 change-password CLI 命令)仅影响发出请求的用户的密码。
- 第二个语句使用户可以列出其 AWS 账户 中的所有 Amazon S3 存储桶。
该语句中的 Resource 元素是 ”*“(这表示“所有资源”)。但由于策略没有为其他账户中的资源授予访问权限,因此,用户只能列出自己的 AWS 账户 中的存储桶。
- 第三个语句允许用户列出和检索名为 amzn-s3-demo-bucket-confidential-data 的存储桶中的任何对象,但是仅当使用 Multi-Factor Authentication (MFA) 对用户进行了身份验证时才能如此。策略中的 Condition 元素将强制实施 MFA 身份验证。
如果策略语句包含 Condition 元素,则仅当 Condition 元素计算为 true 时,语句才有效。在此示例中,Condition 在用户进行了 MFA 身份验证时计算为 true。如果用户没有进行 MFA 身份验证,则此 Condition 计算为 false。在这种情况下,此策略中的第三个语句不会应用,因此用户将无法访问 amzn-s3-demo-bucket-confidential-data 存储桶。
二、基于身份的策略
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
}
}
由于基于身份的策略之后会分配给用户、组和角色,因此不需要指定 Principal 主体。
三、基于资源的策略
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "1",
"Effect": "Allow",
"Principal": {"AWS": ["arn:aws:iam::account-id:root"]},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::amzn-s3-demo-bucket",
"arn:aws:s3:::amzn-s3-demo-bucket/*"
]
}]
}
而基于资源的策略需要指定 Principal 主体,来限制特定的用户、组和角色可以操作该资源。