使用參數階層 - AWS Systems Manager

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

使用參數階層

以一般清單來管理數十或數百個參數不僅耗時且容易出錯。同時也很難識別任務的正確參數。這表示您可能會不小心使用錯誤的參數,或者可能會建立多個使用相同組態資料的參數。

您可以使用參數階層結構,來協助您整理和管理 參數。階層結構是一種參數名稱,其中包含您使用正斜線 (/) 定義的路徑。

參數階層範例

以下範例在名稱中使用三個階層來識別下列各項:

/Environment/Type of computer/Application/Data

/Dev/DBServer/MySQL/db-string13

您可以建立最多 15 個層級的階層。建議您建立階層以反映環境中現有的階層架構,如下範例所示:

  • 您的持續整合持續交付環境 (CI/CD 工作流程)

    /Dev/DBServer/MySQL/db-string

    /Staging/DBServer/MySQL/db-string

    /Prod/DBServer/MySQL/db-string

  • 使用容器的應用程式

    /MyApp/.NET/Libraries/my-password
  • 您的商業組織

    /Finance/Accountants/UserList

    /Finance/Analysts/UserList

    /HR/Employees/EU/UserList

參數階層將您建立參數的方式標準化,並讓您更輕鬆地隨時管理參數。參數階層也可以協助您識別設定任務的正確參數。這可協助您建立多個使用相同組態資料的參數。

您可以建立階層,讓您在不同的環境中共用參數,如以下在開發和臨時環境中使用密碼的範例所示。

/DevTest/MyApp/database/my-password

然後,您可以為生產環境建立唯一的密碼,如以下範例所示:

/prod/MyApp/database/my-password

您無需指定參數階層。您可以在第一層建立參數。這些稱為參數。有關回溯相容性,在發佈階層之前於 Parameter Store 建立的所有參數皆為根參數。系統會將以下兩個參數視為根參數。

/parameter-name

parameter-name

查詢階層中的參數

使用階層的另一個好處是能夠使用 GetParametersByPath API 操作來查詢階層內的所有參數。例如,若您從 AWS Command Line Interface (AWS CLI) 執行以下命令,系統會傳回 IIS 層級中的所有參數。

aws ssm get-parameters-by-path --path /Dev/Web/IIS

若要檢視階層中已解密的 SecureString 參數,請指定路徑和 --with-decryption 參數,如以下範例所示。

aws ssm get-parameters-by-path --path /Prod/ERP/SAP --with-decryption

限制對 Parameter Store API 操作的存取

您可以使用 AWS Identity and Access Management (IAM) 政策提供或限制使用者存取 Parameter Store API 操作和內容。

在下列範例政策中,使用者會先獲得存取權,以便在美國東部 (俄亥俄) 區域 (us-east-2) 中 AWS 帳戶 123456789012 內的所有參數上執行 PutParameter API 操作。但是,使用者會受到限制,無法變更「現有」參數的數值,因為 Overwrite 選項已明確拒絕 PutParameter 操作。換句話說,獲派此政策的使用者可以建立參數,但無法變更現有參數。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:PutParameter" ], "Resource": "arn:aws:ssm:us-east-2:123456789012:parameter/*" }, { "Effect": "Deny", "Action": [ "ssm:PutParameter" ], "Condition": { "StringEquals": { "ssm:Overwrite": [ "true" ] } }, "Resource": "arn:aws:ssm:us-east-2:123456789012:parameter/*" } ] }

使用階層來管理參數 (AWS CLI)

此程序示範如何利用 AWS CLI,來使用參數和參數階層。

使用階層管理參數
  1. 如果您尚未安裝並設定 AWS Command Line Interface (AWS CLI),請進行相應的操作。

    如需相關資訊,請參閱安裝或更新最新版本的 AWS CLI

  2. 執行以下命令,以建立使用 allowedPattern 參數和 String 參數類型的參數。此範例中允許的模式表示參數值必須介於 1 位數到 4 位數。

    Linux & macOS
    aws ssm put-parameter \ --name "/MyService/Test/MaxConnections" \ --value 100 --allowed-pattern "\d{1,4}" \ --type String
    Windows
    aws ssm put-parameter ^ --name "/MyService/Test/MaxConnections" ^ --value 100 --allowed-pattern "\d{1,4}" ^ --type String

    該命令會傳回參數的版本號碼。

  3. 執行以下命令,以 嘗試 以新的值覆寫您剛建立的參數。

    Linux & macOS
    aws ssm put-parameter \ --name "/MyService/Test/MaxConnections" \ --value 10,000 \ --type String \ --overwrite
    Windows
    aws ssm put-parameter ^ --name "/MyService/Test/MaxConnections" ^ --value 10,000 ^ --type String ^ --overwrite

    系統返回以下錯誤,因為新的值不符合您在上個步驟指定的允許模式的要求。

    An error occurred (ParameterPatternMismatchException) when calling the PutParameter operation: Parameter value, cannot be validated against allowedPattern: \d{1,4}
  4. 執行以下其中SecureString一個命令,以建立使用 AWS 受管金鑰 的 參數。此範例中允許的模式表示使用者可以指定任何字元,其值必須介於 8 到 20 個字元。

    Linux & macOS
    aws ssm put-parameter \ --name "/MyService/Test/my-password" \ --value "p#sW*rd33" \ --allowed-pattern ".{8,20}" \ --type SecureString
    Windows
    aws ssm put-parameter ^ --name "/MyService/Test/my-password" ^ --value "p#sW*rd33" ^ --allowed-pattern ".{8,20}" ^ --type SecureString
  5. 執行以下命令,以建立更多使用先前步驟的階層結構的參數。

    Linux & macOS
    aws ssm put-parameter \ --name "/MyService/Test/DBname" \ --value "SQLDevDb" \ --type String
    aws ssm put-parameter \ --name "/MyService/Test/user" \ --value "SA" \ --type String
    aws ssm put-parameter \ --name "/MyService/Test/userType" \ --value "SQLuser" \ --type String
    Windows
    aws ssm put-parameter ^ --name "/MyService/Test/DBname" ^ --value "SQLDevDb" ^ --type String
    aws ssm put-parameter ^ --name "/MyService/Test/user" ^ --value "SA" ^ --type String
    aws ssm put-parameter ^ --name "/MyService/Test/userType" ^ --value "SQLuser" ^ --type String
  6. 執行以下命令,以取得兩個參數的值。

    Linux & macOS
    aws ssm get-parameters \ --names "/MyService/Test/user" "/MyService/Test/userType"
    Windows
    aws ssm get-parameters ^ --names "/MyService/Test/user" "/MyService/Test/userType"
  7. 執行以下命令,以查詢單一層級中的所有參數。

    Linux & macOS
    aws ssm get-parameters-by-path \ --path "/MyService/Test"
    Windows
    aws ssm get-parameters-by-path ^ --path "/MyService/Test"
  8. 執行下列命令,以刪除兩個參數

    Linux & macOS
    aws ssm delete-parameters \ --names "/IADRegion/Dev/user" "/IADRegion/Dev/userType"
    Windows
    aws ssm delete-parameters ^ --names "/IADRegion/Dev/user" "/IADRegion/Dev/userType"