

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

# 從執行個體中繼資料中擷取安全登入資料
<a name="instance-metadata-security-credentials"></a>

執行個體上的應用程式會從執行個體中繼資料項目 `iam/security-credentials/`*role-name*，擷取角色提供的安全登入資料。如此即授予該應用程式許可，能夠執行您在建立角色與安全登入資料的關聯時所定義的角色動作與資源。這些安全登入資料為暫時的，我們會定期更換。舊的登入資料過期前至少五分鐘，我們就會提供新的登入資料。

如需執行個體中繼資料的詳細資訊，請參閱[使用執行個體中繼資料管理您的 EC2 執行個體](ec2-instance-metadata.md)。

**警告**  
若您使用的服務會運用具備 IAM 角色的執行個體中繼資料，請確認該服務代您發出 HTTP 呼叫時不會暴露您的登入資料。可能會暴露登入資料的服務類型包括 HTTP 代理、HTML/CSS 驗證器服務和支援納入 XML 的 XML 處理器。

對於 Amazon EC2 工作負載，建議您使用下述方法擷取工作階段憑證。這些憑證應該可讓您的工作負載發起 AWS API 請求，而無需使用 `sts:AssumeRole` 擔任已與執行個體相關聯的相同角色。除非您需要為屬性型存取控制 (ABAC) 傳遞工作階段標籤，或需要傳遞工作階段政策以進一步限制角色權限，否則此類角色擔任呼叫是不必要的，因為它們會建立一組新的相同的臨時角色工作階段憑證。

如果您的工作負載使用角色來擔任它自己，則必須建立信任政策，明確允許該角色擔任它自己。如果您不建立信任政策，會得到 `AccessDenied` 錯誤。如需了解詳細資訊，請參閱 *IAM 使用者指南*中的[更新角色信任政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-trust-policy.html)。

------
#### [ IMDSv2 ]

**Linux**  
透過 Linux 執行個體執行下面的命令，可擷取 IAM 角色的安全憑證。

```
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/iam/security-credentials/role-name
```

**Windows**  
透過 Windows 執行個體執行下面的 cmdlet，可擷取 IAM 角色的安全憑證。

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

```
Invoke-RestMethod `
    -Headers @{"X-aws-ec2-metadata-token" = $token} `
    -Method GET -Uri http://169.254.169.254/latest/meta-data/iam/security-credentials/role-name
```

------
#### [ IMDSv1 ]

**Linux**  
透過 Linux 執行個體執行下面的命令，可擷取 IAM 角色的安全憑證。

```
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role-name
```

**Windows**  
透過 Windows 執行個體執行下面的 cmdlet，可擷取 IAM 角色的安全憑證。

```
Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/iam/security-credentials/role-name
```

------

以下為範例輸出。如果您無法擷取安全登入資料，請參閱「IAM 使用者指南」**中的[無法存取 EC2 執行個體上的臨時安全登入資料](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_iam-ec2.html#troubleshoot_iam-ec2_no-keys)。

```
{
  "Code" : "Success",
  "LastUpdated" : "2012-04-26T16:39:16Z",
  "Type" : "AWS-HMAC",
  "AccessKeyId" : "ASIAIOSFODNN7EXAMPLE",
  "SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
  "Token" : "token",
  "Expiration" : "2017-05-17T15:09:54Z"
}
```

對於在執行個體上執行的應用程式 AWS CLI、 和 Tools for Windows PowerShell 命令，您不需要明確取得臨時安全登入資料 - Windows PowerShell AWS SDKs AWS CLI、 和 Tools 會自動從 EC2 執行個體中繼資料服務取得登入資料並使用它們。欲使用暫時安全登入資料在執行個體外部進行呼叫 (如為了測試 IAM 政策)，您必須提供存取金鑰、私有金鑰和工作階段字符。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[使用暫時安全登入資料來請求存取 AWS 資源](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)。