View a markdown version of this page

Parameter Store 설정 - AWS Systems Manager

Parameter Store 설정

Parameter Store에서 파라미터를 설정하기 전에 먼저 사용자 계정에 있는 위탁자에게 사용자가 지정한 작업을 수행할 수 있는 권한을 제공하는 AWS Identity and Access Management(IAM) 정책을 구성합니다.

이 섹션에서는 IAM 콘솔을 사용하여 수동으로 이러한 정책을 구성하는 방법과 이러한 정책을 사용자 및 사용자 그룹에 할당하는 방법을 알아봅니다. 또한 관리형 노드에서 실행될 수 있는 파라미터 작업을 제어하는 정책을 생성하고 할당할 수 있습니다.

이 섹션에서는 Systems Manager 파라미터 변경 내용에 대한 알림을 받을 수 있는 Amazon EventBridge 규칙을 생성하는 방법도 설명합니다. 또한 EventBridge 규칙을 사용하여 Parameter Store의 변경 내용을 기반으로 AWS에서 다른 작업을 간접 호출할 수 있습니다.

IAM 정책을 사용하여 Parameter Store 파라미터에 대한 액세스 관리

AWS Systems Manager 파라미터에 액세스하는 IAM 위탁자는 필요한 SSM 작업을 수행할 권한이 있어야 합니다. 위탁자로는 IAM 사용자, IAM 역할, Amazon EC2 인스턴스 프로파일, Lambda 실행 역할, Amazon ECS 태스크 역할, CodeBuild 서비스 역할 또는 다른 AWS 서비스 역할이 가능합니다.

다음 표에서는 여러 Parameter Store 작업에 필요한 IAM 권한을 설명합니다.

작업 필요한 IAM 권한 참조 정보
파라미터 생성 또는 업데이트 ssm:PutParameter PutParameter
하나의 파라미터 검색 ssm:GetParameter GetParameter
이름이 지정된 여러 파라미터 검색 ssm:GetParameters GetParameters
경로 아래 파라미터 검색 ssm:GetParametersByPath GetParametersByPath
파라미터 메타데이터 보기 ssm:DescribeParameters DescribeParameters
파라미터 버전 기록 보기 ssm:GetParameterHistory GetParameterHistory
하나의 파라미터 삭제 ssm:DeleteParameter DeleteParameter
여러 파라미터 삭제 ssm:DeleteParameters DeleteParameters

IAM 정책을 사용하여 Systems Manager 파라미터에 대한 액세스를 부여할 때 제한적인 IAM 정책을 생성하고 사용하는 것이 좋습니다. 예를 들어 다음 정책에서는 위탁자가 제한된 리소스 집합에 대해 DescribeParametersGetParameters API 작업을 직접 호출할 수 있습니다. 즉, 위탁자는 prod-*로 시작하는 모든 파라미터를 사용하고 이에 대한 정보를 가져올 수 있습니다.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:DescribeParameters" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ssm:GetParameters" ], "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/prod-*" } ] }
중요

경로에 대해 액세스 권한이 있는 사용자는 해당 경로의 모든 수준에 액세스할 수 있습니다. 예를 들어 /a 경로에 대한 액세스 권한이 있는 사용자는 /a/b에도 액세스할 수 있습니다. 위탁자가 IAM에서 파라미터 /a/b에 대한 액세스를 명시적으로 거부했어도 여전히 /a에 대해 재귀적으로 GetParametersByPath API 작업을 직접 호출하고 /a/b를 볼 수 있습니다.

신뢰할 수 있는 관리자에게는 다음 예와 같은 정책을 사용하여 모든 Systems Manager 파라미터 API 작업에 액세스할 수 있는 권한을 부여할 수 있습니다. 이 정책은 사용자에게 dbserver-prod-*로 시작하는 모든 프로덕션 파라미터에 완전히 액세스할 수 있는 권한을 제공합니다.

JSON
{ "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-1:111122223333:parameter/dbserver-prod-*" }, { "Effect": "Allow", "Action": "ssm:DescribeParameters", "Resource": "*" } ] }

권한 거부

각 API는 고유하며 개별적으로 허용하거나 거부할 수 있는 고유한 작업과 권한을 가집니다. 어떠한 정책의 명시적 거부도 허용을 무시합니다.

참고

기본 AWS Key Management Service(AWS KMS) 키에는 AWS 계정 내의 모든 IAM 보안 주체에 대해 Decrypt 권한이 있습니다. 계정의 SecureString 파라미터에 대해 여러 액세스 수준을 사용하려는 경우 기본 키를 사용하지 않는 것이 좋습니다.

파라미터 값을 검색하는 모든 API 작업이 동일하게 동작하게 하려면 정책에서 GetParameter*와 같은 패턴을 사용합니다. 다음 예에서는 prod-*로 시작하는 모든 파라미터에 대해 GetParameter, GetParameters, GetParameterHistoryGetParametersByPath를 거부하는 방법을 보여줍니다.

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

다음 예에서는 사용자가 prod-*로 시작하는 모든 파라미터에 대해 다른 명령을 수행하도록 허용하면서 일부 명령을 거부하는 방법을 보여줍니다.

JSON
{ "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-1:111122223333:parameter/prod-*" } ] }
참고

파라미터 기록에는 현재 파라미터를 포함하여 모든 파라미터 버전이 포함됩니다. 따라서 GetParameter, GetParametersGetParameterByPath에 대한 사용자 권한은 거부되었지만 GetParameterHistory에 대한 권한은 허용된 경우 GetParameterHistory를 사용하여 SecureString 파라미터를 포함한 현재 파라미터를 볼 수 있습니다.

AWS KMS 키를 사용하는 파라미터 암호화 및 복호화

Parameter Store SecureString 파라미터는 암호화에 AWS KMS 키를 사용합니다. AWS KMS는 AWS 관리형 키 또는 고객 관리형 키를 사용하여 값을 암호화합니다. AWS KMS 및 AWS KMS key에 대한 자세한 내용은 AWS Key Management Service Developer Guide를 참조하세요.

고객 계정 내 모든 사용자는 기본 AWS 관리형 키에 액세스할 수 있습니다. AWS 관리형 키 페이지의 AWS KMS 콘솔에서 기본 키의 Amazon 리소스 이름(ARN)을 찾을 수 있습니다. 기본 키는 별칭(Alias) 열에 aws/ssm으로 식별됩니다. 사용자가 SecureString 파라미터로 작업하지 못하도록 기본 키를 사용하여 SecureString 파라미터를 암호화할 수 있습니다. 이 경우 다음 정책 예제에 설명된 대로, IAM 정책은 기본 키에 대한 액세스를 명시적으로 거부해야 합니다.

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

고객 관리형 키를 사용하는 경우, 파라미터 또는 파라미터 경로에 대한 액세스 권한을 위탁자에게 부여하는 IAM 정책에서는 키에 대한 명시적 kms:Encrypt 권한을 제공해야 합니다. 예를 들어 다음 정책은 위탁자가 지정된 AWS 리전 및 AWS 계정에서 prod-로 시작하는 SecureString 파라미터를 생성, 업데이트 및 확인하도록 허용합니다.

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

지정된 고객 관리형 키를 사용하여 암호화된 고급 파라미터를 만들려면 kms:GenerateDataKey 권한이 필요합니다.

계정의 SecureString 파라미터에 대해 세분화된 액세스 제어가 필요한 경우 고객 관리형 키를 사용하여 이러한 파라미터에 대한 액세스를 보호하고 제한합니다. 또한 AWS CloudTrail를 사용하여 SecureString 파라미터 활동을 모니터링하는 것이 좋습니다.

자세한 내용은 다음 주제를 참조하세요.

관리형 노드에서 특정 파라미터에 액세스하도록 허용

관리형 노드가 검색할 수 있는 Parameter Store 파라미터를 제어하기 위해 인스턴스 역할에 IAM 정책을 연결할 수 있습니다. 파라미터를 생성할 때 SecureString 파라미터 형식을 선택하면 Systems Manager가 AWS KMS를 사용하여 파라미터 값을 암호화합니다. AWS CLI에서 다음 명령을 실행하여 AWS 관리형 키를 볼 수 있습니다.

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

다음 예에서는 노드가 prod-로 시작하는 파라미터에 대해서만 파라미터 값을 가져오도록 허용합니다. 파라미터가 SecureString 파라미터이면 노드가 AWS KMS를 사용하여 문자열을 복호화합니다.

참고

앞의 예에서와 같은 인스턴스 정책이 IAM의 인스턴스 역할에 할당됩니다. 사용자 및 인스턴스에 정책을 할당하는 방법을 포함하여 Systems Manager 기능 액세스를 구성하는 방법에 대한 자세한 내용은 Systems Manager를 사용한 EC2 인스턴스 관리 섹션을 참조하세요.

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