

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

# 使用临时凭证连接到 Amazon Neptune
<a name="iam-auth-temporary-credentials"></a>

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

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

如果您使用的是临时凭证，则除了 `AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY` 和 `SERVICE_REGION` 之外，您还必须指定 `AWS_SESSION_TOKEN`。

**注意**  
临时凭证（*包括会话令牌*）将在指定时间间隔后到期。  
在请求新凭证时，您必须更新您的会话令牌。有关更多信息，请参阅[使用临时安全证书请求对 AWS 资源的访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)。

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

**使用临时凭证进行身份验证**

1. 创建有权访问 Neptune 集群的 IAM 角色。有关创建此角色的信息，请参阅 [使用不同类型的 IAM policy 控制对 Neptune 的访问权限](security-iam-access-manage.md#iam-auth-policy)。

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

   检索临时凭证（包括 `AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY` 和 `AWS_SESSION_TOKEN`）。

1. 使用临时凭证连接到 Neptune 集群并签署请求。有关连接和签名请求的更多信息，请参阅[使用身份验证连接到您的亚马逊 Neptune 数据库 AWS Identity and Access Management](iam-auth-connecting.md)。

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

**Topics**
+ [

## 使用获取临时证书 AWS CLI
](#iam-auth-temporary-credentials-cli)
+ [

## 为 Neptune 的 IAM 身份验证设置 AWS Lambda
](#iam-auth-temporary-credentials-lambda)
+ [

## 为 Neptune IAM 身份验证设置 Amazon EC2
](#iam-auth-temporary-credentials-ec2)

## 使用获取临时证书 AWS CLI
<a name="iam-auth-temporary-credentials-cli"></a>

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

向 Neptune IAM 身份验证角色添加以下信任关系。如果您没有 Neptune IAM 身份验证角色，请参阅[使用不同类型的 IAM policy 控制对 Neptune 的访问权限](security-iam-access-manage.md#iam-auth-policy)。

------
#### [ JSON ]

****  

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

------

有关向角色添加信任关系的信息，请参阅《AWS Directory Service 管理指南》**中的[编辑现有角色的信任关系](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/edit_trust.html)。

如果 Neptune 策略尚未附加到角色，请创建一个新的角色。附加 Neptune IAM 身份验证策略，然后添加信任策略。有关创建新角色的信息，请参阅[创建新角色](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/create_role.html)。

**注意**  
以下各节假设您已经 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
   ```

1. 下面是此命令中的示例输出。`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"
       }
   }
   ```

1. 使用返回的凭证设置环境变量。

   ```
   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
                         ca-west-1 or sa-east-1 or eu-north-1 or eu-south-2 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-northeast-3 or ap-southeast-1 or ap-southeast-2 or
                         ap-southeast-3 or ap-southeast-4 or ap-southeast-5 or ap-south-1 or ap-south-2 or
                         cn-north-1 or cn-northwest-1 or
                         us-gov-east-1 or us-gov-west-1
   ```

1. 使用下列方法之一进行连接。
   + [通过 Gremlin 控制台使用 IAM 身份验证连接到 Amazon Neptune 数据库](iam-auth-connecting-gremlin-console.md)
   + [通过 Gremlin Java 使用 IAM 连接到 Amazon Neptune 数据库](iam-auth-connecting-gremlin-java.md)
   + [通过 Java 和 SPARQL 使用 IAM 身份验证连接到 Amazon Neptune 数据库](iam-auth-connecting-sparql-java.md)
   + [通过 Python 使用 IAM 身份验证连接到 Amazon Neptune 数据库](iam-auth-connecting-python.md)

**使用脚本获取凭证**

1. 运行以下命令以安装 **jq** 命令。该脚本使用此命令来解析 AWS CLI 命令的输出。

   ```
   sudo yum -y install jq
   ```

1. 在文本编辑器中创建一个名为 `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
                         ca-west-1 or sa-east-1 or eu-north-1 or eu-south-2 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-northeast-3 or ap-southeast-1 or ap-southeast-2 or
                         ap-southeast-3 or ap-southeast-4 or ap-southeast-5 or ap-south-1 or ap-south-2 or
                         cn-north-1 or cn-northwest-1 or
                         us-gov-east-1 or us-gov-west-1
   ```

1. 使用下列方法之一进行连接。
   + [通过 Gremlin 控制台使用 IAM 身份验证连接到 Amazon Neptune 数据库](iam-auth-connecting-gremlin-console.md)
   + [通过 Gremlin Java 使用 IAM 连接到 Amazon Neptune 数据库](iam-auth-connecting-gremlin-java.md)
   + [通过 Java 和 SPARQL 使用 IAM 身份验证连接到 Amazon Neptune 数据库](iam-auth-connecting-sparql-java.md)
   + [通过 Python 使用 IAM 身份验证连接到 Amazon Neptune 数据库](iam-auth-connecting-python.md)

## 为 Neptune 的 IAM 身份验证设置 AWS Lambda
<a name="iam-auth-temporary-credentials-lambda"></a>

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

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

向 Neptune IAM 身份验证角色添加以下信任关系。如果您没有 Neptune IAM 身份验证角色，请参阅[使用不同类型的 IAM policy 控制对 Neptune 的访问权限](security-iam-access-manage.md#iam-auth-policy)。

------
#### [ JSON ]

****  

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

------

有关向角色添加信任关系的信息，请参阅《AWS Directory Service管理指南》**中的[编辑现有角色的信任关系](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/edit_trust.html)。

如果 Neptune 策略尚未附加到角色，请创建一个新的角色。附加 Neptune IAM 身份验证策略，然后添加信任策略。有关创建新角色的信息，请参阅《AWS Directory Service 管理指南》**中的[创建新角色](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/create_role.html)。

**通过 Lambda 访问 Neptune**

1. 登录 AWS 管理控制台 并打开 AWS Lambda 控制台，网址为[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)。

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

1. 将 `AWSLambdaVPCAccessExecutionRole` 角色分配给 Lambda 函数。这是访问 Neptune 资源（仅 VPC）所必需的。

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

   有关授予权限的更多信息，请参阅《AWS Lambda 开发人员指南》**中的 [AWS 权限](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html)。

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

   有关示例和示例代码的更多信息，请参阅[通过 Python 使用 IAM 身份验证连接到 Amazon Neptune 数据库](iam-auth-connecting-python.md)。

## 为 Neptune IAM 身份验证设置 Amazon EC2
<a name="iam-auth-temporary-credentials-ec2"></a>

Amazon EC2 允许您使用实例配置文件自动提供凭证。有关更多信息，请参阅《IAM 用户指南》**中的[使用实例配置文件](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html)。

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

向 Neptune IAM 身份验证角色添加以下信任关系。如果您没有 Neptune IAM 身份验证角色，请参阅[使用不同类型的 IAM policy 控制对 Neptune 的访问权限](security-iam-access-manage.md#iam-auth-policy)。

------
#### [ JSON ]

****  

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

------

有关向角色添加信任关系的信息，请参阅《AWS Directory Service 管理指南》**中的[编辑现有角色的信任关系](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/edit_trust.html)。

如果 Neptune 策略尚未附加到角色，请创建一个新的角色。附加 Neptune IAM 身份验证策略，然后添加信任策略。有关创建新角色的信息，请参阅《AWS Directory Service 管理指南》**中的[创建新角色](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/create_role.html)。

**使用脚本获取凭证**

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

   ```
   sudo yum -y install jq
   ```

1. 在文本编辑器中创建一个名为 `credentials.sh` 的文件并添加以下文本。将服务区域替换为您自己的值。

   ```
   TOKEN=$( curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" )
   role_name=$( curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/ )
   creds_json=$( curl -H "X-aws-ec2-metadata-token: $TOKEN" 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
                         ca-west-1 or sa-east-1 or eu-north-1 or eu-south-2 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-northeast-3 or ap-southeast-1 or ap-southeast-2 or
                         ap-southeast-3 or ap-southeast-4 or ap-southeast-5 or ap-south-1 or ap-south-2 or
                         cn-north-1 or cn-northwest-1 or
                         us-gov-east-1 or us-gov-west-1
   ```

1. 使用 `source` 命令在 `bash` shell 中运行脚本：

   ```
   source credentials.sh
   ```

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

1. 使用下列方法之一进行连接。
   + [通过 Gremlin 控制台使用 IAM 身份验证连接到 Amazon Neptune 数据库](iam-auth-connecting-gremlin-console.md)
   + [通过 Gremlin Java 使用 IAM 连接到 Amazon Neptune 数据库](iam-auth-connecting-gremlin-java.md)
   + [通过 Java 和 SPARQL 使用 IAM 身份验证连接到 Amazon Neptune 数据库](iam-auth-connecting-sparql-java.md)
   + [通过 Python 使用 IAM 身份验证连接到 Amazon Neptune 数据库](iam-auth-connecting-python.md)