Quero usar chaves de condição baseadas em tags PrincipalTag, ResourceTag, RequestTag e TagKeys em uma política do AWS Identity and Access Management (AWS IAM) para controlar o acesso aos recursos da AWS.
Resolução
Os exemplos de políticas do IAM a seguir usam chaves de condição para controlar o acesso aos recursos da AWS com tags.
Para determinar as ações de API que é possível realizar, é uma prática recomendada consultar a documentação da API para o serviço usado.
Chave de condição PrincipalTag
Use a chave de condição aws:PrincipalTag/tag-key para comparar as seguintes tags:
- A tag anexada à entidade principal que faz a solicitação
- A tag especificada na política do IAM
No exemplo a seguir, a ação PutObject do Amazon Simple Storage Service (Amazon S3) nega acesso ao bucket a todos os usuários, exceto aqueles com o título Product-Manager:
{
"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"
}
}
}
]
}
Chave de condição ResourceTag
Use a chave de condição aws:ResourceTag/tag-key para comparar o par chave-valor da tag especificado na política do IAM com o par chave-valor anexado ao recurso da AWS. Para mais informações, consulte Controlling access to AWS resources (Controlar o acesso aos recursos da AWS).
É possível usar a chave de condição aws:ResourceTag/tag-key com a versão global aws:ResourceTag e serviços da AWS, como ec2:ResourceTag.
No exemplo a seguir, a política do IAM permite que os usuários iniciem, parem e encerrem instâncias do Amazon Elastic Compute Cloud (Amazon EC2) que estão no ambiente teste:
{
"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"
}
}
}
]
}
Chave de condição RequestTag
Use a chave de condição aws:RequestTag/tag-key para comparar o par chave-valor na solicitação do usuário com o par de tags especificado na política do IAM. É possível usar essa chave de condição para controlar ações que criam recursos e validar tags durante essas operações.
No exemplo a seguir, a política do IAM permite que os usuários criem volumes do Amazon Elastic Block Store (Amazon EBS) somente quando incluem uma tag Env com os valores Dev, Prod ou 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"
]
}
}
}
]
}
Chave de condição TagKeys
Use a chave de condição aws:TagKeys para comparar as chaves de tag em uma solicitação com aquelas especificadas na política do IAM. Essa chave de condição valida as chaves de tag anexadas a um recurso.
Quando uma solicitação contém vários pares de valor-chave, use os operadores de conjunto ForAllValues ou ForAnyValue para comparar esses valores.
No exemplo a seguir, a política do IAM restringe a criação de tags nos recursos da AWS. Ela permite que os usuários criem somente as tags Env e CostCenter quando criam um novo volume do Amazon EBS. O operador de conjunto ForAllValues com a chave de condição aws:TagKeys permite que os usuários anexem as tags necessárias ao recurso. A política torna essas chaves de tag opcionais durante a criação de recursos e impede a criação de tags com outros pares de valor-chave:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ec2:CreateVolume",
"Resource": "arn:aws:ec2:*:*:volume/*",
"Condition": {
"ForAllValues:StringEquals": {
"aws:TagKeys": [
"Env",
"CostCenter"
]
}
}
}
]
}
Informações relacionadas
Tutorial do IAM: definir permissões para acessar recursos da AWS com base em etiquetas