IAM ポリシーを使用して Parameter Store パラメータへのアクセスを制限する - AWS Systems Manager

AWS Systems Manager Change Manager は新規顧客に公開されなくなりました。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「AWS Systems Manager Change Manager の可用性の変更」を参照してください。

IAM ポリシーを使用して Parameter Store パラメータへのアクセスを制限する

AWS Identity and Access Management (IAM) を使用して、AWS Systems Manager パラメータへのアクセスを制限します。具体的には、次の API オペレーションへのアクセスを制限する IAM ポリシーを作成します。

IAM ポリシーを使用して Systems Manager パラメータへのアクセスを制限する場合は、制限付き IAM ポリシーを作成して使用することをお勧めします。たとえば、以下のポリシーでは、ユーザーは限られた一連のリソースに対して DescribeParameters および GetParameters 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* ようなパターンを使用できます。次に、GetParameter で始まるすべてのパラメータについて、GetParametersGetParameterHistoryGetParametersByPath、および prod-* を拒否する例を示します。

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-*" } ] }
注記

パラメータ履歴には、現在のパラメータを含むすべてのパラメータバージョンが含まれます。したがって、GetParameterGetParameters、および GetParameterByPath に対するアクセス許可が拒否され、GetParameterHistory に対するアクセス許可が認められている場合、SecureString を使用して、GetParameterHistory パラメータを含む現在のパラメータを表示できます。

特定のパラメータのみノードでの実行を許可する

指定したパラメータのみをマネージドノードが実行できるようにアクセスをコントロールできます。

パラメータを作成するときに SecureString パラメータ型を選択した場合、Systems Manager は AWS KMS を使用してパラメータ値を暗号化します。AWS KMS は AWS マネージドキー またはカスタマーマネージドキーを使用して値を暗号化します。AWS KMS と AWS KMS key の詳細については、AWS Key Management Service デベロッパーガイドを参照してください。

AWS マネージドキー を表示するには、以下のコマンドを AWS CLI から実行します。

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" ] } ] }

AWS のデフォルトキーとカスタマーマネージドキーを使用するための IAM アクセス権限

Parameter Store SecureString パラメータは、AWS KMS キーを使用して暗号化および復号化されます。AWS が提供する AWS KMS key またはデフォルトの KMS キーを使用して、SecureString パラメータを暗号化することを選択できます。

カスタマーマネージドキーを使用する場合、パラメータまたはパラメータパスへのユーザーアクセスを許可する 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 アクセス許可が必要です。

対照的に、カスタマーアカウント内のすべてのユーザーは、デフォルトの AWS マネージドキーにアクセスできます。このデフォルトキーを使用して SecureString パラメータを暗号化し、ユーザーが SecureString パラメータを操作しないようにする場合は、次のポリシー例に示すように、IAM ポリシーでデフォルトキーへのアクセスを明示的に拒否する必要があります。

注記

デフォルトのキーの Amazon リソースネーム (ARN) は、AWS KMS コンソールの [AWS マネージドキー] ページで確認できます。デフォルトのキーは、[エイリアス] 列の aws/ssm で識別されます。

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" ] } ] }

アカウントの SecureString パラメータに対するきめ細かいアクセス制御が必要な場合は、カスタマーマネージドキーを使用して、これらのパラメータへのアクセスを保護および制限する必要があります。また、AWS CloudTrail を使用して SecureString パラメータのアクティビティを監視することをお勧めします。

詳細については、以下のトピックを参照してください。