我想為標籤型限制建立 AWS Identity and Access Management (IAM) 政策。我想使用 PrincipalTag、ResourceTag、RequestTag 和 TagKeys 條件鍵。
解決方法
下列 IAM 範例政策會使用條件鍵來建立標籤型限制。
**注意:**若要判斷您可以完成的 API 動作,最佳實務是檢閱您正在使用的服務的 API 文件。
PrincipalTag 條件鍵
使用 aws:PrincipalTag/tag-key 條件鍵,將連接至提出請求的主體的標籤與 IAM 政策中的標籤相符。
下列 IAM 政策範例會針對 Amazon Simple Storage Service (Amazon S3) 儲存貯體提供限制。除了標題為 Product-Manager 的使用者以外,Amazon S3 PutObject 動作已拒絕所有使用者的儲存貯體存取權:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyAllButProductManagers",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::productionbucket/*"
],
"Condition": {
"StringNotEquals": {
"aws:PrincipalTag/job-title": "Product-Manager"
}
}
}
]
}
ResourceTag 條件鍵
aws:ResourceTag/tag-key 條件鍵會將 IAM 政策中指定的標籤鍵值對與連接至 AWS 資源的鍵值對進行比較。如需詳細資訊,請參閱控制 AWS 資源的存取權。
您可以將此條件鍵與全域 aws:ResourceTag 版本和 AWS 服務一起使用,例如 ec2:ResourceTag。如需詳細資訊,請參閱 AWS 服務的動作、資源和條件鍵。
下列 IAM 政策範例允許使用者啟動、停止和終止測試環境中的執行個體:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowOnlyForTestEnvironment",
"Effect": "Allow",
"Action": [
"ec2:TerminateInstances",
"ec2:StartInstances",
"ec2:StopInstances"
],
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"StringLike": {
"ec2:ResourceTag/Env": "test"
}
}
}
]
}
RequestTag 條件鍵
使用 aws:RequestTag/tag-key 條件鍵會使用者請求中傳遞的鍵值對與 IAM 政策中指定的標籤對進行比較。您可以使用此條件鍵來執行建立資源或資源標籤並檢查標籤值的動作。
下列政策範例會強制使用者建立 Amazon Elastic Block Store (Amazon EBS) 磁碟區時,建立特定的 Env 標籤。Env 必須具有 Dev、Prod 或 QA 值:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCreateVolumeWithEnvTag",
"Effect": "Allow",
"Action": "ec2:CreateVolume",
"Resource": "arn:aws:ec2:*:*:volume/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/Env": [
"Dev",
"Prod",
"QA"
]
}
}
}
]
}
TagKeys 條件鍵
使用 aws:TagKeys 條件鍵會將請求中的標籤鍵與 IAM 政策中指定的標籤鍵進行比較。此條件鍵會驗證連接至資源的標籤鍵。
由於您可以在請求中定義多個標籤鍵值對,因此請求可以有多個值。若要比較這些值,請使用 ForAllValues 或 ForAnyValue 集操作。
下列政策範例會限制在 AWS 資源上建立的標籤。Env 和 CostCenter 標籤是使用者可以使用新的 Amazon EBS 磁碟區建立的唯一標籤鍵。搭配使用 ForAllValues 集操作和 aws:TagKeys 允許使用者只在 AWS 資源上連接必要的標籤。此政策不需要使用者在資源建立請求中提供這些標籤鍵。相反地,該政策不允許使用者使用其他鍵值對建立標籤:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ec2:CreateVolume",
"Resource": "arn:aws:ec2:*:*:volume/*",
"Condition": {
"ForAllValues:StringEquals": {
"aws:TagKeys": [
"Env",
"CostCenter"
]
}
}
}
]
}
相關資訊
IAM 教學課程: 根據標籤定義存取 AWS 資源的許可