【问题标题】:How to create ec2 credentials with openstacksdk or boto3?如何使用 openstacksdk 或 boto3 创建 ec2 凭据?
【发布时间】:2021-06-18 08:51:22
【问题描述】:

我需要创建 ec2 凭据,类似于 CLI 命令:
openstack ec2 credentials create 这应该会返回我的访问权限和密钥。
我浏览了https://docs.openstack.org/openstacksdk/latest/user/connection.html 文档,只找到了密钥对方法,但它们是关于公钥/私钥的。
我翻阅了文档并找到了一个用于处理机密的 API,但这不是我想要的。
是否有来自 OpenStack (Openstack Swift) 的实现或只是一个 REST API 方法,我可以自己将其包装在请求中?
我需要这些凭据才能使用 S3 存储桶和其他东西。 基本上,为此:

import boto3

s3 = boto3.resource(
    's3',
    region_name='us-east-1',
    aws_access_key_id=KEY_ID,
    aws_secret_access_key=ACCESS_KEY
)
content="String content to write to a new S3 file"
s3.Object('my-bucket-name', 'newfile.txt').put(Body=content)

所以我正在寻找的方法应该返回我:
access_key(32 个字符长)
秘密(32 个字符长)
可选链接,user_id,trust_id

【问题讨论】:

    标签: python-3.x boto3 openstack openstack-swift openstacksdk


    【解决方案1】:

    Openstack 有一整页关于他的 Identity API。 您想要的是 Openstack 中的凭证,正如您所说,它需要 EC2 凭证才能使用 Swift 连接到任何 S3 浏览器。

    网址是“v3/credentials”,您需要发送一个 POST 请求以及您的令牌。

    因此,在简历中,您首先要创建令牌(您可以在名为 X-Subject-Token 的标头中找到令牌,这就是我们使用 -i 标志进行 curl 的原因):

    curl -i \
      -H "Content-Type: application/json" \
      -d '
    { "auth": {
        "identity": {
          "methods": ["password"],
          "password": {
            "user": {
              "name": "YOUR_ADMIN_NAME (YOU ALSO HAVE AND ATTRIBUTE CALLED ID)",
              "domain": { "id": "YOUR_DOMAIN_ID" },
              "password": "YOUR_ADMIN_PASSWORD"
            }
          }
        }
      }
    }' \
      "YOUR_KEYSTONE_URL/v3/auth/tokens" ; echo
    

    然后,您将创建 EC2 凭证,如下所示:

    curl -i -X POST "YOUR_KEYSTONE_URL/v3/credentials" -H "Content-Type: application/json" -H "X-Auth-Token: YOUR_TOKEN_PREVIOUS_FETCHED" -d '{
        "credential": {
            "blob": "{\"access\":\"123456\",\"secret\":\"SOME_SECRET_KEY\"}",
            "project_id": "THE_PROJECT_ID_OF_USER",
            "type": "ec2",
            "user_id": "THE_USER_WHO_NEEDS_CREDENTIALS"
        }
    }'
    

    响应是这样的:

    {"token": {"methods": ["password"], "user": {"domain": {"id": "DOMAIN_ID", "name": "DOMAIN_NAME"}, "id": "USER_ID", "name": "USER_NAME", "password_expires_at": null}, "audit_ids": ["3S7UdvgpQS-rhD4eqD7xMQ"], "expires_at": "2021-09-23T17:43:58.000000Z", "issued_at": "2021-09-22T17:43:58.000000Z"}}
    

    理想情况下,您应该寻找状态为 201 CREATED 的响应。

    如果您想查看 Keystone API,请访问以下链接: https://docs.openstack.org/api-ref/identity/v3/index.html?expanded=create-credential-detail#credentials

    【讨论】:

      猜你喜欢
      • 2015-12-28
      • 1970-01-01
      • 2019-11-14
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 2017-03-28
      • 2016-12-07
      • 2016-02-19
      相关资源
      最近更新 更多