IAM 角色与策略
编写 JSON 策略文档,将其附加到角色,并了解基于身份的策略与基于资源的策略之间的区别。
IAM 角色与策略 是 CoddyKit 上的免费 AWS Solutions Architect 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AWS Solutions Architect 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AWS Solutions Architect 课程共包含 4 节课。
IAM policy:权限语言
IAM policy是一个 JSON 文档,用于声明允许执行的操作。每条声明都包含 Effect(Allow 或 Deny)、Action 和 Resource。代码展示了一个示例。
{
'Version': '2012-10-17',
'Statement': [
{
'Effect': 'Allow',
'Action': [
's3:GetObject',
's3:PutObject'
],
'Resource': 'arn:aws:s3:::my-bucket/*'
}
]
}基于身份的 policy 与基于资源的 policy
基于身份的 policy附加到用户或角色,并规定它们可以执行的操作。基于资源的 policy附加到资源本身,并规定哪些主体可以访问它。
# Example S3 bucket policy (resource-based)
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Principal': {
'AWS': 'arn:aws:iam::123456789012:role/MyAppRole'
},
'Action': 's3:GetObject',
'Resource': 'arn:aws:s3:::my-bucket/*'
}]
}IAM 角色:临时身份
IAM 角色是一种可以在短时间内代入的身份。它会发放会过期的临时凭证,非常适合 EC2、Lambda 和其他服务使用。
# Attach an IAM role to an EC2 instance (instance profile)
aws ec2 associate-iam-instance-profile \
--instance-id i-0abcdef1234567890 \
--iam-instance-profile Name=MyEC2Role信任 policy:谁可以代入角色
每个角色都有一条信任 policy,用于规定谁可以代入该角色;同时还有权限 policy,用于规定代入后可以执行哪些操作。没有信任 policy,就无法访问。
# Trust policy for a Lambda execution role
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Principal': {
'Service': 'lambda.amazonaws.com'
},
'Action': 'sts:AssumeRole'
}]
}AWS 服务角色:EC2 和 Lambda
当 EC2 需要调用 AWS 时,请为它提供一个包含角色的实例配置文件。凭证会自动轮换,无需硬编码密钥。Lambda 的工作方式相同。
# Retrieve role credentials from EC2 metadata (IMDSv2)
TOKEN=$(curl -X PUT 'http://169.254.169.254/latest/api/token' \
-H 'X-aws-ec2-metadata-token-ttl-seconds: 21600')
curl -H "X-aws-ec2-metadata-token: $TOKEN" \
http://169.254.169.254/latest/meta-data/iam/security-credentials/MyEC2Role跨账户角色代入
跨账户角色允许一个账户中的用户代入另一个账户中的角色,并访问其中的资源。这是多账户环境避免在各处重复创建用户的方式。
# Assume a cross-account role from Account A
aws sts assume-role \
--role-arn arn:aws:iam::999999999999:role/CrossAccountRole \
--role-session-name my-sessionpolicy 条件:精细控制
Condition可以向 policy 添加额外规则,例如要求 MFA,或将访问限制在特定 IP 范围或区域内。这样可以大幅收紧权限。
# Policy that requires MFA for sensitive actions
{
'Effect': 'Deny',
'Action': ['iam:*', 'cloudtrail:*'],
'Resource': '*',
'Condition': {
'BoolIfExists': {
'aws:MultiFactorAuthPresent': 'false'
}
}
}权限边界
权限边界限制一个身份可能拥有的最大权限,即使某条 policy 授予了更多权限也不例外。它是允许开发者创建自己的角色时的安全保障。
# Attach a permissions boundary to a user
aws iam put-user-permissions-boundary \
--user-name alice \
--permissions-boundary arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccesspolicy 评估逻辑
AWS 检查请求时,有一条规则始终优先:显式 Deny一定会阻止请求。除此之外,policy 的每一层都必须同意授予访问权限。
IAM policy 模拟器
IAM Policy Simulator可以测试某个身份是否能够执行某项操作,而不会真正执行该操作。在上线前调试权限时非常有用。
# Simulate an IAM policy evaluation via CLI
aws iam simulate-principal-policy \
--policy-source-arn arn:aws:iam::123456789012:user/alice \
--action-names s3:PutObject \
--resource-arns arn:aws:s3:::my-bucket/*用于联合访问的角色
来自 Okta、Google 或 Active Directory 的外部用户可以通过联合身份(SAML 或 OIDC)代入角色。这样无需创建任何 IAM 用户,就可以为数百万用户授予访问权限。
快速检查
测试您对本课 AWS Solutions Architect(SAA-C03)概念的理解。
课程回顾
快速回顾:policy是用于 Allow 和 Deny 的 JSON 规则,角色会发放临时凭证,条件则提供精细控制。接下来:最低权限。
常见问题解答
「IAM 角色与策略」课时是免费的吗?
是的 — 「IAM 角色与策略」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AWS Solutions Architect 课程的其余内容,请升级到 CoddyKit PRO。 AWS Solutions Architect 课程共包含 4 节课。
「IAM 角色与策略」这节课中我会学到什么?
编写 JSON 策略文档,将其附加到角色,并了解基于身份的策略与基于资源的策略之间的区别。 你通过在浏览器中直接运行的动手代码来练习 AWS Solutions Architect,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AWS Solutions Architect 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AWS Solutions Architect 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「IAM 角色与策略」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AWS Solutions Architect 课中编写并运行代码吗?
能。每节 AWS Solutions Architect 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- IAM 用户与组
- IAM 角色与策略
- 最小权限原则
- IAM 最佳实践与 MFA