aws ecs fargate не может получить секретный менеджер

Я использую сервис AWS ECS для управления моим док-контейнером.

Также используется Secret Manager для хранения и извлечения личной информации.

Я применяю SecretsManagerReadWrite политика к моему ecsTaskExecutionRole а также ecsServiceRole,

Перед использованием FargateЯ только что использовал ECS с EC2.

И это прекрасно работает.

Но в fargateКидаю NoCredentialsError

Я получил секретный менеджер с помощью скрипта Python, сделанного с Boto3. ( https://docs.aws.amazon.com/ko_kr/code-samples/latest/catalog/python-secretsmanager-secrets_manager.py.html)

Здесь есть какое-то решение?

Благодарю.


ТАМОЖЕННОЕ разрешение

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "secretsmanager:GetSecretValue",
                "ssm:GetParameters"
            ],
            "Resource": "*"
        }
    ]
}

2 ответа

Решение

Убедитесь, что применяемая политика IAM имеет следующие разрешения:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetParameters",
        "secretsmanager:GetSecretValue",
        "kms:Decrypt"
      ],
      "Resource": [
        "arn:aws:ssm:<region>:<aws_account_id>:parameter/parameter_name",
        "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:secret_name",
        "arn:aws:kms:<region>:<aws_account_id>:key/key_id"
      ]
    }
  ]
}

Также убедитесь, что вы используете Fargate 1.3.0 ( https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html).

Но я бы попробовал что-то еще, чтобы уменьшить объем кода. Начиная с ноября 2018 года, нет необходимости писать собственный код для получения секретов из Secret Manager. ECS/Fargate может сделать это за вас. Просто дайте ECS разрешение на доступ к вашему секрету и укажите секретный ARN в определении задачи. ECS / Fargate назначит секрет для переменной среды. Ваш код просто должен читать переменную окружения как обычно.

Например:

"containerDefinitions": [
    {
        "secrets": [
            {
                "name": "environment_variable_name",
                "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name"
            }
        ]
    }
]

Документ находится здесь: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data.html

Я наткнулся на эту ветку при устранении той же проблемы. В моем случае разрешения были настроены правильно. Однако ARN диспетчера секретов не был полным.

Я передал ARN как - "arn:aws:secretsmanager:${AWS :: Region}:${AWS :: AccountId}: secret: nonprod-testapp-rds-password"

вместо - "arn:aws:secretsmanager:${AWS :: Region}:${AWS :: AccountId}: secret: nonprod-testapp-rds-password-wdxsae"

Проблема была решена после передачи полного ARN секрета в качестве секретов в определении контейнера.

Другие вопросы по тегам