Skip to content

Commit

Permalink
implement secret identification by name (ydb-platform#12641)
Browse files Browse the repository at this point in the history
Conflicts:
	ydb/core/kqp/federated_query/kqp_federated_query_actors.cpp
	ydb/services/metadata/secret/snapshot.cpp
	ydb/services/metadata/secret/snapshot.h
  • Loading branch information
swalrus1 authored and zverevgeny committed Jan 5, 2025
1 parent 4bef6ca commit 1fc93a5
Show file tree
Hide file tree
Showing 16 changed files with 231 additions and 111 deletions.
23 changes: 12 additions & 11 deletions ydb/core/kqp/federated_query/kqp_federated_query_actors.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,19 @@ class TDescribeSecretsActor: public NActors::TActorBootstrapped<TDescribeSecrets
std::vector<TString> secretValues;
secretValues.reserve(SecretIds.size());
for (const auto& secretId: SecretIds) {
TString secretValue;
const bool isFound = snapshot->GetSecretValue(NMetadata::NSecret::TSecretIdOrValue::BuildAsId(secretId), secretValue);
if (!isFound) {
if (!AskSent) {
AskSent = true;
Send(NMetadata::NProvider::MakeServiceId(SelfId().NodeId()), new NMetadata::NProvider::TEvAskSnapshot(GetSecretsSnapshotParser()));
} else {
CompleteAndPassAway(TEvDescribeSecretsResponse::TDescription(Ydb::StatusIds::BAD_REQUEST, { NYql::TIssue("secret with name '" + secretId.GetSecretId() + "' not found") }));
}
return;
auto secretValue = snapshot->GetSecretValue(NMetadata::NSecret::TSecretIdOrValue::BuildAsId(secretId));
if (secretValue.IsSuccess()) {
secretValues.push_back(secretValue.DetachResult());
continue;
}
secretValues.push_back(secretValue);

if (!AskSent) {
AskSent = true;
Send(NMetadata::NProvider::MakeServiceId(SelfId().NodeId()), new NMetadata::NProvider::TEvAskSnapshot(GetSecretsSnapshotParser()));
} else {
CompleteAndPassAway(TEvDescribeSecretsResponse::TDescription(Ydb::StatusIds::BAD_REQUEST, { NYql::TIssue("secret with name '" + secretId.GetSecretId() + "' not found") }));
}
return;
}

CompleteAndPassAway(TEvDescribeSecretsResponse::TDescription(secretValues));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ namespace NKikimr::NOlap::NCompaction {
std::shared_ptr<NArrow::TColumnFilter> TGeneralCompactColumnEngineChanges::BuildPortionFilter(
const std::optional<NKikimr::NOlap::TGranuleShardingInfo>& shardingActual, const std::shared_ptr<NArrow::TGeneralContainer>& batch,
const TPortionInfo& pInfo, const THashSet<ui64>& portionsInUsage, const ISnapshotSchema::TPtr& resultSchema) const {
Y_UNUSED(resultSchema);
std::shared_ptr<NArrow::TColumnFilter> filter;
if (shardingActual && pInfo.NeedShardingFilter(*shardingActual)) {
std::set<std::string> fieldNames;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ std::unique_ptr<TScanIteratorBase> TReadMetadata::StartScan(const std::shared_pt

TConclusionStatus TReadMetadata::DoInitCustom(
const NColumnShard::TColumnShard* owner, const TReadDescription& readDescription, const TDataStorageAccessor& dataAccessor) {
Y_UNUSED(owner);
Y_UNUSED(readDescription);
Y_UNUSED(dataAccessor);
return TConclusionStatus::Success();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ class TPortionsIndex {
: Owner(owner)
{
Y_UNUSED(Owner);
Y_UNUSED(counters);
}

void AddPortion(const std::shared_ptr<TPortionInfo>& p) {
Expand Down
1 change: 1 addition & 0 deletions ydb/core/tx/columnshard/hooks/testing/controller.h
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ class TController: public TReadOnlyController {
return OverrideRejectMemoryIntervalLimit.value_or(def);
}
virtual ui64 DoGetMetadataRequestSoftMemoryLimit(const ui64 def) const override {
Y_UNUSED(def);
return 0;
}
virtual EOptimizerCompactionWeightControl GetCompactionControl() const override {
Expand Down
8 changes: 4 additions & 4 deletions ydb/core/tx/replication/controller/secret_resolver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,12 @@ class TSecretResolver: public TActorBootstrapped<TSecretResolver> {
void Handle(NMetadata::NProvider::TEvRefreshSubscriberData::TPtr& ev) {
const auto* snapshot = ev->Get()->GetSnapshotAs<NMetadata::NSecret::TSnapshot>();

TString secretValue;
if (!snapshot->GetSecretValue(NMetadata::NSecret::TSecretIdOrValue::BuildAsId(SecretId), secretValue)) {
return Reply(false, TStringBuilder() << "Secret '" << SecretName << "' not found");
auto secretValue = snapshot->GetSecretValue(NMetadata::NSecret::TSecretIdOrValue::BuildAsId(SecretId));
if (secretValue.IsFail()) {
return Reply(false, secretValue.GetErrorMessage());
}

Reply(secretValue);
Reply(secretValue.DetachResult());
}

template <typename... Args>
Expand Down
16 changes: 9 additions & 7 deletions ydb/core/tx/tiering/tier/checker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,15 @@ void TTierPreparationActor::StartChecker() {
return;
}
auto g = PassAwayGuard();
for (auto&& tier : Objects) {
if (!Secrets->CheckSecretAccess(tier.GetAccessKey(), Context.GetExternalData().GetUserToken())) {
Controller->OnPreparationProblem("no access for secret: " + tier.GetAccessKey().DebugString());
return;
} else if (!Secrets->CheckSecretAccess(tier.GetSecretKey(), Context.GetExternalData().GetUserToken())) {
Controller->OnPreparationProblem("no access for secret: " + tier.GetSecretKey().DebugString());
return;
if (const auto& userToken = Context.GetExternalData().GetUserToken()) {
for (auto&& tier : Objects) {
if (!Secrets->CheckSecretAccess(tier.GetAccessKey(), *userToken)) {
Controller->OnPreparationProblem("no access for secret: " + tier.GetAccessKey().DebugString());
return;
} else if (!Secrets->CheckSecretAccess(tier.GetSecretKey(), *userToken)) {
Controller->OnPreparationProblem("no access for secret: " + tier.GetSecretKey().DebugString());
return;
}
}
}
Controller->OnPreparationFinished(std::move(Objects));
Expand Down
20 changes: 13 additions & 7 deletions ydb/core/tx/tiering/tier/object.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,16 +44,22 @@ NMetadata::NInternal::TTableRecord TTierConfig::SerializeToRecord() const {
return result;
}

NKikimrSchemeOp::TS3Settings TTierConfig::GetPatchedConfig(
std::shared_ptr<NMetadata::NSecret::TSnapshot> secrets) const
{
NKikimrSchemeOp::TS3Settings TTierConfig::GetPatchedConfig(std::shared_ptr<NMetadata::NSecret::TSnapshot> secrets) const {
auto config = ProtoConfig.GetObjectStorage();
if (secrets) {
if (!secrets->GetSecretValue(GetAccessKey(), *config.MutableAccessKey())) {
ALS_ERROR(NKikimrServices::TX_TIERING) << "cannot read access key secret for " << GetAccessKey().DebugString();
{
auto value = secrets->GetSecretValue(GetAccessKey());
if (value.IsFail()) {
AFL_ERROR(NKikimrServices::TX_TIERING)("error", "invalid_secret")("object", "access_key")("reason", value.GetErrorMessage());
}
config.SetAccessKey(value.DetachResult());
}
if (!secrets->GetSecretValue(GetSecretKey(), *config.MutableSecretKey())) {
ALS_ERROR(NKikimrServices::TX_TIERING) << "cannot read secret key secret for " << GetSecretKey().DebugString();
{
auto value = secrets->GetSecretValue(GetSecretKey());
if (value.IsFail()) {
AFL_ERROR(NKikimrServices::TX_TIERING)("error", "invalid_secret")("object", "secret_key")("reason", value.GetErrorMessage());
}
config.SetSecretKey(value.DetachResult());
}
}
return config;
Expand Down
2 changes: 1 addition & 1 deletion ydb/core/tx/tiering/tier/object.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
#include <ydb/services/metadata/manager/preparation_controller.h>
#include <ydb/services/metadata/manager/table_record.h>
#include <ydb/services/metadata/manager/object.h>
#include <ydb/services/metadata/secret/snapshot.h>
#include <ydb/services/metadata/service.h>
#include <ydb/services/metadata/secret/secret.h>

#include <library/cpp/json/writer/json_value.h>

Expand Down
3 changes: 0 additions & 3 deletions ydb/services/ext_index/ut/ut_ext_index.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
#include <ydb/core/cms/console/configs_dispatcher.h>
#include <ydb/core/testlib/cs_helper.h>
#include <ydb/core/tx/tiering/external_data.h>
#include <ydb/core/tx/schemeshard/schemeshard.h>
#include <ydb/core/tx/tx_proxy/proxy.h>
#include <ydb/core/formats/arrow/size_calcer.h>
Expand All @@ -25,8 +24,6 @@

namespace NKikimr {

using namespace NColumnShard;

class TLocalHelper: public Tests::NCS::THelper {
private:
using TBase = Tests::NCS::THelper;
Expand Down
3 changes: 0 additions & 3 deletions ydb/services/metadata/initializer/ut/ut_init.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
#include <ydb/core/cms/console/configs_dispatcher.h>
#include <ydb/core/testlib/cs_helper.h>
#include <ydb/core/tx/tiering/external_data.h>
#include <ydb/core/tx/schemeshard/schemeshard.h>
#include <ydb/core/tx/tx_proxy/proxy.h>
#include <ydb/core/wrappers/ut_helpers/s3_mock.h>
Expand Down Expand Up @@ -28,8 +27,6 @@

namespace NKikimr {

using namespace NColumnShard;

Y_UNIT_TEST_SUITE(Initializer) {

class TTestInitializer: public NMetadata::NInitializer::IInitializationBehaviour {
Expand Down
22 changes: 15 additions & 7 deletions ydb/services/metadata/secret/secret.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,22 @@ TString TSecretId::SerializeToString() const {
return sb;
}


TString TSecretIdOrValue::DebugString() const {
if (SecretId) {
return SecretId->SerializeToString();
} else if (Value) {
return MD5::Calc(*Value);
}
return "";
return std::visit(TOverloaded(
[](std::monostate) -> TString{
return "__NONE__";
},
[](const TSecretId& id) -> TString{
return id.SerializeToString();
},
[](const TSecretName& name) -> TString{
return name.SerializeToString();
},
[](const TString& value) -> TString{
return MD5::Calc(value);
}
),
State);
}

}
Loading

0 comments on commit 1fc93a5

Please sign in to comment.