使用临时凭证进行的 IAM 身份验证 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用临时凭证进行的 IAM 身份验证

Amazon Neptune 支持使用临时凭证进行 IAM 身份验证。

您可以使用代入的角色通过 IAM 身份验证策略(如上面各节中的示例策略之一)进行身份验证。

如果您使用的是临时凭证,则除了 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYSERVICE_REGION 之外,您还必须指定 AWS_SESSION_TOKEN

注意

临时凭证(包括会话令牌)将在指定时间间隔后到期。

在请求新凭证时,您必须更新您的会话令牌。有关更多信息,请参阅使用临时安全证书请求对 Amazon 资源的访问权限

以下各节介绍如何允许访问和检索临时凭证。

使用临时凭证进行身份验证
  1. 创建有权访问 Neptune 集群的 IAM 角色。有关创建此角色的信息,请参阅 使用不同类型的 IAM policy 控制对 Neptune 的访问权限

  2. 向角色添加允许访问凭证的信任关系。

    检索临时凭证(包括 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN)。

  3. 使用临时凭证连接到 Neptune 集群并签署请求。有关连接和签名请求的更多信息,请参阅使用签名版本 4 进行连接和 Amazon 签名

可通过多种方法检索临时凭证,具体取决于环境。

使用 Amazon CLI 获取临时凭证

要使用 Amazon Command Line Interface (Amazon CLI) 获取证书,首先需要添加信任关系,向将运行该 Amazon CLI 命令的 Amazon 用户授予代入该角色的权限。

向 Neptune IAM 身份验证角色添加以下信任关系。如果您没有 Neptune IAM 身份验证角色,请参阅使用不同类型的 IAM policy 控制对 Neptune 的访问权限

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/test" }, "Action": "sts:AssumeRole" } ] }

有关向角色添加信任关系的信息,请参阅《Amazon Directory Service 管理指南》中的编辑现有角色的信任关系

如果 Neptune 策略尚未附加到角色,请创建一个新的角色。附加 Neptune IAM 身份验证策略,然后添加信任策略。有关创建新角色的信息,请参阅创建新角色

注意

以下各节假设您已经 Amazon CLI 安装了。

要 Amazon CLI 手动运行
  1. 使用 Amazon CLI 输入以下命令以请求凭证。将角色 ARN、会话名称和配置文件替换为您自己的值。

    aws sts assume-role --role-arn arn:aws:iam::123456789012:role/NeptuneIAMAuthRole --role-session-name test --profile testprofile
  2. 下面是此命令中的示例输出。Credentials 部分包含您需要的值。

    注意

    记录 Expiration 值,因为在此次之后您将需要获取新凭证。

    { "AssumedRoleUser": { "AssumedRoleId": "AROA3XFRBF535PLBIFPI4:s3-access-example", "Arn": "arn:aws:sts::123456789012:assumed-role/xaccounts3access/s3-access-example" }, "Credentials": { "SecretAccessKey": "9drTJvcXLB89EXAMPLELB8923FB892xMFI", "SessionToken": "AQoXdzELDDY//////////wEaoAK1wvxJY12r2IrDFT2IvAzTCn3zHoZ7YNtpiQLF0MqZye/qwjzP2iEXAMPLEbw/m3hsj8VBTkPORGvr9jM5sgP+w9IZWZnU+LWhmg+a5fDi2oTGUYcdg9uexQ4mtCHIHfi4citgqZTgco40Yqr4lIlo4V2b2Dyauk0eYFNebHtYlFVgAUj+7Indz3LU0aTWk1WKIjHmmMCIoTkyYp/k7kUG7moeEYKSitwQIi6Gjn+nyzM+PtoA3685ixzv0R7i5rjQi0YE0lf1oeie3bDiNHncmzosRM6SFiPzSvp6h/32xQuZsjcypmwsPSDtTPYcs0+YN/8BRi2/IcrxSpnWEXAMPLEXSDFTAQAM6Dl9zR0tXoybnlrZIwMLlMi1Kcgo5OytwU=", "Expiration": "2016-03-15T00:05:07Z", "AccessKeyId": "ASIAJEXAMPLEXEG2JICEA" } }
  3. 使用返回的凭证设置环境变量。

    export AWS_ACCESS_KEY_ID=ASIAJEXAMPLEXEG2JICEA export AWS_SECRET_ACCESS_KEY=9drTJvcXLB89EXAMPLELB8923FB892xMFI export AWS_SESSION_TOKEN=AQoXdzELDDY//////////wEaoAK1wvxJY12r2IrDFT2IvAzTCn3zHoZ7YNtpiQLF0MqZye/qwjzP2iEXAMPLEbw/m3hsj8VBTkPORGvr9jM5sgP+w9IZWZnU+LWhmg+a5fDi2oTGUYcdg9uexQ4mtCHIHfi4citgqZTgco40Yqr4lIlo4V2b2Dyauk0eYFNebHtYlFVgAUj+7Indz3LU0aTWk1WKIjHmmMCIoTkyYp/k7kUG7moeEYKSitwQIi6Gjn+nyzM+PtoA3685ixzv0R7i5rjQi0YE0lf1oeie3bDiNHncmzosRM6SFiPzSvp6h/32xQuZsjcypmwsPSDtTPYcs0+YN/8BRi2/IcrxSpnWEXAMPLEXSDFTAQAM6Dl9zR0tXoybnlrZIwMLlMi1Kcgo5OytwU= export SERVICE_REGION=us-east-1 or us-east-2 or us-west-1 or us-west-2 or ca-central-1 or sa-east-1 or eu-north-1 or eu-west-1 or eu-west-2 or eu-west-3 or eu-central-1 or me-south-1 or me-central-1 or il-central-1 or af-south-1 or ap-east-1 or ap-northeast-1 or ap-northeast-2 or ap-southeast-1 or ap-southeast-2 or ap-south-1 or cn-north-1 or cn-northwest-1 or us-gov-east-1 or us-gov-west-1
  4. 使用下列方法之一进行连接。

使用脚本获取凭证
  1. 运行以下命令以安装 jq 命令。该脚本使用此命令来解析 Amazon CLI 命令的输出。

    sudo yum -y install jq
  2. 在文本编辑器中创建一个名为 credentials.sh 的文件并添加以下文本。将服务区域、角色 ARN、会话名称和配置文件替换为您自己的值。

    #!/bin/bash creds_json=$(aws sts assume-role --role-arn arn:aws:iam::123456789012:role/NeptuneIAMAuthRole --role-session-name test --profile testprofile) export AWS_ACCESS_KEY_ID=$(echo "$creds_json" | jq .Credentials.AccessKeyId |tr -d '"') export AWS_SECRET_ACCESS_KEY=$(echo "$creds_json" | jq .Credentials.SecretAccessKey| tr -d '"') export AWS_SESSION_TOKEN=$(echo "$creds_json" | jq .Credentials.SessionToken|tr -d '"') export SERVICE_REGION=us-east-1 or us-east-2 or us-west-1 or us-west-2 or ca-central-1 or sa-east-1 or eu-north-1 or eu-west-1 or eu-west-2 or eu-west-3 or eu-central-1 or me-south-1 or me-central-1 or il-central-1 or af-south-1 or ap-east-1 or ap-northeast-1 or ap-northeast-2 or ap-southeast-1 or ap-southeast-2 or ap-south-1 or cn-north-1 or cn-northwest-1 or us-gov-east-1 or us-gov-west-1
  3. 使用下列方法之一进行连接。

为 Neptune 的 IAM 身份验证设置 Amazon Lambda

Amazon Lambda 每次运行 Lambda 函数时都会自动包含证书。

首先,您添加信任关系,该信任关系向 Lambda 服务授予代入此角色的权限。

向 Neptune IAM 身份验证角色添加以下信任关系。如果您没有 Neptune IAM 身份验证角色,请参阅使用不同类型的 IAM policy 控制对 Neptune 的访问权限

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

有关向角色添加信任关系的信息,请参阅《Amazon Directory Service 管理指南》中的编辑现有角色的信任关系

如果 Neptune 策略尚未附加到角色,请创建一个新的角色。附加 Neptune IAM 身份验证策略,然后添加信任策略。有关创建新角色的信息,请参阅《Amazon Directory Service 管理指南》中的创建新角色

通过 Lambda 访问 Neptune
  1. 登录 Amazon Web Services Management Console 并打开 Amazon Lambda 控制台,网址为 https://console.aws.amazon.com/lambda/

  2. 为 Python 版本 3.6 创建新的 Lambda 函数。

  3. AWSLambdaVPCAccessExecutionRole 角色分配给 Lambda 函数。这是访问 Neptune 资源(仅 VPC)所必需的。

  4. 将 Neptune 身份验证 IAM 角色分配给 Lambda 函数。

    有关授予权限的更多信息,请参阅《Amazon Lambda 开发人员指南》中的 Amazon 权限

  5. 将 IAM 身份验证 Python 示例复制到 Lambda 函数代码中。

    有关示例和示例代码的更多信息,请参阅示例:使用 Python 及签名版本 4 签名连接到 Neptune

为 Neptune IAM 身份验证设置 Amazon EC2

Amazon EC2 允许您使用实例配置文件自动提供凭证。有关更多信息,请参阅《IAM 用户指南》中的使用实例配置文件

首先,您添加信任关系,该信任关系向 Amazon EC2 服务授予代入此角色的权限。

向 Neptune IAM 身份验证角色添加以下信任关系。如果您没有 Neptune IAM 身份验证角色,请参阅使用不同类型的 IAM policy 控制对 Neptune 的访问权限

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

有关向角色添加信任关系的信息,请参阅《Amazon Directory Service 管理指南》中的编辑现有角色的信任关系

如果 Neptune 策略尚未附加到角色,请创建一个新的角色。附加 Neptune IAM 身份验证策略,然后添加信任策略。有关创建新角色的信息,请参阅《Amazon Directory Service 管理指南》中的创建新角色

使用脚本获取凭证
  1. 运行以下命令以安装 jq 命令。脚本使用此命令解析 curl 命令的输出。

    sudo yum -y install jq
  2. 在文本编辑器中创建一个名为 credentials.sh 的文件并添加以下文本。将服务区域替换为您自己的值。

    role_name=$( curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/ ) creds_json=$(curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/${role_name}) export AWS_ACCESS_KEY_ID=$(echo "$creds_json" | jq .AccessKeyId |tr -d '"') export AWS_SECRET_ACCESS_KEY=$(echo "$creds_json" | jq .SecretAccessKey| tr -d '"') export AWS_SESSION_TOKEN=$(echo "$creds_json" | jq .Token|tr -d '"') export SERVICE_REGION=us-east-1 or us-east-2 or us-west-1 or us-west-2 or ca-central-1 or sa-east-1 or eu-north-1 or eu-west-1 or eu-west-2 or eu-west-3 or eu-central-1 or me-south-1 or me-central-1 or il-central-1 or af-south-1 or ap-east-1 or ap-northeast-1 or ap-northeast-2 or ap-southeast-1 or ap-southeast-2 or ap-south-1 or cn-north-1 or cn-northwest-1 or us-gov-east-1 or us-gov-west-1
  3. 使用 source 命令在 bash shell 中运行脚本:

    source credentials.sh

    更好的办法是将此脚本中的命令添加到 EC2 实例上的 .bashrc 文件中,以便在您登录时自动调用这些命令,从而使临时凭证可用于 Gremlin 控制台。

  4. 使用下列方法之一进行连接。