

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

# API 密钥
<a name="api-keys"></a>

您可以通过生成 Amazon Bedrock API 密钥并在向 Amazon Bedrock API 发出请求时使用它来验证您的身份，从而轻松调用 Amazon Bedrock API。

**注意**  
出于审计和合规目的，所有 API 调用均已登录 AWS CloudTrail。Amazon Bedrock API 密钥作为授权标头传递给 API 请求，不会被记录下来。  
Amazon Bedrock API 密钥仅限于 [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Operations_Amazon_Bedrock.html) 和 [Amazon Bedrock 运行时](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Operations_Amazon_Bedrock_Runtime.html)操作。您无法将这样的密钥与以下 API 操作结合使用：  
[InvokeModelWithBidirectionalStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithBidirectionalStream.html).
[Amazon Bedrock 代理](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Operations_Agents_for_Amazon_Bedrock.html)或 [Amazon Bedrock 代理运行时](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Operations_Agents_for_Amazon_Bedrock.html) API 操作。
[Amazon Bedrock 数据自动化](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Operations_Data_Automation_for_Amazon_Bedrock.html)或 [Amazon Bedrock 数据自动化运行时](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Operations_Runtime_for_Amazon_Bedrock_Data_Automation) API 操作。

Amazon Bedrock 允许您生成以下类型的 Amazon Bedrock API 密钥：
+ **短期** – 创建一个 Amazon Bedrock API 密钥，该密钥的持续时间与您的会话持续时间相同（不超过 12 小时）。您应该已为 [IAM 主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_identity-management.html#intro-structure-terms)设置了适当的 Amazon Bedrock 使用权限。对于需要定期更改凭证以提高安全性的生产环境，此选项比长期密钥更受青睐。

  短期密钥具有以下属性：
  + 以下值中时间较短者有效：
    + 12 小时
    + 用于生成密钥的 IAM 主体所生成会话的持续时间。
  + 继承用于生成密钥的主体所附加的权限。
  + 只能在您生成它的 AWS 区域中使用。
+ **长期** – 创建 Amazon Bedrock API 密钥，并提供在 Amazon Bedrock 中发出基本 API 请求的权限。这个简单的一键式选项可让您快速开始探索 Amazon Bedrock API，无需了解底层安全基础设施或手动配置 AWS Identity and Access Management 权限。如果您是第一次试用 Amazon Bedrock，可以试试[开始使用 Amazon Bedrock API 密钥：生成 30 天密钥并发出第一个 API 调用](getting-started-api-keys.md)中的示例，获取创建长期密钥并开始使用 Amazon Bedrock 的简单教程。
**警告**  
我们强烈建议限制使用 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)。

选择一个主题以了解有关 Amazon Bedrock API 密钥的更多信息。不同类型的 Amazon Bedrock 密钥有多种选项以及自定义方法。有关如何生成长期 Amazon Bedrock API 密钥并将其用于探索目的的快速入门教程，请参阅[开始使用 Amazon Bedrock API 密钥：生成 30 天密钥并发出第一个 API 调用](getting-started-api-keys.md)。

**Topics**
+ [Amazon Bedrock API 密钥的工作方式](api-keys-how.md)
+ [亚马逊 Bedrock API 密钥支持的区域和 AWS 软件开发套件 (SDKs)](api-keys-supported.md)
+ [生成 Amazon Bedrock API 密钥](api-keys-generate.md)
+ [使用 Amazon Bedrock API 密钥](api-keys-use.md)
+ [修改长期和短期 Amazon Bedrock API 密钥的权限](api-keys-modify.md)
+ [处理泄露的长期和短期 Amazon Bedrock API 密钥](api-keys-revoke.md)
+ [控制生成和使用 Amazon Bedrock API 密钥的权限](api-keys-permissions.md)

# Amazon Bedrock API 密钥的工作方式
<a name="api-keys-how"></a>

下图将默认的凭证获取过程与 Amazon Bedrock API 密钥的使用情况进行了对比：

![\[默认 API 设置过程与使用 Amazon Bedrock API 密钥的 API 设置过程的对比\]](http://docs.aws.amazon.com/zh_cn/bedrock/latest/userguide/images/setup/setup-api.png)


图中最左边的流程说明了在 AWS IAM Identity Center 或 IAM 中创建身份的默认过程。通过此过程，您可以将 IAM 策略附加到该身份，以提供执行 API 操作的权限，然后为该身份生成常规 AWS 凭证。接着，您可以使用凭证在 AWS 中发出 API 调用。

蓝色节点表示还有两个流需要专门向 Amazon Bedrock 进行身份验证。这两个流都涉及创建一个 Amazon Bedrock API 密钥，您可以使用该密钥进行身份验证，以便使用 Amazon Bedrock 操作。您可以生成以下类型的密钥：
+ **短期密钥** – 一种安全选项，允许授予临时访问权限以便使用 Amazon Bedrock。

  短期密钥具有以下属性：
  + 以下值中时间较短者有效：
    + 12 小时
    + 用于生成密钥的 IAM 主体所生成会话的持续时间。
  + 继承用于生成密钥的主体所附加的权限。
  + 只能在您生成它的 AWS 区域中使用。
+ **长期密钥** – 仅推荐用于探索 Amazon Bedrock。您可以设置密钥到期的时间。当您生成长期密钥时，它会在底层创建适合您的 IAM 用户，附加您选择的 IAM 策略，并将密钥与用户关联。生成密钥后，您可以使用 IAM 服务[修改 IAM 用户的权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。
**警告**  
我们强烈建议限制使用 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)。

# 亚马逊 Bedrock API 密钥支持的区域和 AWS 软件开发套件 (SDKs)
<a name="api-keys-supported"></a>

以下列表显示了 AWS 区域 支持 API 密钥的：
+ ap-northeast-1
+ ap-northeast-2
+ ap-northeast-3
+ ap-south-1
+ ap-south-2
+ ap-southeast-1
+ ap-southeast-2
+ ca-central-1
+ eu-central-1
+ eu-central-2
+ eu-north-1
+ eu-south-1
+ eu-south-2
+ eu-west-1
+ eu-west-2
+ eu-west-3
+ sa-east-1
+ us-east-1
+ us-gov-east-1
+ us-gov-west-1
+ us-west-2

**注意**  
Amazon Bedrock API 密钥仅限于 [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Operations_Amazon_Bedrock.html) 和 [Amazon Bedrock 运行时](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Operations_Amazon_Bedrock_Runtime.html)操作。您无法将这样的密钥与以下 API 操作结合使用：  
[InvokeModelWithBidirectionalStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithBidirectionalStream.html).
[Amazon Bedrock 代理](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Operations_Agents_for_Amazon_Bedrock.html)或 [Amazon Bedrock 代理运行时](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Operations_Agents_for_Amazon_Bedrock.html) API 操作。
[Amazon Bedrock 数据自动化](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Operations_Data_Automation_for_Amazon_Bedrock.html)或 [Amazon Bedrock 数据自动化运行时](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Operations_Runtime_for_Amazon_Bedrock_Data_Automation) API 操作。

以下内容 AWS SDKs支持 Amazon Bedrock API 密钥：
+ Python
+ Javascript
+ Java

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

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

**警告**  
我们强烈建议限制使用 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 管理控制台。然后，通过以下网址打开 Amazon Bedrock 控制台：[https://console.aws.amazon.com/bedrock](https://console.aws.amazon.com/bedrock)。

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

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

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

     1. （可选）默认情况下，[AmazonBedrockLimitedAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonBedrockLimitedAccess) AWS 托管策略（授予 Amazon Bedrock API 核心操作的访问权限）会附加到与密钥关联的 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 端点](https://docs.aws.amazon.com/general/latest/gr/iam-service.html)发送 [CreateUser](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateUser.html) 请求来创建 IAM 用户。

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

1. 通过使用 [IAM 端点](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` 指定为 `ServiceName`，生成长期 Amazon Bedrock API 密钥。
   + 响应中返回的 `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 密钥中的其他任何 AWS 托管策略或自定义策略的 ARN，您可以重复此步骤：

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

1. 创建长期 Amazon Bedrock API 密钥，并将 *\$1\$1NUMBER-OF-DAYS\$1* 替换为您希望密钥持续使用的天数：

   ```
   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 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-3-5-haiku-20241022-v1:0/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-3-5-haiku-20241022-v1:0/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-3-5-haiku-20241022-v1:0/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());
    }
}
```

------

# 使用 Amazon Bedrock API 密钥
<a name="api-keys-use"></a>

您可以通过以下方式使用 Amazon Bedrock API 密钥：
+ **设置为环境变量** – Amazon Bedrock 服务可识别环境变量 `AWS_BEARER_TOKEN_BEDROCK`。您可以通过以下选项来设置密钥：
  + 打开终端进行设置：
    + **MacOS/Linux**

      ```
      export AWS_BEARER_TOKEN_BEDROCK=${api-key}
      ```
    + **Windows**

      ```
      setx AWS_BEARER_TOKEN_BEDROCK "${api-key}"
      ```
  + 在发出 API 请求之前，将密钥设置为代码中的环境变量。例如，您可以在发出请求之前包含以下几行：
    + **Python**

      ```
      import os                      
      os.environ['AWS_BEARER_TOKEN_BEDROCK'] = "${api-key}"
      ```
+ **在请求中指定** – 您可以通过以下方式将 Amazon Bedrock API 密钥包含在授权标头中（将 *\$1AWS\$1BEARER\$1TOKEN\$1BEDROCK* 替换为实际值）：
  + **在直接 HTTP 请求中** – 包括以下内容作为授权标头：

    ```
    Authorization: Bearer $AWS_BEARER_TOKEN_BEDROCK
    ```
  + **作为支持的 SDK 中的参数** – 在设置客户端时在参数中指定值。例如，在使用 [OpenAI Python SDK](https://github.com/openai/openai-python?tab=readme-ov-file#usage) 设置客户端时，可以在 `api_key` 字段中指定密钥。

**注意**  
Amazon Bedrock API 密钥仅限于 [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Operations_Amazon_Bedrock.html) 和 [Amazon Bedrock 运行时](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Operations_Amazon_Bedrock_Runtime.html)操作。您无法将这样的密钥与以下 API 操作结合使用：  
[InvokeModelWithBidirectionalStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithBidirectionalStream.html)。
[Amazon Bedrock 代理](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Operations_Agents_for_Amazon_Bedrock.html)或 [Amazon Bedrock 代理运行时](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Operations_Agents_for_Amazon_Bedrock.html) API 操作。
[Amazon Bedrock 数据自动化](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Operations_Data_Automation_for_Amazon_Bedrock.html)或 [Amazon Bedrock 数据自动化运行时](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Operations_Runtime_for_Amazon_Bedrock_Data_Automation) API 操作。

要查看使用 API 密钥发送 [Converse](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html) 请求以生成响应的示例，请选择与首选方法对应的选项卡，然后按照以下步骤操作：

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

以下示例说明如何通过 适用于 Python (Boto3) 的 AWS SDK 发送 API 请求。如果您尚未将 API 密钥设置为 `AWS_BEARER_TOKEN_BEDROCK` 环境变量，请在以下代码中替换 *\$1\$1api-key\$1* 来指定密钥：

```
import os
import boto3
                        
# If you already set the API key as an environment variable, you can comment this line out                        
os.environ['AWS_BEARER_TOKEN_BEDROCK'] = "${api-key}"

# Create an Amazon Bedrock client
client = boto3.client(
    service_name="bedrock-runtime",
    region_name="us-east-1" # If you've configured a default region, you can omit this line
)

# Define the model and message
model_id = "us.anthropic.claude-3-5-haiku-20241022-v1:0"
messages = [{"role": "user", "content": [{"text": "Hello"}]}]

response = client.converse(
    modelId=model_id,
    messages=messages,
)
```

------
#### [ HTTP Client (requests package in Python) ]

**先决条件：**通过打开终端并运行以下命令来安装 `requests` 软件包：

```
python3 -m pip install requests
```

以下示例说明如何通过 HTTP 客户端直接发送 API 请求。在标头中指定 *\$1\$1api-key\$1*。

```
import requests

url = "https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-haiku-20241022-v1:0/converse"

payload = {
    "messages": [
        {
            "role": "user",
            "content": [{"text": "Hello"}]
        }
    ]
}

headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer ${api-key}"
}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)
```

------
#### [ HTTP request using cURL ]

以下示例说明如何使用 cURL 直接发送 API 请求。如果您没有将 API 密钥设置为 AWS\$1BEARER\$1TOKEN\$1BEDROCK 环境变量，则必须将示例中的 `$AWS_BEARER_TOKEN_BEDROCK` 替换为密钥的字面值。

```
curl -X POST "https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-haiku-20241022-v1:0/converse" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AWS_BEARER_TOKEN_BEDROCK" \
  -d '{
    "messages": [
        {
            "role": "user",
            "content": [{"text": "Hello"}]
        }
    ]
  }'
```

------

# 修改长期和短期 Amazon Bedrock API 密钥的权限
<a name="api-keys-modify"></a>

当您生成长期 Amazon Bedrock API 密钥时，需要创建与该密钥关联的 IAM 用户。要更改与密钥关联的权限，请通过 IAM 服务修改 IAM 用户的权限。有关更多信息，请参阅《IAM 用户指南》中的[添加和删​​除 IAM 身份权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

**注意**  
如果您在中生成了长期密钥 AWS 管理控制台，[AmazonBedrockLimitedAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonBedrockLimitedAccess)则默认情况下会附加到该密钥。如果您计划修改权限，请先移除此策略，然后再设置自定义权限。

## 修改 API 密钥权限的示例
<a name="api-keys-modify-example"></a>

以下步骤说明如何用限制性更强的[AmazonBedrockLimitedAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonBedrockLimitedAccess)替换：

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

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

1. 选择**长期 API 密钥**选项卡。

1. 选择您的 API 密钥，然后选择**在 IAM 控制台中管理**。

1. 选择 “**权限**” 选项卡，选择**AmazonBedrockLimitedAccess**策略，然后选择 “**删除**”。
**注意**  
此时，您已经从 APi 密钥中删除了所有权限，您将无法对其进行任何操作。

1. 在**权限策略**部分中，从**添加权限**下拉列表内选择**创建内联策略**。

1. 在**策略编辑器**中，选择 **JSON**。然后将下面的策略粘贴到编辑器中：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "bedrock:CallWithBearerToken"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "bedrock:InvokeModel*"
               ],
               "Resource": [
                   "arn:aws:bedrock:us-west-2:111122223333:inference-profile/us.anthropic.claude-3-haiku-20240307-v1:0"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "bedrock:InvokeModel*"
               ],
               "Resource": [
                   "arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-haiku-20240307-v1:0",
                   "arn:aws:bedrock:us-west-2::foundation-model/anthropic.claude-3-haiku-20240307-v1:0"
               ],
               "Condition": {
                   "StringLike": {
                       "bedrock:InferenceProfileArn": "arn:aws:bedrock:us-west-2:111122223333:inference-profile/us.anthropic.claude-3-haiku-20240307-v1:0"
                   }
               }
           }
       ]
   }
   ```

------

1. 选择**下一步**，提供**策略名称**，然后选择**创建策略**。

1. 使用此 API 密钥，用户现在只能使用美国西部（俄勒冈州）的美国 Anthropic Claude 3 Haiku 推理配置文件运行推理。

# 处理泄露的长期和短期 Amazon Bedrock API 密钥
<a name="api-keys-revoke"></a>

如果您的 API 密钥遭到泄露，则应撤销其使用权限。您可以使用多种方法来撤销 Amazon Bedrock API 密钥的权限：
+ 对于长期的 Amazon Bedrock API 密钥 [UpdateServiceSpecificCredential[ResetServiceSpecificCredential](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ResetServiceSpecificCredential.html.html)](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateServiceSpecificCredential.html.html)，您可以通过以下[DeleteServiceSpecificCredential](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteServiceSpecificCredential.html.html)方式使用、或撤消权限：
  + 将密钥状态设置为非活动。您后续可以重新激活密钥。
  + 重置密钥。此操作会为密钥生成一个新密码。
  + 永久删除密钥。
**注意**  
要通过 API 执行这些操作，您必须使用 AWS 凭证进行身份验证，而不是使用 Amazon Bedrock API 密钥进行身份验证。
+ 对于长期和短期 Amazon Bedrock API 密钥，您可以附加 IAM 策略来撤销权限。

**Topics**
+ [更改长期 Amazon Bedrock API 密钥的状态](#api-keys-change-status)
+ [重置长期 Amazon Bedrock API 密钥](#api-keys-reset)
+ [删除长期 Amazon Bedrock API 密钥](#api-keys-delete)
+ [附加 IAM 策略以移除 Amazon Bedrock API 密钥的使用权限](#api-keys-iam-policies)

## 更改长期 Amazon Bedrock API 密钥的状态
<a name="api-keys-change-status"></a>

如果您需要防止暂时使用密钥，请将其停用。准备好再次使用密钥后，可将其重新激活。

选择与您的首选方法对应的选项卡，然后按照以下步骤操作：

------
#### [ Console ]

**停用密钥**

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

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

1. 在**长期 API 密钥**部分中，选择**状态**为**非活动**的密钥。

1. 选择**操作**。

1. 选择**停用**。

1. 要进行确认，请选择**停用 API 密钥**。密钥的**状态**变为**非活动**。

**重新激活密钥**

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

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

1. 在**长期 API 密钥**部分中，选择**状态**为**非活动**的密钥。

1. 选择**操作**。

1. 选择**激活**。

1. 要进行确认，请选择**激活 API 密钥**。密钥的**状态**变为**活动**。

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

要使用 API 停用密钥，请使用 [IAM 终端节点](https://docs.aws.amazon.com/general/latest/gr/iam-service.html)发送[UpdateServiceSpecificCredential](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateServiceSpecificCredential.html.html)请求并指定`Status`为`Inactive`。您可以使用以下代码段停用密钥，*\$1\$1ServiceSpecificCredentialId\$1*替换为创建密钥时返回的值。

```
import boto3
                        
iam_client = boto3.client("iam")
                      
iam_client.update_service_specific_credential(
    service_specific_credential_id=${ServiceSpecificCredentialId},
    status="Inactive"
)
```

要使用 API 重新激活密钥，请使用 [IAM 终端节点](https://docs.aws.amazon.com/general/latest/gr/iam-service.html)发送[UpdateServiceSpecificCredential](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateServiceSpecificCredential.html.html)请求并指定`Status`为`Active`。您可以使用以下代码片段重新激活密钥，*\$1\$1ServiceSpecificCredentialId\$1*替换为创建密钥时返回的值。

```
import boto3
                        
iam_client = boto3.client("iam")
                      
iam_client.update_service_specific_credential(
    service_specific_credential_id=${ServiceSpecificCredentialId},
    status="Active"
)
```

------

## 重置长期 Amazon Bedrock API 密钥
<a name="api-keys-reset"></a>

如果您的密钥值发生泄露或您不再拥有密钥，请将其重置。密钥必须尚未过期。如果密钥已经过期，请删除它，然后创建新密钥。

选择与您的首选方法对应的选项卡，然后按照以下步骤操作：

------
#### [ Console ]

**重置密钥**

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

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

1. 在**长期 API 密钥**部分中，选择一个密钥。

1. 选择**操作**。

1. 选择**重置密钥**。

1. 选择**下一步**。

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

要使用 API 重置密钥，请使用 [IAM 终端节点](https://docs.aws.amazon.com/general/latest/gr/iam-service.html)发送[ResetServiceSpecificCredential](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ResetServiceSpecificCredential.html.html)请求。您可以使用以下代码片段来重置密钥，*\$1\$1ServiceSpecificCredentialId\$1*替换为创建密钥时返回的值。

```
import boto3
            
iam_client = boto3.client("iam")
          
iam_client.reset_service_specific_credential(
    service_specific_credential_id=${ServiceSpecificCredentialId}
)
```

------

## 删除长期 Amazon Bedrock API 密钥
<a name="api-keys-delete"></a>

如果您不再需要密钥或者密钥已过期，请删除它。

选择与您的首选方法对应的选项卡，然后按照以下步骤操作：

------
#### [ Console ]

**删除密钥**

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

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

1. 在**长期 API 密钥**部分中，选择一个密钥。

1. 选择**操作**。

1. 选择**删除**。

1. 确认删除操作。

**API 密钥与 IAM 用户关联**  
删除此 API 密钥不会删除以此密钥作为所有者创建的 IAM 用户。您可以在下一步中从 IAM 控制台中删除 IAM 用户。

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

要使用 API 删除密钥，请使用 [IAM 终端节点](https://docs.aws.amazon.com/general/latest/gr/iam-service.html)发送[DeleteServiceSpecificCredential](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteServiceSpecificCredential.html.html)请求。您可以使用以下代码段删除密钥，*\$1\$1ServiceSpecificCredentialId\$1*替换为创建密钥时返回的值。

```
import boto3
            
iam_client = boto3.client("iam")
          
iam_client.delete_service_specific_credential(
    service_specific_credential_id=${ServiceSpecificCredentialId}
)
```

------

## 附加 IAM 策略以移除 Amazon Bedrock API 密钥的使用权限
<a name="api-keys-iam-policies"></a>

本部分提供了一些 IAM 策略，您可以用来限制对 Amazon Bedrock API 密钥的访问。

### 拒绝某个身份使用 Amazon Bedrock API 密钥进行调用的能力
<a name="api-keys-iam-policies-deny-call-with-bearer-token"></a>

允许身份使用 Amazon Bedrock API 密钥进行调用的操作是 `bedrock:CallWithBearerToken`。为了防止身份使用 Amazon Bedrock API 密钥进行调用，您可以根据密钥类型为身份附加一个 IAM 策略：
+ **长期密钥** – 将策略附加到与密钥关联的 IAM 用户。
+ **短期密钥** – 将策略附加到用于生成密钥的 IAM 角色。

您可以附加到 IAM 身份的 IAM 策略如下所示：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Deny",
    "Action": "bedrock:CallWithBearerToken",
    "Resource": "*"
  }
}
```

------

### 使 IAM 角色会话失效
<a name="api-keys-iam-policies-invalidate-session"></a>

如果短期密钥发生泄露，您可以通过让用于生成该密钥的角色会话失效来阻止使用该密钥。要使角色会话失效，请将以下策略附加到生成密钥的 IAM 身份。*2014-05-07T23:47:00Z*替换为您希望会话失效的时间。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Deny",
    "Action": "*",
    "Resource": "*",
    "Condition": {
      "DateLessThan": {"aws:TokenIssueTime": "2014-05-07T23:47:00Z"}
    }
  }
}
```

------

# 控制生成和使用 Amazon Bedrock API 密钥的权限
<a name="api-keys-permissions"></a>

Amazon Bedrock API 密钥的生成和使用由 Amazon Bedrock 和 IAM 服务中的操作和条件密钥控制。

**控制 Amazon Bedrock API 密钥的生成**  
ia [m: CreateServiceSpecificCredential 操作控制特定于服务的密钥（例如长期的 A](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentityandaccessmanagementiam.html#awsidentityandaccessmanagementiam-actions-as-permissions) mazon Bedrock API 密钥）的生成。您可以将此操作作为一种资源，将操作范围限定为 IAM 用户，以便限制可以为其生成密钥的用户。

您可以使用以下条件密钥对 `iam:CreateServiceSpecificCredential` 操作的权限施加条件：
+ [iam: ServiceSpecificCredentialAgeDays](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_iam-condition-keys.html#ck_ServiceSpecificCredentialAgeDays) — 允许您在条件中指定密钥的到期时间（以天为单位）。例如，您可以使用此条件密钥仅允许创建将在 90 天内过期的 API 密钥。
+ [iam: ServiceSpecificCredentialServiceName](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_iam-condition-keys.html#ck_ServiceSpecificCredentialAgeDays) — 允许您在条件中指定服务的名称。例如，您可以使用此条件密钥仅允许创建 Amazon Bedrock 的 API 密钥，不允许创建其他服务的 API 密钥。

**控制 Amazon Bedrock API 密钥的使用**  
[基石：CallWithBearerToken](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrock.html#amazonbedrock-actions-as-permissions)操作控制短期或长期的 Amazon Bedrock API 密钥的使用。

您可以使用带有[字符串条件运算符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String)的 `bedrock:bearerTokenType` 条件密钥，指定要申请 `bedrock:CallWithBearerToken` 权限的持有者令牌的类型。可以指定以下值之一：
+ `SHORT_TERM` – 在条件中指定短期 Amazon Bedrock API 密钥。
+ `LONG_TERM` – 在条件中指定长期 Amazon Bedrock API 密钥。

下表汇总了如何防止身份生成或使用 Amazon Bedrock API 密钥：


****  

| 用途 | 长期密钥 | 短期密钥 | 
| --- | --- | --- | 
| 防止生成密钥 | 将拒绝 iam:CreateServiceSpecificCredential 操作的策略附加到 IAM 身份。 | 不适用 | 
| 防止使用密钥 | 向与密钥关联的 IAM 用户附加拒绝 bedrock:CallWithBearerToken 操作的策略。 | 向您不希望其使用密钥的 IAM 身份附加拒绝 bedrock:CallWithBearerToken 操作的策略。 | 

**警告**  
由于短期 Amazon Bedrock API 密钥使用会话中的现有凭证，因此您可以通过拒绝对生成密钥的身份执行 `bedrock:CallWithBearerToken` 操作来防止使用密钥。但是，您无法防止生成短期密钥。

## 控制生成和使用 API 密钥的策略示例
<a name="api-keys-permissions-examples"></a>

关于控制生成和使用 API 密钥的 IAM 策略示例，请从以下主题中进行选择：

**Topics**
+ [防止身份生成长期密钥和使用 Amazon Bedrock API 密钥](#api-keys-permissions-examples-prevent-generation-and-use)
+ [防止身份使用短期 API 密钥](#api-keys-permissions-examples-prevent-use-short-term)
+ [防止身份使用长期 API 密钥](#api-keys-permissions-examples-prevent-use-long-term)
+ [明确禁止身份使用短期 API 密钥](#api-keys-permissions-examples-deny-use-short-term-explicitly)
+ [明确禁止身份使用长期 API 密钥](#api-keys-permissions-examples-deny-use-long-term-explicitly)
+ [仅当 Amazon Bedrock 密钥在 90 天内过期时，才允许创建这些密钥](#api-keys-permissions-examples-allow-bedrock-keys-expire-within-90-days)

### 防止身份生成长期密钥和使用 Amazon Bedrock API 密钥
<a name="api-keys-permissions-examples-prevent-generation-and-use"></a>

为防止 IAM 身份生成长期 Amazon Bedrock API 密钥和使用任何 Amazon Bedrock API 密钥，请将以下策略附加到身份：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"DenyBedrockShortAndLongTermAPIKeys",
      "Effect": "Deny",
      "Action": [
        "iam:CreateServiceSpecificCredential",
        "bedrock:CallWithBearerToken"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
```

------

**警告**  
您无法防止生成短期密钥。
此策略将禁止为所有支持创建特定 AWS 服务凭证的服务创建凭证。有关更多信息，请参阅 [IAM 用户的服务特定凭证](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_service-specific-creds.html)。

### 防止身份使用短期 API 密钥
<a name="api-keys-permissions-examples-prevent-use-short-term"></a>

要防止 IAM 身份使用短期 Amazon Bedrock API 密钥，请将以下策略附加到该身份：

### 防止身份使用长期 API 密钥
<a name="api-keys-permissions-examples-prevent-use-long-term"></a>

要防止 IAM 身份使用长期 Amazon Bedrock API 密钥，请将以下策略附加到该身份：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "bedrock:CallWithBearerToken",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "bedrock:bearerTokenType": "LONG_TERM"
                }
            }
        }
    ]
}
```

------

### 明确禁止身份使用短期 API 密钥
<a name="api-keys-permissions-examples-deny-use-short-term-explicitly"></a>

要明确禁止 IAM 身份使用短期 Amazon Bedrock API 密钥，但允许使用其他 API 密钥，请将以下策略附加到该身份：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "bedrock:CallWithBearerToken",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "bedrock:bearerTokenType": "SHORT_TERM"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "bedrock:CallWithBearerToken",
            "Resource": "*"
        }
    ]
}
```

------

### 明确禁止身份使用长期 API 密钥
<a name="api-keys-permissions-examples-deny-use-long-term-explicitly"></a>

要明确禁止 IAM 身份使用长期 Amazon Bedrock API 密钥，但允许使用其他 API 密钥，请将以下策略附加到该身份：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "bedrock:CallWithBearerToken",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "bedrock:bearerTokenType": "LONG_TERM"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "bedrock:CallWithBearerToken",
            "Resource": "*"
        }
    ]
}
```

------

### 仅当 Amazon Bedrock 密钥在 90 天内过期时，才允许创建这些密钥
<a name="api-keys-permissions-examples-allow-bedrock-keys-expire-within-90-days"></a>

要允许 IAM 身份仅在长期 API 密钥用于 Amazon Bedrock 且过期时间不超过 90 天的情况下创建这样的密钥，请将以下策略附加到该身份：

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
       {
           "Effect": "Allow",
           "Action": "iam:CreateServiceSpecificCredential",
           "Resource": "arn:aws:iam::123456789012:user/username",
           "Condition": {
               "StringEquals": {
                   "iam:ServiceSpecificCredentialServiceName": "bedrock.amazonaws.com"
               },
               "NumericLessThanEquals": {
                   "iam:ServiceSpecificCredentialAgeDays": "90"
               }
           }
       }
   ]
}
```

------