IAM使用临时证书进行身份验证 - Amazon Neptune

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

IAM使用临时证书进行身份验证

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

您可以使用代入的角色使用身份验证策略进行IAM身份验证,如前几节中的示例策略之一。

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

注意

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

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

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

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

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

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

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

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

使用获取临时证书 AWS CLI

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

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

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

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

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

注意

以下各节假设你有 AWS CLI 已安装。

要运行 AWS CLI 手动
  1. 输入以下命令以使用请求凭证 AWS 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 命令。该脚本使用此命令来解析输出 AWS 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. 使用下列方法之一进行连接。

设置 AWS 适用于 Neptune 身份验证的 Lambda IAM

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

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

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

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

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

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

通过 Lambda 访问 Neptune
  1. 登录 AWS Management Console 然后打开 AWS Lambda 控制台位于https://console.aws.amazon.com/lambda/

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

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

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

    有关更多信息,请参阅 AWS 中的 Lambda 权限 AWS Lambda 开发者指南

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

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

为亚马逊设置 Nep EC2 tun IAM e 身份验证

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

首先,您要添加信任关系,授予亚马逊EC2服务代入该角色的权限。

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

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

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

如果 Neptune 策略尚未附加到角色,请创建一个新的角色。附上 Neptune IAM 身份验证策略,然后添加信任策略。有关创建新角色的信息,请参阅中的创建新角色 AWS 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. 使用下列方法之一进行连接。