#amazon-web-services #amazon-iam
#amazon-web-services #amazon-iam
Вопрос:
Цель:
Создайте политику роли IAM, которая позволяет роли выполнять определенные действия с ресурсами aws, только если тег роли равен тегу ресурса.
Например:
Тег IAM:
foo=bar
Тег проекта создания кода:
foo=bar
Политика ролей IAM:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"codebuild:List*",
"codebuild:DescribeTestCases",
"codebuild:DescribeCodeCoverages",
"codebuild:BatchGet*"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/foo": "${aws:PrincipalTag/foo}"
}
}
}
]
}
Когда пользователь принимает на себя роль, ему отказывают в доступе к codebuild:ListProjects
проектам on, имеющим ту же foo=bar
пару ключей, что и роль, в консоли AWS и командной строке AWS.
Ошибка консоли AWS:
User: arn:aws:sts::123456789:assumed-role/example-role/example-user is not authorized to perform: codebuild:ListProjects
Ошибка командной строки AWS при использовании команды: aws codebuild list-projects --profile test
An error occurred (AccessDeniedException) when calling the ListProjects operation: User: arn:aws:sts::123456789:assumed-role/example-role/botocore-session-59458209 is not authorized to perform: codebuild:ListProjects
Попытки:
#1
Используйте фактическое значение пары ключей в условии политики:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"codebuild:List*",
"codebuild:DescribeTestCases",
"codebuild:DescribeCodeCoverages",
"codebuild:BatchGet*"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/foo": "bar"
}
}
}
]
}
Результат codebuild:ListProjects
ошибки отказа в доступе на консоли aws
#2
Удалите ключевые скобки aws из aws:PrincipalTag/foo
(здесь снимается с бедра)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"codebuild:List*",
"codebuild:DescribeTestCases",
"codebuild:DescribeCodeCoverages",
"codebuild:BatchGet*"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/foo": "aws:PrincipalTag/foo"
}
}
}
]
}
#3
Используется тип ресурса в условии тега ресурса codebuild:ResourceTag/foo
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"codebuild:List*",
"codebuild:DescribeTestCases",
"codebuild:DescribeCodeCoverages",
"codebuild:BatchGet*"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"codebuild:ResourceTag/foo": "${aws:PrincipalTag/foo}"
}
}
}
]
}
Та же codebuild:ListProjects
ошибка отказа в доступе на консоли aws
Комментарии:
1. Интерфейс командной строки Aws также приводит к отказу в доступе? Или это только для консоли aws?
2. @Marcin Доступ запрещен как в консоли AWS, так и в командной строке
Ответ №1:
Из документов:
CodeBuild поддерживает авторизацию на основе тегов для действий на основе проекта
Я думаю, что действие ListProjects не основано на проекте. Это для всей сборки кода, а не для конкретного проекта.
Комментарии:
1. спасибо за ссылку и четкое объяснение. Я внес изменения в политику ролей в отношении создания кода. Хотя, когда я перешел к определению инструкций AWS Athena, я снова получаю ошибки отказа в доступе (см. Раздел ОБНОВЛЕНИЯ сообщения)
2. Я понимаю вашу точку зрения. Я подумал, поскольку заголовок сообщения был «Условие политики роли IAM — основной тег равен тегу ресурса», я мог бы втиснуть Athena в описание сообщения. Я обновлю заголовок и описание сообщения, чтобы они были конкретно посвящены условиям политики CB IAM.