【小ネタ】 AWS グローバル条件コンテキストキー「aws:ResourceTag」はタグ値の大文字小文字を区別するという話
はじめに
猫とアポロチョコとSystems Managerが好きな m.hayakawa です。
AWSのIAMポリシーでaws:ResourceTagに関する検証を行う機会がありました。
その際に、大文字小文字の扱いについて、とある仕様を発見したので、ブログ記事にします。
結論
{
"Condition": {
"StringEquals": {
"aws:ResourceTag/Environment": "production"
}
}
}
上記の Condition 句の場合、下記の挙動になります。
- タグキー部分(Environment): 大文字小文字を区別しない
- タグ値部分(production): 大文字小文字を区別する
タグキーは大文字小文字を区別しない
このポリシーは以下のリソースタグすべてにマッチするという結果になります。
Environment=productionenvironment=productionENVIRONMENT=production
タグ値は大文字小文字を区別する
このポリシーは以下のリソースタグのタグ値について、大文字小文字を区別します。
Environment=production→ マッチEnvironment=Production→ マッチしないEnvironment=PRODUCTION→ マッチしない
どうして?
AWS ドキュメントの記載によると、タグキーでは大文字と小文字は区別されないが、タグ値は大文字と小文字が区別されるとのことです。
aws:ResourceTag/tag-key - AWS グローバル条件コンテキストキー - AWS Identity and Access Management
このコンテキストキーは "aws:ResourceTag/tag-key":"tag-value" という形式です。ここで tag-key および tag-value はタグキーバリューのペアです。タグキーでは、大文字と小文字は区別されません。つまり、ポリシーの条件要素で "aws:ResourceTag/TagKey1": "Value1" で指定した場合、その条件は TagKey1 または tagkey1 という名前のリソースタグキーに一致しますが、その両方には一致しません。これらのタグキーと値のペアの値では、大文字と小文字が区別されます。したがって、ポリシーの条件要素で "aws:ResourceTag/TagKey1": "Production" を指定した場合、その条件は Production という名前のリソースタグ値に一致しますが、production や PRODUCTION には一致しません。
なお、StringEqualsは条件値の大文字・小文字を区別する条件演算子であるため、タグキーでの大文字小文字の区別はしません。
IAM JSON ポリシー要素: 条件演算子 - AWS Identity and Access Management
StringEquals 完全一致、大文字と小文字の区別あり。
注意すべきポイント(重複タグキーの問題)
AWSリソース(EC2等)では大文字小文字が異なる同名タグキーを付与することができます。
Environment=prod
environment=test
ENVIRONMENT=dev
IAMポリシーではこれらが同じキーとして扱われるため、予期しない動作の原因となります。
実際に検証してみる
検証環境の準備
AWS Systems Manager Parameter Store を使って検証します。
1. パラメータの作成
# 異なる大文字小文字のタグキーでパラメータを作成
aws ssm put-parameter \
--name "/test/param1" \
--value "test-value" \
--type "String" \
--tags "Key=Environment,Value=production"
{
"Version": 1,
"Tier": "Standard"
}
aws ssm put-parameter \
--name "/test/param2" \
--value "test-value" \
--type "String" \
--tags "Key=environment,Value=production"
{
"Version": 1,
"Tier": "Standard"
}
aws ssm put-parameter \
--name "/test/param3" \
--value "test-value" \
--type "String" \
--tags "Key=Environment,Value=Production"
{
"Version": 1,
"Tier": "Standard"
}
2. 検証用IAMポリシーの作成
IAM ロールに管理ポリシー:AWSCloudShellFullAccess と、下記ポリシーを付与し、スイッチロールできるようにします。(スイッチロールの仕方については省略)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ssm:GetParameter",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/Environment": "production"
}
}
}
]
}
3. 検証結果
検証用ロールにスイッチして、CloudShell 上で検証します。
# 成功パターン1 Key=Environment,Value=production
$ aws ssm get-parameter --name "/test/param1"
{
"Parameter": {
"Name": "/test/param1",
"Type": "String",
"Value": "test-value",
"Version": 1,
"LastModifiedDate": "2025-12-31T06:34:38.864000+00:00",
"ARN": "arn:aws:ssm:ap-northeast-1:<AccoutID>:parameter/test/param1",
"DataType": "text"
}
}
# 成功パターン2 Key=environment,Value=production
$ aws ssm get-parameter --name "/test/param2"
{
"Parameter": {
"Name": "/test/param2",
"Type": "String",
"Value": "test-value",
"Version": 1,
"LastModifiedDate": "2025-12-31T06:34:52.187000+00:00",
"ARN": "arn:aws:ssm:ap-northeast-1:<AccoutID>:parameter/test/param2",
"DataType": "text"
}
}
# 失敗パターン Key=Environment,Value=Production
$ aws ssm get-parameter --name "/test/param3"
An error occurred (AccessDeniedException) when calling the GetParameter operation: User: arn:aws:sts::<AccoutID>:assumed-role/<roleName>/<sessionName> is not authorized to perform: ssm:GetParameter on resource: arn:aws:ssm:ap-northeast-1:<AccoutID>:parameter/test/param3 because no identity-based policy allows the ssm:GetParameter action
検証結果の解釈
param1(Environment=production): アクセス成功param2(environment=production): アクセス成功(タグキーの大文字小文字は無視)param3(Environment=Production): アクセス失敗(タグ値の大文字小文字は区別)
この結果から、タグキーは大文字と小文字は区別されず、タグ値は大文字小文字が区別されることが分かりました。
対策
大文字小文字のみが異なるタグキーの重複を回避したい場合、下記のような Condition 句 aws:TagKeys を付与することで、タグを付与する際のタグキーを制限することができます。StringEquals はタグ値の大文字小文字を区別するため、environmentやownerといったタグの付与を防ぐことができます。
{
"Condition": {
"ForAllValues:StringEquals": {
"aws:TagKeys": ["Environment", "Owner"]
}
}
}
まとめ
- タグキー:大文字小文字を区別しない
- タグ値:大文字小文字を区別する
- タグ命名規則を統一することで、予期しない問題を事前に回避することが重要
大文字小文字による制御の違いを理解して、適切なタグベースアクセス制御を実装していけたらと思います。
この記事がどなたかのお役に立ちますように。
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました






