Overview
注意
Amazon Web Services身份验证仅在MongoDB Enterprise for MongoDB 4.4 及更高版本中可用。
Amazon Web Services身份验证机制使用Amazon Web Services 身份和访问管理 (IAM) 以及Amazon Web Services 安全令牌服务 (STS) 向MongoDB 部署证明客户端的身份。以下步骤描述了Amazon Web Services身份验证进程:
客户端使用Amazon Web Services IAM凭证创建签名,并将其发送到MongoDB 部署。
此部署使用客户端签名向Amazon Web Services STS 发送请求。
如果请求成功,STS 将返回与客户端凭证对应的 IAM 用户或角色的Amazon资源名称 (ARN)。
部署使用返回的 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 身份验证
以下部分介绍如何在应用程序中使用Amazon Web Services IAM身份验证机制。
显式提供档案
您可以提供常规(非临时)IAM凭证作为客户端选项或使用 URI。选择 Connection String 或 Client 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 String 或 Client 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 String 或 Client Options标签页,查看相应的语法:
client = Mongo::Client.new( 'mongodb://host/?authMechanism=MONGODB-AWS')
client = Mongo::Client.new(['<hostname>'], auth_mech: :aws) )
驾驶员尝试按指定顺序从以下来源获取凭证:
AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
和AWS_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_ID
和 AWS_SECRET_ACCESS_KEY
环境变量,而只有其中一个变量具有值时,驾驶员就会引发错误。
注意
如果应用程序在 EC2实例上的 ECS容器中运行,并且允许该容器访问权限实例元数据,则驾驶员会尝试从 EC2实例元数据端点检索Amazon Web Services凭证。 如果驾驶员以这种方式检索凭证,则应用程序可以作为分配给 EC2实例的 IAM角色进行身份验证。
要学习;了解如何阻止容器访问 EC2实例元数据,请参阅Amazon Web Services文档。
API 文档
要学习;了解有关本页讨论的任何方法或类型的更多信息,请参阅以下API文档: