

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用執行個體中繼資料服務存取執行個體中繼資料
<a name="configuring-instance-metadata-service"></a>

您可以使用以下其中一個方法，從執行中的執行個體存取執行個體中繼資料：
+ 執行個體中繼資料服務第 2 版 (IMDSv2) – 工作階段導向方法

  如需範例，請參閱 [IMDSv2 的範例](#instance-metadata-retrieval-examples)。
+ 執行個體中繼資料服務第 1 版 (IMDSv1) – 請求/回應方法

  如需範例，請參閱 [IMDSv1 的範例](#instance-metadata-retrieval-examples-imdsv1)。

依預設，您可以使用 IMDSv1 或 IMDSv2，或兩者。

您可以在每個執行個體上設定執行個體中繼資料服務 (IMDS)，只接受 IMDSv2 呼叫，這會導致 IMDSv1 呼叫失敗。如需如何設定執行個體以使用 IMDSv2 的資訊，請參閱 [設定執行個體中繼資料服務選項](configuring-instance-metadata-options.md)。

`PUT` 或 `GET` 標頭對於 IMDSv2 來說是唯一的。如果這些標頭存在於請求中，則該請求適用於 IMDSv2。如果不存在相應標頭，則假設該請求適用於 IMDSv1。

如需深入了解 IMDSv2，請參閱 [透過 EC2 執行個體中繼資料服務的增強功能，提高開放式防火牆、反向代理伺服器及 SSRF (伺服器端請求偽造) 弱點的防禦能力](https://aws.amazon.com/blogs/security/defense-in-depth-open-firewalls-reverse-proxies-ssrf-vulnerabilities-ec2-instance-metadata-service/)。

**Topics**
+ [執行個體中繼資料服務第 2 版 的運作方式](#instance-metadata-v2-how-it-works)
+ [使用支援的 AWS SDK](#use-a-supported-sdk-version-for-imdsv2)
+ [IMDSv2 的範例](#instance-metadata-retrieval-examples)
+ [IMDSv1 的範例](#instance-metadata-retrieval-examples-imdsv1)

## 執行個體中繼資料服務第 2 版 的運作方式
<a name="instance-metadata-v2-how-it-works"></a>

IMDSv2 會使用工作階段導向請求。使用工作階段導向請求，您就能建立定義工作階段持續期間的工作階段字符，此期間最短 1 秒，最長可達 6 小時。在指定持續期間，您可以將相同的工作階段字符用於後續請求。在指定持續期間到期之後，您必須建立新的工作階段字符，才能使用未來請求。

**注意**  
本節中的範例使用執行個體中繼資料服務 (IMDS) 的 IPv4 地址：`169.254.169.254`。如果您要透過 IPv6 地址擷取 EC2 執行個體的執行個體中繼資料，請確定您啟用並改用 IPv6 地址：`[fd00:ec2::254]`。IMDS 的 IPv6 地址與 IMDSv2 命令相容。IPv6 地址僅在 [IPv6 支援的子網路](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-ip-address-range) (僅支援雙重堆疊或 IPv6) 中的 [Nitro 型執行個體](instance-types.md#instance-hypervisor-type)可存取。

下列範例會使用 Shell 指令碼和 IMDSv2，擷取頂層的執行個體中繼資料項目。每個範例：
+ 使用 `PUT` 請求，建立持續 6 小時 (21,600 秒) 的工作階段字符
+ 將工作階段字符標頭儲存在名為 `TOKEN` (Linux 執行個體) 或 `token` (Windows 執行個體) 的變數中
+ 使用字符請求上層中繼資料項目

### Linux 範例
<a name="how-imdsv2-works-example-linux"></a>

您可以執行兩個單獨的命令，或將它們合併。

**單獨命令**

首先，使用以下命令產生字符。

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
```

然後，使用字符產生使用下列命令的頂層中繼資料項目。

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/
```

**組合命令**

您可以存放字符並組合命令。下面的範例合併了上述兩個命令，並將工作階段字符標頭存放在一個名為 TOKEN 的變數中。

**注意**  
如果在建立字符時發生錯誤，變數中會存放錯誤消息而非有效字符，命令也不會發揮作用。

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
	&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/
```

建立字符之後，您可以重複使用直到到期為止。在下列範例命令中，其中會取得用於啟動執行個體的 AMI ID，會重複使用前一個範例中 `$TOKEN` 中儲存的字符。

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ami-id
```

### Windows 範例
<a name="how-imdsv2-works-example-windows"></a>

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/
```

建立字符之後，您可以重複使用直到到期為止。在下列範例命令中，其中會取得用於啟動執行個體的 AMI ID，會重複使用前一個範例中 `$token` 中儲存的字符。

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} `
	-Method GET -uri http://169.254.169.254/latest/meta-data/ami-id
```

當您使用 IMDSv2 請求執行個體中繼資料時，請求必須包含下列項目：

1. 使用 `PUT` 請求，在執行個體中繼資料服務中起始工作階段。`PUT` 請求會傳回一個字符，其必須包含在執行個體中繼資料服務的後續 `GET` 請求中。字符必須使用 IMDSv2 存取中繼資料。

1. 將字符包含在 IMDS 的所有 `GET` 請求中。字符使用方式設定為 `required` 時，不包含有效字符或字符已到期的請求會收到 `401 - Unauthorized` HTTP 錯誤碼。
   + 字符是執行個體特定金鑰。字符在其他 EC2 執行個體上無效，而且如果您嘗試在產生字符的執行個體外部使用該字符，則會遭到拒絕。
   + `PUT` 請求必須包含指定字符存留時間 (TTL)，時間會以秒數表示且最長可達 6 小時 (21,600 秒)。字符會代表邏輯工作階段。TTL 會指定字符有效的時間長度，也就是工作階段的持續期間。
   + 在字符到期之後，若要繼續存取執行個體中繼資料，您必須使用另一個 `PUT` 建立新的工作階段。
   + 您可以選擇重複使用字符或使用每個請求來建立新字符。對於少量請求，您每次需要存取 IMDS 時，就能更輕鬆地產生和立即使用字符。但為了提升效率，您可以為該字符指定時間更長的持續期間，然後再重複使用該字符，而不需要在每次要請求執行個體中繼資料時寫入 `PUT`。並行字符數量沒有實際限額，每個都代表它自己的工作階段。但 IMDS2 仍會受到正常 IMDS 連線和調節限額的限制。如需詳細資訊，請參閱[查詢調節](instancedata-data-retrieval.md#instancedata-throttling)。

HTTP `GET` 及 `HEAD` 方法可在 IMDSv2 執行個體中繼資料請求中使用。如果 `PUT` 請求包含 X-Forwarded-For 標頭，則會遭到拒絕。

依預設，`PUT` 請求在 IP 通訊協定等級的 `1` 回應跳轉限額 (存留時間)。如果您需要更大的跳轉限制，您可以使用 [modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html) AWS CLI 命令進行調整。例如，您可以需要更大的跳轉限制，才能與執行個體上執行之容器服務回溯相容。如需詳細資訊，請參閱[修改現有執行個體的執行個體中繼資料選項](configuring-IMDS-existing-instances.md)。

## 使用支援的 AWS SDK
<a name="use-a-supported-sdk-version-for-imdsv2"></a>

若要使用 IMDSv2，您的 EC2 執行個體必須使用支援使用 IMDSv2 的 AWS SDK 版本。所有 AWS SDKs 的最新版本都支援使用 IMDSv2。

**重要**  
建議您保持最新的 SDK 版本，以確保使用最新功能、安全性更新和基礎相依性。不建議您繼續使用不受支援的開發套件版本，由您自行決定。如需詳細資訊，請參閱「AWS 開發套件和工具參考指南」**中的 [AWS 開發套件及工具維護政策](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html)。

以下是支援使用 IMDSv2 的最低版本：
+ [AWS CLI](https://github.com/aws/aws-cli)— 1.16.289
+ [AWS Tools for Windows PowerShell](https://github.com/aws/aws-tools-for-powershell) – 4.0.1.0
+ [適用於 .NET 的 AWS SDK](https://github.com/aws/aws-sdk-net) – 3.3.634.1
+ [適用於 C\$1\$1 的 AWS SDK](https://github.com/aws/aws-sdk-cpp) – 1.7.229
+ [適用於 Go 的 AWS SDK](https://github.com/aws/aws-sdk-go) – 1.25.38
+ [AWS SDK for Go v2](https://github.com/aws/aws-sdk-go-v2) – 0.19.0
+ [適用於 Java 的 AWS SDK](https://github.com/aws/aws-sdk-java) – 1.11.678
+ [AWS SDK for Java 2.x](https://github.com/aws/aws-sdk-java-v2) – 2.10.21
+ [AWS Node.js 中適用於 JavaScript 的 SDK](https://github.com/aws/aws-sdk-js) – 2.722.0
+ [適用於 Kotlin 的 AWS SDK](https://github.com/awslabs/aws-sdk-kotlin) – 1.1.4
+ [適用於 PHP 的 AWS SDK](https://github.com/aws/aws-sdk-php) – 3.147.7
+ [AWS 適用於 Python 的 SDK (Botocore)](https://github.com/boto/botocore) – 1.13.25
+ [適用於 Python (Boto3) 的 AWS SDK](https://github.com/boto/boto3) – 1.12.6
+ [適用於 Ruby 的 AWS SDK](https://github.com/aws/aws-sdk-ruby) – 3.79.0

## IMDSv2 的範例
<a name="instance-metadata-retrieval-examples"></a>

在 Amazon EC2 執行個體上執行下列範例，以擷取 IMDSv2 的執行個體中繼資料。

在 Windows 執行個體上，您可以使用 Windows PowerShell 或安裝 cURL 或 wget。如果您在 Windows 執行個體上安裝第三方工具，請確定您已仔細閱讀過隨附的文件，因為呼叫和輸出可能與此處所述的內容不同。

**Topics**
+ [取得執行個體中繼資料的可用版本](#instance-metadata-ex-1)
+ [取得上層中繼資料項目](#instance-metadata-ex-2)
+ [取得中繼資料項目的值](#instance-metadata-ex-2a)
+ [取得可用公有金鑰清單](#instance-metadata-ex-3)
+ [顯示可使用公有金鑰 0 的格式](#instance-metadata-ex-4)
+ [取得公有金鑰 0 (格式為 OpenSSH 金鑰格式)](#instance-metadata-ex-5)
+ [取得執行個體的子網 ID](#instance-metadata-ex-6)
+ [取得執行個體的執行個體標籤](#instance-metadata-ex-7)

### 取得執行個體中繼資料的可用版本
<a name="instance-metadata-ex-1"></a>

此範例會取得執行個體中繼資料的可用版本。每個版本會參照在發佈新執行個體中繼資料類別時的執行個體中繼資料建置。執行個體中繼資料建置版本與 Amazon EC2 API 版本無關。若您有依存於先前版本中結構和資訊的指令碼，您也可以取得先前版本。

------
#### [ cURL ]

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/
1.0
2007-01-19
2007-03-01
2007-08-29
2007-10-10
2007-12-15
2008-02-01
2008-09-01
2009-04-04
2011-01-01
2011-05-01
2012-01-12
2014-02-25
2014-11-05
2015-10-20
2016-04-19
...
latest
```

------
#### [ PowerShell ]

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/
1.0
2007-01-19
2007-03-01
2007-08-29
2007-10-10
2007-12-15
2008-02-01
2008-09-01
2009-04-04
2011-01-01
2011-05-01
2012-01-12
2014-02-25
2014-11-05
2015-10-20
2016-04-19
...
latest
```

------

### 取得上層中繼資料項目
<a name="instance-metadata-ex-2"></a>

此範例會取得最上層的中繼資料項目。如需有關回應中項目的詳細資訊，請參閱 [執行個體中繼資料分類](ec2-instance-metadata.md#instancedata-data-categories)。

請注意，標籤僅在您允許存取時才會包含在此輸出中。如需詳細資訊，請參閱[在執行個體中繼資料中啟用標籤存取權](work-with-tags-in-IMDS.md#allow-access-to-tags-in-IMDS)。

------
#### [ cURL ]

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/    
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
iam/
instance-action
instance-id
instance-life-cycle
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
tags/
```

------
#### [ PowerShell ]

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
hostname
iam/
instance-action
instance-id
instance-life-cycle
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
tags/
```

------

### 取得中繼資料項目的值
<a name="instance-metadata-ex-2a"></a>

這些範例會取得從先前範例取得之一些頂層中繼資料項目的值。這些請求會使用先前範例之命令建立的儲存字符。字符不得過期。

------
#### [ cURL ]

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ami-id
ami-0abcdef1234567890
```

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/reservation-id
r-0efghijk987654321
```

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/local-hostname
ip-10-251-50-12.ec2.internal
```

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-hostname
ec2-203-0-113-25.compute-1.amazonaws.com
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/ami-id
ami-0abcdef1234567890
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/reservation-id
r-0efghijk987654321
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/local-hostname
ip-10-251-50-12.ec2.internal
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/public-hostname
ec2-203-0-113-25.compute-1.amazonaws.com
```

------

### 取得可用公有金鑰清單
<a name="instance-metadata-ex-3"></a>

此範例會取得可用公有金鑰的清單。

------
#### [ cURL ]

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-keys/
0=my-public-key
```

------
#### [ PowerShell ]

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/public-keys/
0=my-public-key
```

------

### 顯示可使用公有金鑰 0 的格式
<a name="instance-metadata-ex-4"></a>

此範例會顯示可使用公有金鑰 0 的格式。

------
#### [ cURL ]

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-keys/0/
openssh-key
```

------
#### [ PowerShell ]

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
openssh-key
```

------

### 取得公有金鑰 0 (格式為 OpenSSH 金鑰格式)
<a name="instance-metadata-ex-5"></a>

此範例會取得公有金鑰 0 (格式為 OpenSSH 金鑰格式)。

------
#### [ cURL ]

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN
MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD
VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z
b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt
YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ
21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb
NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
```

------
#### [ PowerShell ]

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN
MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD
VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z
b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt
YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ
21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb
NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
```

------

### 取得執行個體的子網 ID
<a name="instance-metadata-ex-6"></a>

此範例會取得執行個體的子網 ID。

------
#### [ cURL ]

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id
subnet-be9b61d7
```

------
#### [ PowerShell ]

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id
subnet-be9b61d7
```

------

### 取得執行個體的執行個體標籤
<a name="instance-metadata-ex-7"></a>

如果開啟了在執行個體中繼資料中存取執行個體標籤的功能，您可以從執行個體中繼資料中取得該執行個體的標籤。如需詳細資訊，請參閱[從執行個體中繼資料擷取標籤](work-with-tags-in-IMDS.md#retrieve-tags-from-IMDS)。

## IMDSv1 的範例
<a name="instance-metadata-retrieval-examples-imdsv1"></a>

在 Amazon EC2 執行個體上執行下列範例，以擷取 IMDSv1 的執行個體中繼資料。

在 Windows 執行個體上，您可以使用 Windows PowerShell 或安裝 cURL 或 wget。如果您在 Windows 執行個體上安裝第三方工具，請確定您已仔細閱讀過隨附的文件，因為呼叫和輸出可能與此處所述的內容不同。

**Topics**
+ [取得執行個體中繼資料的可用版本](#instance-metadata-ex-1-imdsv1)
+ [取得上層中繼資料項目](#instance-metadata-ex-2-imdsv1)
+ [取得中繼資料項目的值](#instance-metadata-ex-2a-imdsv1)
+ [取得可用公有金鑰清單](#instance-metadata-ex-3-imdsv1)
+ [顯示可使用公有金鑰 0 的格式](#instance-metadata-ex-4-imdsv1)
+ [取得公有金鑰 0 (格式為 OpenSSH 金鑰格式)](#instance-metadata-ex-5-imdsv1)
+ [取得執行個體的子網 ID](#instance-metadata-ex-6-imdsv1)
+ [取得執行個體的執行個體標籤](#instance-metadata-ex-7-imdsv1)

### 取得執行個體中繼資料的可用版本
<a name="instance-metadata-ex-1-imdsv1"></a>

此範例會取得執行個體中繼資料的可用版本。每個版本會參照在發佈新執行個體中繼資料類別時的執行個體中繼資料建置。執行個體中繼資料建置版本與 Amazon EC2 API 版本無關。若您有依存於先前版本中結構和資訊的指令碼，您也可以取得先前版本。

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/
1.0
2007-01-19
2007-03-01
2007-08-29
2007-10-10
2007-12-15
2008-02-01
2008-09-01
2009-04-04
2011-01-01
2011-05-01
2012-01-12
2014-02-25
2014-11-05
2015-10-20
2016-04-19
...
latest
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/
1.0
2007-01-19
2007-03-01
2007-08-29
2007-10-10
2007-12-15
2008-02-01
2008-09-01
2009-04-04
2011-01-01
2011-05-01
2012-01-12
2014-02-25
2014-11-05
2015-10-20
2016-04-19
...
latest
```

------

### 取得上層中繼資料項目
<a name="instance-metadata-ex-2-imdsv1"></a>

此範例會取得最上層的中繼資料項目。如需有關回應中項目的詳細資訊，請參閱 [執行個體中繼資料分類](ec2-instance-metadata.md#instancedata-data-categories)。

請注意，標籤僅在您允許存取時才會包含在此輸出中。如需詳細資訊，請參閱[在執行個體中繼資料中啟用標籤存取權](work-with-tags-in-IMDS.md#allow-access-to-tags-in-IMDS)。

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/    
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
iam/
instance-action
instance-id
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
tags/
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/    
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
hostname
iam/
instance-action
instance-id
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
tags/
```

------

### 取得中繼資料項目的值
<a name="instance-metadata-ex-2a-imdsv1"></a>

這些範例會取得從先前範例取得之一些頂層中繼資料項目的值。

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/ami-id
ami-0abcdef1234567890
```

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/reservation-id
r-0efghijk987654321
```

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/local-hostname
ip-10-251-50-12.ec2.internal
```

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-hostname
ec2-203-0-113-25.compute-1.amazonaws.com
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/ami-id
ami-0abcdef1234567890
```

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/reservation-id
r-0efghijk987654321
```

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/local-hostname
ip-10-251-50-12.ec2.internal
```

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-hostname
ec2-203-0-113-25.compute-1.amazonaws.com
```

------

### 取得可用公有金鑰清單
<a name="instance-metadata-ex-3-imdsv1"></a>

此範例會取得可用公有金鑰的清單。

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/
0=my-public-key
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/ 0=my-public-key
```

------

### 顯示可使用公有金鑰 0 的格式
<a name="instance-metadata-ex-4-imdsv1"></a>

此範例會顯示可使用公有金鑰 0 的格式。

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/0/
openssh-key
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
openssh-key
```

------

### 取得公有金鑰 0 (格式為 OpenSSH 金鑰格式)
<a name="instance-metadata-ex-5-imdsv1"></a>

此範例會取得公有金鑰 0 (格式為 OpenSSH 金鑰格式)。

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN
MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD
VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z
b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt
YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ
21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb
NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN
MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD
VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z
b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt
YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ
21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb
NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
```

------

### 取得執行個體的子網 ID
<a name="instance-metadata-ex-6-imdsv1"></a>

此範例會取得執行個體的子網 ID。

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id
subnet-be9b61d7
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id
subnet-be9b61d7
```

------

### 取得執行個體的執行個體標籤
<a name="instance-metadata-ex-7-imdsv1"></a>

如果開啟了在執行個體中繼資料中存取執行個體標籤的功能，您可以從執行個體中繼資料中取得該執行個體的標籤。如需詳細資訊，請參閱[從執行個體中繼資料擷取標籤](work-with-tags-in-IMDS.md#retrieve-tags-from-IMDS)。