【问题标题】:Is it possible to share Amazon AMI images to other users programatically using AWS SDK是否可以使用 AWS SDK 以编程方式将 Amazon AMI 图像共享给其他用户
【发布时间】:2014-01-07 01:24:16
【问题描述】:

是否可以使用 AWS 开发工具包共享 AMI?我知道我可以使用 http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sharingamis-explicit.html 中所述的 AWS 控制台或 CLI 共享 AMI 图像。 我搜索了 AWS 文档,但找不到任何可让您使用 AWS 开发工具包共享 AMI 的文档/示例。有可能吗?

编辑:另外,是否可以将 AMI 图像共享给其他 IAM 用户?

【问题讨论】:

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


    【解决方案1】:

    您可以按照您提供的链接修改和归因于 AMI(或 Amazon 图像)。 (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyImageAttribute.html)

    EC2 的 AMI 部分仅允许您创建最小权限。一种是授予 AWS 账户 ID 的权限,通常类似于:123456789012。请记住,账户 ID 与 AWS 账户的主要或主要用户相关联(例如您的电子邮件地址)。它允许您执行的另一种权限类型是组权限,但看起来亚马逊还没有实施它,因为组允许的唯一值是all

    AIM 为主帐户 ID(或主电子邮件地址)的层次结构中的用户提供更精细的权限访问。

    现在要使用 AIM 向 Amazon 映像 (AMI) 授予权限,您需要将 AIM 策略与具有 AMI 权限的用户或组相关联。例如:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "Stmt1388772918000",
          "Effect": "Allow",
          "Action": [
            "ec2:CreateImage",
            "ec2:DeregisterImage"
          ],
          "Resource": [
            "arn:aws:ec2:us-east-1:123456789012:instance/*",
            "arn:aws:ec2:us-east-1:123456789012:image/*"
          ]
        }
      ]
    }
    

    此政策允许在us-east-1 下的所有实例和映像上创建和注销帐户 ID 123456789012 的映像。

    您也可以通过编程方式完成上述所有操作。

    [编辑]

    这是来自http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-ec2 的可能 EC2 ARN 值列表:

    arn:aws:ec2:region:account:instance/instance-id
    arn:aws:iam::account:instance-profile/instance-profile-name
    arn:aws:ec2:region:account:placement-group/placement-group-name
    arn:aws:ec2:region::snapshot/snapshot-id
    arn:aws:ec2:region:account:volume/volume-id
    

    【讨论】:

    • 感谢 Rico 的回答。我已经为您为特定组提到的两个操作添加了一个策略,但我无法使用它创建新的 AMI。我是否还需要在操作列表中提供“RegisterImage”操作?另外,我想知道,您从哪里获得资源名称?我在docs.aws.amazon.com/general/latest/gr/… 中没有找到“arn:aws:ec2:us-east-1:[awsid]:instance/*”。
    • 似乎即使在操作列表中添加“RegisterImage”也无法使该组下的用户创建新的 AMI。
    • 我会尝试在此页面中添加所有图像操作:docs.aws.amazon.com/AWSEC2/latest/APIReference/query-apis.html,然后开始删除您不需要的操作。确保您有权将所有“图像”操作添加到您的策略中。在这里您可以找到所有 AIM EC2 资源类型(用于 arns)docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
    • 我尝试添加所有图像操作,但仍然无法创建 AMI。我收到以下错误“AWS 错误代码:未授权操作,AWS 错误消息:您无权执行此操作。”我还尝试授予 ec2 的所有权限,例如 "Effect": "Allow", "Action": [ "ec2:*" ], "Resource": [ "arn:aws:ec2:us-east-1:123456789012:图像/*”、“arn:aws:ec2:us-east-1:123456789012:instance/*”]。那也没用。我需要添加图像和实例以外的资源吗?我可以在文档中找到这些吗?
    • 尝试arn:aws:ec2:us-east-1:123456789012:volume/* 以允许所有卷。可能还有其他资源。您还使用us-east-1 还是其他地区?
    【解决方案2】:

    当然。例如查看 boto.ec2.image 类。 (python sdk)

    http://boto.readthedocs.org/en/latest/ref/ec2.html#module-boto.ec2.image

    我相信 ruby​​、js 和 java SDK 也可以做到这一点,因为它们都使用 AWS API。

    事实上,cli 也使用 API。

    此外,这里还有 EC2 API 参考,了解如何创建图像。

    http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateImage.html

    是的,您可以根据用户的 AIM 策略与其他用户共享 AMI。

    【讨论】:

    • 感谢 Rico 的回答。我无法使用 java SDK 共享 AMI 图像。您提供的链接将我带到 CreateImage 文档,但我需要能够共享现有的 AMI 图像。我浏览了文档并在docs.aws.amazon.com/AWSEC2/latest/APIReference/… 找到了 ModifyImageAttribute。但是,我想与 IAM 用户和组共享它。我无法找出 IAM 用户或组的 AWS 用户 ID。
    猜你喜欢
    • 1970-01-01
    • 2020-06-17
    • 2021-09-24
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多