使用 AWS 身份验证连接器安全连接 | Mendix

跳到主要内容

使用 AWS 身份验证连接器安全连接

Mendix 已发布 AWS 身份验证连接器,使开发人员可以轻松地针对 AWS 进行身份验证并开始使用他们的一系列服务。

当然,安全性至关重要——尤其是在使用 AWS 等按量付费服务时,因此在与 AWS 服务集成时遵循最佳实践至关重要。为此,AWS 身份验证连接器具有不同的身份验证方式——其中最安全的是使用会话凭证。这实际上允许您的应用程序在定义的时间段内(通常大约一小时)采用 IAM 用户角色。利用 最近发布了 IAM Roles Anywhere 功能.

内容图片:安全集成 AWS 服务的最佳实践。基于会话的凭证。Amazon DynamoDB 连接器使用 GetSessionCredentials 操作从 AWS 身份验证连接器请求 Credentials 对象。AWS 身份验证连接器通过 Roles Anywhere 使用 AWS STS 请求临时会话令牌。返回的临时令牌用于使用 DynamoDB 连接器签署对 DynamoDB 的请求。如果会话具有正确的角色和配置,则允许操作,否则将引发 AccessDenied 异常。

认证

这种身份验证方法利用证书向 AWS 验证您的应用程序。要使用这种方法,您需要获取客户端证书。如果您无法访问自己的证书颁发机构 (CA),这绝非易事。

要创建自签名证书,我们将使用 openSSL,这是一个用于加密的开源命令行工具。您可以 在这里安装 openssl,或者你可以 使用 Git 安装附带的 openssl.

还有其他生成证书的方法。您可以使用 AWS 私有证书颁发机构服务 或公共证书服务。我们使用 openssl 有两个原因:

  1. 成本——这是一个免费的命令行工具,没有成本影响,非常适合开发和测试。
  2. 安全性——使用公共 CA 作为信任锚意味着该 CA 生成的所有证书都将受到信任,同时你可以通过策略约束进行限制, 不建议这样做。

一名身穿风衣的男子说“噢,还有一件事”的表情包

这些命令已在 Windows 和 Linux 上进行了测试(对不起 Mac 用户,尽管我相信它们是相同的)。如果你正在使用 Windows 并希望在 Mendix 云,请确保您已经安装了 openSSL 版本 3.X。

免责声明:创建您自己的自签名证书需要仔细注意细节,可能不适合您的用例。 确保你了解所涉及的风险 并且您的 CA 和密钥始终保持安全和保密。

自签名证书

创建根

首先要做的是创建一个根证书,它将充当您的 CA 和信任锚。这将用于签署您的所有其他证书,并具有以下要求:

  • 必须为 PEM 格式
  • 必须是版本 3
  • 基本约束必须包括 CA: TRUE

为此,您需要更新 openssl.cnf 文件。这是 openssl 的配置文件,位于 bin 文件夹中安装 openssl 的位置。找到 v3_ca 部分并将其更新为以下内容:

[ v3_ca ]
    basicConstraints        =critical, CA:TRUE
    subjectKeyIdentifier    =hash
    authorityKeyIdentifier  =keyid:always, issuer:always
    keyUsage                =critical, cRLSign, digitalSignature, keyCertSign

之后,我们需要生成私钥并创建 CA PEM 文件。我们需要使用 RSA 或 EC 算法来生成密钥.

openssl genrsa -out PrivateCA.key 4096
    openssl req -new -x509 -days 3650 -key PrivateCA.key -out PrivateCA.pem -extensions v3_ca

您可以在此处提供证书的一些识别信息:

openssl x509 -in PrivateCA.pem -text -noout

验证我们是否确实创建了 v3 证书也是一个好主意。

该图显示了 V3 证书验证的 c-path

客户证书

现在我们有了 CA,我们可以生成客户端证书,我们将使用该证书在 AWS 中获取我们的凭证。AWS 对您使用的客户端证书有以下要求:

  • 必须是版本 3 (X.509v3)
  • 基本约束必须包括 CA: FALSE
  • 密钥使用必须包括数字签名
  • 签名算法必须包含 SHA256 或更强的算法。

为了满足这些要求,我们必须首先创建一个扩展文件,我们将在生成证书时调用它。将名为 v3.ext 的文件放在与根证书相同的目录中,内容如下:

authorityKeyIdentifier=keyid,issuer
    basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment

现在对于我们的证书,首先我们创建一个密钥:

openssl genrsa -out client.key 4096

然后我们创建一个新的证书:

openssl req -new -key client.key -out client.csr

最后我们使用根 CA 对其进行签名:

openssl x509 -req -in client.csr -CA PrivateCA.pem -CAkey PrivateCA.key -set_serial 01 -out client.pem -days 3650 -sha256 -extfile v3.ext

完成后,您的证书文件夹中应该有以下文件:

该图显示了证书文件夹中的 v3.ext

还有一个步骤可以让我们在我们的 Mendix 应用程序:我们需要将客户端证书导出到 pfx 格式,可以上传到我们的应用程序.

openssl pkcs12 -export -in client.pem -inkey client.key -certpbe PBE-SHA1-3DES -keypbe PBE-SHA1-3DES -macalg sha1 -out client.pfx

您需要指定一个稍后需要使用的密码。

您现在可以使用这些证书来连接您的 Mendix 应用于 AWS 服务。

AWS

下一步是将您的根证书传递到 IAM Roles Anywhere 并将其连接到您想要使用的 IAM 角色。

打开您的 AWS 控制台并搜索 IAM Roles Anywhere。

具有 IAM Roles Anywhere 的 AWS 控制台图像

我们将首先创建一个连接到我们根 CA 的信任锚。给信任锚命名,然后在外部证书包中选择外部证书包,然后粘贴 PrivateCA.pem 中的内容:

该图显示了“编辑信任锚”窗口

确保信任锚与您要使用的服务位于同一区域。

获得信任锚后,您将需要一个 IAM 角色来承担。创建一个新的 IAM 角色并添加自定义信任策略:

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

然后,您需要添加 IAM 策略。请注意,建议授予角色所需的最低权限。这里我们授予与 mendixdemo.com S3 存储桶交互的权限。


     {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:PutObject"
                ],
                "Resource": "arn:aws:s3:::mendixdemo.com/*"
            }
        ]
    }

接下来,你需要一个配置文件来承担这个角色,因此再次搜索 IAM Roles Anywhere 并创建一个配置文件,分配我们刚刚创建的角色

该图显示了创建配置文件以承担 IAM Roles Anywhere 角色

Mendix 本地

此时,我们可以使用我们的证书和 AWS 角色来集成到我们的 Mendix 应用程序。我们将从本地开发开始。为了演示,我设置了一个简单的演示项目,并从市场下载了 AWS 身份验证连接器和 S3 连接器。

让我们从配置 AWS 连接器开始。它只需要我们创建的项目的 ARN。

该图显示了配置 AWS 连接器

接下来,我们将添加 S3 连接器,以允许我们上传到我们在策略中定义的 S3 存储桶。

该图显示了 S3 连接器的添加

等等……我们是不是忘了什么?如果我们不打算使用证书,生成证书有什么意义?我们需要告诉我们的应用程序在哪里可以找到我们的证书!我们首先将客户端证书 ID 设置为“1”。现在我们需要更新我们的运行时设置 App->Settings->Configurations 并添加 两个自定义运行时配置:

  • ClientCertificatePasswords – 您在生成 pfx 时添加的密码。
  • ClientCertificates – 您的证书在本地机器上的位置。

该图显示了添加客户运行时配置

如果我们现在测试一下,我们可以看到我们可以上传到我们的 S3 存储桶!

Mendix 云

我们可以在本地执行此操作,这很好,但现在我们需要能够部署到云中,这需要许可环境。对于这些说明,我们使用“Mendix 云”的原理与“Mendix 对于私有云”。

我们的第一个更改实际上是配置更新,将应用程序常量 AWSAuthentication.ClientCertificateID 设置为证书 ID 的值,该 ID 可以在环境中配置。当证书数量较多时,必须使用唯一值,因此请考虑一个有意义的值。例如“AWS_Auth”:

然后我们需要在我们的 Mendix 环境。打开您的环境并导航到网络并添加客户端证书。上传您的客户端.pfx 文件并提供您用于创建它的密码。

然后选择证书并单击“操作”下的三个点中的“编辑”:

在编辑屏幕中,使用您为常量 AWSAuthentication.ClientCertificateID 配置的值创建一个新的“Pin”id,因此在我们的示例中为“AWS_Auth”。

然后重新启动应用程序即可使其工作。

 

结语

我们已经了解了如何使用 AWS 身份验证来利用 AWS 最先进的 IAM 解决方案,使我们能够连接 Mendix 以最安全的方式将应用程序连接到 AWS 资源。

为了简化此过程,我们创建了两个批处理文件来创建自签名证书 - 下载 WindowsLinux/Mac.

要了解有关身份验证连接器的更多信息,请查看文档: https://docs.mendix.com/appstore/connectors/aws/aws-authentication/

查看更多关于 Mendix 和 AWS:

https://www.mendix.com/aws/

选择你的语言