Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs 菜单
Docs 主页
/ / /
Ruby 驱动程序
/ /

Amazon Web Services身份和访问管理

注意

Amazon Web Services身份验证仅在MongoDB Enterprise for MongoDB 4.4 及更高版本中可用。

Amazon Web Services身份验证机制使用Amazon Web Services 身份和访问管理 (IAM) 以及Amazon Web Services 安全令牌服务 (STS) 向MongoDB 部署证明客户端的身份。以下步骤描述了Amazon Web Services身份验证进程:

  1. 客户端使用Amazon Web Services IAM凭证创建签名,并将其发送到MongoDB 部署。

  2. 此部署使用客户端签名向Amazon Web Services STS 发送请求。

  3. 如果请求成功,STS 将返回与客户端凭证对应的 IAM 用户或角色的Amazon资源名称 (ARN)。

  4. 部署使用返回的 ARN 来查找用户。客户端将以此用户身份进行身份验证。

注意

客户端和服务器使用不同的用户名。客户端使用Amazon Web Services访问权限密钥ID,但服务器使用与访问权限密钥ID对应的 IAM 用户或角色的 ARN。

Amazon Web Services凭证包括以下组件:

  • 访问密钥 ID

  • 秘密访问密钥

  • 可选会话令牌

使用Amazon Web Services IAM凭证进行身份验证使用访问权限密钥ID和秘密访问权限密钥。使用临时Amazon Web Services IAM凭证进行的身份验证会使用所有三个组件。

注意

驱动程序从不通过网络发送秘密访问密钥或会话令牌。

临时凭证用于:

本页上的代码示例使用以下占位符:

  • <hostname>: MongoDB 部署的网络解决

  • <aws-access-key-id>: Amazon Web Services访问权限密钥ID

  • <aws_secret_access_key>: Amazon Web Services秘密访问权限密钥

  • <aws_session_token>: Amazon Web Services会话令牌

以下部分介绍如何在应用程序中使用Amazon Web Services IAM身份验证机制。

您可以提供常规(非临时)IAM凭证作为客户端选项或使用 URI。选择 Connection StringClient Options标签页,查看相应的语法:

client = Mongo::Client.new(
'mongodb://<aws_access_key_id>:<aws_secret_access_key>@host/?authMechanism=MONGODB-AWS')
client = Mongo::Client.new(['<host>'],
auth_mech: :aws,
user: '<aws_access_key_id>',
password: '<aws_secret_access_key>')

注意

如果您在 URI 中提供凭证,则必须对其进行百分号编码。

要提供临时凭证,请在客户端选项中或使用 URI 指定会话令牌。选择 Connection StringClient Options标签页,查看相应的语法:

client = Mongo::Client.new(
'mongodb://<aws_access_key_id>:<aws_secret_access_key>@host/?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<<aws_session_token>>')
client = Mongo::Client.new(['<host>'],
auth_mech: :aws,
user: '<aws_access_key_id>',
password: '<aws_secret_access_key>',
auth_mech_properties: {
aws_session_token: '<<aws_session_token>>',
})

客户端可以从环境或 EC2 或 ECS元数据端点检索凭证。要自动检索凭证,请指定Amazon Web Services身份验证机制,但不要指定用户名或密码。 选择 Connection StringClient Options标签页,查看相应的语法:

client = Mongo::Client.new(
'mongodb://host/?authMechanism=MONGODB-AWS')
client = Mongo::Client.new(['<hostname>'],
auth_mech: :aws)
)

驾驶员尝试按指定顺序从以下来源获取凭证:

  • AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN 环境变量。这些环境变量可由各种与Amazon Web Services相关的库和工具识别,例如官方Amazon Web Services Ruby SDK 和Amazon Web Services CLI。 它们也是在Amazon Web Services Lambda环境中运行时定义的。

  • Amazon Web Services STS AssumeRoleWithWebIdentity动作。此机制返回与服务帐户令牌关联的凭证,并需要设立以下环境变量:

    • AWS_WEB_IDENTITY_TOKEN_FILE:包含服务帐户令牌的文件的路径。

    • AWS_ROLE_ARN:调用者所担任角色的Amazon资源名称 (ARN)。

    • AWS_ROLE_SESSION_NAME (可选):假定角色会话的标识符。如果此变量为空,驾驶员将生成一个随机标识符。

  • Amazon Web Services ECS任务元数据端点。此端点返回与分配给容器的 ECS任务角色关联的凭证。

  • Amazon Web Services EC2实例元数据端点。此端点返回与分配给该实例的 EC2实例角色关联的凭证。

重要

凭证来源必须提供设立完整的凭证。示例,如果您的应用程序使用 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 环境变量,而只有其中一个变量具有值时,驾驶员就会引发错误。

注意

如果应用程序在 EC2实例上的 ECS容器中运行,并且允许该容器访问权限实例元数据,则驾驶员会尝试从 EC2实例元数据端点检索Amazon Web Services凭证。 如果驾驶员以这种方式检索凭证,则应用程序可以作为分配给 EC2实例的 IAM角色进行身份验证。

要学习;了解如何阻止容器访问 EC2实例元数据,请参阅Amazon Web Services文档。

要学习;了解有关本页讨论的任何方法或类型的更多信息,请参阅以下API文档:

后退

x.509

在此页面上