【问题标题】:IAM access to EC2 REST API?IAM 访问 EC2 REST API?
【发布时间】:2016-07-19 11:43:53
【问题描述】:

我是AWS 的新手。我的客户使用AWS 来托管他的EC2 实例。现在,我们正试图让我访问 API。显然,我需要我的身份验证详细信息来执行此操作。

他在他的帐户下为我设置了一个 IAM 身份,因此我可以登录到AWS Web 控制台并配置 EC2 实例。但是,我终其一生都无法弄清楚我的 API 访问密钥显示在哪里。我无权查看“我的帐户”,我想它们会显示在此处。

那么,我要问的是,他如何通过他的帐户授予我 API 访问权限?如何使用我的 IAM 身份访问 AWS API?

【问题讨论】:

    标签: amazon-web-services amazon-ec2 amazon-iam


    【解决方案1】:

    Michael - sqlbot's answer 是正确的 (+1),但鉴于 Variables in AWS Access Control Policies 的添加相对较新但非常有用:

    今天,我们正在扩展 AWS 访问策略语言,以包括 支持变量。 Policy variables 让创建更容易 并管理包括个性化访问在内的一般政策 控制。

    这可以实现“IAM 凭据自我管理”组策略,该策略通常会分配给最基本的 IAM 组,例如常见的“用户”。

    • 请注意,以下解决方案仍需要由 AWS 账户所有者(或有权管理 IAM 本身的 IAM 用户)实施,但这只需执行一次,以便其他用户能够自行管理凭证.

    官方解决方案

    介绍性博客文章中包含了一个相应的示例(并且 同时 已在 IAM 文档中的 Allow a user to manage his or her own security credentials 上提供 - 更新:此示例再次消失,大概是由于仅使用 API 通过自定义解决方案适用,因此令人困惑):

    变量替换还简化了允许用户管理他们的 自己的凭据。如果您有很多用户,您可能会发现它不切实际 创建允许用户创建和轮换的个人策略 他们自己的凭据。使用变量替换,变成 作为一个组策略实现起来很简单。以下政策允许 任何 IAM 用户执行任何密钥和证书相关操作 在他们自己的凭据上。 [强调我的]

    {
      "Version": "2012-10-17",
      "Statement": [{
          "Effect": "Allow",
          "Action":["iam:*AccessKey*","iam:*SigningCertificate*"],
          "Resource":["arn:aws:iam::123456789012:user/${aws:username}"]
        }
      ]
    }
    

    资源范围arn:aws:iam::123456789012:user/${aws:username} 确保每个用户实际上只被授予访问他自己的凭据的权限。

    请注意,此解决方案仍然存在可用性缺陷,具体取决于您的用户如何访问 AWS 资源,即通过 API、CLI 或 AWS Management Console(例如,后者需要额外的权限)。

    此外,各种* 字符是通配符,因此iam:*AccessKey* 处理包含AccessKey 的所有IAM 操作(有关详细信息,请参阅IAM Policy Elements Reference)。

    扩展变化

    免责声明: IAM 策略的正确配置尤其影响 IAM 访问显然是微妙的,所以请您自行判断以下解决方案的安全影响!

    这里有一个更明确且略微扩展的变体,其中包括AWS Multi-Factor Authentication (MFA) 设备自我管理和一些易用性增强,以便于使用 AWS 管理控制台:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Action": [
            "iam:CreateAccessKey",
            "iam:DeactivateMFADevice",
            "iam:DeleteAccessKey",
            "iam:DeleteSigningCertificate",
            "iam:EnableMFADevice",
            "iam:GetLoginProfile",
            "iam:GetUser",
            "iam:ListAccessKeys",
            "iam:ListGroupsForUser",
            "iam:ListMFADevices",
            "iam:ListSigningCertificates",
            "iam:ListUsers",
            "iam:ResyncMFADevice",
            "iam:UpdateAccessKey",
            "iam:UpdateLoginProfile",
            "iam:UpdateSigningCertificate",
            "iam:UploadSigningCertificate"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:iam::123456789012:user/${aws:username}"
          ]
        },
        {
          "Action": [
            "iam:CreateVirtualMFADevice",
            "iam:DeleteVirtualMFADevice",
            "iam:ListVirtualMFADevices"
          ],
          "Effect": "Allow",
          "Resource": "arn:aws:iam::123456789012:mfa/${aws:username}"
        }
      ]
    }
    

    【讨论】:

    • 谢谢...你是对的。我不知道这一点,没有它我的答案是不完整的。 +1。
    • 如果不对账户中的所有用户添加 iam:ListUsers(以及用于 MFA 设备自助服务的 iam:ListVirtualMFADevices),我无法获得扩展变体以允许用户通过 AWS 控制台进行自助服务。我错过了什么吗?
    【解决方案2】:

    “你”不能,但是:

    在 IAM 中,在用户下,选择您的用户后,他需要单击安全凭证 > 管理访问密钥,然后选择“创建访问密钥”以创建与您的 IAM 用户关联的 API 密钥及其关联的秘密。在下一个屏幕上,有一条消息:

    您的访问密钥已成功创建。

    这是这些用户安全凭证最后一次可供下载。

    您可以随时管理和重新创建这些凭据。

    其中“管理”的意思是“停用或删除”,而“重新创建”的意思是“重新开始”。 IAM 管理员随后可以看到密钥,但看不到相关的秘密。

    IAM 管理员可以从该屏幕,并且仅从该屏幕,并且仅在此时,才能查看密钥和与该密钥关联的密钥或将它们下载到 CSV 文件。随后,具有适当权限的人可以在 IAM 中查看用户的密钥,但在这一次机会之后您将永远无法再次查看该密钥(如果可以的话,那就太荒谬了)。

    因此,您的客户需要进入 IAM,在他为您创建的用户名下,创建 API 密钥/秘密对,保存密钥和秘密,并通过适当安全的渠道将该信息转发给您。 . 如果他创建了它但没有保存相关的密钥,他应该删除密钥并创建一个与您的用户名相关联的新密钥。

    如果您没有自己的 AWS 账户,您应该注册一个,这样您就可以像自己一样以完全权限进入控制台并了解流程......这可能比我的描述更有意义。

    【讨论】:

    • 迈克尔,不确定你是在跟踪我还是只是很快回答。我希望是后者! ;P 无论如何,谢谢,这正是我正在寻找的答案。
    • @EthanBarron 大声笑,不,不是在跟踪 :) 我在网站上监控我的两个专业领域(MySQL 和 AWS)的新问题。询问其他事情,您不太可能收到我的来信。
    • @Michael-sqlbot - +1 以获得广泛的解释并强调需要一个安全通道来传递凭据!我添加了一个 secondary answer 扩展您的 Variables in AWS Access Control Policies 最近 IAM 添加了 Variables in AWS Access Control Policies 以实现用户凭据的自我管理。
    猜你喜欢
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    相关资源
    最近更新 更多