IAM 정책을 사용하여 Parameter Store 파라미터에 대한 액세스 제한
AWS Identity and Access Management(IAM)를 사용하여 AWS Systems Manager 파라미터에 대한 액세스를 제한합니다. 구체적으로 말하면, 다음 API 작업에 대한 액세스를 제한하는 IAM 정책을 생성합니다.
IAM 정책을 사용하여 Systems Manager 파라미터에 대한 액세스를 제한할 때는 제한적인 IAM 정책을 생성하고 사용하는 것이 좋습니다. 예를 들어 다음 정책을 통해 사용자는 제한된 리소스에 대한 DescribeParameters
및 GetParameters
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
에 대한 액세스를 명시적으로 거부한 경우에도 /a
에 대해 재귀적으로 GetParametersByPath
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-*
로 시작하는 모든 파라미터에 대해 GetParameter
, GetParameters
, GetParameterHistory
및 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-*" } ] }
참고
파라미터 기록에는 현재 파라미터를 포함하여 모든 파라미터 버전이 포함됩니다. 따라서 GetParameter
, GetParameters
및 GetParameterByPath
에 대한 사용자 권한은 거부되었지만 GetParameterHistory
에 대한 권한은 허용된 경우 GetParameterHistory
를 사용하여 SecureString
파라미터를 포함한 현재 파라미터를 볼 수 있습니다.
노드에서 특정 파라미터만 실행하도록 허용
관리형 노드에서 사용자가 지정한 파라미터만 실행할 수 있도록 액세스를 제어할 수 있습니다.
파라미터를 생성할 때 SecureString
파라미터 유형을 선택하면 Systems Manager가 AWS KMS를 사용하여 파라미터 값을 암호화합니다. AWS KMS는 AWS 관리형 키 또는 고객 관리형 키를 사용하여 값을 암호화합니다. AWS KMS 및 AWS KMS key에 대한 자세한 내용은 AWS Key Management Service Developer Guide를 참조하세요.
AWS CLI에서 다음 명령을 실행하여 AWS 관리형 키를 볼 수 있습니다.
aws kms describe-key --key-id alias/aws/ssm
다음 예에서는 노드가 prod-
로 시작하는 파라미터에 대해서만 파라미터 값을 가져오도록 허용합니다. 파라미터가 SecureString
파라미터이면 노드가 AWS KMS를 사용하여 문자열을 복호화합니다.
참고
앞의 예에서와 같은 인스턴스 정책이 IAM의 인스턴스 역할에 할당됩니다. 사용자 및 인스턴스에 정책을 할당하는 방법을 포함하여 Systems Manager 기능 액세스를 구성하는 방법에 대한 자세한 내용은 Systems Manager를 사용한 EC2 인스턴스 관리 섹션을 참조하세요.
{ "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" ], "Resource": [ "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-12345EXAMPLE" ] } ] }
1지정된 고객 관리형 키를 사용하여 암호화된 고급 파라미터를 만들려면 kms:GenerateDataKey
권한이 필요합니다.
이와 대조적으로 고객 계정 내의 모든 사용자는 기본 AWS 관리형 키에 액세스할 수 있습니다. 이 기본 키를 사용하여 SecureString
파라미터를 암호화하고 사용자가 SecureString
파라미터로 작업하지 않도록 하려면, 다음 정책 예제와 같이 IAM 정책에서 기본 키에 대한 액세스를 명시적으로 거부해야 합니다.
참고
AWS 관리형 키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
파라미터 활동을 모니터링하는 것이 좋습니다.
자세한 내용은 다음 주제를 참조하세요.
-
IAM 사용 설명서의 정책 평가 로직
-
AWS Key Management Service Developer Guide의 Using key policies in AWS KMS
-
AWS CloudTrail 사용 설명서의 CloudTrail 이벤트 기록을 사용하여 이벤트 보기