

AWS Tools for PowerShell V4 已进入维护模式。

我们建议您迁移到 [AWS Tools for PowerShell V5](https://docs.aws.amazon.com/powershell/v5/userguide/)。有关如何迁移的更多详细信息和信息，请参阅我们的[维护模式公告](https://aws.amazon.com/blogs/developer/aws-tools-for-powershell-v4-maintenance-mode-announcement/)。

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

# 使用 AWS 凭证
<a name="specifying-your-aws-credentials"></a>

每个 AWS Tools for PowerShell 命令都必须包含一组 AWS 凭据，这些凭据用于对相应的 Web 服务请求进行加密签名。您可以为每条命令、每个会话或所有会话指定凭证。

**警告**  
为了避免安全风险，在开发专用软件或处理真实数据时，请勿使用 IAM 用户进行身份验证，而是使用与身份提供者的联合身份验证，例如 [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)。

**注意**  
本主题中的信息适用于需要手动获取和管理短期或长期凭证的情况。有关短期和长期凭证的更多信息，请参阅*AWS SDKs 和工具参考指南*中的[其他身份验证方式](https://docs.aws.amazon.com/sdkref/latest/guide/access-users.html)。  
要了解最佳安全实践，请使用 AWS IAM Identity Center，如中所述[配置工具身份验证](creds-idc.md)。

作为最佳实践，为了避免公开您的凭证，请不要在命令中输入凭证文本。相反，为要使用的每组凭证创建一个配置文件，并将该配置文件存储在两个凭证存储中的任一凭证存储中。在命令中按名称指定正确的配置文件， AWS Tools for PowerShell 将检索关联的凭证。有关如何安全管理 AWS 证书的一般性讨论，请参阅中的[管理 AWS 访问密钥的最佳实践*Amazon Web Services 一般参考*](https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html)。

**注意**  
您需要一个 AWS 帐户才能获取凭证并使用 AWS Tools for PowerShell. 要创建 AWS 账户，请参阅[入门：你是首次 AWS 使用](https://docs.aws.amazon.com/accounts/latest/reference/welcome-first-time-user.html)吗？ 在《*AWS 账户管理 参考指南》*中。

**Topics**
+ [凭证存储位置](#specifying-your-aws-credentials-store)
+ [管理配置文件](#managing-profiles)
+ [指定凭证](#specifying-your-aws-credentials-use)
+ [凭证搜索顺序](#pstools-cred-provider-chain-legacy)
+ [中的凭证处理 AWS Tools for PowerShell Core](#credential-handling-in-aws-tools-for-powershell-core)

## 凭证存储位置
<a name="specifying-your-aws-credentials-store"></a>

 AWS Tools for PowerShell 可以使用两个凭证存储中的任何一个：
+ S AWS DK 存储，用于加密您的凭据并将其存储在您的主文件夹中。在 Windows 中，此存储位于：`C:\Users\username\AppData\Local\AWSToolkit\RegisteredAccounts.json`。

  [适用于 .NET 的 AWS SDK](https://aws.amazon.com/sdk-for-net/) 和 [Toolkit for Visual Studio](https://aws.amazon.com/visualstudio/) 也可以使用 AWS 开发工具包存储。
+ 共享的凭证文件也位于主文件夹中，但以纯文本形式存储凭证。

  默认情况下，凭证文件存储在以下位置：
  + 在 Windows 上：`C:\Users\username\.aws\credentials`
  + 在 Mac/Linux 上：`~/.aws/credentials`

   AWS SDKs 和 AWS Command Line Interface 也可以使用凭据文件。如果您在 AWS 用户环境之外运行脚本，请确保将包含您的凭据的文件复制到所有用户帐户（本地系统和用户）都可以访问您的凭据的位置。

## 管理配置文件
<a name="managing-profiles"></a>

配置文件允许您使用引用不同的凭据集 AWS Tools for PowerShell。您可以使用 AWS Tools for PowerShell cmdlet 在 SD AWS K 商店中管理您的个人资料。您也可以使用 [Toolkit for Visual Studio](https://docs.aws.amazon.com/AWSToolkitVS/latest/UserGuide/tkv_setup.html) 或使用 [适用于 .NET 的 AWS SDK](https://aws.amazon.com/sdk-for-net/) 以编程方式，在 AWS 开发工具包存储中管理配置文件。有关如何在凭证文件中管理配置文件的说明，请参阅[管理 AWS 访问密钥的最佳实践](https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html)。

### 添加新的配置文件
<a name="add-a-new-profile"></a>

要向 S AWS DK 存储区添加新的配置文件，请运行命令`Set-AWSCredential`。它将您的访问密钥和秘密密钥存储在您指定的配置文件名称下的默认凭证文件中。

```
PS > Set-AWSCredential `
                 -AccessKey AKIA0123456787EXAMPLE `
                 -SecretKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY `
                 -StoreAs MyNewProfile
```
+  `-AccessKey` – 访问密钥 ID。
+  `-SecretKey` - 私有密钥。
+  `-StoreAs` - 配置文件名称，该名称必须是唯一的。要指定默认配置文件，请使用名称 `default`。

### 更新配置文件
<a name="update-a-profile"></a>

必须手动维护 AWS SDK 存储。如果您稍后更改服务凭证，例如使用 [IAM 控制台](https://console.aws.amazon.com/iam/home)进行更改 - 使用本地存储凭证运行命令失败，并出现以下错误消息：

```
The Access Key Id you provided does not exist in our records.
```

您可以通过对配置文件重复 `Set-AWSCredential` 命令并为它传递给新的访问密钥和秘密密钥来更新配置文件。

### 列出配置文件
<a name="list-profiles"></a>

您可以使用以下命令检查当前名称列表。在此示例中，名为 Shirley 的用户可以访问三个配置文件，这些配置文件都存储在共享凭证文件 (`~/.aws/credentials`) 中。

```
PS > Get-AWSCredential -ListProfileDetail

ProfileName  StoreTypeName         ProfileLocation
-----------  -------------         ---------------
default      SharedCredentialsFile /Users/shirley/.aws/credentials
production   SharedCredentialsFile /Users/shirley/.aws/credentials
test         SharedCredentialsFile /Users/shirley/.aws/credentials
```

### 删除配置文件
<a name="remove-a-profile"></a>

要删除不再需要的配置文件，请使用以下命令。

```
PS > Remove-AWSCredentialProfile -ProfileName an-old-profile-I-do-not-need
```

`-ProfileName` 参数指定要删除的配置文件。

为了向后兼容，已弃用的命令 AWSCredential C [lear-](https://docs.aws.amazon.com/powershell/v4/reference/items/Clear-AWSCredential.html) 仍然可用，但`Remove-AWSCredentialProfile`它是首选。

## 指定凭证
<a name="specifying-your-aws-credentials-use"></a>

可通过多种方式指定凭证。首选的方法是识别配置文件，而不是将字面凭据合并到命令行中。 AWS Tools for PowerShell 使用[凭据搜索顺序中描述的搜索顺序查找](#pstools-cred-provider-chain-legacy)配置文件。

在 Windows 上，存储在 AWS SDK 存储中的 AWS 凭据使用登录的 Windows 用户身份进行加密。它们不能通过使用另一个账户进行解密，也不能在与最初创建它们的设备不同的设备上使用。要执行需要另一个用户的凭证（例如，将在其下运行计划任务的用户账户）的任务，请设置一个凭证配置文件（如上一部分中所述），您可在以该用户身份登录到计算机时使用该配置文件。以执行任务的用户身份登录以完成凭证设置步骤，并创建适用于该用户的配置文件。然后注销，并使用您自己的凭证重新登录以设置计划的任务。

**注意**  
使用 `-ProfileName` 通用参数指定配置文件。此参数等同于早期 AWS Tools for PowerShell 版本中的`-StoredCredentials`参数。为了实现向后兼容性，仍支持 `-StoredCredentials`。

### 默认配置文件（推荐）
<a name="default-profile-recommended"></a>

如果您的凭据存储在名为的配置文件中，则所有 AWS SDKs 和管理工具都可以在您的本地计算机上自动找到您的凭证`default`。例如，如果您在本地计算机上有一个名为 `default` 的配置文件，则不必运行 `Initialize-AWSDefaultConfiguration` cmdlet 或 `Set-AWSCredential` cmdlet。这些工具会自动使用该配置文件中的访问权限和秘密密钥数据。要使用默认区域之外的 AWS 区域（`Get-DefaultAWSRegion` 的结果），您可以运行 `Set-DefaultAWSRegion` 并指定一个区域。

如果您的配置文件未命名为 `default`，但您要将其用作当前会话的默认配置文件，请运行 `Set-AWSCredential` 以将其设置为默认配置文件。

尽管运行`Initialize-AWSDefaultConfiguration`允许您为每个 PowerShell 会话指定默认配置文件，但是 cmdlet 会从您的自定义名称配置文件加载凭据，但会使用命名的配置文件覆盖`default`配置文件。

我们建议您不要运行，`Initialize-AWSDefaultConfiguration`除非您在未使用实例配置文件启动的 Amazon EC2 实例上运行 PowerShell 会话，并且您想手动设置凭证配置文件。请注意，在这种情况下凭证配置文件不包含凭证。在 EC2 实例上运行 `Initialize-AWSDefaultConfiguration` 而产生的凭证配置文件不会直接存储凭证，而是指向实例元数据（提供自动轮换的临时凭证）。但是，它确实存储实例的区域。如果您希望针对实例运行所在区域之外的区域运行调用，则会发生可能需要运行 `Initialize-AWSDefaultConfiguration` 的另一个场景。运行该命令将永久覆盖存储在实例元数据中的区域。

```
PS > Initialize-AWSDefaultConfiguration -ProfileName MyProfileName -Region us-west-2
```

**注意**  
默认凭据包含在 AWS SDK 存储中的`default`配置文件名称下。该命令将覆盖任何具有该名称的现有配置文件。

如果您的 EC2 实例是使用实例配置文件启动的，则 PowerShell 会自动从实例配置文件中获取 AWS 证书和区域信息。您不需要运行 `Initialize-AWSDefaultConfiguration`。无需在使用实例配置文件启动的 EC2 实例上运行 `Initialize-AWSDefaultConfiguration` cmdlet，因为它使用的实例配置文件数据与默认情况下 PowerShell 已使用的实例配置文件数据相同。

### 会话配置文件
<a name="session-profile"></a>

使用 `Set-AWSCredential` 指定特定会话的默认配置文件。此配置文件将在会话持续时间内覆盖任何默认配置文件。如果您想要在会话中使用自定义命名的配置文件，而不是当前 `default` 配置文件，我们建议您使用会话配置文件。

```
PS > Set-AWSCredential -ProfileName MyProfileName
```

**注意**  
在 1.1 之前的 Windows PowerShell 工具版本中，`Set-AWSCredential`cmdlet 无法正常运行，并且会覆盖 “” 指定的配置文件。MyProfileName我们建议使用最新版本的 Windows 工具 PowerShell。

### 命令配置文件
<a name="command-profile"></a>

在单个命令上，您可以添加 `-ProfileName` 参数以指定仅适用于该一个命令的配置文件。此配置文件将覆盖任何默认配置文件或会话配置文件，如以下示例所示。

```
PS > Get-EC2Instance -ProfileName MyProfileName
```

**注意**  
当您指定默认配置文件或会话配置文件时，也可以添加 `-Region` 参数以覆盖默认区域或会话区域。有关更多信息，请参阅 [指定 AWS 区域](pstools-installing-specifying-region.md)。以下示例指定默认配置文件和区域。  

```
PS > Initialize-AWSDefaultConfiguration -ProfileName MyProfileName -Region us-west-2
```

默认情况下，假定 AWS 共享凭据文件位于用户的主文件夹中（`C:\Users\username\.aws`在 Windows 或 Linux `~/.aws` 上）。要在其他位置指定凭证文件，请包含 `-ProfileLocation` 参数并指定凭证文件路径。以下示例为特定命令指定非默认凭证文件。

```
PS > Get-EC2Instance -ProfileName MyProfileName -ProfileLocation C:\aws_service_credentials\credentials
```

**注意**  
如果您在通常未登录的时间内运行 PowerShell 脚本 AWS（例如，您在正常工作时间之外将 PowerShell 脚本作为计划任务运行），请在指定要使用的配置文件时添加该`-ProfileLocation`参数，并将该值设置为存储您的凭据的文件的路径。为确保 AWS Tools for PowerShell 脚本使用正确的账户凭据运行，每当脚本在不使用账户的上下文或进程中运行时，都应添加`-ProfileLocation`参数。 AWS 您也可以将凭证文件复制到供脚本用来执行任务的本地系统或其他账户可访问的位置。

## 凭证搜索顺序
<a name="pstools-cred-provider-chain-legacy"></a>

运行命令时， AWS Tools for PowerShell 按以下顺序搜索凭据。它在找到可用凭证时停止。

1. 作为参数嵌入在命令行中的文字凭证。

   我们强烈建议您使用配置文件，而不是将文字凭证输入到命令行中。

1. 指定的配置文件名称或配置文件位置。
   + 如果您仅指定配置文件名称，则该命令将在 AWS SDK 存储中查找指定的配置文件，如果该配置文件不存在，则在默认位置从 AWS 共享凭据文件中查找指定的配置文件。
   + 如果您仅指定配置文件位置，此命令将从该凭证文件中查找 `default` 配置文件。
   + 如果同时指定名称和位置，则该命令将在该凭证文件中查找指定的配置文件。

   如果未找到指定的配置文件或位置，则命令会引发异常。仅当您尚未指定配置文件或位置时，搜索才会继续执行以下步骤。

1. `-Credential` 参数指定的凭证。

1. 会话配置文件（如果存在）。

1. 按以下顺序使用默认配置文件：

   1.  AWS SDK 商店中的`default`个人资料。

   1.  AWS 共享凭据文件中的`default`个人资料。

   1.  AWS SDK 商店中的`AWS PS Default`个人资料。

1. 如果命令在配置为使用 IAM 角色的 Amazon EC2 实例上运行，那么将从实例配置文件访问 EC2 实例的临时凭证。

   有关针对 Amazon EC2 实例使用 IAM 角色的更多信息，请参阅 [适用于 .NET 的 AWS SDK](https://aws.amazon.com/sdk-for-net/)。

如果此搜索未能找到指定的凭证，则该命令会引发异常。

## 中的凭证处理 AWS Tools for PowerShell Core
<a name="credential-handling-in-aws-tools-for-powershell-core"></a>

中的 Cmdlet 在运行时 AWS Tools for PowerShell Core 接受 AWS 访问和密钥或凭据配置文件的名称，类似于。 AWS Tools for Windows PowerShell当它们在 Windows 上运行时，这两个模块都能够访问 适用于 .NET 的 AWS SDK 凭证存储文件（存储在每用户 `AppData\Local\AWSToolkit\RegisteredAccounts.json` 文件中）。

该文件以加密形式存储您的密钥，并且无法在其他计算机上使用。它是 AWS Tools for PowerShell 搜索凭据配置文件的第一个文件，也是 AWS Tools for PowerShell 存储凭据配置文件的文件。有关 适用于 .NET 的 AWS SDK 凭据存储文件的更多信息，请参阅[配置 AWS 凭据](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-config-creds.html)。Windows 工具 PowerShell模块目前不支持将凭据写入其他文件或位置。

两个模块都可以从 other AWS SDKs 和 ther 使用的 AWS 共享凭据文件中读取配置文件 AWS CLI。在 Windows 上，此文件的默认位置是 `C:\Users\<userid>\.aws\credentials`。在非 Windows 平台上，此文件存储在 `~/.aws/credentials`。`-ProfileLocation` 参数可用于指向非默认文件名或文件位置。

SDK 凭据存储区使用 Windows 加密以加密形式保存您的凭证。 APIs APIs 它们在其他平台上不可用，因此该 AWS Tools for PowerShell Core 模块仅使用 AWS 共享凭据文件，并支持将新的凭据配置文件写入共享凭据文件。

**以下使用 `Set-AWSCredential` cmdlet 的示例脚本显示了在 Windows 上使用命令行管理程序或**AWSPower命令**行管理程序处理凭据配置文件的选项。AWSPower NetCore**模块。

```
# Writes a new (or updates existing) profile with name "myProfileName"
# in the encrypted SDK store file

Set-AWSCredential -AccessKey akey -SecretKey skey -StoreAs myProfileName

# Checks the encrypted SDK credential store for the profile and then
# falls back to the shared credentials file in the default location

Set-AWSCredential -ProfileName myProfileName

# Bypasses the encrypted SDK credential store and attempts to load the
# profile from the ini-format credentials file "mycredentials" in the
# folder C:\MyCustomPath

Set-AWSCredential -ProfileName myProfileName -ProfileLocation C:\MyCustomPath\mycredentials
```

以下示例显示了**AWSPower命令行管理程序的行为。 NetCore**Linux 或 macOS 操作系统上的模块。

```
# Writes a new (or updates existing) profile with name "myProfileName"
# in the default shared credentials file ~/.aws/credentials

Set-AWSCredential -AccessKey akey -SecretKey skey -StoreAs myProfileName

# Writes a new (or updates existing) profile with name "myProfileName"
# into an ini-format credentials file "~/mycustompath/mycredentials"

Set-AWSCredential -AccessKey akey -SecretKey skey -StoreAs myProfileName -ProfileLocation ~/mycustompath/mycredentials

# Reads the default shared credential file looking for the profile "myProfileName"

Set-AWSCredential -ProfileName myProfileName

# Reads the specified credential file looking for the profile "myProfileName"

Set-AWSCredential -ProfileName myProfileName -ProfileLocation ~/mycustompath/mycredentials
```