IAM 常见概念


信任关系在 AWS IAM 的语境下主要与 IAM 角色 (roles) 相关。它定义了哪些实体可以假设一个角色。简单来说,信任关系决定了谁可以使用该角色。

让我们详细探讨一下信任关系:

1. IAM 角色 (Role) vs. IAM 用户 (User):

  • IAM 用户: 是 AWS 服务的长期实体。它们有用户名和密码,可以登录 AWS 控制台,或者有访问密钥,用于通过API或CLI进行编程访问。
  • IAM 角色: 不是用来直接与AWS互动的实体。相反,它是一组权限,任何授权实体都可以假设。实体假设角色后,它会获得该角色的权限。

IAM 用户 (User) 和 IAM 角色 (Role) 都是 AWS 的身份管理 (IAM) 中的关键实体,它们都允许与 AWS 资源进行交互,但它们之间有一些核心的不同之处。以下是对这两者之间的区别的详细解释:

定义:

  • IAM 用户 (User): IAM 用户是 AWS 的长期身份。它代表一个特定的人或服务,可以与 AWS 进行交互。用户可以是人类用户、如公司的员工,或可以是服务、如在一个 EC2 实例上运行的应用程序。

  • IAM 角色 (Role): IAM 角色不是一个实际的“用户”。它更像是一套权限的容器,可以被其他 AWS 实体(如用户、服务、资源或外部实体)临时“假设”。

凭证:

  • IAM 用户: 拥有长期的静态凭证,如用户名和密码(用于 AWS Management Console 的登录)或访问密钥(用于 CLI、SDK 和 API 访问)。

  • IAM 角色: 不拥有任何固定的凭证或长期访问密钥。相反,当实体“假设”一个角色时,它会临时获得访问凭证。

使用场景:

  • IAM 用户: 适用于长期的、持续的 AWS 交互需要。例如,公司员工需要登录 AWS 控制台或应用程序需要持续访问 AWS 资源。

  • IAM 角色: 适用于临时访问需求或跨服务和跨账户访问。例如,EC2 实例需要访问 S3 存储桶,或一个 AWS 账户需要访问另一个 AWS 账户的资源。

安全性:

  • IAM 用户: 由于其使用长期静态凭证,如果凭证不当地管理或泄露,可能存在更大的安全风险。

  • IAM 角色: 由于其使用临时凭证,即使这些凭证泄露,也只能在一个短时间窗口内被滥用。此外,这些凭证会自动轮换,无需手动管理。

灵活性:

  • IAM 用户: 直接与一个 AWS 账户关联,其权限一旦设置,更改需要更多的管理操作。

  • IAM 角色: 可以被多个实体假设,使得跨服务和跨账户的协作更为灵活。

总的来说,IAM 用户和 IAM 角色都在 AWS 安全策略中起着关键作用。选择使用哪一个取决于具体的使用场景、安全要求和管理偏好。

2. 信任关系是如何工作的:

当你创建 IAM 角色时,你会定义一个信任策略,该策略描述了哪些实体被允许假设这个角色。这些实体可以是 AWS 账户、IAM 用户、AWS 服务、或者是身份提供商如 Cognito、SAML 兼容的身份提供者等。

例如,如果你想允许一个 Lambda 函数访问 DynamoDB,你可以创建一个 IAM 角色并赋予它 DynamoDB 的权限,然后在信任策略中指定该 Lambda 函数。这样,Lambda 函数就被允许假设这个角色,并获得该角色的权限。

3. 信任关系的组成:

信任策略是一个 JSON 文档,其中定义了信任关系。例如,以下是一个简单的信任策略,允许 Amazon EC2 服务假设一个角色:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

在这个策略中:

  • Effect: 是 “Allow”,这意味着它是一个允许的规则。
  • Principal: 指定了被允许的实体,这里是 ec2.amazonaws.com,代表 Amazon EC2 服务。
  • Action: 是 sts:AssumeRole,这是 AWS 的安全令牌服务 (STS) 的一个操作,允许实体假设角色。

4. 常见的使用场景:

  • 跨账户访问: 当一个 AWS 账户需要访问另一个 AWS 账户中的资源时,可以创建一个IAM角色并为另一个账户设置信任关系。
  • AWS 服务: 为 AWS 服务如 Lambda、EC2、Step Functions 等提供访问其他 AWS 资源的权限。
  • Federation: 使用外部身份提供商如 Active Directory 或 SAML 2.0 进行身份验证后,用户可以被允许假设 IAM 角色。

总之,信任关系是 AWS IAM 角色的核心组成部分,允许你定义哪些实体可以假设角色,并获得角色的权限。正确配置信任关系是确保 AWS 资源安全的关键。

确实,IAM 角色是 AWS 安全结构中的一个关键组成部分。下面是关于角色、服务角色、服务相关角色等概念的详细解释:

IAM 角色 (Role):

IAM 角色是 AWS 中的一种安全实体,代表了一定的权限,但并不是一个常规用户或服务。不同于 IAM 用户,IAM 角色没有固定的凭证 (即没有用户名和密码或访问密钥)。而是被其他实体”假设”来获得临时的安全凭证。

服务角色 (Service Role):

服务角色是一种特殊类型的 IAM 角色,它允许 AWS 服务假设该角色来对其他AWS服务执行操作。例如,如果你想让 Amazon EC2 实例访问 DynamoDB,你会为 EC2 创建一个服务角色,并赋予它访问 DynamoDB 的权限。

服务相关角色 (Service-linked Role):

这是AWS为支持服务创建的特殊角色。服务相关角色是预先定义的,允许服务执行特定于该服务的操作。与服务角色不同,服务相关角色的权限和信任策略是由 AWS 管理的,并且当你启用特定的服务功能时会自动创建。

4. 常见的 IAM 权限:

  • 托管策略: 定义了一组允许或拒绝的操作,这些操作可以在特定的资源上执行或针对整个AWS账户。
  • 内联策略: 直接附加到 IAM 用户、组或角色的策略。
  • 资源策略: 直接附加到特定 AWS 资源的策略,例如 S3 存储桶策略。

5. sts:AssumeRoleiam:PassRole 的关系:

  • sts:AssumeRole: 当实体想要”假设”一个 IAM 角色并获得其权限时,它们需要执行 sts:AssumeRole 操作。这通常涉及到获取一个临时的安全令牌。

  • iam:PassRole: 当你希望某个 AWS 服务 (如 EC2 或 Lambda) 在你的名义下使用角色时,你需要有 iam:PassRole 权限。这个权限检查确保你有权让特定的服务使用这个角色。例如,如果你创建一个新的 EC2 实例并希望它使用一个 IAM 角色,你需要 iam:PassRole 权限,以便将该角色传递给 EC2 服务。

简而言之,iam:PassRole 是关于”我可以将这个角色传递给一个 AWS 服务使用”,而 sts:AssumeRole 是关于”我可以假设这个角色并获得它的权限”。

综上所述,IAM 在 AWS 安全管理中扮演着重要的角色,确保了资源之间的适当隔离,同时也允许了灵活的跨服务和跨账户协作。正确理解并应用这些概念对于构建安全的 AWS 架构至关重要。


文章作者: AWS Learner
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 AWS Learner !
评论
  目录