aws ecs fargate 无法获取秘密管理器
aws ecs fargate can't fetch secret manager
我正在使用 AWS ECS 服务来编排我的 docker 容器。
还使用 Secret Manager 存储和检索个人信息。
我将 SecretsManagerReadWrite
政策应用于我的 ecsTaskExecutionRole
和 ecsServiceRole
。
在使用 Fargate
之前,我只是将 ECS 与 EC2 一起使用。
而且效果很好。
但在 fargate
中,它抛出 NoCredentialsError
我通过使用 boto3 制作的 python 脚本获取到秘密管理器。
(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": "*"
}
]
}
确保您应用的 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 年 11 月起,无需编写自己的代码即可从 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
我在对同一问题进行故障排除时偶然发现了此线程。在我的例子中,权限配置正确。但是,Secrets Manager 的 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 作为机密传递后,问题得到解决
我正在使用 AWS ECS 服务来编排我的 docker 容器。
还使用 Secret Manager 存储和检索个人信息。
我将 SecretsManagerReadWrite
政策应用于我的 ecsTaskExecutionRole
和 ecsServiceRole
。
在使用 Fargate
之前,我只是将 ECS 与 EC2 一起使用。
而且效果很好。
但在 fargate
中,它抛出 NoCredentialsError
我通过使用 boto3 制作的 python 脚本获取到秘密管理器。 (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": "*"
}
]
}
确保您应用的 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 年 11 月起,无需编写自己的代码即可从 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
我在对同一问题进行故障排除时偶然发现了此线程。在我的例子中,权限配置正确。但是,Secrets Manager 的 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 作为机密传递后,问题得到解决