使用 IAM 政策限制對 Systems Manager 參數的存取 - AWS Systems Manager

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

使用 IAM 政策限制對 Systems Manager 參數的存取

您可以使用 AWS Identity and Access Management (IAM) 限制對 AWS Systems Manager 參數的存取。具體而言,您可以建立 IAM 政策以限制存取以下 API 操作:

使用 IAM 政策限制對 Systems Manager 參數的存取時,我們建議您建立和使用限制性 IAM 政策。例如,以下政策可讓使用者為有限的一組資源呼叫 DescribeParametersGetParameters API 操作。這表示使用者可以取得相關資訊,以及使用以 prod-* 開頭的所有參數。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:DescribeParameters" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ssm:GetParameters" ], "Resource": "arn:aws:ssm:us-east-2:123456789012:parameter/prod-*" } ] }
重要

如果使用者擁有路徑的存取權限,則該使用者可存取該路徑的所有層級。例如,如果使用者擁有存取路徑 /a 的許可,則該使用者也可以存取 /a/b。雖然使用者在 IAM 中被明確拒絕存取參數 /a/b,但他們仍能夠以遞迴方式呼叫 /aGetParametersByPath API 操作,並檢視 /a/b

針對信任的管理員,您可以使用類似以下範例的政策,提供所有 Systems Manager 參數 API 操作的完整存取。此政策可讓使用者完整存取所有以 dbserver-prod-* 開頭的生產參數。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:PutParameter", "ssm:DeleteParameter", "ssm:GetParameterHistory", "ssm:GetParametersByPath", "ssm:GetParameters", "ssm:GetParameter", "ssm:DeleteParameters" ], "Resource": "arn:aws:ssm:us-east-2:123456789012:parameter/dbserver-prod-*" }, { "Effect": "Allow", "Action": "ssm:DescribeParameters", "Resource": "*" } ] }

拒絕許可

每個 API 都是唯一的,且具有不同的操作和許可,您可以單獨允許或拒絕它們。任何政策中的明確拒絕會覆寫任何允許。

注意

預設的 AWS Key Management Service(AWS KMS) 金鑰具有 AWS 帳戶 內所有 IAM 委託人的 Decrypt 許可。如果您希望對帳戶中的 SecureString 參數擁有不同的存取級別,不建議您使用預設金鑰。

如果您希望擷取參數值的所有 API 操作具有相同的行為,那麼您可以在政策中使用 GetParameter* 等模式。下列範例會顯示如何拒絕以 prod-* 開頭的所有參數的 GetParameterGetParametersGetParameterHistory 以及 GetParametersByPath

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "ssm:GetParameter*" ], "Resource": "arn:aws:ssm:us-east-2:123456789012:parameter/prod-*" } ] }

下列範例顯示如何拒絕某些命令,同時允許使用者在以 prod-* 開頭的所有參數中執行其他命令。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "ssm:PutParameter", "ssm:DeleteParameter", "ssm:DeleteParameters", "ssm:DescribeParameters" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ssm:GetParametersByPath", "ssm:GetParameters", "ssm:GetParameter", "ssm:GetParameterHistory" ], "Resource": "arn:aws:ssm:us-east-2:123456789012:parameter/prod-*" } ] }
注意

參數歷程包含所有參數版本,包括目前的參數版本。因此,如果 GetParameterGetParametersGetParameterByPath 的使用者許可遭到拒絕、但允許 GetParameterHistory 的許可,則透過使用 GetParameterHistory,他們可以看到當前參數,包括 SecureString 參數。

僅允許特定參數在節點上執行

您可以控制存取,讓受管節點僅可執行您指定的參數。

如果您在建立參數時選擇 SecureString 參數,Systems Manager 會使用 AWS KMS 來加密參數值。AWS KMS 會使用 AWS 受管金鑰 或客戶受管金鑰來加密值。如需 AWS KMS 和 AWS KMS key 的詳細資訊,請參閱《AWS Key Management Service 開發人員指南》。

您可以從 AWS CLI 執行以下命令,以檢視 AWS 受管金鑰:

aws kms describe-key --key-id alias/aws/ssm

下列範例允許節點僅取得以 prod- 開頭的參數的參數值。如果參數為 SecureString 參數,則節點會使用 AWS KMS 來解密字串。

注意

執行個體政策 (例如以下範例) 會指派給 IAM 中的執行個體角色。如需設定存取 Systems Manager 功能的詳細資訊,包括如何將政策指派給使用者和執行個體,請參閱 設定 EC2 執行個體的 Systems Manager

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameters" ], "Resource": [ "arn:aws:ssm:us-east-2:123456789012:parameter/prod-*" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-east-2:123456789012:key/4914ec06-e888-4ea5-a371-5b88eEXAMPLE" ] } ] }

使用 AWS 預設金鑰和客戶受管金鑰的 IAM 許可

Parameter Store SecureString 參數會使用 AWS KMS 金鑰加密和解密。您可以選擇使用 AWS KMS key 或AWS 提供的預設 KMS 金鑰來加密 SecureString 參數。

使用客戶受管金鑰時,授予使用者存取參數或參數路徑的 IAM 政策必須提供金鑰的明確 kms:Encrypt 許可。例如,下列政策允許使用者在指定的 AWS 區域 和 AWS 帳戶中建立、更新和檢視以 prod- 開頭的 SecureString 參數。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:PutParameter", "ssm:GetParameter", "ssm:GetParameters" ], "Resource": [ "arn:aws:ssm:us-east-2:111122223333:parameter/prod-*" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey" 
                                    Footnote callout 1
                                ], "Resource": [ "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-12345EXAMPLE" ] } ] }

1 使用指定的客戶受管金鑰建立加密的進階參數時,需要 kms:GenerateDataKey 許可。

相反地,客戶帳戶中的所有使用者都可以存取預設的 AWS 受管金鑰。如果您使用此預設金鑰加密 SecureString 參數,但不希望使用者使用 SecureString 參數,則其 IAM 政策必須明確拒絕對預設金鑰的存取,如下列政策範例所示。

注意

您可以在 AWS 受管金鑰頁面的 AWS KMS 主控台中找到預設金鑰的 Amazon Resource Name (ARN)。預設金鑰是別名資料欄中用 aws/ssm 標識的金鑰。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:us-east-2:111122223333:key/abcd1234-ab12-cd34-ef56-abcdeEXAMPLE" ] } ] }

如果您需要對帳戶中的 SecureString 參數進行細微的存取控制,應該使用客戶受管金鑰來保護和限制對這些參數的存取。我們也建議使用 AWS CloudTrail 來監視 SecureString 參數活動。

如需詳細資訊,請參閱下列主題: