1. AWS IAM (Identity and Access Management)
1.1 AWS IAM (Identity and Access Management) 概述
基于身份的策略 (Identity-based Policies)
:附加到 IAM
用户、组或角色。这些策略可让您指定该身份可执行哪些操作(其权限)。
例如,您可以将策略附加到名为 John 的
IAM
用户,以声明允许他执行Amazon EC2
RunInstances 操作。
基于资源的策略 (Resource-based Policies)
:附加到某个资源。
例如,您可以将基于资源的策略附加到
Amazon S3
存储桶、Amazon SQS
队列、VPC 端点
、AWS Key Management Service
加密密钥以及Amazon DynamoDB
表和流。
1. 策略中的各键及其解释
{
"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": "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 存储桶。
2. 基于身份的策略
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
}
}
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
}
}
由于基于身份的策略之后会分配给用户、组和角色,因此不需要指定 Principal
主体
3. 基于资源的策略
{
"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/*"
]
}]
}
{
"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
主体,来限制特定的用户、组和角色可以操作该资源