func()

in internal/resources/providers/awslib/kms/provider.go [43:95]


func (p *Provider) DescribeSymmetricKeys(ctx context.Context) ([]awslib.AwsResource, error) {
	symmetricKeys, err := awslib.MultiRegionFetch(ctx, p.clients, func(ctx context.Context, region string, c Client) ([]awslib.AwsResource, error) {
		var kmsKeys []types.KeyListEntry
		input := &kmsClient.ListKeysInput{}
		for {
			output, err := c.ListKeys(ctx, input)
			if err != nil {
				return nil, err
			}
			kmsKeys = append(kmsKeys, output.Keys...)
			if !output.Truncated {
				break
			}
			input.Marker = output.NextMarker
		}

		var result []awslib.AwsResource
		for _, keyEntry := range kmsKeys {
			keyInfo, err := c.DescribeKey(ctx, &kmsClient.DescribeKeyInput{
				KeyId: keyEntry.KeyId,
			})
			if err != nil {
				p.log.Error(err.Error())
				continue
			}

			if keyInfo.KeyMetadata.KeySpec != types.KeySpecSymmetricDefault {
				continue
			}

			if keyInfo.KeyMetadata.KeyManager != types.KeyManagerTypeCustomer {
				continue
			}

			rotationStatus, err := c.GetKeyRotationStatus(ctx, &kmsClient.GetKeyRotationStatusInput{
				KeyId: keyEntry.KeyId,
			})
			if err != nil {
				p.log.Error(err.Error())
				continue
			}

			result = append(result, KmsInfo{
				KeyMetadata:        *keyInfo.KeyMetadata,
				KeyRotationEnabled: rotationStatus.KeyRotationEnabled,
				region:             region,
			})
		}
		return result, nil
	})

	return lo.Flatten(symmetricKeys), err
}