小编mma*_*nry的帖子

如何使用 boto3 在 Python 中以管理员身份从 AWS Cognito 获取 JWT 访问令牌?

我正在尝试用 Python 为我的 Web 服务编写 API 测试。我想避免使用我的 AWS Cognito 池中测试用户的密码。我对此的策略(如果有更好的方法请告诉我)是要求 API 测试以 Cognito 管理员权限运行。然后使用 boto3 库为用户获取 JWT AccessToken,我将其添加到 API 测试的每个请求的标头中。

该文档似乎没有给我一种获取 AccessToken 的方法。我想在这里使用它:https : //boto3.amazonaws.com/v1/documentation/api/latest/reference/services/cognito-idp.html#CognitoIdentityProvider.Client.admin_initiate_auth

admin_initiate_auth 需要三种身份验证模式之一。USER_PASSWORD_AUTH 需要密码,USER_SRP_AUTH 需要客户端密码,CUSTOM_AUTH 需要密码哈希。我希望找到一种编写此脚本的方法,以便我只需要拥有正确的 IAM 权限,而无需签入公共测试用户密码。

或者...我猜...被告知这不是一个很好的方式来做这件事,而另一种方式更合适。最终目标是对 Cognito 保护的服务进行 API 黑盒测试。

amazon-web-services amazon-cognito boto3

7
推荐指数
2
解决办法
8480
查看次数

为什么 AWS 的 Python 圣杯不尊重我的 virtualenv?

我正在尝试按照教程部署一个 chalice 应用程序。我在 python3.6 中使用 virtualenv。我的应用程序依赖于 requirements.txt 中的 github 存储库,而该存储库的 requirements.txt 依赖于多个库。

我可以很好地运行应用程序,python -i app.py并且可以在 REPL 中正确执行我的端点。

但是,当我运行时,chalice deploy我收到一个错误,抱怨我需要的 github 存储库所需的模块。

File "/usr/local/lib/python2.7/dist-packages/chalice/deploy/packager.py", line 715, in download_all_dependencies
raise NoSuchPackageError(str(package_name))
NoSuchPackageError: Could not satisfy the requirement: PyQt5>=5.8.1
Run Code Online (Sandbox Code Playgroud)

但是请注意,使用的这个 chalice 库是 2.7。我在一个设置为 python3.6 的 virtualenv 中。

我意识到我之前在全局安装了 chalice,这可能是一个错误。所以我 pip 全局卸载了 chalice,但它仍然安装在我的 virtualenv 中。

现在重新运行圣杯,我得到

$ chalice --version
bash: /usr/local/bin/chalice: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我尝试将 chalice 的安装重新运行到本地 virtualenv,但它没有改变任何东西。

我在这里做错了什么?

python amazon-web-services chalice

5
推荐指数
1
解决办法
646
查看次数

为什么我的 AWS ACM 证书没有经过验证?

我在 AWS Route53 中注册了一个带有 ACM 证书的域名。我现在正在尝试将该域名和证书移动到一个新帐户,并使用 Terraform 管理资源。我使用 AWS CLI 将域名移动到新帐户,它似乎运行良好。然后我尝试运行这个 Terraform 代码来为域创建一个新的证书和托管区域。

resource "aws_acm_certificate" "default" {
  domain_name       = "mydomain.io"
  validation_method = "DNS"
}

resource "aws_route53_zone" "external" {
  name = "mydomain.io"
}

resource "aws_route53_record" "validation" {
  name    = aws_acm_certificate.default.domain_validation_options.0.resource_record_name
  type    = aws_acm_certificate.default.domain_validation_options.0.resource_record_type
  zone_id = aws_route53_zone.external.zone_id
  records = [aws_acm_certificate.default.domain_validation_options.0.resource_record_value]
  ttl     = "60"
}

resource "aws_acm_certificate_validation" "default" {
  certificate_arn = aws_acm_certificate.default.arn
  validation_record_fqdns = [
    aws_route53_record.validation.fqdn,
  ]
}
Run Code Online (Sandbox Code Playgroud)

这有两件事很奇怪。首先,证书已创建,但验证从未完成。它仍处于等待验证状态。我在此失败后在某处读到您无法自动验证,您需要手动创建 CNAME 记录。所以我进入控制台并单击“将 cname 添加到路由 53”按钮。这将 CNAME 记录适当地添加到 Terraform 创建的新 Route53 记录中。但它已经等待了几个小时。我多次点击同一个按钮,只创建了一个 CNAME,后续点击无效。

另一个奇怪的,也许是一个线索,是我的网站仍在运行。我相信这应该会破坏网站,因为该域现在由一个新帐户拥有,路由到该新帐户上的不同托管区域,并且有一个现在仍在等待中的证书。但是,一切仍然正常。所以我认为旧证书和托管区域可能会影响这一点。他们是否需要释放域,我是否需要删除该证书?删除旧帐户上的证书听起来没有必要。我不应该再被放弃了。

我还没有将证书与我打算做的 …

amazon-route53 terraform aws-certificate-manager

5
推荐指数
1
解决办法
1583
查看次数

为什么我无法从 AWS Lambda 运行我的 ECS 任务?

我正在使用 Amazon Web Services 并尝试在由 Lambda 触发的集群上运行 ECS 任务定义。

当我在 ECS 控制台中手动运行此任务并选择传递给 run_task 的所有相同选项时,它运行得很好。我在 Cloudwatch 中看到日志,并且任务(更新数据库)的效果已按预期发生。但是,当我从 Lambda 运行该任务时,它不起作用,但也没有给出任何我能看到的错误。

这是 Lambda 定义:

import boto3

def lambda_handler(event, context):
    print("howMuchSnowDoUpdate")
    client = boto3.client('ecs')
    response = client.run_task(
        cluster='HowMuchSnow',
        taskDefinition='HowMuchSnow:2',
        count=1,
        launchType='FARGATE',
        networkConfiguration={
            'awsvpcConfiguration': {
                'subnets': [
                    'subnet-ebce7c8c',
                ],
                'securityGroups': [
                    'sg-03bb63bf7b3389d42',
                ],
                'assignPublicIp': 'DISABLED'
            }
        },
    )
    print(response)
Run Code Online (Sandbox Code Playgroud)

我已为 Lambda 的 IAM 角色授予 ECSFull 策略。在此之前,我在运行 run_task 时收到了预期的权限被拒绝的信息。但是,一旦我添加了该策略,Lambda 就运行得很好,没有报告任何错误,这是我从 print(response) 行得到的响应:

{'tasks': [{'taskArn': 'arn:aws:ecs:us-east-1:221691463461:task/10b2473f-482d-4f75-ab43-3980f6995b17', 'clusterArn': 'arn:aws:ecs:us-east-1:221691463461:cluster/HowMuchSnow', 'taskDefinitionArn': 'arn:aws:ecs:us-east-1:221691463461:task-definition/HowMuchSnow:2', 'overrides': {'containerOverrides': [{'name': 'HowMuchSnow'}]}, 'lastStatus': 'PROVISIONING', 'desiredStatus': …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-ecs boto3 aws-lambda

4
推荐指数
1
解决办法
1万
查看次数

默认情况下如何对 v-data-table 进行排序?

我似乎无法让默认排序工作。对于文档中的论点custom-sort,我只能看到它是一个“用于对项目进行排序的函数”,但我不知道以什么方式。我可以想象很多。是否要求进行初始排序?它似乎返回了一个项目列表,但是当我尝试创建一个项目时,我收到一条错误消息。this.customSort is not a function

<template>
  <v-data-table
    :headers="headers"
    :items="reports"
    hide-default-footer>
    <template v-slot:item.requested="{ item }">
      {{ datetimeToDistance(item.requested) }}
    </template>
  </v-data-table>
</template>
<script>
export default {
name: 'Reports',
data () {
    return {
        customSort: (items,index,isDesc) => console.log("never called"),
        reports: [{name:"a",requested:"2020-01-01T00:00:00Z"}.{name:"b",requested:"2020-02-02T00:00:00"}],
    }
},
computed: {
    headers () {
        return [
            {text: "Name", value: "name"},
            {text: "Report Type", value: "report_type"},
            {text: "Requested", value: "requested", sort: (a,b) => a.localeCompare(b) },
            ];
    },
}
}
</script>
Run Code Online (Sandbox Code Playgroud)

如果您单击链接,我的排序就有效。我真正想要在这里说的是:“当页面第一次加载时,按‘请求’排序,就像用户最初点击那个一样。然后让他们改变顺序。”

注意:这datetimeToDistance只是一个调用库的函数,并不太重要。只是该列的输出不直接在对象中。

vue.js vuejs2 vuetify.js

4
推荐指数
2
解决办法
1万
查看次数

这句话在 Clojure 中如何成立?

这是来自我编写的程序,我不知道为什么这是真的。

user=> (defn isClose [t1] (fn [t2] (and (<= (- t1 t2) 20)) (<= (- t2 t1) 20)))
#'user/isClose
user=> ((isClose 50) 10)
true
Run Code Online (Sandbox Code Playgroud)

这不就减少到这个程度了吗?

user=> (and (<= 40 20) (<= -40 20))                                            
false
Run Code Online (Sandbox Code Playgroud)

clojure

3
推荐指数
1
解决办法
83
查看次数