如何使用 AD FS 授予 Active Directory 使用者存取 API 或 AWS CLI 的權限?

3 分的閱讀內容
0

我已使用聯合服務為 Active Directory 使用者設定存取 AWS 管理主控台的權限。該如何使用 Active Directory 聯合服務 (AD FS) 授予使用者存取 AWS Command Line Interface (AWS CLI) 的相同權限?

簡短說明

當您允許 SAML 2.0 聯合身分使用者存取 AWS 管理主控台時,需要程式設計存取權的使用者仍須擁有存取金鑰和私密金鑰。

若要取得 AWS Identity and Access Management (IAM) 使用者的存取金鑰 ID 和私密存取金鑰,您可以:

設定 AWS CLI

-或-

取得可供聯合身分使用者存取 AWS CLI 的臨時憑證。

若要向聯合身分使用者授予存取權,您必須:

注意: 如果您為目錄使用者開啟多重要素驗證 (MFA),則不相容於此解決方法。

解決方法

如果您的身分提供者 (IdP) 已設定為使用整合式 Windows 身分驗證 (IWA)、NTLM 或 Kerberos (AD FS 2.0 的預設設定),請參閱解決方法 1。如果您的 IdP 已設定為使用表單型身分驗證 (AD FS 3.0 和 4.0 的預設設定),請參閱解決方法 2。

注意: 如果您在執行 AWS CLI 命令時收到錯誤,請確認您使用的是最新版本的 AWS CLI

解決方法 1: 將 PowerShell 用於使用 IWA 的 AD FS (PowerShell 2.0)

1.    執行下列命令以匯入 Windows PowerShell 模組:

> Import-Module "C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell\AWSPowerShell.psd1"

2.    執行類似下列內容的命令以設定 AD FS 端點的變數:

> $Endpoint = 'https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices'

注意: 這包括 AD FS 登入頁面的完整 URL,以及 AWS 的登入統一資源名稱 (URN)。 3.    執行類似下列內容的命令以設定 SAML 端點:

> $EndpointName = Set-AWSSamlEndpoint -Endpoint "$Endpoint" -StoreAs 'ADFS-Login' -AuthenticationType NTLM

注意: 預設情況下,AD FS 2.0 AuthenticationType 已設為 NTLM。如果您未在上述 AWS 工具 Cmdlet 範例中指定 AuthenticationType 的值,則 AWS 工具預設會使用 Kerberos。

4.    透過使用下列其中一種方法,使用儲存的端點設定向 AD FS IdP 進行驗證,以取得使用者可接著擔任的一系列角色:

使用目前已登入工作站之使用者的憑證。

> Set-AWSSamlRoleProfile -StoreAs 'SAMLUser' -EndpointName $EndpointName

-或-

指定 Active Directory 使用者的憑證。

> $Credential = Get-Credential -Message "Enter the domain credentials for the endpoint"
> Set-AWSSamlRoleProfile -EndpointName $EndpointName -NetworkCredential $credential -StoreAs 'SAMLUser'

5.    如有多個角色可供使用,系統即會提示您選取要擔任的角色。在類似下列內容的終端工作階段中,輸入字母字元:

SAMLUser[A] A - 123456789012:role/ADFS-DevAdmin [B] B - 123456789012:role/ADFS-DevReadOnly [?] Help (default is "A"): A

6.    透過執行類似下列內容的命令,確認使用者可以使用聯合憑證和指定設定檔存取 AWS CLI:

Get-IAMSAMLProviderList -ProfileName SAMLUser

解決方法 2: 將 Python 用於使用表單型身分驗證的 AD FS (AD FS 3.0 和 4.0 的預設設定)

1.    將下列模組安裝至 Python:

pip install --upgrade boto beautifulsoup4 requests

2.    使用 SAML 2.0 實行適用於聯合 API/CLI 存取的一般解決方法,然後下載此連結部落格文章中步驟 4 的指令碼。

3.    開啟指令碼,然後設定您偏好的區域和輸出格式。將 adfs.example.com 取代為您的 URL,然後輸入 AD FS 伺服器的完全合格網域名稱 (FQDN)。

region = 'eu-west-1'
    outputformat = 'json'
    awsconfigfile = '/.aws/credentials'
    idpentryurl = 'https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices'

注意: 如果您的 AWS 憑證檔案有不同的檔案路徑,請指定檔案路徑。

4.    儲存您的變更、執行檔案,然後在它們出現時自動填入下列欄位:

bob@Ubuntu64:~$ ./working_samlapi.py
   Username: bob@example.com
   Password: ***********

   Please choose the role you would like to assume:
   [ 0 ]:  arn:aws:iam::123456789012:role/ADFS-DevAdmin
   [ 1 ]:  arn:aws:iam::123456789012:role/ADFS-DevReadOnly

   Selection:  0

   ----------------------------------------------------------------
   Your new access key pair has been stored in the AWS configuration file /home/ec2-user/.aws/credentials under the saml profile.
   Note that it will expire at 2018-03-14T14:57:45Z.
   After this time, you may safely rerun this script to refresh your access key pair.
   To use this credential, call the AWS CLI with the --profile option (e.g. aws --profile saml ec2 describe-instances).
   ----------------------------------------------------------------

5.    成功聯合後,請使用新設定的 SAML 設定檔和命令中的 --profile 參數執行命令。

bob@Ubuntu64:~$ aws iam list-saml-providers --profile saml

{
  "SAMLProviderList": [
    {
      "CreateDate": "2018-03-14T13:28:24Z",
      "ValidUntil": "2118-03-14T13:28:23Z",
      "Arn": "arn:aws:iam::123456789012:saml-provider/adfs"
    }
  ]
}

相關資訊

使用 AWS Tools for PowerShell 設定聯合身分

單一登入