У меня есть служба ECS с fargate, которая имеет два контейнера.
У меня есть роль IAM arn:aws:iam::468589876897:role/app/my-test-app, эта роль добавлена в мои ecs task_role и execute_role
Также у меня есть секрет с путем /myapp/secret/key_1-zbv0eq, который имеет разрешение, как показано ниже.
"Effect":"Deny",
"action" : "secretsmanager:getsecretvalue", "resource" : "*", "condition" : { "arnnotlike" : { "aws:principalarn" : [ "arn:aws:iam::468589876897:role/app/my-test-app" ] } } }
и у меня есть код ниже, чтобы прочитать мой секретный менеджер
String secretName = "/myapp/secret/key_1-zbv0eq";
String endpoint = "secretsmanager.us-west-2.amazonaws.com";
String region = "us-west-2";
AwsClientBuilder.EndpointConfiguration config = new AwsClientBuilder.EndpointConfiguration(endpoint, region);
AWSSecretsManagerClientBuilder clientBuilder = AWSSecretsManagerClientBuilder.standard();
clientBuilder.setEndpointConfiguration(config);
AWSSecretsManager client = clientBuilder.build();
String secret;
ByteBuffer binarySecretData;
GetSecretValueRequest getSecretValueRequest = new GetSecretValueRequest()
.withSecretId(secretName).withVersionStage("AWSCURRENT");
GetSecretValueResult getSecretValueResult = null;
try {
getSecretValueResult = client.getSecretValue(getSecretValueRequest);
} catch(ResourceNotFoundException e) {
System.out.println("The requested secret " + secretName + " was not found");
} catch (InvalidRequestException e) {
System.out.println("The request was invalid due to: " + e.getMessage());
} catch (InvalidParameterException e) {
System.out.println("The request had invalid params: " + e.getMessage());
}
// Depending on whether the secret was a string or binary, one of these fields will be populated
if(getSecretValueResult.getSecretString() != null) {
secret = getSecretValueResult.getSecretString();
System.out.println(secret);
}
else {
binarySecretData = getSecretValueResult.getSecretBinary();
System.out.println(binarySecretData.toString());
}
}
когда я запускаю этот код, я получаю ошибку ниже,
user: arn:aws:sts::468589876897:assumed-role/my-test-app/41810bc3cf2b4c99ad87f641810bc3cf
is not authorized to perform: secretsmanager:getsecretvalue on resource:
/myapp/secret/key_1-zbv0eq (service: awssecretsmanager; status code: 400; error code: accessdeniedexception; request id: 8254cdd0-3ce4-4485-bcd8-8af4b08e6fa2
Я не уверен, как эта роль используется arn:aws:sts::468589876897:assumed-role/my-test-app/41810bc3cf2b4c99ad87f641810bc3cf вместо arn:aws:iam::468589876897: роль/приложение/мое-тестовое-приложение
Я дважды проверил на консоли AWS, задача ECS, имеющая task_iam_role, и роль выполнения в определении контейнера, показывающая: arn:aws:iam::468589876897:role/app/my-test-app
Что может отсутствовать?