Я обнаружил ответ после трассировки через CloudTrail. В роли развертывания CodePipeline отсутствовали два разрешения, которые я не могу найти документированными, это ecs:RegisterTaskDefinition
и iam:PassRole
для роли контейнера ECS. CodeDeploy предполагает другую роль во время развертывания, которая также требует этих разрешений, но похоже, что CodePipeline нуждается в них для запуска развертывания.
В документации, над которой я работал, был пример кросс-аккаунта CodeDeploy, но это был CodeDeploy для EC2, а не для ECS.
Мои последние разрешения для роли, принятой CodePipeline в учетной записи B, выглядят следующим образом:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"codedeploy:CreateDeployment",
"codedeploy:GetDeployment",
"codedeploy:GetDeploymentConfig",
"codedeploy:GetApplicationRevision",
"codedeploy:RegisterApplicationRevision",
"codedeploy:GetApplication",
"ecs:RegisterTaskDefinition"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"s3:GetObject*",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::deployment_intermediate_bucket/*",
"Effect": "Allow"
},
{
"Action": [ "s3:ListBucket"],
"Resource": "arn:aws:s3:::deployment_intermediate_bucket",
"Effect": "Allow"
},
{
"Effect": "Allow",
"Action": [
"kms:DescribeKey",
"kms:GenerateDataKey*",
"kms:Encrypt",
"kms:ReEncrypt*",
"kms:Decrypt"
],
"Resource": [
"deployment_kms_key_arn"
]
},
{
"Action": [
"iam:PassRole"
],
"Effect": "Allow",
"Resource": "ecs_container_role_arn"
}
]
}
Я собираюсь уменьшить это до необходимого минимума.