【发布时间】:2022-08-15 09:12:57
【问题描述】:
我正在使用通过 Lambda 创建的 AWS 自定义配置规则。我正在使用来自the official AWS docs (Example Function for Periodic Evaluations ) 的示例
resource_identifiers = []
for resource_type in resource_types:
resource_identifiers.append(AWS_CONFIG_CLIENT.list_discovered_resources(resourceType=resource_type))
以上工作正常。我最终得到一个 dicts 列表(具有不同资源类型的所有资源)。字典看起来像这样。 (source)
{
\'resourceIdentifiers\': [
{
\'resourceType\': \'AWS::EC2::CustomerGateway\'|\'AWS::EC2::EIP\'|\'AWS::EC2::Host\'|\'AWS::EC2::Instance\'|\'AWS::EC2::InternetGateway\'|\'AWS::EC2::NetworkAcl\'|\'AWS::EC2::NetworkInterface\'|\'AWS::EC2::RouteTable\'|\'AWS::EC2::SecurityGroup\'|\'AWS::EC2::Subnet\'|\'AWS::CloudTrail::Trail\'|\'AWS::EC2::Volume\'|\'AWS::EC2::VPC\'|\'AWS::EC2::VPNConnection\'|\'AWS::EC2::VPNGateway\'|\'AWS::EC2::RegisteredHAInstance\'|\'AWS::EC2::NatGateway\'|\'AWS::EC2::EgressOnlyInternetGateway\'|\'AWS::EC2::VPCEndpoint\'|\'AWS::EC2::VPCEndpointService\'|\'AWS::EC2::FlowLog\'|\'AWS::EC2::VPCPeeringConnection\'|\'AWS::Elasticsearch::Domain\'|\'AWS::IAM::Group\'|\'AWS::IAM::Policy\'|\'AWS::IAM::Role\'|\'AWS::IAM::User\'|\'AWS::ElasticLoadBalancingV2::LoadBalancer\'|\'AWS::ACM::Certificate\'|\'AWS::RDS::DBInstance\'|\'AWS::RDS::DBSubnetGroup\'|\'AWS::RDS::DBSecurityGroup\'|\'AWS::RDS::DBSnapshot\'|\'AWS::RDS::DBCluster\'|\'AWS::RDS::DBClusterSnapshot\'|\'AWS::RDS::EventSubscription\'|\'AWS::S3::Bucket\'|\'AWS::S3::AccountPublicAccessBlock\'|\'AWS::Redshift::Cluster\'|\'AWS::Redshift::ClusterSnapshot\'|\'AWS::Redshift::ClusterParameterGroup\'|\'AWS::Redshift::ClusterSecurityGroup\'|\'AWS::Redshift::ClusterSubnetGroup\'|\'AWS::Redshift::EventSubscription\'|\'AWS::SSM::ManagedInstanceInventory\'|\'AWS::CloudWatch::Alarm\'|\'AWS::CloudFormation::Stack\'|\'AWS::ElasticLoadBalancing::LoadBalancer\'|\'AWS::AutoScaling::AutoScalingGroup\'|\'AWS::AutoScaling::LaunchConfiguration\'|\'AWS::AutoScaling::ScalingPolicy\'|\'AWS::AutoScaling::ScheduledAction\'|\'AWS::DynamoDB::Table\'|\'AWS::CodeBuild::Project\'|\'AWS::WAF::RateBasedRule\'|\'AWS::WAF::Rule\'|\'AWS::WAF::RuleGroup\'|\'AWS::WAF::WebACL\'|\'AWS::WAFRegional::RateBasedRule\'|\'AWS::WAFRegional::Rule\'|\'AWS::WAFRegional::RuleGroup\'|\'AWS::WAFRegional::WebACL\'|\'AWS::CloudFront::Distribution\'|\'AWS::CloudFront::StreamingDistribution\'|\'AWS::Lambda::Function\'|\'AWS::NetworkFirewall::Firewall\'|\'AWS::NetworkFirewall::FirewallPolicy\'|\'AWS::NetworkFirewall::RuleGroup\'|\'AWS::ElasticBeanstalk::Application\'|\'AWS::ElasticBeanstalk::ApplicationVersion\'|\'AWS::ElasticBeanstalk::Environment\'|\'AWS::WAFv2::WebACL\'|\'AWS::WAFv2::RuleGroup\'|\'AWS::WAFv2::IPSet\'|\'AWS::WAFv2::RegexPatternSet\'|\'AWS::WAFv2::ManagedRuleSet\'|\'AWS::XRay::EncryptionConfig\'|\'AWS::SSM::AssociationCompliance\'|\'AWS::SSM::PatchCompliance\'|\'AWS::Shield::Protection\'|\'AWS::ShieldRegional::Protection\'|\'AWS::Config::ConformancePackCompliance\'|\'AWS::Config::ResourceCompliance\'|\'AWS::ApiGateway::Stage\'|\'AWS::ApiGateway::RestApi\'|\'AWS::ApiGatewayV2::Stage\'|\'AWS::ApiGatewayV2::Api\'|\'AWS::CodePipeline::Pipeline\'|\'AWS::ServiceCatalog::CloudFormationProvisionedProduct\'|\'AWS::ServiceCatalog::CloudFormationProduct\'|\'AWS::ServiceCatalog::Portfolio\'|\'AWS::SQS::Queue\'|\'AWS::KMS::Key\'|\'AWS::QLDB::Ledger\'|\'AWS::SecretsManager::Secret\'|\'AWS::SNS::Topic\'|\'AWS::SSM::FileData\'|\'AWS::Backup::BackupPlan\'|\'AWS::Backup::BackupSelection\'|\'AWS::Backup::BackupVault\'|\'AWS::Backup::RecoveryPoint\'|\'AWS::ECR::Repository\'|\'AWS::ECS::Cluster\'|\'AWS::ECS::Service\'|\'AWS::ECS::TaskDefinition\'|\'AWS::EFS::AccessPoint\'|\'AWS::EFS::FileSystem\'|\'AWS::EKS::Cluster\'|\'AWS::OpenSearch::Domain\'|\'AWS::EC2::TransitGateway\'|\'AWS::Kinesis::Stream\'|\'AWS::Kinesis::StreamConsumer\'|\'AWS::CodeDeploy::Application\'|\'AWS::CodeDeploy::DeploymentConfig\'|\'AWS::CodeDeploy::DeploymentGroup\'|\'AWS::EC2::LaunchTemplate\'|\'AWS::ECR::PublicRepository\'|\'AWS::GuardDuty::Detector\'|\'AWS::EMR::SecurityConfiguration\'|\'AWS::SageMaker::CodeRepository\'|\'AWS::Route53Resolver::ResolverEndpoint\'|\'AWS::Route53Resolver::ResolverRule\'|\'AWS::Route53Resolver::ResolverRuleAssociation\'|\'AWS::DMS::ReplicationSubnetGroup\'|\'AWS::DMS::EventSubscription\'|\'AWS::MSK::Cluster\'|\'AWS::StepFunctions::Activity\'|\'AWS::WorkSpaces::Workspace\'|\'AWS::WorkSpaces::ConnectionAlias\'|\'AWS::SageMaker::Model\'|\'AWS::ElasticLoadBalancingV2::Listener\'|\'AWS::StepFunctions::StateMachine\'|\'AWS::Batch::JobQueue\'|\'AWS::Batch::ComputeEnvironment\'|\'AWS::AccessAnalyzer::Analyzer\'|\'AWS::Athena::WorkGroup\'|\'AWS::Athena::DataCatalog\'|\'AWS::Detective::Graph\'|\'AWS::GlobalAccelerator::Accelerator\'|\'AWS::GlobalAccelerator::EndpointGroup\'|\'AWS::GlobalAccelerator::Listener\'|\'AWS::EC2::TransitGatewayAttachment\'|\'AWS::EC2::TransitGatewayRouteTable\'|\'AWS::DMS::Certificate\',
\'resourceId\': \'string\',
\'resourceName\': \'string\',
\'resourceDeletionTime\': datetime(2015, 1, 1)
},
],
\'nextToken\': \'string\'
}
现在我怎样才能检索每个资源的标签?资源类型可以不同。有一种方法list_tags_for_resource,但它需要resource_arn,我不知道。我只知道 id、type 和 name。我可以尝试为每种类型替换一个 arn,但这将花费太长时间并且太复杂。然后我必须为每个资源类型启动一个客户端并请求标签。
是否有明确的方法来检索资源的标签?
-
resouceId 实际上不应该是资源的 ARN 吗?
-
不幸的是,不是(总是),对于 EC2,它是实例 ID 而不是 arn
标签: python-3.x amazon-web-services boto3 aws-config