

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

# 生成 Amazon Bedrock API 密钥
<a name="api-keys-generate"></a>

您可以使用 AWS 管理控制台 或 API 生成 Amazon Bedrock AWS API 密钥。我们建议您使用通过几个步骤轻松生成 Amazon Bedrock API 密钥。 AWS 管理控制台 

**警告**  
我们强烈建议限制使用 Amazon Bedrock API 密钥来探索 Amazon Bedrock。当您准备将 Amazon Bedrock 整合到具有更高安全要求的应用程序中时，应切换到短期凭证。有关更多信息，请参阅《IAM 用户指南》中的[长期访问密钥的替代方案](https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds-programmatic-access.html#security-creds-alternatives-to-long-term-access-keys)。

**Topics**
+ [使用控制台生成 Amazon Bedrock API 密钥](#api-keys-generate-console)
+ [使用 API 生成长期 Amazon Bedrock API 密钥](#api-keys-generate-api-long-term)
+ [使用客户端库生成短期 Amazon Bedrock API 密钥](#api-keys-generate-short-term)
+ [设置短期 Amazon Bedrock API 密钥的自动刷新](#api-keys-refresh-short-term)

## 使用控制台生成 Amazon Bedrock API 密钥
<a name="api-keys-generate-console"></a>

要使用控制台生成 Amazon Bedrock API 密钥，请执行以下操作：

1. 使用有权使用 Amazon Bedrock 控制台的 IAM 身份登录。 AWS 管理控制台 然后，在 [https://console.aws.amazon.com/](https://console.aws.amazon.com/bedrock)bedrock 上打开 Amazon Bedrock 控制台。

1. 在左侧导航窗格中，选择 **API 密钥**。

1. 生成以下类型的密钥之一：
   + **短期 API 密钥** – 在**短期 API 密钥**选项卡中，选择**生成短期 API 密钥**。密钥将在您的控制台会话过期（且不超过 12 小时）时过期，并允许您调用生成控制台会话的。 AWS 区域 您可以直接在生成的密钥中修改区域。
   + **长期 API 密钥** – 在**长期 API 密钥**选项卡中，选择**生成长期 API 密钥**。

     1. 在 **API 密钥过期**部分中，选择密钥过期的时间。

     1. （可选）默认情况下，授予对核心 Amazon Bedrock API 操作的访问权限的[AmazonBedrockLimitedAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonBedrockLimitedAccess) AWS托管策略将附加到与密钥关联的 IAM 用户。要选择更多要附加到用户的策略，请展开**高级权限**部分，然后选择要添加的策略。

     1. 选择**生成**。
**警告**  
我们强烈建议限制使用 Amazon Bedrock API 密钥来探索 Amazon Bedrock。当您准备将 Amazon Bedrock 整合到具有更高安全要求的应用程序中时，应切换到短期凭证。有关更多信息，请参阅《IAM 用户指南》中的[长期访问密钥的替代方案](https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds-programmatic-access.html#security-creds-alternatives-to-long-term-access-keys)。



## 使用 API 生成长期 Amazon Bedrock API 密钥
<a name="api-keys-generate-api-long-term"></a>

在 API 中创建长期 Amazon Bedrock API 密钥的常见步骤如下：

1. 通过发送带有 IAM [终端节点的[CreateUser](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateUser.html)请求来创建 IAM](https://docs.aws.amazon.com/general/latest/gr/iam-service.html) 用户。

1. 通过 IAM [终端节点发送[AttachUserPolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AttachUserPolicy.html)请求，将附加[AmazonBedrockLimitedAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonBedrockLimitedAccess)到 IAM](https://docs.aws.amazon.com/general/latest/gr/iam-service.html) 用户。您可以重复此步骤，根据需要将其他托管策略或自定义策略附加到用户。
**注意**  
作为最佳安全实践，我们强烈建议您将 IAM 策略附加到 IAM 用户，以限制对 Amazon Bedrock API 密钥的使用。有关限时策略以及限制可使用密钥的 IP 地址的示例，请参阅[通过将内联策略附加到 IAM 用户，从而控制访问密钥的使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-keys_inline-policy.html)。

1. 通过发送带有 IA [M 终端节点](https://docs.aws.amazon.com/general/latest/gr/iam-service.html)的[CreateServiceSpecificCredential](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceSpecificCredential.html.html)请求并指定`bedrock.amazonaws.com`为，生成长期的 Amazon Bedrock API 密钥。`ServiceName`
   + 响应中返回的 `ServiceApiKeyValue` 是长期 Amazon Bedrock API 密钥。
   + 响应中返回的 `ServiceSpecificCredentialId` 可用于执行与密钥相关的 API 操作。

要了解如何生成长期 Amazon Bedrock API 密钥，请选择与您的首选方法对应的选项卡，然后按照以下步骤操作：

------
#### [ CLI ]

要创建长期的 Amazon Bedrock API 密钥，您需要使用 AWS Identity and Access Management API 操作。首先，确保满足先决条件：

**先决条件**  
确保您的设置 AWS CLI 允许自动识别您的 AWS 凭据。要了解更多信息，请参阅[配置 AWS CLI设置](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。

打开一个终端，并运行以下命令：

1. 创建 IAM 用户。您可以用自己选择的名称替换下面的名称：

   ```
   aws iam create-user --user-name bedrock-api-user
   ```

1. 将附加[AmazonBedrockLimitedAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonBedrockLimitedAccess)到用户。您可以对要添加到 API 密钥 ARNs 中的任何其他 AWS托管策略或自定义策略重复此步骤：

   ```
   aws iam attach-user-policy --user-name bedrock-api-user --policy-arn arn:aws:iam::aws:policy/AmazonBedrockLimitedAccess
   ```

1. 创建长期 Amazon Bedrock API 密钥，{{${NUMBER-OF-DAYS}}}替换为你希望密钥持续的天数：

   ```
   aws iam create-service-specific-credential \
       --user-name bedrock-api-user \
       --service-name bedrock.amazonaws.com \
       --credential-age-days {{${NUMBER-OF-DAYS}}}
   ```

------
#### [ Python ]

要创建长期的 Amazon Bedrock API 密钥，您需要使用 AWS Identity and Access Management API 操作。首先，确保满足先决条件：

**先决条件**  
确保您的设置允许 Python 自动识别您的 AWS 凭证。要了解更多信息，请参阅[配置 AWS CLI设置](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。

运行以下脚本创建 IAM 用户，附加用于执行 Amazon Bedrock 操作的权限，并生成与该用户关联的长期 Amazon Bedrock API 密钥：

```
import boto3
from datetime import datetime, timedelta

# Replace with name for your IAM user
username = "bedrock-api-user"
# Add any AWS-managed or custom policies that you want to the user
bedrock_policies = [
    "arn:aws:iam::aws:policy/AmazonBedrockLimitedAccess",        # Limited access
#    "arn:aws:iam::aws:policy/AmazonBedrockMarketplaceAccess",   # Optional: Access to Amazon Bedrock Marketplace actions
]
# Set the key expiration time to a number of your choice
expiration_time_in_days = 30

iam_client = boto3.client("iam")
    
# Create IAM user
user = iam_client.create_iam_user(username)

# Attach policies to user
for policy_arn in bedrock_policies:
    iam_client.attach_managed_policy(username, policy_arn)

# Create long-term Amazon Bedrock API key and return it
service_credentials = iam_client.create_service_specific_credential(
    user_name=username, 
    service_name="bedrock",
    credential_age_days=expiration_time_in_days
) 
api_key = service_credentials["ServiceApiKeyValue"]
print(api_key)
```

------

## 使用客户端库生成短期 Amazon Bedrock API 密钥
<a name="api-keys-generate-short-term"></a>

短期密钥具有以下属性：
+ 以下值中时间较短者有效：
  + 12 小时
  + 用于生成密钥的 IAM 主体所生成会话的持续时间。
+ 继承用于生成密钥的主体所附加的权限。
+ 只能在您生成它的 AWS 区域中使用。

对于长时间运行的应用程序，刷新凭证时，[aws-bedrock-token-generator](https://github.com/aws/aws-bedrock-token-generator-js/blob/main/README.md)客户端库可以根据需要创建新的 Amazon Bedrock 短期 API 密钥。有关更多信息，请参阅 [设置短期 Amazon Bedrock API 密钥的自动刷新](#api-keys-refresh-short-term)。

**先决条件**
+ 对于用于生成密钥的 IAM 主体，确保已设置了使用 Amazon Bedrock 的适当权限。为了进行实验，您可以将 AWS托管[AmazonBedrockLimitedAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonBedrockLimitedAccess)策略附加到委托人。您可以参考 [IAM 中的安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)来保护您的凭证。
+ 确保您的设置允许 Python 自动识别您的 AWS 凭证。检索凭证的默认方法遵循定义的层次结构。您可以在工具[标准化凭证提供商处AWS SDKs 查看特定 SDK 或工具](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html)的层次结构。
+ 安装 Amazon Bedrock 令牌生成器。选择与您的首选方法对应的选项卡，然后按照以下步骤操作：

------
#### [ Python ]

打开一个终端，并运行以下命令：

```
pip install aws-bedrock-token-generator
```

------
#### [ Javascript ]

打开一个终端，并运行以下命令：

```
npm install @aws/bedrock-token-generator
```

------
#### [ Java ]

如果您使用 Maven，请将以下依赖项添加到 `pom.xml`：

```
<dependency>
    <groupId>software.amazon.bedrock</groupId>
    <artifactId>aws-bedrock-token-generator</artifactId>
    <version>1.1.0</version>
</dependency>
```

如果您使用 Gradle，请将以下内容添加到 `build.gradle`：

```
implementation 'software.amazon.bedrock:aws-bedrock-token-generator:1.1.0'
```

------

**示例**  
要查看使用令牌生成器生成短期 Amazon Bedrock API 密钥（使用不同语言的默认凭证）的示例，请选择与您的首选方法对应的选项卡，然后按照以下步骤操作：

------
#### [ Python ]

```
from aws_bedrock_token_generator import provide_token

token = provide_token()
print(f"Token: {token}")
```

------
#### [ Javascript ]

```
import { getTokenProvider } from "@aws/bedrock-token-generator";

// Create a token provider that uses default credentials and region providers.
// You can configure it to use other credential providers.
const provideToken = getTokenProvider();

async function example() {
    
  const token = await provideToken();

  // Use the token for API calls. The token has a default expiration of 12 hour.
  // If the expiresInSeconds parameter is specified during token creation, the 
  // expiration can be configured up to a maximum of 12 hours. However, the actual 
  // token validity period will always be the minimum of the requested expiration 
  // time and the AWS credentials' expiry time
  console.log(`Bearer Token: ${token}`);
}
```

------
#### [ Java ]

```
import software.amazon.bedrock.token.BedrockTokenGenerator;

// Credentials and region will be picked up from the default provider chain
BedrockTokenGenerator tokenGenerator = BedrockTokenGenerator.builder().build();
tokenGenerator.getToken();
```

------

要在生成令牌时查看不同使用案例的更多示例，请参阅以下链接：
+ [Python](https://github.com/aws/aws-bedrock-token-generator-python/blob/main/README.md)
+ [Javascript](https://github.com/aws/aws-bedrock-token-generator-js/blob/main/README.md)
+ [Java](https://github.com/aws/aws-bedrock-token-generator-java/blob/main/README.md)

## 设置短期 Amazon Bedrock API 密钥的自动刷新
<a name="api-keys-refresh-short-term"></a>

您可以在 `aws-bedrock-token-generator` 软件包的帮助下创建脚本，以便每当目前的短期密钥过期时，以编程方式重新生成新的短期密钥。首先，确保满足[使用客户端库生成短期 Amazon Bedrock API 密钥](#api-keys-generate-short-term)中的先决条件。要查看用于检索令牌并发出 Converse 请求的示例脚本，请选择与首选方法对应的选项卡，然后按照以下步骤操作：

------
#### [ Python ]

```
from aws_bedrock_token_generator import provide_token
import requests

def get_new_token():
    url = "https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse"
    payload = {
        "messages": [
            {
                "role": "user",
                "content": [{"text": "Hello"}]
            }
        ]
    }

    # Create a token provider that uses default credentials and region providers.
    # You can configure it to use other credential providers.
    # https://github.com/aws/aws-bedrock-token-generator-python/blob/main/README.md
    # It can be used for each API call as it is inexpensive.
    token = provide_token()

    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {token}"
    }

    response = requests.post(url, headers=headers, json=payload)
    print(response.json())

if __name__ == "__main__":
    get_new_token()
```

------
#### [ Javascript ]

```
import { getTokenProvider } from "@aws/bedrock-token-generator";

// Create a token provider that uses default credentials and region providers.
// You can configure it to use other credential providers.
// https://github.com/aws/aws-bedrock-token-generator-js/blob/main/README.md
// This can be created just once. Use await provideToken() to fetch the token
const provideToken = getTokenProvider();

async function example() {
    const url = "https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse";
    const payload = {
        messages: [
            {
                role: "user",
                content: [{ text: "Hello" }]
            }
        ]
    };
    const headers = {
        "Content-Type": "application/json",
        // provideToken retrieves a valid token. It can be used for each API call as it is inexpensive.
        "Authorization": `Bearer ${await provideToken()}`
    };
    await fetch(url, {
        method: 'POST',
        headers: headers,
        body: JSON.stringify(payload)
    })
}
```

------
#### [ Java ]

```
package com.amazon.bedrocktoken;

import software.amazon.bedrock.token.BedrockTokenGenerator;

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class GetNewToken {
    public static void main(String[] args) throws Exception {
        // Use default credentials and region from environment/profile chain
        // Create a token generator that uses default credentials and region providers.
        // You can configure it to use other credential providers.
        // https://github.com/aws/aws-bedrock-token-generator-java/blob/main/README.md
        BedrockTokenGenerator tokenGenerator = BedrockTokenGenerator.builder().build();

        // getToken() retrieves a valid token. It can be used for each API call as it is inexpensive.
        String token = tokenGenerator.getToken();

        String url = "https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse";
        String payload = "{\n" +
                "    \"messages\": [\n" +
                "        {\n" +
                "            \"role\": \"user\",\n" +
                "            \"content\": [{ \"text\": \"Hello\" }]\n" +
                "        }\n" +
                "    ]\n" +
                "}";

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(url))
            .header("Content-Type", "application/json")
            .header("Authorization", "Bearer " + token)
            .POST(HttpRequest.BodyPublishers.ofString(payload))
            .build();

        HttpClient client = HttpClient.newHttpClient();
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
```

------